• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

AxeWP / wp-graphql-rank-math / 6257663232

21 Sep 2023 05:40AM UTC coverage: 92.176% (+0.8%) from 91.344%
6257663232

push

github

web-flow
chore: Update dev-deps and lint (#59)

* chore: update dev deps

* chore: Lint for wp-graphql-cs:2.0.0-beta

* chore: lint access-functions

* chore: set wp-graphql-stubs to fixed version

27 of 27 new or added lines in 12 files covered. (100.0%)

2533 of 2748 relevant lines covered (92.18%)

11.22 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.84
/src/TypeRegistry.php
1
<?php
2
/**
3
 * Registers Plugin types to the GraphQL schema.
4
 *
5
 * @package WPGraphQL\RankMath
6
 */
7

8
namespace WPGraphQL\RankMath;
9

10
use Exception;
11
use WPGraphQL\RankMath\Fields;
12
use WPGraphQL\RankMath\Modules\Redirection\TypeRegistry as RedirectionTypeRegistry;
13
use WPGraphQL\RankMath\Type\Enum;
14
use WPGraphQL\RankMath\Type\WPInterface;
15
use WPGraphQL\RankMath\Type\WPObject;
16
use WPGraphQL\RankMath\Vendor\AxeWP\GraphQL\Interfaces\Registrable;
17

18
/**
19
 * Class - TypeRegistry
20
 */
21
class TypeRegistry {
22
        /**
23
         * The local registry of registered types.
24
         *
25
         * @var string[]
26
         */
27
        public static array $registry = [];
28

29
        /**
30
         * Gets an array of all the registered GraphQL types along with their class name.
31
         *
32
         * @return string[]
33
         */
34
        public static function get_registered_types(): array {
35
                if ( empty( self::$registry ) ) {
1✔
36
                        self::initialize_registry();
×
37
                }
38

39
                return self::$registry;
1✔
40
        }
41

42
        /**
43
         * Registers types, connections, unions, and mutations to GraphQL schema.
44
         */
45
        public static function init(): void {
46
                /**
47
                 * Fires before all types have been registered.
48
                 */
49
                do_action( 'graphql_seo_before_register_types' );
9✔
50

51
                // Register individual modules.
52
                RedirectionTypeRegistry::init();
9✔
53

54
                // Initialize the registry.
55
                self::initialize_registry();
9✔
56

57

58
                /**
59
                 * Fires after all types have been registered.
60
                 */
61
                do_action( 'graphql_seo_after_register_types' );
9✔
62
        }
63

64
        /**
65
         * Initializes the plugin type registry.
66
         */
67
        private static function initialize_registry(): void {
68
                $classes_to_register = array_merge(
9✔
69
                        self::enums(),
9✔
70
                        self::inputs(),
9✔
71
                        self::interfaces(),
9✔
72
                        self::objects(),
9✔
73
                        self::connections(),
9✔
74
                        self::mutations(),
9✔
75
                        self::fields(),
9✔
76
                );
9✔
77

78
                self::register_types( $classes_to_register );
9✔
79
        }
80

81
        /**
82
         * List of Enum classes to register.
83
         *
84
         * @return string[]
85
         */
86
        private static function enums(): array {
87
                // Enums to register.
88
                $classes_to_register = [
9✔
89
                        Enum\ArticleTypeEnum::class,
9✔
90
                        Enum\BulkEditingTypeEnum::class,
9✔
91
                        Enum\ImagePreviewSizeEnum::class,
9✔
92
                        Enum\KnowledgeGraphTypeEnum::class,
9✔
93
                        Enum\OpenGraphLocaleEnum::class,
9✔
94
                        Enum\OpenGraphProductAvailabilityEnum::class,
9✔
95
                        Enum\RobotsMetaValueEnum::class,
9✔
96
                        Enum\SeoScorePositionEnum::class,
9✔
97
                        Enum\SeoScoreTemplateTypeEnum::class,
9✔
98
                        Enum\SeoRatingEnum::class,
9✔
99
                        Enum\SnippetTypeEnum::class,
9✔
100
                        Enum\TwitterCardTypeEnum::class,
9✔
101
                ];
9✔
102

103
                /**
104
                 * Filters the list of enum classes to register.
105
                 *
106
                 * Useful for adding/removing specific enums to the schema.
107
                 *
108
                 * @param array           $classes_to_register Array of classes to be registered to the schema.
109
                 */
110
                return apply_filters( 'graphql_seo_registered_enum_classes', $classes_to_register );
9✔
111
        }
112

113
        /**
114
         * List of Input classes to register.
115
         *
116
         * @return string[]
117
         */
118
        private static function inputs(): array {
119
                $classes_to_register = [];
9✔
120

121
                /**
122
                 * Filters the list of input classes to register.
123
                 *
124
                 * Useful for adding/removing specific inputs to the schema.
125
                 *
126
                 * @param array           $classes_to_register Array of classes to be registered to the schema.
127
                 */
128
                return apply_filters( 'graphql_seo_registered_input_classes', $classes_to_register );
9✔
129
        }
130

131
        /**
132
         * List of Interface classes to register.
133
         *
134
         * @return string[]
135
         */
136
        public static function interfaces(): array {
137
                $classes_to_register = [
9✔
138
                        WPInterface\MetaSettingWithArchive::class,
9✔
139
                        WPInterface\MetaSettingWithRobots::class,
9✔
140
                        WPInterface\Seo::class,
9✔
141
                        WPInterface\ContentNodeSeo::class,
9✔
142
                        WPInterface\NodeWithSeo::class,
9✔
143
                ];
9✔
144

145
                /**
146
                 * Filters the list of interfaces classes to register.
147
                 *
148
                 * Useful for adding/removing specific interfaces to the schema.
149
                 *
150
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
151
                 */
152
                return apply_filters( 'graphql_seo_registered_interface_classes', $classes_to_register );
9✔
153
        }
154

155
        /**
156
         * List of Object classes to register.
157
         *
158
         * @return string[]
159
         */
160
        public static function objects(): array {
161
                $classes_to_register = [
9✔
162
                        WPObject\AdvancedRobotsMeta::class,
9✔
163
                        WPObject\SeoScore::class,
9✔
164
                        WPObject\JsonLd::class,
9✔
165
                        WPObject\Breadcrumbs::class,
9✔
166

167
                        // Open Graph.
168
                        WPObject\OpenGraph\Article::class,
9✔
169
                        WPObject\OpenGraph\Facebook::class,
9✔
170
                        WPObject\OpenGraph\Image::class,
9✔
171
                        WPObject\OpenGraph\Product::class,
9✔
172
                        WPObject\OpenGraph\SlackEnhancedData::class,
9✔
173
                        WPObject\OpenGraph\TwitterApp::class,
9✔
174
                        WPObject\OpenGraph\Twitter::class,
9✔
175
                        WPObject\OpenGraph\Video::class,
9✔
176
                        WPObject\OpenGraphMeta::class,
9✔
177

178
                        // General settings.
179
                        WPObject\Settings\General\BreadcrumbsConfig::class,
9✔
180
                        WPObject\Settings\General\FrontendSeoScore::class,
9✔
181
                        WPObject\Settings\General\Links::class,
9✔
182
                        WPObject\Settings\General\Webmaster::class,
9✔
183
                        WPObject\Settings\General::class,
9✔
184
                        // Meta settings.
185
                        WPObject\Settings\Meta\AuthorArchiveMeta::class,
9✔
186
                        WPObject\Settings\Meta\ContentTypeMeta::class,
9✔
187
                        WPObject\Settings\Meta\DateArchiveMeta::class,
9✔
188
                        WPObject\Settings\Meta\GlobalMeta::class,
9✔
189
                        WPObject\Settings\Meta\HomepageMeta::class,
9✔
190
                        WPObject\Settings\Meta\LocalMeta::class,
9✔
191
                        WPObject\Settings\Meta\SocialMeta::class,
9✔
192
                        WPObject\Settings\Meta\TaxonomyMeta::class,
9✔
193
                        WPObject\Settings\Meta::class,
9✔
194
                        // Sitemap settings.
195
                        WPObject\Settings\Sitemap\Author::class,
9✔
196
                        WPObject\Settings\Sitemap\ContentType::class,
9✔
197
                        WPObject\Settings\Sitemap\General::class,
9✔
198
                        WPObject\Settings\Sitemap\Taxonomy::class,
9✔
199
                        WPObject\Settings\Sitemap::class,
9✔
200

201
                        // Settings.
202
                        WPObject\Settings::class,
9✔
203

204
                        // The individual SEO objects.
205
                        WPObject\SeoObjects::class,
9✔
206
                ];
9✔
207

208
                /**
209
                 * Filters the list of object classes to register.
210
                 *
211
                 * Useful for adding/removing specific objects to the schema.
212
                 *
213
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
214
                 */
215
                return apply_filters( 'graphql_seo_registered_object_classes', $classes_to_register );
9✔
216
        }
217

218
        /**
219
         * List of Field classes to register.
220
         *
221
         * @return string[]
222
         */
223
        public static function fields(): array {
224
                $classes_to_register = [
9✔
225
                        Fields\RootQuery::class,
9✔
226
                ];
9✔
227

228
                /**
229
                 * Filters the list of field classes to register.
230
                 *
231
                 * Useful for adding/removing specific fields to the schema.
232
                 *
233
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
234
                 */
235
                return apply_filters( 'graphql_seo_registered_field_classes', $classes_to_register );
9✔
236
        }
237

238
        /**
239
         * List of Connection classes to register.
240
         *
241
         * @return string[]
242
         */
243
        public static function connections(): array {
244
                $classes_to_register = [];
9✔
245

246
                /**
247
                 * Filters the list of connection classes to register.
248
                 *
249
                 * Useful for adding/removing specific connections to the schema.
250
                 *
251
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
252
                 */
253
                return apply_filters( 'graphql_seo_registered_connection_classes', $classes_to_register );
9✔
254
        }
255

256
        /**
257
         * Registers mutation.
258
         *
259
         * @return string[]
260
         */
261
        public static function mutations(): array {
262
                $classes_to_register = [];
9✔
263

264
                /**
265
                 * Filters the list of connection classes to register.
266
                 *
267
                 * Useful for adding/removing specific connections to the schema.
268
                 *
269
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
270
                 */
271
                $classes_to_register = apply_filters( 'graphql_seo_registered_mutation_classes', $classes_to_register );
9✔
272

273
                return $classes_to_register;
9✔
274
        }
275

276
        /**
277
         * Loops through a list of classes to manually register each GraphQL to the registry, and stores the type name and class in the local registry.
278
         *
279
         * Classes must extend WPGraphQL\Type\AbstractType.
280
         *
281
         * @param string[] $classes_to_register .
282
         *
283
         * @throws \Exception .
284
         */
285
        private static function register_types( array $classes_to_register ): void {
286
                // Bail if there are no classes to register.
287
                if ( empty( $classes_to_register ) ) {
9✔
288
                        return;
×
289
                }
290

291
                foreach ( $classes_to_register as $class ) {
9✔
292
                        if ( ! is_a( $class, Registrable::class, true ) ) {
9✔
293
                                // translators: PHP class.
294
                                throw new Exception( sprintf( esc_html__( 'To be registered to the WPGraphQL Plugin Name GraphQL schema, %s needs to implement WPGraphQL\RankMath\Vendor\AxeWP\GraphQL\Interfaces\Registrable.', 'wp-graphql-rank-math' ), esc_html( $class ) ) );
×
295
                        }
296

297
                        // Register the type to the GraphQL schema.
298
                        $class::init();
9✔
299
                        // Store the type in the local registry.
300
                        self::$registry[] = $class;
9✔
301
                }
302
        }
303
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc