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.

Menu::addMenuPagesBottom()   B
last analyzed

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