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 ( 5b18e5...d5a27a )
by Leonardo
12:09
created

Menu::addMenuPagesBottom()   B

Complexity

Conditions 9
Paths 96

Size

Total Lines 105
Code Lines 61

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 61
c 0
b 0
f 0
nc 96
nop 0
dl 0
loc 105
rs 7.2953

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\ConditionalOnEnvironment\Admin\Services\Menus;
6
7
use GraphQLAPI\GraphQLAPI\General\RequestParams;
8
use GraphQLAPI\GraphQLAPI\Security\UserAuthorization;
9
use GraphQLAPI\GraphQLAPI\Facades\ModuleRegistryFacade;
10
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\AboutMenuPage;
11
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\SupportMenuPage;
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\ReleaseNotesAboutMenuPage;
19
use GraphQLAPI\GraphQLAPI\Admin\MenuPages\ModuleDocumentationMenuPage;
20
use GraphQLAPI\GraphQLAPI\ModuleResolvers\ClientFunctionalityModuleResolver;
21
use GraphQLByPoP\GraphQLClientsForWP\ComponentConfiguration as GraphQLClientsForWPComponentConfiguration;
22
23
/**
24
 * Admin menu class
25
 */
26
class Menu extends AbstractMenu
27
{
28
    public const NAME = 'graphql_api';
29
30
    public static function getName(): string
31
    {
32
        return static::NAME;
33
    }
34
35
    /**
36
     * @return string[]
37
     */
38
    protected function getMenuPageClasses(): array
39
    {
40
        return [
41
            GraphiQLMenuPage::class,
42
            GraphQLVoyagerMenuPage::class,
43
            SettingsMenuPage::class,
44
            $this->getModuleMenuPageClass(),
45
            $this->getAboutMenuPageClass(),
46
            SupportMenuPage::class,
47
        ];
48
    }
49
50
    public function addMenuPagesTop(): void
51
    {
52
        parent::addMenuPagesTop();
53
54
        $instanceManager = InstanceManagerFacade::getInstance();
55
56
        $schemaEditorAccessCapability = UserAuthorization::getSchemaEditorAccessCapability();
57
        \add_menu_page(
58
            __('GraphQL API', 'graphql-api'),
59
            __('GraphQL API', 'graphql-api'),
60
            $schemaEditorAccessCapability,
61
            self::NAME,
62
            function () {
63
            },
64
            '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='
65
        );
66
67
        /**
68
         * @var GraphiQLMenuPage
69
         */
70
        $graphiQLMenuPage = $instanceManager->getInstance(GraphiQLMenuPage::class);
71
        if (
72
            $hookName = \add_submenu_page(
73
                self::NAME,
74
                __('GraphiQL', 'graphql-api'),
75
                __('GraphiQL', 'graphql-api'),
76
                $schemaEditorAccessCapability,
77
                self::NAME,
78
                [$graphiQLMenuPage, 'print']
79
            )
80
        ) {
81
            $graphiQLMenuPage->setHookName($hookName);
82
        }
83
84
        /**
85
         * @var GraphQLVoyagerMenuPage
86
         */
87
        $graphQLVoyagerMenuPage = $instanceManager->getInstance(GraphQLVoyagerMenuPage::class);
88
        if (
89
            $hookName = \add_submenu_page(
90
                self::NAME,
91
                __('Interactive Schema', 'graphql-api'),
92
                __('Interactive Schema', 'graphql-api'),
93
                $schemaEditorAccessCapability,
94
                $graphQLVoyagerMenuPage->getScreenID(),
95
                [$graphQLVoyagerMenuPage, 'print']
96
            )
97
        ) {
98
            $graphQLVoyagerMenuPage->setHookName($hookName);
99
        }
100
    }
101
102
    /**
103
     * Either the Modules menu page, or the Module Documentation menu page,
104
     * based on parameter ?tab="docs" or not
105
     */
106
    protected function getModuleMenuPageClass(): string
107
    {
108
        return
109
            (isset($_GET[RequestParams::TAB]) && $_GET[RequestParams::TAB] == RequestParams::TAB_DOCS) ?
110
            ModuleDocumentationMenuPage::class :
111
            ModulesMenuPage::class;
112
    }
113
114
    /**
115
     * Either the About menu page, or the Release Notes menu page,
116
     * based on parameter ?tab="docs" or not
117
     */
118
    protected function getAboutMenuPageClass(): string
119
    {
120
        return
121
            (isset($_GET[RequestParams::TAB]) && $_GET[RequestParams::TAB] == RequestParams::TAB_DOCS) ?
122
            ReleaseNotesAboutMenuPage::class :
123
            AboutMenuPage::class;
124
    }
125
126
    public function addMenuPagesBottom(): void
127
    {
128
        parent::addMenuPagesBottom();
129
130
        $instanceManager = InstanceManagerFacade::getInstance();
131
        $menuPageClass = $this->getModuleMenuPageClass();
132
        /**
133
         * @var AbstractMenuPage
134
         */
135
        $modulesMenuPage = $instanceManager->getInstance($menuPageClass);
136
        /**
137
         * @var callable
138
         */
139
        $callable = [$modulesMenuPage, 'print'];
140
        if (
141
            $hookName = \add_submenu_page(
142
                self::NAME,
143
                __('Modules', 'graphql-api'),
144
                __('Modules', 'graphql-api'),
145
                'manage_options',
146
                $modulesMenuPage->getScreenID(),
147
                $callable
148
            )
149
        ) {
150
            $modulesMenuPage->setHookName($hookName);
151
        }
152
153
        /**
154
         * @var SettingsMenuPage
155
         */
156
        $settingsMenuPage = $instanceManager->getInstance(SettingsMenuPage::class);
157
        if (
158
            $hookName = \add_submenu_page(
159
                self::NAME,
160
                __('Settings', 'graphql-api'),
161
                __('Settings', 'graphql-api'),
162
                'manage_options',
163
                $settingsMenuPage->getScreenID(),
164
                [$settingsMenuPage, 'print']
165
            )
166
        ) {
167
            $settingsMenuPage->setHookName($hookName);
168
        }
169
170
        $moduleRegistry = ModuleRegistryFacade::getInstance();
171
        if ($moduleRegistry->isModuleEnabled(ClientFunctionalityModuleResolver::GRAPHIQL_FOR_SINGLE_ENDPOINT)) {
172
            global $submenu;
173
            $clientPath = GraphQLClientsForWPComponentConfiguration::getGraphiQLClientEndpoint();
174
            $submenu[self::NAME][] = [
175
                __('GraphiQL (public client)', 'graphql-api'),
176
                'read',
177
                home_url($clientPath),
178
            ];
179
        }
180
181
        if ($moduleRegistry->isModuleEnabled(ClientFunctionalityModuleResolver::INTERACTIVE_SCHEMA_FOR_SINGLE_ENDPOINT)) {
182
            global $submenu;
183
            $clientPath = GraphQLClientsForWPComponentConfiguration::getVoyagerClientEndpoint();
184
            $submenu[self::NAME][] = [
185
                __('Interactive Schema (public client)', 'graphql-api'),
186
                'read',
187
                home_url($clientPath),
188
            ];
189
        }
190
191
        /**
192
         * Only show the About page when actually loading it
193
         * So it doesn't appear on the menu, but it's still available
194
         * to display the release notes on the modal window
195
         */
196
        $aboutPageClass = $this->getAboutMenuPageClass();
197
        /**
198
         * @var AbstractMenuPage
199
         */
200
        $aboutMenuPage = $instanceManager->getInstance($aboutPageClass);
201
        if (isset($_GET['page']) && $_GET['page'] == $aboutMenuPage->getScreenID()) {
202
            if (
203
                $hookName = \add_submenu_page(
204
                    self::NAME,
205
                    __('About', 'graphql-api'),
206
                    __('About', 'graphql-api'),
207
                    'read',
208
                    $aboutMenuPage->getScreenID(),
209
                    [$aboutMenuPage, 'print']
210
                )
211
            ) {
212
                $aboutMenuPage->setHookName($hookName);
213
            }
214
        }
215
216
        /**
217
         * @var SupportMenuPage
218
         */
219
        $supportMenuPage = $instanceManager->getInstance(SupportMenuPage::class);
220
        if (
221
            $hookName = \add_submenu_page(
222
                self::NAME,
223
                __('Support', 'graphql-api'),
224
                __('Support', 'graphql-api'),
225
                'read',
226
                $supportMenuPage->getScreenID(),
227
                [$supportMenuPage, 'print']
228
            )
229
        ) {
230
            $supportMenuPage->setHookName($hookName);
231
        }
232
233
        // $schemaEditorAccessCapability = UserAuthorization::getSchemaEditorAccessCapability();
234
        // if (\current_user_can($schemaEditorAccessCapability)) {
235
        //     global $submenu;
236
        //     $submenu[self::NAME][] = [
237
        //         __('Documentation', 'graphql-api'),
238
        //         $schemaEditorAccessCapability,
239
        //         'https://graphql-api.com/documentation/',
240
        //     ];
241
        // }
242
    }
243
}
244