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   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 164
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 87
c 1
b 0
f 0
dl 0
loc 164
rs 10
ccs 0
cts 107
cp 0
wmc 13

5 Methods

Rating   Name   Duplication   Size   Complexity  
B addMenuPagesBottom() 0 77 6
A getModuleMenuPageClass() 0 6 2
A addMenuPagesTop() 0 47 3
A getMenuPageClasses() 0 8 1
A getName() 0 3 1
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