GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( 5e78ac...c92182 )
by Leonardo
03:26
created

Menu::addMenuPagesBottom()   B

Complexity

Conditions 6
Paths 32

Size

Total Lines 77
Code Lines 46

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 46
c 1
b 0
f 0
nc 32
nop 0
dl 0
loc 77
rs 8.5559
ccs 0
cts 38
cp 0
crap 42

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace GraphQLAPI\GraphQLAPI\Admin\Menus;
6
7
use GraphQLAPI\GraphQLAPI\General\RequestParams;
8
use GraphQLAPI\GraphQLAPI\Admin\Menus\AbstractMenu;
9
use GraphQLAPI\GraphQLAPI\Security\UserAuthorization;
10
use GraphQLAPI\GraphQLAPI\Facades\ModuleRegistryFacade;
11
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\AboutMenuPage;
12
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\ModulesMenuPage;
13
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\AbstractMenuPage;
14
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\GraphiQLMenuPage;
15
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\SettingsMenuPage;
16
use PoP\ComponentModel\Facades\Instances\InstanceManagerFacade;
17
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\GraphQLVoyagerMenuPage;
18
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\ModuleDocumentationMenuPage;
19
use GraphQLAPI\GraphQLAPI\ModuleResolvers\ClientFunctionalityModuleResolver;
20
use GraphQLByPoP\GraphQLClientsForWP\ComponentConfiguration as GraphQLClientsForWPComponentConfiguration;
21
22
/**
23
 * Admin menu class
24
 */
25
class Menu extends AbstractMenu
26
{
27
    public const NAME = 'graphql_api';
28
29
    public static function getName(): string
30
    {
31
        return static::NAME;
32
    }
33
34
    /**
35
     * @return string[]
36
     */
37
    protected function getMenuPageClasses(): array
38
    {
39
        return [
40
            GraphiQLMenuPage::class,
41
            GraphQLVoyagerMenuPage::class,
42
            SettingsMenuPage::class,
43
            $this->getModuleMenuPageClass(),
44
            AboutMenuPage::class,
45
        ];
46
    }
47
48
    public function addMenuPagesTop(): void
49
    {
50
        parent::addMenuPagesTop();
51
52
        $instanceManager = InstanceManagerFacade::getInstance();
53
54
        $schemaEditorAccessCapability = UserAuthorization::getSchemaEditorAccessCapability();
55
        \add_menu_page(
56
            __('GraphQL API', 'graphql-api'),
57
            __('GraphQL API', 'graphql-api'),
58
            $schemaEditorAccessCapability,
59
            self::NAME,
60
            function () {
61
            },
62
            'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkdyYXBoUUxfTG9nbyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4Ig0KCSB5PSIwcHgiIHZpZXdCb3g9IjAgMCA0MDAgNDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA0MDAgNDAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8Zz4NCgkJCQ0KCQkJCTxyZWN0IHg9IjEyMiIgeT0iLTAuNCIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuODY2IC0wLjUgMC41IC0wLjg2NiAxNjMuMzE5NiAzNjMuMzEzNikiIGZpbGw9IiNFNTM1QUIiIHdpZHRoPSIxNi42IiBoZWlnaHQ9IjMyMC4zIi8+DQoJCTwvZz4NCgk8L2c+DQoJPGc+DQoJCTxnPg0KCQkJPHJlY3QgeD0iMzkuOCIgeT0iMjcyLjIiIGZpbGw9IiNFNTM1QUIiIHdpZHRoPSIzMjAuMyIgaGVpZ2h0PSIxNi42Ii8+DQoJCTwvZz4NCgk8L2c+DQoJPGc+DQoJCTxnPg0KCQkJDQoJCQkJPHJlY3QgeD0iMzcuOSIgeT0iMzEyLjIiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjg2NiAtMC41IDAuNSAtMC44NjYgODMuMDY5MyA2NjMuMzQwOSkiIGZpbGw9IiNFNTM1QUIiIHdpZHRoPSIxODUiIGhlaWdodD0iMTYuNiIvPg0KCQk8L2c+DQoJPC9nPg0KCTxnPg0KCQk8Zz4NCgkJCQ0KCQkJCTxyZWN0IHg9IjE3Ny4xIiB5PSI3MS4xIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC44NjYgLTAuNSAwLjUgLTAuODY2IDQ2My4zNDA5IDI4My4wNjkzKSIgZmlsbD0iI0U1MzVBQiIgd2lkdGg9IjE4NSIgaGVpZ2h0PSIxNi42Ii8+DQoJCTwvZz4NCgk8L2c+DQoJPGc+DQoJCTxnPg0KCQkJDQoJCQkJPHJlY3QgeD0iMTIyLjEiIHk9Ii0xMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNSAtMC44NjYgMC44NjYgLTAuNSAxMjYuNzkwMyAyMzIuMTIyMSkiIGZpbGw9IiNFNTM1QUIiIHdpZHRoPSIxNi42IiBoZWlnaHQ9IjE4NSIvPg0KCQk8L2c+DQoJPC9nPg0KCTxnPg0KCQk8Zz4NCgkJCQ0KCQkJCTxyZWN0IHg9IjEwOS42IiB5PSIxNTEuNiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNSAtMC44NjYgMC44NjYgLTAuNSAyNjYuMDgyOCA0NzMuMzc2NikiIGZpbGw9IiNFNTM1QUIiIHdpZHRoPSIzMjAuMyIgaGVpZ2h0PSIxNi42Ii8+DQoJCTwvZz4NCgk8L2c+DQoJPGc+DQoJCTxnPg0KCQkJPHJlY3QgeD0iNTIuNSIgeT0iMTA3LjUiIGZpbGw9IiNFNTM1QUIiIHdpZHRoPSIxNi42IiBoZWlnaHQ9IjE4NSIvPg0KCQk8L2c+DQoJPC9nPg0KCTxnPg0KCQk8Zz4NCgkJCTxyZWN0IHg9IjMzMC45IiB5PSIxMDcuNSIgZmlsbD0iI0U1MzVBQiIgd2lkdGg9IjE2LjYiIGhlaWdodD0iMTg1Ii8+DQoJCTwvZz4NCgk8L2c+DQoJPGc+DQoJCTxnPg0KCQkJDQoJCQkJPHJlY3QgeD0iMjYyLjQiIHk9IjI0MC4xIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC41IC0wLjg2NiAwLjg2NiAtMC41IDEyNi43OTUzIDcxNC4yODc1KSIgZmlsbD0iI0U1MzVBQiIgd2lkdGg9IjE0LjUiIGhlaWdodD0iMTYwLjkiLz4NCgkJPC9nPg0KCTwvZz4NCgk8cGF0aCBmaWxsPSIjRTUzNUFCIiBkPSJNMzY5LjUsMjk3LjljLTkuNiwxNi43LTMxLDIyLjQtNDcuNywxMi44Yy0xNi43LTkuNi0yMi40LTMxLTEyLjgtNDcuN2M5LjYtMTYuNywzMS0yMi40LDQ3LjctMTIuOA0KCQlDMzczLjUsMjU5LjksMzc5LjIsMjgxLjIsMzY5LjUsMjk3LjkiLz4NCgk8cGF0aCBmaWxsPSIjRTUzNUFCIiBkPSJNOTAuOSwxMzdjLTkuNiwxNi43LTMxLDIyLjQtNDcuNywxMi44Yy0xNi43LTkuNi0yMi40LTMxLTEyLjgtNDcuN2M5LjYtMTYuNywzMS0yMi40LDQ3LjctMTIuOA0KCQlDOTQuOCw5OSwxMDAuNSwxMjAuMyw5MC45LDEzNyIvPg0KCTxwYXRoIGZpbGw9IiNFNTM1QUIiIGQ9Ik0zMC41LDI5Ny45Yy05LjYtMTYuNy0zLjktMzgsMTIuOC00Ny43YzE2LjctOS42LDM4LTMuOSw0Ny43LDEyLjhjOS42LDE2LjcsMy45LDM4LTEyLjgsNDcuNw0KCQlDNjEuNCwzMjAuMyw0MC4xLDMxNC42LDMwLjUsMjk3LjkiLz4NCgk8cGF0aCBmaWxsPSIjRTUzNUFCIiBkPSJNMzA5LjEsMTM3Yy05LjYtMTYuNy0zLjktMzgsMTIuOC00Ny43YzE2LjctOS42LDM4LTMuOSw0Ny43LDEyLjhjOS42LDE2LjcsMy45LDM4LTEyLjgsNDcuNw0KCQlDMzQwLjEsMTU5LjQsMzE4LjcsMTUzLjcsMzA5LjEsMTM3Ii8+DQoJPHBhdGggZmlsbD0iI0U1MzVBQiIgZD0iTTIwMCwzOTUuOGMtMTkuMywwLTM0LjktMTUuNi0zNC45LTM0LjljMC0xOS4zLDE1LjYtMzQuOSwzNC45LTM0LjljMTkuMywwLDM0LjksMTUuNiwzNC45LDM0LjkNCgkJQzIzNC45LDM4MC4xLDIxOS4zLDM5NS44LDIwMCwzOTUuOCIvPg0KCTxwYXRoIGZpbGw9IiNFNTM1QUIiIGQ9Ik0yMDAsNzRjLTE5LjMsMC0zNC45LTE1LjYtMzQuOS0zNC45YzAtMTkuMywxNS42LTM0LjksMzQuOS0zNC45YzE5LjMsMCwzNC45LDE1LjYsMzQuOSwzNC45DQoJCUMyMzQuOSw1OC40LDIxOS4zLDc0LDIwMCw3NCIvPg0KPC9nPg0KPC9zdmc+DQo='
63
        );
64
65
        /**
66
         * @var GraphiQLMenuPage
67
         */
68
        $graphiQLMenuPage = $instanceManager->getInstance(GraphiQLMenuPage::class);
69
        if ($hookName = \add_submenu_page(
70
            self::NAME,
71
            __('GraphiQL', 'graphql-api'),
72
            __('GraphiQL', 'graphql-api'),
73
            $schemaEditorAccessCapability,
74
            self::NAME,
75
            [$graphiQLMenuPage, 'print']
76
        )
77
        ) {
78
            $graphiQLMenuPage->setHookName($hookName);
79
        }
80
81
        /**
82
         * @var GraphQLVoyagerMenuPage
83
         */
84
        $graphQLVoyagerMenuPage = $instanceManager->getInstance(GraphQLVoyagerMenuPage::class);
85
        if ($hookName = \add_submenu_page(
86
            self::NAME,
87
            __('Interactive Schema', 'graphql-api'),
88
            __('Interactive Schema', 'graphql-api'),
89
            $schemaEditorAccessCapability,
90
            $graphQLVoyagerMenuPage->getScreenID(),
91
            [$graphQLVoyagerMenuPage, 'print']
92
        )
93
        ) {
94
            $graphQLVoyagerMenuPage->setHookName($hookName);
95
        }
96
    }
97
98
    /**
99
     * Either the Modules menu page, or the Module Documentation menu page,
100
     * based on parameter ?tab="docs" or not
101
     *
102
     * @return string
103
     */
104
    protected function getModuleMenuPageClass(): string
105
    {
106
        return
107
            ($_GET[RequestParams::TAB] == RequestParams::TAB_DOCS) ?
108
            ModuleDocumentationMenuPage::class :
109
            ModulesMenuPage::class;
110
    }
111
112
    public function addMenuPagesBottom(): void
113
    {
114
        parent::addMenuPagesBottom();
115
116
        $instanceManager = InstanceManagerFacade::getInstance();
117
        $menuPageClass = $this->getModuleMenuPageClass();
118
        /**
119
         * @var AbstractMenuPage
120
         */
121
        $modulesMenuPage = $instanceManager->getInstance($menuPageClass);
122
        /**
123
         * @var callable
124
         */
125
        $callable = [$modulesMenuPage, 'print'];
126
        if ($hookName = \add_submenu_page(
127
            self::NAME,
128
            __('Modules', 'graphql-api'),
129
            __('Modules', 'graphql-api'),
130
            'manage_options',
131
            $modulesMenuPage->getScreenID(),
132
            $callable
133
        )
134
        ) {
135
            $modulesMenuPage->setHookName($hookName);
136
        }
137
138
        /**
139
         * @var SettingsMenuPage
140
         */
141
        $settingsMenuPage = $instanceManager->getInstance(SettingsMenuPage::class);
142
        if ($hookName = \add_submenu_page(
143
            self::NAME,
144
            __('Settings', 'graphql-api'),
145
            __('Settings', 'graphql-api'),
146
            'manage_options',
147
            $settingsMenuPage->getScreenID(),
148
            [$settingsMenuPage, 'print']
149
        )
150
        ) {
151
            $settingsMenuPage->setHookName($hookName);
152
        }
153
154
        $moduleRegistry = ModuleRegistryFacade::getInstance();
155
        if ($moduleRegistry->isModuleEnabled(ClientFunctionalityModuleResolver::GRAPHIQL_FOR_SINGLE_ENDPOINT)) {
156
            global $submenu;
157
            $clientPath = GraphQLClientsForWPComponentConfiguration::getGraphiQLClientEndpoint();
158
            $submenu[self::NAME][] = [
159
                __('GraphiQL (public client)', 'graphql-api'),
160
                'read',
161
                home_url($clientPath),
162
            ];
163
        }
164
165
        if ($moduleRegistry->isModuleEnabled(ClientFunctionalityModuleResolver::INTERACTIVE_SCHEMA_FOR_SINGLE_ENDPOINT)) {
166
            global $submenu;
167
            $clientPath = GraphQLClientsForWPComponentConfiguration::getVoyagerClientEndpoint();
168
            $submenu[self::NAME][] = [
169
                __('Interactive Schema (public client)', 'graphql-api'),
170
                'read',
171
                home_url($clientPath),
172
            ];
173
        }
174
175
        /**
176
         * @var AboutMenuPage
177
         */
178
        $aboutMenuPage = $instanceManager->getInstance(AboutMenuPage::class);
179
        if ($hookName = \add_submenu_page(
180
            self::NAME,
181
            __('About', 'graphql-api'),
182
            __('About', 'graphql-api'),
183
            'read',
184
            $aboutMenuPage->getScreenID(),
185
            [$aboutMenuPage, 'print']
186
        )
187
        ) {
188
            $aboutMenuPage->setHookName($hookName);
189
        }
190
191
        // $schemaEditorAccessCapability = UserAuthorization::getSchemaEditorAccessCapability();
192
        // if (\current_user_can($schemaEditorAccessCapability)) {
193
        //     global $submenu;
194
        //     $submenu[self::NAME][] = [
195
        //         __('Documentation', 'graphql-api'),
196
        //         $schemaEditorAccessCapability,
197
        //         'https://graphql-api.com/documentation/',
198
        //     ];
199
        // }
200
    }
201
}
202