Completed
Pull Request — develop (#1175)
by Naveen
02:22
created

Wordlift::define_admin_hooks()   C

Complexity

Conditions 10
Paths 192

Size

Total Lines 260

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
nc 192
nop 0
dl 0
loc 260
rs 5.5199
c 0
b 0
f 0

How to fix   Long Method    Complexity   

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
 * The file that defines the core plugin class
4
 *
5
 * A class definition that includes attributes and functions used across both the
6
 * public-facing side of the site and the admin area.
7
 *
8
 * @link       https://wordlift.io
9
 * @since      1.0.0
10
 *
11
 * @package    Wordlift
12
 * @subpackage Wordlift/includes
13
 */
14
15
use Wordlift\Analysis\Response\Analysis_Response_Ops_Factory;
16
use Wordlift\Autocomplete\All_Autocomplete_Service;
17
use Wordlift\Autocomplete\Linked_Data_Autocomplete_Service;
18
use Wordlift\Autocomplete\Local_Autocomplete_Service;
19
use Wordlift\Cache\Ttl_Cache;
20
use Wordlift\Duplicate_Markup_Remover\Faq_Duplicate_Markup_Remover;
21
use Wordlift\Entity\Entity_Helper;
22
use Wordlift\External_Plugin_Hooks\Recipe_Maker\Recipe_Maker_Jsonld_Hook;
23
use Wordlift\External_Plugin_Hooks\Recipe_Maker\Recipe_Maker_After_Get_Jsonld_Hook;
24
use Wordlift\External_Plugin_Hooks\Recipe_Maker\Recipe_Maker_Post_Type_Hook;
25
use Wordlift\External_Plugin_Hooks\Recipe_Maker\Recipe_Maker_Validation_Service;
26
use Wordlift\External_Plugin_Hooks\Recipe_Maker\Recipe_Maker_Warning;
27
use Wordlift\External_Plugin_Hooks\Yoast\Yoast_Jsonld;
28
use Wordlift\Faq\Faq_Content_Filter;
29
use Wordlift\Faq\Faq_Tinymce_Adapter;
30
use Wordlift\Jsonld\Jsonld_Adapter;
31
use Wordlift\Jsonld\Jsonld_By_Id_Endpoint;
32
use Wordlift\Jsonld\Jsonld_Endpoint;
33
use Wordlift\Jsonld\Jsonld_Service;
34
use Wordlift\Jsonld\Term_Jsonld_Service;
35
use Wordlift\Mappings\Formatters\Acf_Group_Formatter;
36
use Wordlift\Mappings\Jsonld_Converter;
37
use Wordlift\Mappings\Mappings_DBO;
38
use Wordlift\Mappings\Mappings_Transform_Functions_Registry;
39
use Wordlift\Mappings\Mappings_Validator;
40
use Wordlift\Mappings\Transforms\Post_Id_To_Entity_Transform_Function;
41
use Wordlift\Mappings\Transforms\Taxonomy_To_Terms_Transform_Function;
42
use Wordlift\Mappings\Transforms\Url_To_Entity_Transform_Function;
43
use Wordlift\Mappings\Validators\Post_Type_Rule_Validator;
44
use Wordlift\Mappings\Validators\Rule_Groups_Validator;
45
use Wordlift\Mappings\Validators\Rule_Validators_Registry;
46
use Wordlift\Mappings\Validators\Taxonomy_Rule_Validator;
47
use Wordlift\Mappings\Validators\Taxonomy_Term_Rule_Validator;
48
use Wordlift\Post_Excerpt\Post_Excerpt_Meta_Box_Adapter;
49
use Wordlift\Post_Excerpt\Post_Excerpt_Rest_Controller;
50
use Wordlift\Templates\Templates_Ajax_Endpoint;
51
52
/**
53
 * The core plugin class.
54
 *
55
 * This is used to define internationalization, admin-specific hooks, and
56
 * public-facing site hooks.
57
 *
58
 * Also maintains the unique identifier of this plugin as well as the current
59
 * version of the plugin.
60
 *
61
 * @since      1.0.0
62
 * @package    Wordlift
63
 * @subpackage Wordlift/includes
64
 * @author     WordLift <[email protected]>
65
 */
66
class Wordlift {
67
68
	//<editor-fold desc="## FIELDS">
69
70
	/**
71
	 * The loader that's responsible for maintaining and registering all hooks that power
72
	 * the plugin.
73
	 *
74
	 * @since    1.0.0
75
	 * @access   protected
76
	 * @var      Wordlift_Loader $loader Maintains and registers all hooks for the plugin.
77
	 */
78
	protected $loader;
79
80
	/**
81
	 * The unique identifier of this plugin.
82
	 *
83
	 * @since    1.0.0
84
	 * @access   protected
85
	 * @var      string $plugin_name The string used to uniquely identify this plugin.
86
	 */
87
	protected $plugin_name;
88
89
	/**
90
	 * The current version of the plugin.
91
	 *
92
	 * @since    1.0.0
93
	 * @access   protected
94
	 * @var      string $version The current version of the plugin.
95
	 */
96
	protected $version;
97
98
	/**
99
	 * The {@link Wordlift_Tinymce_Adapter} instance.
100
	 *
101
	 * @since  3.12.0
102
	 * @access protected
103
	 * @var \Wordlift_Tinymce_Adapter $tinymce_adapter The {@link Wordlift_Tinymce_Adapter} instance.
104
	 */
105
	protected $tinymce_adapter;
106
107
	/**
108
	 * The {@link Faq_Tinymce_Adapter} instance
109
	 * @since 3.26.0
110
	 * @access protected
111
	 * @var Faq_Tinymce_Adapter $faq_tinymce_adapter .
112
	 */
113
	//protected $faq_tinymce_adapter;
114
115
	/**
116
	 * The Thumbnail service.
117
	 *
118
	 * @since  3.1.5
119
	 * @access private
120
	 * @var \Wordlift_Thumbnail_Service $thumbnail_service The Thumbnail service.
121
	 */
122
	private $thumbnail_service;
123
124
	/**
125
	 * The UI service.
126
	 *
127
	 * @since  3.2.0
128
	 * @access private
129
	 * @var \Wordlift_UI_Service $ui_service The UI service.
130
	 */
131
	private $ui_service;
132
133
	/**
134
	 * The Schema service.
135
	 *
136
	 * @since  3.3.0
137
	 * @access protected
138
	 * @var \Wordlift_Schema_Service $schema_service The Schema service.
139
	 */
140
	protected $schema_service;
141
142
	/**
143
	 * The Entity service.
144
	 *
145
	 * @since  3.1.0
146
	 * @access protected
147
	 * @var \Wordlift_Entity_Service $entity_service The Entity service.
148
	 */
149
	protected $entity_service;
150
151
	/**
152
	 * The Topic Taxonomy service.
153
	 *
154
	 * @since  3.5.0
155
	 * @access private
156
	 * @var \Wordlift_Topic_Taxonomy_Service The Topic Taxonomy service.
157
	 */
158
	private $topic_taxonomy_service;
159
160
	/**
161
	 * The Entity Types Taxonomy service.
162
	 *
163
	 * @since  3.18.0
164
	 * @access private
165
	 * @var \Wordlift_Entity_Type_Taxonomy_Service The Entity Types Taxonomy service.
166
	 */
167
	private $entity_types_taxonomy_service;
168
169
	/**
170
	 * The User service.
171
	 *
172
	 * @since  3.1.7
173
	 * @access protected
174
	 * @var \Wordlift_User_Service $user_service The User service.
175
	 */
176
	protected $user_service;
177
178
	/**
179
	 * The Timeline service.
180
	 *
181
	 * @since  3.1.0
182
	 * @access private
183
	 * @var \Wordlift_Timeline_Service $timeline_service The Timeline service.
184
	 */
185
	private $timeline_service;
186
187
	/**
188
	 * The Redirect service.
189
	 *
190
	 * @since  3.2.0
191
	 * @access private
192
	 * @var \Wordlift_Redirect_Service $redirect_service The Redirect service.
193
	 */
194
	private $redirect_service;
195
196
	/**
197
	 * The Notice service.
198
	 *
199
	 * @since  3.3.0
200
	 * @access private
201
	 * @var \Wordlift_Notice_Service $notice_service The Notice service.
202
	 */
203
	private $notice_service;
204
205
	/**
206
	 * The Entity list customization.
207
	 *
208
	 * @since  3.3.0
209
	 * @access protected
210
	 * @var \Wordlift_Entity_List_Service $entity_list_service The Entity list service.
211
	 */
212
	protected $entity_list_service;
213
214
	/**
215
	 * The Entity Types Taxonomy Walker.
216
	 *
217
	 * @since  3.1.0
218
	 * @access private
219
	 * @var \Wordlift_Entity_Types_Taxonomy_Walker $entity_types_taxonomy_walker The Entity Types Taxonomy Walker
220
	 */
221
	private $entity_types_taxonomy_walker;
222
223
	/**
224
	 * The ShareThis service.
225
	 *
226
	 * @since  3.2.0
227
	 * @access private
228
	 * @var \Wordlift_ShareThis_Service $sharethis_service The ShareThis service.
229
	 */
230
	private $sharethis_service;
231
232
	/**
233
	 * The PrimaShop adapter.
234
	 *
235
	 * @since  3.2.3
236
	 * @access private
237
	 * @var \Wordlift_PrimaShop_Adapter $primashop_adapter The PrimaShop adapter.
238
	 */
239
	private $primashop_adapter;
240
241
	/**
242
	 * The WordLift Dashboard adapter.
243
	 *
244
	 * @since  3.4.0
245
	 * @access private
246
	 * @var \Wordlift_Dashboard_Service $dashboard_service The WordLift Dashboard service;
247
	 */
248
	private $dashboard_service;
249
250
	/**
251
	 * The entity type service.
252
	 *
253
	 * @since  3.6.0
254
	 * @access private
255
	 * @var \Wordlift_Entity_Post_Type_Service
256
	 */
257
	private $entity_post_type_service;
258
259
	/**
260
	 * The entity link service used to mangle links to entities with a custom slug or even w/o a slug.
261
	 *
262
	 * @since  3.6.0
263
	 * @access private
264
	 * @var \Wordlift_Entity_Link_Service $entity_link_service The {@link Wordlift_Entity_Link_Service} instance.
265
	 */
266
	private $entity_link_service;
267
268
	/**
269
	 * A {@link Wordlift_Sparql_Service} instance.
270
	 *
271
	 * @since    3.6.0
272
	 * @access   protected
273
	 * @var \Wordlift_Sparql_Service $sparql_service A {@link Wordlift_Sparql_Service} instance.
274
	 */
275
	protected $sparql_service;
276
277
	/**
278
	 * A {@link Wordlift_Import_Service} instance.
279
	 *
280
	 * @since  3.6.0
281
	 * @access private
282
	 * @var \Wordlift_Import_Service $import_service A {@link Wordlift_Import_Service} instance.
283
	 */
284
	private $import_service;
285
286
	/**
287
	 * A {@link Wordlift_Rebuild_Service} instance.
288
	 *
289
	 * @since  3.6.0
290
	 * @access private
291
	 * @var \Wordlift_Rebuild_Service $rebuild_service A {@link Wordlift_Rebuild_Service} instance.
292
	 */
293
	private $rebuild_service;
294
295
	/**
296
	 * A {@link Wordlift_Jsonld_Service} instance.
297
	 *
298
	 * @since  3.7.0
299
	 * @access protected
300
	 * @var \Wordlift_Jsonld_Service $jsonld_service A {@link Wordlift_Jsonld_Service} instance.
301
	 */
302
	protected $jsonld_service;
303
304
	/**
305
	 * A {@link Wordlift_Website_Jsonld_Converter} instance.
306
	 *
307
	 * @since  3.14.0
308
	 * @access protected
309
	 * @var \Wordlift_Website_Jsonld_Converter $jsonld_website_converter A {@link Wordlift_Website_Jsonld_Converter} instance.
310
	 */
311
	protected $jsonld_website_converter;
312
313
	/**
314
	 * A {@link Wordlift_Property_Factory} instance.
315
	 *
316
	 * @since  3.7.0
317
	 * @access private
318
	 * @var \Wordlift_Property_Factory $property_factory
319
	 */
320
	private $property_factory;
321
322
	/**
323
	 * The 'Download Your Data' page.
324
	 *
325
	 * @since  3.6.0
326
	 * @access private
327
	 * @var \Wordlift_Admin_Download_Your_Data_Page $download_your_data_page The 'Download Your Data' page.
328
	 */
329
	private $download_your_data_page;
330
331
	/**
332
	 * The 'WordLift Settings' page.
333
	 *
334
	 * @since  3.11.0
335
	 * @access protected
336
	 * @var \Wordlift_Admin_Settings_Page $settings_page The 'WordLift Settings' page.
337
	 */
338
	protected $settings_page;
339
340
	/**
341
	 * The install wizard page.
342
	 *
343
	 * @since  3.9.0
344
	 * @access private
345
	 * @var \Wordlift_Admin_Setup $admin_setup The Install wizard.
346
	 */
347
	public $admin_setup;
348
349
	/**
350
	 * The Content Filter Service hooks up to the 'the_content' filter and provides
351
	 * linking of entities to their pages.
352
	 *
353
	 * @since  3.8.0
354
	 * @access private
355
	 * @var \Wordlift_Content_Filter_Service $content_filter_service A {@link Wordlift_Content_Filter_Service} instance.
356
	 */
357
	private $content_filter_service;
358
359
	/**
360
	 * The Faq Content filter service
361
	 * @since  3.26.0
362
	 * @access private
363
	 * @var Faq_Content_Filter $faq_content_filter_service A {@link Faq_Content_Filter} instance.
364
	 */
365
	private $faq_content_filter_service;
366
367
	/**
368
	 * A {@link Wordlift_Key_Validation_Service} instance.
369
	 *
370
	 * @since  3.9.0
371
	 * @access private
372
	 * @var Wordlift_Key_Validation_Service $key_validation_service A {@link Wordlift_Key_Validation_Service} instance.
373
	 */
374
	private $key_validation_service;
375
376
	/**
377
	 * A {@link Wordlift_Rating_Service} instance.
378
	 *
379
	 * @since  3.10.0
380
	 * @access private
381
	 * @var \Wordlift_Rating_Service $rating_service A {@link Wordlift_Rating_Service} instance.
382
	 */
383
	private $rating_service;
384
385
	/**
386
	 * A {@link Wordlift_Post_To_Jsonld_Converter} instance.
387
	 *
388
	 * @since  3.10.0
389
	 * @access protected
390
	 * @var \Wordlift_Post_To_Jsonld_Converter $post_to_jsonld_converter A {@link Wordlift_Post_To_Jsonld_Converter} instance.
391
	 */
392
	protected $post_to_jsonld_converter;
393
394
	/**
395
	 * A {@link Wordlift_Configuration_Service} instance.
396
	 *
397
	 * @since  3.10.0
398
	 * @access protected
399
	 * @var \Wordlift_Configuration_Service $configuration_service A {@link Wordlift_Configuration_Service} instance.
400
	 */
401
	protected $configuration_service;
402
403
	/**
404
	 * A {@link Wordlift_Install_Service} instance.
405
	 *
406
	 * @since  3.18.0
407
	 * @access protected
408
	 * @var \Wordlift_Install_Service $install_service A {@link Wordlift_Install_Service} instance.
409
	 */
410
	protected $install_service;
411
412
	/**
413
	 * A {@link Wordlift_Entity_Type_Service} instance.
414
	 *
415
	 * @since  3.10.0
416
	 * @access protected
417
	 * @var \Wordlift_Entity_Type_Service $entity_type_service A {@link Wordlift_Entity_Type_Service} instance.
418
	 */
419
	protected $entity_type_service;
420
421
	/**
422
	 * A {@link Wordlift_Entity_Post_To_Jsonld_Converter} instance.
423
	 *
424
	 * @since  3.10.0
425
	 * @access protected
426
	 * @var \Wordlift_Entity_Post_To_Jsonld_Converter $entity_post_to_jsonld_converter A {@link Wordlift_Entity_Post_To_Jsonld_Converter} instance.
427
	 */
428
	protected $entity_post_to_jsonld_converter;
429
430
	/**
431
	 * A {@link Wordlift_Postid_To_Jsonld_Converter} instance.
432
	 *
433
	 * @since  3.10.0
434
	 * @access protected
435
	 * @var \Wordlift_Postid_To_Jsonld_Converter $postid_to_jsonld_converter A {@link Wordlift_Postid_To_Jsonld_Converter} instance.
436
	 */
437
	protected $postid_to_jsonld_converter;
438
439
	/**
440
	 * The {@link Wordlift_Admin_Status_Page} class.
441
	 *
442
	 * @since  3.9.8
443
	 * @access private
444
	 * @var \Wordlift_Admin_Status_Page $status_page The {@link Wordlift_Admin_Status_Page} class.
445
	 */
446
	private $status_page;
447
448
	/**
449
	 * The {@link Wordlift_Category_Taxonomy_Service} instance.
450
	 *
451
	 * @since  3.11.0
452
	 * @access protected
453
	 * @var \Wordlift_Category_Taxonomy_Service $category_taxonomy_service The {@link Wordlift_Category_Taxonomy_Service} instance.
454
	 */
455
	protected $category_taxonomy_service;
456
457
	/**
458
	 * The {@link Wordlift_Entity_Page_Service} instance.
459
	 *
460
	 * @since  3.11.0
461
	 * @access protected
462
	 * @var \Wordlift_Entity_Page_Service $entity_page_service The {@link Wordlift_Entity_Page_Service} instance.
463
	 */
464
	protected $entity_page_service;
465
466
	/**
467
	 * The {@link Wordlift_Admin_Settings_Page_Action_Link} class.
468
	 *
469
	 * @since  3.11.0
470
	 * @access protected
471
	 * @var \Wordlift_Admin_Settings_Page_Action_Link $settings_page_action_link The {@link Wordlift_Admin_Settings_Page_Action_Link} class.
472
	 */
473
	protected $settings_page_action_link;
474
475
	/**
476
	 * The {@link Wordlift_Admin_Settings_Page_Action_Link} class.
477
	 *
478
	 * @since  3.11.0
479
	 * @access protected
480
	 * @var \Wordlift_Admin_Settings_Page_Action_Link $settings_page_action_link The {@link Wordlift_Admin_Settings_Page_Action_Link} class.
481
	 */
482
	protected $analytics_settings_page_action_link;
483
484
	/**
485
	 * The {@link Wordlift_Analytics_Connect} class.
486
	 *
487
	 * @since  3.11.0
488
	 * @access protected
489
	 * @var \Wordlift_Analytics_Connect $analytics_connect The {@link Wordlift_Analytics_Connect} class.
490
	 */
491
	protected $analytics_connect;
492
493
	/**
494
	 * The {@link Wordlift_Publisher_Ajax_Adapter} instance.
495
	 *
496
	 * @since  3.11.0
497
	 * @access protected
498
	 * @var \Wordlift_Publisher_Ajax_Adapter $publisher_ajax_adapter The {@link Wordlift_Publisher_Ajax_Adapter} instance.
499
	 */
500
	protected $publisher_ajax_adapter;
501
502
	/**
503
	 * The {@link Wordlift_Admin_Input_Element} element renderer.
504
	 *
505
	 * @since  3.11.0
506
	 * @access protected
507
	 * @var \Wordlift_Admin_Input_Element $input_element The {@link Wordlift_Admin_Input_Element} element renderer.
508
	 */
509
	protected $input_element;
510
511
	/**
512
	 * The {@link Wordlift_Admin_Radio_Input_Element} element renderer.
513
	 *
514
	 * @since  3.13.0
515
	 * @access protected
516
	 * @var \Wordlift_Admin_Radio_Input_Element $radio_input_element The {@link Wordlift_Admin_Radio_Input_Element} element renderer.
517
	 */
518
	protected $radio_input_element;
519
520
	/**
521
	 * The {@link Wordlift_Admin_Language_Select_Element} element renderer.
522
	 *
523
	 * @since  3.11.0
524
	 * @access protected
525
	 * @var \Wordlift_Admin_Language_Select_Element $language_select_element The {@link Wordlift_Admin_Language_Select_Element} element renderer.
526
	 */
527
	protected $language_select_element;
528
529
	/**
530
	 * The {@link Wordlift_Admin_Country_Select_Element} element renderer.
531
	 *
532
	 * @since  3.18.0
533
	 * @access protected
534
	 * @var \Wordlift_Admin_Country_Select_Element $country_select_element The {@link Wordlift_Admin_Country_Select_Element} element renderer.
535
	 */
536
	protected $country_select_element;
537
538
	/**
539
	 * The {@link Wordlift_Admin_Publisher_Element} element renderer.
540
	 *
541
	 * @since  3.11.0
542
	 * @access protected
543
	 * @var \Wordlift_Admin_Publisher_Element $publisher_element The {@link Wordlift_Admin_Publisher_Element} element renderer.
544
	 */
545
	protected $publisher_element;
546
547
	/**
548
	 * The {@link Wordlift_Admin_Select2_Element} element renderer.
549
	 *
550
	 * @since  3.11.0
551
	 * @access protected
552
	 * @var \Wordlift_Admin_Select2_Element $select2_element The {@link Wordlift_Admin_Select2_Element} element renderer.
553
	 */
554
	protected $select2_element;
555
556
	/**
557
	 * The controller for the entity type list admin page
558
	 *
559
	 * @since  3.11.0
560
	 * @access private
561
	 * @var \Wordlift_Admin_Entity_Taxonomy_List_Page $entity_type_admin_page The {@link Wordlift_Admin_Entity_Taxonomy_List_Page} class.
562
	 */
563
	private $entity_type_admin_page;
564
565
	/**
566
	 * The controller for the entity type settings admin page
567
	 *
568
	 * @since  3.11.0
569
	 * @access private
570
	 * @var \Wordlift_Admin_Entity_Type_Settings $entity_type_settings_admin_page The {@link Wordlift_Admin_Entity_Type_Settings} class.
571
	 */
572
	private $entity_type_settings_admin_page;
573
574
	/**
575
	 * The {@link Wordlift_Related_Entities_Cloud_Widget} instance.
576
	 *
577
	 * @since  3.11.0
578
	 * @access protected
579
	 * @var \Wordlift_Related_Entities_Cloud_Widget $related_entities_cloud_widget The {@link Wordlift_Related_Entities_Cloud_Widget} instance.
580
	 */
581
	protected $related_entities_cloud_widget;
582
583
	/**
584
	 * The {@link Wordlift_Admin_Author_Element} instance.
585
	 *
586
	 * @since  3.14.0
587
	 * @access protected
588
	 * @var \Wordlift_Admin_Author_Element $author_element The {@link Wordlift_Admin_Author_Element} instance.
589
	 */
590
	protected $author_element;
591
592
	/**
593
	 * The {@link Wordlift_Sample_Data_Service} instance.
594
	 *
595
	 * @since  3.12.0
596
	 * @access protected
597
	 * @var \Wordlift_Sample_Data_Service $sample_data_service The {@link Wordlift_Sample_Data_Service} instance.
598
	 */
599
	protected $sample_data_service;
600
601
	/**
602
	 * The {@link Wordlift_Sample_Data_Ajax_Adapter} instance.
603
	 *
604
	 * @since  3.12.0
605
	 * @access protected
606
	 * @var \Wordlift_Sample_Data_Ajax_Adapter $sample_data_ajax_adapter The {@link Wordlift_Sample_Data_Ajax_Adapter} instance.
607
	 */
608
	protected $sample_data_ajax_adapter;
609
610
	/**
611
	 * The {@link Wordlift_Relation_Rebuild_Service} instance.
612
	 *
613
	 * @since  3.14.3
614
	 * @access private
615
	 * @var \Wordlift_Relation_Rebuild_Service $relation_rebuild_service The {@link Wordlift_Relation_Rebuild_Service} instance.
616
	 */
617
	private $relation_rebuild_service;
618
619
	/**
620
	 * The {@link Wordlift_Relation_Rebuild_Adapter} instance.
621
	 *
622
	 * @since  3.14.3
623
	 * @access private
624
	 * @var \Wordlift_Relation_Rebuild_Adapter $relation_rebuild_adapter The {@link Wordlift_Relation_Rebuild_Adapter} instance.
625
	 */
626
	private $relation_rebuild_adapter;
627
628
	/**
629
	 * The {@link Wordlift_Reference_Rebuild_Service} instance.
630
	 *
631
	 * @since  3.18.0
632
	 * @access private
633
	 * @var \Wordlift_Reference_Rebuild_Service $reference_rebuild_service The {@link Wordlift_Reference_Rebuild_Service} instance.
634
	 */
635
	private $reference_rebuild_service;
636
637
	/**
638
	 * The {@link Wordlift_Google_Analytics_Export_Service} instance.
639
	 *
640
	 * @since  3.16.0
641
	 * @access protected
642
	 * @var \Wordlift_Google_Analytics_Export_Service $google_analytics_export_service The {@link Wordlift_Google_Analytics_Export_Service} instance.
643
	 */
644
	protected $google_analytics_export_service;
645
646
	/**
647
	 * {@link Wordlift}'s singleton instance.
648
	 *
649
	 * @since  3.15.0
650
	 * @access protected
651
	 * @var \Wordlift_Entity_Type_Adapter $entity_type_adapter The {@link Wordlift_Entity_Type_Adapter} instance.
652
	 */
653
	protected $entity_type_adapter;
654
655
	/**
656
	 * The {@link Wordlift_Linked_Data_Service} instance.
657
	 *
658
	 * @since  3.15.0
659
	 * @access protected
660
	 * @var \Wordlift_Linked_Data_Service $linked_data_service The {@link Wordlift_Linked_Data_Service} instance.
661
	 */
662
	protected $linked_data_service;
663
664
	/**
665
	 * The {@link Wordlift_Storage_Factory} instance.
666
	 *
667
	 * @since  3.15.0
668
	 * @access protected
669
	 * @var \Wordlift_Storage_Factory $storage_factory The {@link Wordlift_Storage_Factory} instance.
670
	 */
671
	protected $storage_factory;
672
673
	/**
674
	 * The {@link Wordlift_Sparql_Tuple_Rendition_Factory} instance.
675
	 *
676
	 * @since  3.15.0
677
	 * @access protected
678
	 * @var \Wordlift_Sparql_Tuple_Rendition_Factory $rendition_factory The {@link Wordlift_Sparql_Tuple_Rendition_Factory} instance.
679
	 */
680
	protected $rendition_factory;
681
682
	/**
683
	 * The {@link Wordlift_Autocomplete_Adapter} instance.
684
	 *
685
	 * @since  3.15.0
686
	 * @access private
687
	 * @var \Wordlift_Autocomplete_Adapter $autocomplete_adapter The {@link Wordlift_Autocomplete_Adapter} instance.
688
	 */
689
	private $autocomplete_adapter;
690
691
	/**
692
	 * The {@link Wordlift_Relation_Service} instance.
693
	 *
694
	 * @since  3.15.0
695
	 * @access protected
696
	 * @var \Wordlift_Relation_Service $relation_service The {@link Wordlift_Relation_Service} instance.
697
	 */
698
	protected $relation_service;
699
700
	/**
701
	 * The {@link Wordlift_Cached_Post_Converter} instance.
702
	 *
703
	 * @since  3.16.0
704
	 * @access protected
705
	 * @var  \Wordlift_Cached_Post_Converter $cached_postid_to_jsonld_converter The {@link Wordlift_Cached_Post_Converter} instance.
706
	 *
707
	 */
708
	protected $cached_postid_to_jsonld_converter;
709
710
	/**
711
	 * The {@link Wordlift_Entity_Uri_Service} instance.
712
	 *
713
	 * @since  3.16.3
714
	 * @access protected
715
	 * @var \Wordlift_Entity_Uri_Service $entity_uri_service The {@link Wordlift_Entity_Uri_Service} instance.
716
	 */
717
	protected $entity_uri_service;
718
719
	/**
720
	 * The {@link Wordlift_Publisher_Service} instance.
721
	 *
722
	 * @since  3.19.0
723
	 * @access protected
724
	 * @var \Wordlift_Publisher_Service $publisher_service The {@link Wordlift_Publisher_Service} instance.
725
	 */
726
	protected $publisher_service;
727
728
	/**
729
	 * The {@link Wordlift_Context_Cards_Service} instance.
730
	 *
731
	 * @var \Wordlift_Context_Cards_Service The {@link Wordlift_Context_Cards_Service} instance.
732
	 */
733
	protected $context_cards_service;
734
735
	/**
736
	 * {@link Wordlift}'s singleton instance.
737
	 *
738
	 * @since  3.11.2
739
	 * @access private
740
	 * @var Wordlift $instance {@link Wordlift}'s singleton instance.
741
	 */
742
	private static $instance;
743
744
	//</editor-fold>
745
746
	/**
747
	 * Define the core functionality of the plugin.
748
	 *
749
	 * Set the plugin name and the plugin version that can be used throughout the plugin.
750
	 * Load the dependencies, define the locale, and set the hooks for the admin area and
751
	 * the public-facing side of the site.
752
	 *
753
	 * @since    1.0.0
754
	 */
755
	public function __construct() {
756
757
		self::$instance = $this;
758
759
		$this->plugin_name = 'wordlift';
760
		$this->version     = '3.27.5';
761
		$this->load_dependencies();
762
		$this->set_locale();
763
		$this->define_admin_hooks();
764
		$this->define_public_hooks();
765
766
		// If we're in `WP_CLI` load the related files.
767
		if ( class_exists( 'WP_CLI' ) ) {
768
			$this->load_cli_dependencies();
769
		}
770
771
	}
772
773
	/**
774
	 * Get the singleton instance.
775
	 *
776
	 * @return Wordlift The {@link Wordlift} singleton instance.
777
	 * @since 3.11.2
778
	 *
779
	 */
780
	public static function get_instance() {
781
782
		return self::$instance;
783
	}
784
785
	/**
786
	 * Load the required dependencies for this plugin.
787
	 *
788
	 * Include the following files that make up the plugin:
789
	 *
790
	 * - Wordlift_Loader. Orchestrates the hooks of the plugin.
791
	 * - Wordlift_i18n. Defines internationalization functionality.
792
	 * - Wordlift_Admin. Defines all hooks for the admin area.
793
	 * - Wordlift_Public. Defines all hooks for the public side of the site.
794
	 *
795
	 * Create an instance of the loader which will be used to register the hooks
796
	 * with WordPress.
797
	 *
798
	 * @throws Exception
799
	 * @since    1.0.0
800
	 * @access   private
801
	 */
802
	private function load_dependencies() {
803
804
		/**
805
		 * The class responsible for orchestrating the actions and filters of the
806
		 * core plugin.
807
		 */
808
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-loader.php';
809
810
		// The class responsible for plugin uninstall.
811
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-deactivator-feedback.php';
812
813
		/**
814
		 * The class responsible for defining internationalization functionality
815
		 * of the plugin.
816
		 */
817
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-i18n.php';
818
819
		/**
820
		 * WordLift's supported languages.
821
		 */
822
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-languages.php';
823
824
		/**
825
		 * WordLift's supported countries.
826
		 */
827
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-countries.php';
828
829
		/**
830
		 * Provide support functions to sanitize data.
831
		 */
832
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-sanitizer.php';
833
834
		/** Services. */
835
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-log-service.php';
836
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-http-api.php';
837
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-redirect-service.php';
838
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-configuration-service.php';
839
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-post-type-service.php';
840
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-type-service.php';
841
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-link-service.php';
842
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-linked-data-service.php';
843
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-relation-service.php';
844
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-image-service.php';
845
846
		/**
847
		 * The Query builder.
848
		 */
849
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-query-builder.php';
850
851
		/**
852
		 * The Schema service.
853
		 */
854
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-schema-service.php';
855
856
		/**
857
		 * The schema:url property service.
858
		 */
859
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-property-service.php';
860
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-schema-url-property-service.php';
861
862
		/**
863
		 * The UI service.
864
		 */
865
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-ui-service.php';
866
867
		/**
868
		 * The Thumbnail service.
869
		 */
870
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-thumbnail-service.php';
871
872
		/**
873
		 * The Entity Types Taxonomy service.
874
		 */
875
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-type-taxonomy-service.php';
876
877
		/**
878
		 * The Entity service.
879
		 */
880
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-uri-service.php';
881
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-service.php';
882
883
		// Add the entity rating service.
884
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-rating-service.php';
885
886
		/**
887
		 * The User service.
888
		 */
889
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-user-service.php';
890
891
		/**
892
		 * The Timeline service.
893
		 */
894
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-timeline-service.php';
895
896
		/**
897
		 * The Topic Taxonomy service.
898
		 */
899
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-topic-taxonomy-service.php';
900
901
		/**
902
		 * The SPARQL service.
903
		 */
904
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-sparql-service.php';
905
906
		/**
907
		 * The WordLift import service.
908
		 */
909
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-import-service.php';
910
911
		/**
912
		 * The WordLift URI service.
913
		 */
914
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-uri-service.php';
915
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-property-factory.php';
916
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-sample-data-service.php';
917
918
		/**
919
		 * The WordLift rebuild service, used to rebuild the remote dataset using the local data.
920
		 */
921
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/rebuild/class-wordlift-listable.php';
922
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/rebuild/class-wordlift-rebuild-service.php';
923
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/rebuild/class-wordlift-reference-rebuild-service.php';
924
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/rebuild/class-wordlift-relation-rebuild-service.php';
925
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/rebuild/class-wordlift-relation-rebuild-adapter.php';
926
927
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/properties/class-wordlift-property-getter-factory.php';
928
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-attachment-service.php';
929
930
		/**
931
		 * Load the converters.
932
		 */
933
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/intf-wordlift-post-converter.php';
934
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-abstract-post-to-jsonld-converter.php';
935
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-postid-to-jsonld-converter.php';
936
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-post-to-jsonld-converter.php';
937
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-post-to-jsonld-converter.php';
938
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-jsonld-website-converter.php';
939
940
		/**
941
		 * Load cache-related files.
942
		 */
943
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/cache/require.php';
944
945
		/**
946
		 * Load the content filter.
947
		 */
948
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-content-filter-service.php';
949
950
		/*
951
		 * Load the excerpt helper.
952
		 */
953
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-post-excerpt-helper.php';
954
955
		/**
956
		 * Load the JSON-LD service to publish entities using JSON-LD.s
957
		 *
958
		 * @since 3.8.0
959
		 */
960
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-jsonld-service.php';
961
962
		// The Publisher Service and the AJAX adapter.
963
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-publisher-service.php';
964
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-publisher-ajax-adapter.php';
965
966
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-post-adapter.php';
967
968
		/**
969
		 * Load the WordLift key validation service.
970
		 */
971
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-key-validation-service.php';
972
973
		// Load the `Wordlift_Category_Taxonomy_Service` class definition.
974
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-category-taxonomy-service.php';
975
976
		// Load the `Wordlift_Entity_Page_Service` class definition.
977
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-page-service.php';
978
979
		/** Linked Data. */
980
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-storage.php';
981
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-meta-storage.php';
982
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-property-storage.php';
983
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-taxonomy-storage.php';
984
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-schema-class-storage.php';
985
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-author-storage.php';
986
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-meta-uri-storage.php';
987
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-image-storage.php';
988
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-post-related-storage.php';
989
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-url-property-storage.php';
990
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/storage/class-wordlift-storage-factory.php';
991
992
		/** Linked Data Rendition. */
993
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/rendition/intf-wordlift-sparql-tuple-rendition.php';
994
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/rendition/class-wordlift-default-sparql-tuple-rendition.php';
995
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/rendition/class-wordlift-address-sparql-tuple-rendition.php';
996
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/linked-data/rendition/class-wordlift-sparql-tuple-rendition-factory.php';
997
998
		/** Services. */
999
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-google-analytics-export-service.php';
1000
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-api-service.php';
1001
1002
		/** Adapters. */
1003
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-tinymce-adapter.php';
1004
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-newrelic-adapter.php';
1005
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-sample-data-ajax-adapter.php';
1006
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-entity-type-adapter.php';
1007
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-wprocket-adapter.php';
1008
1009
		/** Async Tasks. */
1010
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/wp-async-task/class-wordlift-async-task.php';
1011
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/wp-async-task/class-wordlift-sparql-query-async-task.php';
1012
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/wp-async-task/class-wordlift-push-references-async-task.php';
1013
1014
		/** Autocomplete. */
1015
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-autocomplete-adapter.php';
1016
1017
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-remote-image-service.php';
1018
1019
		/** Analytics */
1020
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/analytics/class-wordlift-analytics-connect.php';
1021
1022
		/**
1023
		 * The class responsible for defining all actions that occur in the admin area.
1024
		 */
1025
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin.php';
1026
1027
		/**
1028
		 * The class to customize the entity list admin page.
1029
		 */
1030
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-entity-list.php';
1031
1032
		/**
1033
		 * The Entity Types Taxonomy Walker (transforms checkboxes into radios).
1034
		 */
1035
		global $wp_version;
1036
		if ( version_compare( $wp_version, '5.3', '<' ) ) {
1037
			require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-entity-types-taxonomy-walker.php';
1038
		} else {
1039
			require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-entity-types-taxonomy-walker-5-3.php';
1040
		}
1041
1042
		/**
1043
		 * The Notice service.
1044
		 */
1045
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-notice-service.php';
1046
1047
		/**
1048
		 * The PrimaShop adapter.
1049
		 */
1050
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-primashop-adapter.php';
1051
1052
		/**
1053
		 * The WordLift Dashboard service.
1054
		 */
1055
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-dashboard.php';
1056
1057
		/**
1058
		 * The admin 'Install wizard' page.
1059
		 */
1060
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-setup.php';
1061
1062
		/**
1063
		 * The WordLift entity type list admin page controller.
1064
		 */
1065
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-entity-taxonomy-list-page.php';
1066
1067
		/**
1068
		 * The WordLift entity type settings admin page controller.
1069
		 */
1070
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-entity-type-settings.php';
1071
1072
		/**
1073
		 * The admin 'Download Your Data' page.
1074
		 */
1075
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-download-your-data-page.php';
1076
1077
		/**
1078
		 * The admin 'WordLift Settings' page.
1079
		 */
1080
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/intf-wordlift-admin-element.php';
1081
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-input-element.php';
1082
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-input-radio-element.php';
1083
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-select-element.php';
1084
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-select2-element.php';
1085
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-language-select-element.php';
1086
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-country-select-element.php';
1087
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-tabs-element.php';
1088
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-author-element.php';
1089
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/elements/class-wordlift-admin-publisher-element.php';
1090
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-page.php';
1091
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-settings-page.php';
1092
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-settings-analytics-page.php';
1093
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-settings-page-action-link.php';
1094
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-settings-analytics-page-action-link.php';
1095
1096
		/** Admin Pages */
1097
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-user-profile-page.php';
1098
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-status-page.php';
1099
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-search-rankings-page.php';
1100
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-entity-type-admin-service.php';
1101
1102
		/**
1103
		 * The class responsible for defining all actions that occur in the public-facing
1104
		 * side of the site.
1105
		 */
1106
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-public.php';
1107
1108
		/**
1109
		 * The shortcode abstract class.
1110
		 */
1111
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-shortcode.php';
1112
1113
		/**
1114
		 * The Timeline shortcode.
1115
		 */
1116
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-timeline-shortcode.php';
1117
1118
		/**
1119
		 * The Navigator shortcode.
1120
		 */
1121
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-navigator-shortcode.php';
1122
1123
		/**
1124
		 * The Products Navigator shortcode.
1125
		 */
1126
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-products-navigator-shortcode.php';
1127
1128
		/**
1129
		 * The chord shortcode.
1130
		 */
1131
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-chord-shortcode.php';
1132
1133
		/**
1134
		 * The geomap shortcode.
1135
		 */
1136
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-geomap-shortcode.php';
1137
1138
		/**
1139
		 * The entity cloud shortcode.
1140
		 */
1141
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-related-entities-cloud-shortcode.php';
1142
1143
		/**
1144
		 * The entity glossary shortcode.
1145
		 */
1146
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-alphabet-service.php';
1147
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-vocabulary-shortcode.php';
1148
1149
		/**
1150
		 * Faceted Search shortcode.
1151
		 */
1152
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-faceted-search-shortcode.php';
1153
1154
		/**
1155
		 * The ShareThis service.
1156
		 */
1157
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-sharethis-service.php';
1158
1159
		/**
1160
		 * The SEO service.
1161
		 */
1162
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-seo-service.php';
1163
1164
		/**
1165
		 * The AMP service.
1166
		 */
1167
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-amp-service.php';
1168
1169
		/** Widgets */
1170
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-widget.php';
1171
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-related-entities-cloud-widget.php';
1172
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-context-cards.php';
1173
1174
		/*
1175
		 * Schema.org Services.
1176
		 *
1177
		 * @see https://github.com/insideout10/wordlift-plugin/issues/835
1178
		 */
1179
		if ( WL_ALL_ENTITY_TYPES ) {
1180
			require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/schemaorg/class-wordlift-schemaorg-sync-service.php';
1181
			require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/schemaorg/class-wordlift-schemaorg-property-service.php';
1182
			require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/schemaorg/class-wordlift-schemaorg-class-service.php';
1183
			new Wordlift_Schemaorg_Sync_Service();
1184
			$schemaorg_property_service = new Wordlift_Schemaorg_Property_Service();
1185
			new Wordlift_Schemaorg_Class_Service();
1186
		} else {
1187
			$schemaorg_property_service = null;
1188
		}
1189
1190
		$this->loader = new Wordlift_Loader();
1191
1192
		// Instantiate a global logger.
1193
		global $wl_logger;
1194
		$wl_logger = Wordlift_Log_Service::get_logger( 'WordLift' );
1195
1196
		// Load the `wl-api` end-point.
1197
		new Wordlift_Http_Api();
1198
1199
		// Load the Install Service.
1200
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'install/class-wordlift-install-service.php';
1201
		$this->install_service = new Wordlift_Install_Service();
1202
1203
		/** Services. */
1204
		// Create the configuration service.
1205
		$this->configuration_service = new Wordlift_Configuration_Service();
1206
		$api_service                 = new Wordlift_Api_Service( $this->configuration_service );
1207
1208
		// Create an entity type service instance. It'll be later bound to the init action.
1209
		$this->entity_post_type_service = new Wordlift_Entity_Post_Type_Service( Wordlift_Entity_Service::TYPE_NAME, $this->configuration_service->get_entity_base_path() );
1210
1211
		// Create an entity link service instance. It'll be later bound to the post_type_link and pre_get_posts actions.
1212
		$this->entity_link_service = new Wordlift_Entity_Link_Service( $this->entity_post_type_service, $this->configuration_service->get_entity_base_path() );
1213
1214
		// Create an instance of the UI service.
1215
		$this->ui_service = new Wordlift_UI_Service();
1216
1217
		// Create an instance of the Thumbnail service. Later it'll be hooked to post meta events.
1218
		$this->thumbnail_service = new Wordlift_Thumbnail_Service();
1219
1220
		$this->sparql_service        = new Wordlift_Sparql_Service();
1221
		$schema_url_property_service = new Wordlift_Schema_Url_Property_Service( $this->sparql_service );
1222
		$this->notice_service        = new Wordlift_Notice_Service();
1223
		$this->relation_service      = new Wordlift_Relation_Service();
1224
1225
		$entity_uri_cache_service = new Wordlift_File_Cache_Service( WL_TEMP_DIR . 'entity_uri/' );
1226
		$this->entity_uri_service = new Wordlift_Cached_Entity_Uri_Service( $this->configuration_service, $entity_uri_cache_service );
1227
		$this->entity_service     = new Wordlift_Entity_Service( $this->ui_service, $this->relation_service, $this->entity_uri_service );
1228
		$this->user_service       = new Wordlift_User_Service( $this->sparql_service, $this->entity_service );
1229
1230
		// Instantiate the JSON-LD service.
1231
		$property_getter = Wordlift_Property_Getter_Factory::create( $this->entity_service );
1232
1233
		/** Linked Data. */
1234
		$this->storage_factory   = new Wordlift_Storage_Factory( $this->entity_service, $this->user_service, $property_getter );
1235
		$this->rendition_factory = new Wordlift_Sparql_Tuple_Rendition_Factory( $this->entity_service );
1236
1237
		$this->schema_service = new Wordlift_Schema_Service( $this->storage_factory, $this->rendition_factory, $this->configuration_service );
1238
1239
		// Create a new instance of the Redirect service.
1240
		$this->redirect_service    = new Wordlift_Redirect_Service( $this->entity_uri_service );
1241
		$this->entity_type_service = new Wordlift_Entity_Type_Service( $this->schema_service );
1242
		$this->linked_data_service = new Wordlift_Linked_Data_Service( $this->entity_service, $this->entity_type_service, $this->schema_service, $this->sparql_service );
1243
1244
		// Create a new instance of the Timeline service and Timeline shortcode.
1245
		$this->timeline_service = new Wordlift_Timeline_Service( $this->entity_service, $this->entity_type_service );
1246
1247
		$this->entity_types_taxonomy_walker = new Wordlift_Entity_Types_Taxonomy_Walker();
1248
1249
		$this->topic_taxonomy_service        = new Wordlift_Topic_Taxonomy_Service();
1250
		$this->entity_types_taxonomy_service = new Wordlift_Entity_Type_Taxonomy_Service();
1251
1252
		// Create an instance of the ShareThis service, later we hook it to the_content and the_excerpt filters.
1253
		$this->sharethis_service = new Wordlift_ShareThis_Service();
1254
1255
		// Create an instance of the PrimaShop adapter.
1256
		$this->primashop_adapter = new Wordlift_PrimaShop_Adapter();
1257
1258
		// Create an import service instance to hook later to WP's import function.
1259
		$this->import_service = new Wordlift_Import_Service( $this->entity_post_type_service, $this->entity_service, $this->schema_service, $this->sparql_service, $this->configuration_service->get_dataset_uri() );
1260
1261
		$uri_service = new Wordlift_Uri_Service( $GLOBALS['wpdb'] );
1262
1263
		// Create the entity rating service.
1264
		$this->rating_service = new Wordlift_Rating_Service( $this->entity_service, $this->entity_type_service, $this->notice_service );
1265
1266
		// Create entity list customization (wp-admin/edit.php).
1267
		$this->entity_list_service = new Wordlift_Entity_List_Service( $this->rating_service );
1268
1269
		// Create a new instance of the Redirect service.
1270
		$this->dashboard_service = new Wordlift_Dashboard_Service( $this->rating_service, $this->entity_service );
1271
1272
		// Create an instance of the Publisher Service and the AJAX Adapter.
1273
		$this->publisher_service = new Wordlift_Publisher_Service( $this->configuration_service );
1274
		$this->property_factory  = new Wordlift_Property_Factory( $schema_url_property_service );
1275
		$this->property_factory->register( Wordlift_Schema_Url_Property_Service::META_KEY, $schema_url_property_service );
1276
1277
		$attachment_service = new Wordlift_Attachment_Service();
1278
1279
		// Instantiate the JSON-LD service.
1280
		$property_getter                       = Wordlift_Property_Getter_Factory::create( $this->entity_service );
1281
		$this->post_to_jsonld_converter        = new Wordlift_Post_To_Jsonld_Converter( $this->entity_type_service, $this->entity_service, $this->user_service, $attachment_service, $this->configuration_service );
1282
		$this->entity_post_to_jsonld_converter = new Wordlift_Entity_Post_To_Jsonld_Converter( $this->entity_type_service, $this->entity_service, $this->user_service, $attachment_service, $property_getter, $schemaorg_property_service, $this->post_to_jsonld_converter );
0 ignored issues
show
Bug introduced by
It seems like $schemaorg_property_service defined by null on line 1187 can be null; however, Wordlift_Entity_Post_To_...onverter::__construct() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
1283
		$this->postid_to_jsonld_converter      = new Wordlift_Postid_To_Jsonld_Converter( $this->entity_service, $this->entity_post_to_jsonld_converter, $this->post_to_jsonld_converter );
1284
		$this->jsonld_website_converter        = new Wordlift_Website_Jsonld_Converter( $this->entity_type_service, $this->entity_service, $this->user_service, $attachment_service, $this->configuration_service );
1285
1286
		$jsonld_cache                            = new Ttl_Cache( 'jsonld', 86400 );
1287
		$this->cached_postid_to_jsonld_converter = new Wordlift_Cached_Post_Converter( $this->postid_to_jsonld_converter, $this->configuration_service, $jsonld_cache );
1288
		$this->jsonld_service                    = new Wordlift_Jsonld_Service( $this->entity_service, $this->cached_postid_to_jsonld_converter, $this->jsonld_website_converter );
1289
1290
		/*
1291
		 * Load the `Wordlift_Term_JsonLd_Adapter`.
1292
		 *
1293
		 * @see https://github.com/insideout10/wordlift-plugin/issues/892
1294
		 *
1295
		 * @since 3.20.0
1296
		 */
1297
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-wordlift-term-jsonld-adapter.php';
1298
		$term_jsonld_adapter = new Wordlift_Term_JsonLd_Adapter( $this->entity_uri_service, $this->jsonld_service );
1299
		$jsonld_service      = new Jsonld_Service( $this->jsonld_service, $term_jsonld_adapter );
1300
		new Jsonld_Endpoint( $jsonld_service, $this->entity_uri_service );
1301
1302
		// Prints the JSON-LD in the head.
1303
		new Jsonld_Adapter( $this->jsonld_service );
1304
1305
		new Jsonld_By_Id_Endpoint( $this->jsonld_service, $this->entity_uri_service );
1306
1307
		$this->key_validation_service = new Wordlift_Key_Validation_Service( $this->configuration_service );
1308
		$this->content_filter_service = new Wordlift_Content_Filter_Service( $this->entity_service, $this->configuration_service, $this->entity_uri_service );
1309
		// Creating Faq Content filter service.
1310
		$this->faq_content_filter_service = new Faq_Content_Filter();
1311
		$this->relation_rebuild_service   = new Wordlift_Relation_Rebuild_Service( $this->content_filter_service, $this->entity_service );
1312
		$this->sample_data_service        = new Wordlift_Sample_Data_Service( $this->entity_type_service, $this->configuration_service, $this->user_service );
1313
		$this->sample_data_ajax_adapter   = new Wordlift_Sample_Data_Ajax_Adapter( $this->sample_data_service );
1314
		$this->reference_rebuild_service  = new Wordlift_Reference_Rebuild_Service( $this->linked_data_service, $this->entity_service, $this->relation_service );
1315
		/**
1316
		 * Filter: wl_feature__enable__blocks.
1317
		 *
1318
		 * @param bool whether the blocks needed to be registered, defaults to true.
1319
		 *
1320
		 * @return bool
1321
		 * @since 3.27.6
1322
		 */
1323
		if ( apply_filters( 'wl_feature__enable__blocks', true ) ) {
1324
			// Initialize the short-codes.
1325
			new Wordlift_Navigator_Shortcode();
1326
			new Wordlift_Chord_Shortcode();
1327
			new Wordlift_Geomap_Shortcode();
1328
			new Wordlift_Timeline_Shortcode();
1329
			new Wordlift_Related_Entities_Cloud_Shortcode( $this->relation_service );
1330
			new Wordlift_Vocabulary_Shortcode( $this->configuration_service );
1331
			new Wordlift_Faceted_Search_Shortcode();
1332
		}
1333
		new Wordlift_Products_Navigator_Shortcode();
1334
		// Initialize the Context Cards Service
1335
		$this->context_cards_service = new Wordlift_Context_Cards_Service();
1336
1337
		// Initialize the SEO service.
1338
		new Wordlift_Seo_Service();
1339
1340
		// Initialize the AMP service.
1341
		new Wordlift_AMP_Service( $this->jsonld_service );
1342
1343
		/** Services. */
1344
		$this->google_analytics_export_service = new Wordlift_Google_Analytics_Export_Service();
1345
		new Wordlift_Image_Service();
1346
1347
		/** Adapters. */
1348
		$this->entity_type_adapter    = new Wordlift_Entity_Type_Adapter( $this->entity_type_service );
1349
		$this->publisher_ajax_adapter = new Wordlift_Publisher_Ajax_Adapter( $this->publisher_service );
1350
		$this->tinymce_adapter        = new Wordlift_Tinymce_Adapter( $this );
1351
		//$this->faq_tinymce_adapter      = new Faq_Tinymce_Adapter();
1352
		$this->relation_rebuild_adapter = new Wordlift_Relation_Rebuild_Adapter( $this->relation_rebuild_service );
1353
1354
		/*
1355
		 * Exclude our public js from WP-Rocket.
1356
		 *
1357
		 * @since 3.19.4
1358
		 *
1359
		 * @see https://github.com/insideout10/wordlift-plugin/issues/842.
1360
		 */
1361
		new Wordlift_WpRocket_Adapter();
1362
1363
		// Create a Rebuild Service instance, which we'll later bound to an ajax call.
1364
		$this->rebuild_service = new Wordlift_Rebuild_Service(
1365
			$this->sparql_service,
1366
			$uri_service
1367
		);
1368
1369
		/** Async Tasks. */
1370
		new Wordlift_Sparql_Query_Async_Task();
1371
		new Wordlift_Push_References_Async_Task();
1372
1373
		/** WordPress Admin UI. */
1374
1375
		// UI elements.
1376
		$this->input_element           = new Wordlift_Admin_Input_Element();
1377
		$this->radio_input_element     = new Wordlift_Admin_Radio_Input_Element();
1378
		$this->select2_element         = new Wordlift_Admin_Select2_Element();
1379
		$this->language_select_element = new Wordlift_Admin_Language_Select_Element();
1380
		$this->country_select_element  = new Wordlift_Admin_Country_Select_Element();
1381
		$tabs_element                  = new Wordlift_Admin_Tabs_Element();
1382
		$this->publisher_element       = new Wordlift_Admin_Publisher_Element( $this->configuration_service, $this->publisher_service, $tabs_element, $this->select2_element );
1383
		$this->author_element          = new Wordlift_Admin_Author_Element( $this->publisher_service, $this->select2_element );
1384
1385
		$this->settings_page             = new Wordlift_Admin_Settings_Page( $this->configuration_service, $this->entity_service, $this->input_element, $this->language_select_element, $this->country_select_element, $this->publisher_element, $this->radio_input_element );
1386
		$this->settings_page_action_link = new Wordlift_Admin_Settings_Page_Action_Link( $this->settings_page );
1387
1388
		$this->analytics_settings_page             = new Wordlift_Admin_Settings_Analytics_Page( $this->configuration_service, $this->input_element, $this->radio_input_element );
0 ignored issues
show
Bug introduced by
The property analytics_settings_page does not seem to exist. Did you mean settings_page?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
1389
		$this->analytics_settings_page_action_link = new Wordlift_Admin_Settings_Analytics_Page_Action_Link( $this->analytics_settings_page );
0 ignored issues
show
Bug introduced by
The property analytics_settings_page does not seem to exist. Did you mean settings_page?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
Documentation Bug introduced by
It seems like new \Wordlift_Admin_Sett...nalytics_settings_page) of type object<Wordlift_Admin_Se...ytics_Page_Action_Link> is incompatible with the declared type object<Wordlift_Admin_Settings_Page_Action_Link> of property $analytics_settings_page_action_link.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
1390
		$this->analytics_connect                   = new Wordlift_Analytics_Connect();
1391
1392
		// Pages.
1393
		/*
1394
		 * Call the `wl_can_see_classification_box` filter to determine whether we can display the classification box.
1395
		 *
1396
		 * @since 3.20.3
1397
		 *
1398
		 * @see https://github.com/insideout10/wordlift-plugin/issues/914
1399
		 */
1400
		if ( apply_filters( 'wl_can_see_classification_box', true ) ) {
1401
			require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-wordlift-admin-post-edit-page.php';
1402
			new Wordlift_Admin_Post_Edit_Page( $this );
1403
		}
1404
		new Wordlift_Entity_Type_Admin_Service();
1405
1406
		// create an instance of the entity type list admin page controller.
1407
		$this->entity_type_admin_page = new Wordlift_Admin_Entity_Taxonomy_List_Page();
1408
1409
		// create an instance of the entity type setting admin page controller.
1410
		$this->entity_type_settings_admin_page = new Wordlift_Admin_Entity_Type_Settings();
1411
1412
		/** Widgets */
1413
		$this->related_entities_cloud_widget = new Wordlift_Related_Entities_Cloud_Widget();
1414
1415
		/* WordPress Admin. */
1416
		$this->download_your_data_page = new Wordlift_Admin_Download_Your_Data_Page( $this->configuration_service );
1417
		$this->status_page             = new Wordlift_Admin_Status_Page( $this->entity_service, $this->sparql_service );
1418
1419
		// Create an instance of the install wizard.
1420
		$this->admin_setup = new Wordlift_Admin_Setup( $this->configuration_service, $this->key_validation_service, $this->entity_service, $this->language_select_element, $this->country_select_element );
1421
1422
		$this->category_taxonomy_service = new Wordlift_Category_Taxonomy_Service( $this->entity_post_type_service );
1423
1424
		// User Profile.
1425
		new Wordlift_Admin_User_Profile_Page( $this->author_element, $this->user_service );
1426
1427
		$this->entity_page_service = new Wordlift_Entity_Page_Service();
1428
1429
		// Load the debug service if WP is in debug mode.
1430
		if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
1431
			require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-debug-service.php';
1432
			new Wordlift_Debug_Service( $this->entity_service, $uri_service );
1433
		}
1434
1435
		// Remote Image Service.
1436
		new Wordlift_Remote_Image_Service();
1437
1438
		/*
1439
		 * Provides mappings between post types and entity types.
1440
		 *
1441
		 * @since 3.20.0
1442
		 *
1443
		 * @see https://github.com/insideout10/wordlift-plugin/issues/852.
1444
		 */
1445
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-wordlift-batch-action.php';
1446
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/mapping/class-wordlift-mapping-service.php';
1447
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/mapping/class-wordlift-mapping-ajax-adapter.php';
1448
1449
		// Create an instance of the Mapping Service and assign it to the Ajax Adapter.
1450
		new Wordlift_Mapping_Ajax_Adapter( new Wordlift_Mapping_Service( Wordlift_Entity_Type_Service::get_instance() ) );
1451
1452
		/*
1453
		 * Batch Operations. They're similar to Batch Actions but do not require working on post types.
1454
		 *
1455
		 * Eventually Batch Actions will become Batch Operations.
1456
		 *
1457
		 * @since 3.20.0
1458
		 */
1459
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/batch/intf-wordlift-batch-operation.php';
1460
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/batch/class-wordlift-batch-operation-ajax-adapter.php';
1461
1462
		/*
1463
		 * Add the Search Keywords taxonomy to manage the Search Keywords on WLS.
1464
		 *
1465
		 * @link https://github.com/insideout10/wordlift-plugin/issues/761
1466
		 *
1467
		 * @since 3.20.0
1468
		 */
1469
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/search-keywords/class-wordlift-search-keyword-taxonomy.php';
1470
		new Wordlift_Search_Keyword_Taxonomy( $api_service );
1471
1472
		/*
1473
		 * Load the Mappings JSON-LD post processing.
1474
		 *
1475
		 * @since 3.25.0
1476
		 */
1477
1478
		$mappings_dbo           = new Mappings_DBO();
1479
		$default_rule_validator = new Taxonomy_Rule_Validator();
1480
		new Post_Type_Rule_Validator();
1481
		// Taxonomy term rule validator for validating rules for term pages.
1482
		new Taxonomy_Term_Rule_Validator();
1483
		$rule_validators_registry = new Rule_Validators_Registry( $default_rule_validator );
1484
		$rule_groups_validator    = new Rule_Groups_Validator( $rule_validators_registry );
1485
		$mappings_validator       = new Mappings_Validator( $mappings_dbo, $rule_groups_validator );
1486
1487
		new Url_To_Entity_Transform_Function( $this->entity_uri_service );
1488
		new Taxonomy_To_Terms_Transform_Function();
1489
		new Post_Id_To_Entity_Transform_Function();
1490
		$mappings_transform_functions_registry = new Mappings_Transform_Functions_Registry();
1491
1492
		/**
1493
		 * @since 3.27.1
1494
		 * Intiailize the acf group data formatter.
1495
		 */
1496
		new Acf_Group_Formatter();
1497
		new Jsonld_Converter( $mappings_validator, $mappings_transform_functions_registry );
1498
1499
		/**
1500
		 * @since 3.26.0
1501
		 * Initialize the Faq JSON LD converter here - disabled.
1502
		 */
1503
		// new Faq_To_Jsonld_Converter();
1504
		/*
1505
		 * Use the Templates Ajax Endpoint to load HTML templates for the legacy Angular app via admin-ajax.php
1506
		 * end-point.
1507
		 *
1508
		 * @see https://github.com/insideout10/wordlift-plugin/issues/834
1509
		 * @since 3.24.4
1510
		 */
1511
		new Templates_Ajax_Endpoint();
1512
		// Call this static method to register FAQ routes to rest api - disabled
1513
		//Faq_Rest_Controller::register_routes();
1514
1515
		/*
1516
		 * Create a singleton for the Analysis_Response_Ops_Factory.
1517
		 */
1518
		$entity_helper = new Entity_Helper( $this->entity_uri_service, $this->entity_service );
1519
		new Analysis_Response_Ops_Factory(
1520
			$this->entity_uri_service,
1521
			$this->entity_service,
1522
			$this->entity_type_service,
1523
			$this->storage_factory->post_images(),
1524
			$entity_helper
1525
		);
1526
1527
		/** WL Autocomplete. */
1528
		$autocomplete_service       = new All_Autocomplete_Service( array(
1529
			new Local_Autocomplete_Service(),
1530
			new Linked_Data_Autocomplete_Service( $this->configuration_service, $entity_helper, $this->entity_uri_service, $this->entity_service ),
1531
		) );
1532
		$this->autocomplete_adapter = new Wordlift_Autocomplete_Adapter( $autocomplete_service );
1533
1534
		/**
1535
		 * @since 3.27.2
1536
		 * Integrate the recipe maker jsonld & set recipe
1537
		 * as default entity type to the wprm_recipe CPT.
1538
		 */
1539
		new Recipe_Maker_Post_Type_Hook();
1540
		$recipe_maker_validation_service = new Recipe_Maker_Validation_Service();
1541
		new Recipe_Maker_Jsonld_Hook( $attachment_service, $recipe_maker_validation_service );
1542
		new Recipe_Maker_After_Get_Jsonld_Hook( $recipe_maker_validation_service );
1543
		new Recipe_Maker_Warning( $recipe_maker_validation_service );
1544
		new Yoast_Jsonld( $recipe_maker_validation_service );
1545
1546
		/**
1547
		 * @since 3.27.4
1548
		 * Add the faq duplicate markup hook.
1549
		 */
1550
		new Faq_Duplicate_Markup_Remover();
1551
	}
1552
1553
	/**
1554
	 * Define the locale for this plugin for internationalization.
1555
	 *
1556
	 * Uses the Wordlift_i18n class in order to set the domain and to register the hook
1557
	 * with WordPress.
1558
	 *
1559
	 * @since    1.0.0
1560
	 * @access   private
1561
	 */
1562
	private function set_locale() {
1563
1564
		$plugin_i18n = new Wordlift_i18n();
1565
		$plugin_i18n->set_domain( $this->get_plugin_name() );
1566
1567
		$this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );
1568
1569
	}
1570
1571
	/**
1572
	 * Register all of the hooks related to the admin area functionality
1573
	 * of the plugin.
1574
	 *
1575
	 * @since    1.0.0
1576
	 * @access   private
1577
	 */
1578
	private function define_admin_hooks() {
1579
1580
		$plugin_admin = new Wordlift_Admin(
1581
			$this->get_plugin_name(),
1582
			$this->get_version(),
1583
			$this->configuration_service,
1584
			$this->notice_service,
1585
			$this->user_service
1586
		);
1587
1588
		$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
1589
		$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts', 11 );
1590
1591
		// Hook the init action to taxonomy services.
1592
		$this->loader->add_action( 'init', $this->topic_taxonomy_service, 'init', 0 );
1593
		$this->loader->add_action( 'init', $this->entity_types_taxonomy_service, 'init', 0 );
1594
1595
		// Hook the deleted_post_meta action to the Thumbnail service.
1596
		$this->loader->add_action( 'deleted_post_meta', $this->thumbnail_service, 'deleted_post_meta', 10, 4 );
1597
1598
		// Hook the added_post_meta action to the Thumbnail service.
1599
		$this->loader->add_action( 'added_post_meta', $this->thumbnail_service, 'added_or_updated_post_meta', 10, 4 );
1600
1601
		// Hook the updated_post_meta action to the Thumbnail service.
1602
		$this->loader->add_action( 'updated_post_meta', $this->thumbnail_service, 'added_or_updated_post_meta', 10, 4 );
1603
1604
		// Hook the AJAX wl_timeline action to the Timeline service.
1605
		$this->loader->add_action( 'wp_ajax_wl_timeline', $this->timeline_service, 'ajax_timeline' );
1606
1607
		// Register custom allowed redirect hosts.
1608
		$this->loader->add_filter( 'allowed_redirect_hosts', $this->redirect_service, 'allowed_redirect_hosts' );
1609
		// Hook the AJAX wordlift_redirect action to the Redirect service.
1610
		$this->loader->add_action( 'wp_ajax_wordlift_redirect', $this->redirect_service, 'ajax_redirect' );
1611
1612
		/*
1613
		 * The old dashboard is replaced with dashboard v2.
1614
		 *
1615
		 * The old dashboard service is still loaded because its functions are used.
1616
		 *
1617
		 * @see https://github.com/insideout10/wordlift-plugin/issues/879
1618
		 *
1619
		 * @since 3.20.0
1620
		 */
1621
		// Hook the AJAX wordlift_redirect action to the Redirect service.
1622
		// $this->loader->add_action( 'wp_ajax_wordlift_get_stats', $this->dashboard_service, 'ajax_get_stats' );
1623
		// Hook the AJAX wordlift_redirect action to the Redirect service.
1624
		// $this->loader->add_action( 'wp_dashboard_setup', $this->dashboard_service, 'add_dashboard_widgets' );
1625
1626
		// Hook save_post to the entity service to update custom fields (such as alternate labels).
1627
		// We have a priority of 9 because we want to be executed before data is sent to Redlink.
1628
		$this->loader->add_action( 'save_post', $this->entity_service, 'save_post', 9, 3 );
1629
		$this->loader->add_action( 'save_post', $this->rating_service, 'set_rating_for', 20, 1 );
1630
1631
		$this->loader->add_action( 'edit_form_before_permalink', $this->entity_service, 'edit_form_before_permalink', 10, 1 );
1632
		$this->loader->add_action( 'in_admin_header', $this->rating_service, 'in_admin_header' );
1633
1634
		// Entity listing customization (wp-admin/edit.php)
1635
		// Add custom columns.
1636
		$this->loader->add_filter( 'manage_entity_posts_columns', $this->entity_list_service, 'register_custom_columns' );
1637
		// no explicit entity as it prevents handling of other post types.
1638
		$this->loader->add_filter( 'manage_posts_custom_column', $this->entity_list_service, 'render_custom_columns', 10, 2 );
1639
		// Add 4W selection.
1640
		$this->loader->add_action( 'restrict_manage_posts', $this->entity_list_service, 'restrict_manage_posts_classification_scope' );
1641
		$this->loader->add_filter( 'posts_clauses', $this->entity_list_service, 'posts_clauses_classification_scope' );
1642
		$this->loader->add_action( 'pre_get_posts', $this->entity_list_service, 'pre_get_posts' );
1643
		$this->loader->add_action( 'load-edit.php', $this->entity_list_service, 'load_edit' );
1644
1645
		/*
1646
		 * If `All Entity Types` is disable, use the radio button Walker.
1647
		 *
1648
		 * @see https://github.com/insideout10/wordlift-plugin/issues/835
1649
		 */
1650
		if ( ! WL_ALL_ENTITY_TYPES ) {
1651
			$this->loader->add_filter( 'wp_terms_checklist_args', $this->entity_types_taxonomy_walker, 'terms_checklist_args' );
1652
		}
1653
1654
		// Hook the PrimaShop adapter to <em>prima_metabox_entity_header_args</em> in order to add header support for
1655
		// entities.
1656
		$this->loader->add_filter( 'prima_metabox_entity_header_args', $this->primashop_adapter, 'prima_metabox_entity_header_args', 10, 2 );
1657
1658
		// Filter imported post meta.
1659
		$this->loader->add_filter( 'wp_import_post_meta', $this->import_service, 'wp_import_post_meta', 10, 3 );
1660
1661
		// Notify the import service when an import starts and ends.
1662
		$this->loader->add_action( 'import_start', $this->import_service, 'import_start', 10, 0 );
1663
		$this->loader->add_action( 'import_end', $this->import_service, 'import_end', 10, 0 );
1664
1665
		// Hook the AJAX wl_rebuild action to the Rebuild Service.
1666
		$this->loader->add_action( 'wp_ajax_wl_rebuild', $this->rebuild_service, 'rebuild' );
1667
		$this->loader->add_action( 'wp_ajax_wl_rebuild_references', $this->reference_rebuild_service, 'rebuild' );
1668
1669
		/**
1670
		 * Filter: wl_feature__enable__screens.
1671
		 *
1672
		 * @param bool whether the screens needed to be registered, defaults to true.
1673
		 *
1674
		 * @return bool
1675
		 * @since 3.27.6
1676
		 */
1677
		if ( apply_filters( 'wl_feature__enable__screens', true ) ) {
1678
			// Hook the menu to the Download Your Data page.
1679
			$this->loader->add_action( 'admin_menu', $this->download_your_data_page, 'admin_menu', 100, 0 );
1680
			$this->loader->add_action( 'admin_menu', $this->status_page, 'admin_menu', 100, 0 );
1681
			$this->loader->add_action( 'admin_menu', $this->entity_type_settings_admin_page, 'admin_menu', 100, 0 );
1682
		}
1683
		// Hook the admin-ajax.php?action=wl_download_your_data&out=xyz links.
1684
		$this->loader->add_action( 'wp_ajax_wl_download_your_data', $this->download_your_data_page, 'download_your_data', 10 );
1685
1686
		// Hook the AJAX wl_jsonld action to the JSON-LD service.
1687
		$this->loader->add_action( 'wp_ajax_wl_jsonld', $this->jsonld_service, 'get' );
1688
		$this->loader->add_action( 'admin_post_wl_jsonld', $this->jsonld_service, 'get' );
1689
		$this->loader->add_action( 'admin_post_nopriv_wl_jsonld', $this->jsonld_service, 'get' );
1690
1691
		// Hook the AJAX wl_validate_key action to the Key Validation service.
1692
		$this->loader->add_action( 'wp_ajax_wl_validate_key', $this->key_validation_service, 'validate_key' );
1693
1694
		// Hook the AJAX wl_update_country_options action to the countries.
1695
		$this->loader->add_action( 'wp_ajax_wl_update_country_options', $this->country_select_element, 'get_options_html' );
1696
1697
		// Hook the `admin_init` function to the Admin Setup.
1698
		$this->loader->add_action( 'admin_init', $this->admin_setup, 'admin_init' );
1699
1700
		// Hook the admin_init to the settings page.
1701
		$this->loader->add_action( 'admin_init', $this->settings_page, 'admin_init' );
1702
		$this->loader->add_action( 'admin_init', $this->analytics_settings_page, 'admin_init' );
0 ignored issues
show
Bug introduced by
The property analytics_settings_page does not seem to exist. Did you mean settings_page?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
1703
1704
		$this->loader->add_filter( 'admin_post_thumbnail_html', $this->publisher_service, 'add_featured_image_instruction' );
1705
1706
		// Hook the menu creation on the general wordlift menu creation.
1707
		/**
1708
		 * Filter: wl_feature__enable__screens.
1709
		 *
1710
		 * @param bool whether the screens needed to be registered, defaults to true.
1711
		 *
1712
		 * @return bool
1713
		 * @since 3.27.6
1714
		 */
1715
		if ( apply_filters( 'wl_feature__enable__screens', true ) ) {
1716
			$this->loader->add_action( 'wl_admin_menu', $this->settings_page, 'admin_menu', 10, 2 );
1717
		}
1718
		/*
1719
		 * Display the `Wordlift_Admin_Search_Rankings_Page` page.
1720
		 *
1721
		 * @link https://github.com/insideout10/wordlift-plugin/issues/761
1722
		 *
1723
		 * @since 3.20.0
1724
		 */
1725
		if ( in_array( $this->configuration_service->get_package_type(), array( 'editorial', 'business' ) ) ) {
1726
			/**
1727
			 * Filter: wl_feature__enable__screens.
1728
			 *
1729
			 * @param bool whether the screens needed to be registered, defaults to true.
1730
			 *
1731
			 * @return bool
1732
			 * @since 3.27.6
1733
			 */
1734
			if ( apply_filters( 'wl_feature__enable__screens', true ) ) {
1735
				$admin_search_rankings_page = new Wordlift_Admin_Search_Rankings_Page();
1736
				$this->loader->add_action( 'wl_admin_menu', $admin_search_rankings_page, 'admin_menu' );
1737
			}
1738
		}
1739
1740
		// Hook key update.
1741
		$this->loader->add_action( 'pre_update_option_wl_general_settings', $this->configuration_service, 'maybe_update_dataset_uri', 10, 2 );
1742
		$this->loader->add_action( 'update_option_wl_general_settings', $this->configuration_service, 'update_key', 10, 2 );
1743
1744
		// Add additional action links to the WordLift plugin in the plugins page.
1745
		$this->loader->add_filter( 'plugin_action_links_wordlift/wordlift.php', $this->settings_page_action_link, 'action_links', 10, 1 );
1746
1747
		/*
1748
		 * Remove the Analytics Settings link from the plugin page.
1749
		 *
1750
		 * @see https://github.com/insideout10/wordlift-plugin/issues/932
1751
		 * @since 3.21.1
1752
		 */
1753
		// $this->loader->add_filter( 'plugin_action_links_wordlift/wordlift.php', $this->analytics_settings_page_action_link, 'action_links', 10, 1 );
1754
1755
		// Hook the AJAX `wl_publisher` action name.
1756
		$this->loader->add_action( 'wp_ajax_wl_publisher', $this->publisher_ajax_adapter, 'publisher' );
1757
1758
		// Hook row actions for the entity type list admin.
1759
		$this->loader->add_filter( 'wl_entity_type_row_actions', $this->entity_type_admin_page, 'wl_entity_type_row_actions', 10, 2 );
1760
1761
		/** Ajax actions. */
1762
		$this->loader->add_action( 'wp_ajax_wl_google_analytics_export', $this->google_analytics_export_service, 'export' );
1763
1764
		// Hook capabilities manipulation to allow access to entity type admin
1765
		// page  on WordPress versions before 4.7.
1766
		global $wp_version;
1767
		if ( version_compare( $wp_version, '4.7', '<' ) ) {
1768
			$this->loader->add_filter( 'map_meta_cap', $this->entity_type_admin_page, 'enable_admin_access_pre_47', 10, 4 );
1769
		}
1770
1771
		$this->loader->add_action( 'wl_async_wl_run_sparql_query', $this->sparql_service, 'run_sparql_query', 10, 1 );
1772
1773
		/** Adapters. */
1774
		$this->loader->add_filter( 'mce_external_plugins', $this->tinymce_adapter, 'mce_external_plugins', 10, 1 );
1775
		/**
1776
		 * Disabling Faq temporarily.
1777
		 * Load the tinymce editor button on the tool bar.
1778
		 * @since 3.26.0
1779
		 */
1780
		//$this->loader->add_filter( 'tiny_mce_before_init', $this->faq_tinymce_adapter, 'register_custom_tags' );
1781
		//$this->loader->add_filter( 'mce_buttons', $this->faq_tinymce_adapter, 'register_faq_toolbar_button', 10, 1 );
1782
		//$this->loader->add_filter( 'mce_external_plugins', $this->faq_tinymce_adapter, 'register_faq_tinymce_plugin', 10, 1 );
1783
1784
1785
		$this->loader->add_action( 'wp_ajax_wl_relation_rebuild_process_all', $this->relation_rebuild_adapter, 'process_all' );
1786
		$this->loader->add_action( 'wp_ajax_wl_sample_data_create', $this->sample_data_ajax_adapter, 'create' );
1787
		$this->loader->add_action( 'wp_ajax_wl_sample_data_delete', $this->sample_data_ajax_adapter, 'delete' );
1788
		/**
1789
		 * @since 3.26.0
1790
		 * Post excerpt meta box would be only loaded when the language is set
1791
		 * to english
1792
		 */
1793
		if ( $this->configuration_service->get_language_code() === 'en' ) {
1794
			$excerpt_adapter = new Post_Excerpt_Meta_Box_Adapter();
1795
			$this->loader->add_action( 'do_meta_boxes', $excerpt_adapter, 'replace_post_excerpt_meta_box' );
1796
			// Adding Rest route for the post excerpt
1797
			Post_Excerpt_Rest_Controller::register_routes();
1798
		}
1799
1800
		$this->loader->add_action( 'update_user_metadata', $this->user_service, 'update_user_metadata', 10, 5 );
1801
		$this->loader->add_action( 'delete_user_metadata', $this->user_service, 'delete_user_metadata', 10, 5 );
1802
1803
		// Handle the autocomplete request.
1804
		add_action( 'wp_ajax_wl_autocomplete', array(
1805
			$this->autocomplete_adapter,
1806
			'wl_autocomplete',
1807
		) );
1808
		add_action( 'wp_ajax_nopriv_wl_autocomplete', array(
1809
			$this->autocomplete_adapter,
1810
			'wl_autocomplete',
1811
		) );
1812
1813
		// Hooks to restrict multisite super admin from manipulating entity types.
1814
		if ( is_multisite() ) {
1815
			$this->loader->add_filter( 'map_meta_cap', $this->entity_type_admin_page, 'restrict_super_admin', 10, 4 );
1816
		}
1817
1818
		$deactivator_feedback = new Wordlift_Deactivator_Feedback( $this->configuration_service );
1819
1820
		add_action( 'admin_footer', array( $deactivator_feedback, 'render_feedback_popup' ) );
1821
		add_action( 'admin_enqueue_scripts', array( $deactivator_feedback, 'enqueue_popup_scripts' ) );
1822
		add_action( 'wp_ajax_wl_deactivation_feedback', array( $deactivator_feedback, 'wl_deactivation_feedback' ) );
1823
1824
		/**
1825
		 * Always allow the `wordlift/classification` block.
1826
		 *
1827
		 * @since 3.23.0
1828
		 */
1829
		add_filter( 'allowed_block_types', function ( $value ) {
1830
1831
			if ( true === $value ) {
1832
				return $value;
1833
			}
1834
1835
			return array_merge( (array) $value, array( 'wordlift/classification' ) );
1836
		}, PHP_INT_MAX );
1837
	}
1838
1839
	/**
1840
	 * Register all of the hooks related to the public-facing functionality
1841
	 * of the plugin.
1842
	 *
1843
	 * @since    1.0.0
1844
	 * @access   private
1845
	 */
1846
	private function define_public_hooks() {
1847
1848
		$plugin_public = new Wordlift_Public( $this->get_plugin_name(), $this->get_version() );
1849
1850
		// Register the entity post type.
1851
		$this->loader->add_action( 'init', $this->entity_post_type_service, 'register' );
1852
1853
		// Bind the link generation and handling hooks to the entity link service.
1854
		$this->loader->add_filter( 'post_type_link', $this->entity_link_service, 'post_type_link', 10, 4 );
1855
		$this->loader->add_action( 'pre_get_posts', $this->entity_link_service, 'pre_get_posts', PHP_INT_MAX, 1 );
1856
		$this->loader->add_filter( 'wp_unique_post_slug_is_bad_flat_slug', $this->entity_link_service, 'wp_unique_post_slug_is_bad_flat_slug', 10, 3 );
1857
		$this->loader->add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', $this->entity_link_service, 'wp_unique_post_slug_is_bad_hierarchical_slug', 10, 4 );
1858
1859
		$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
1860
		$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
1861
		$this->loader->add_action( 'wp_enqueue_scripts', $this->context_cards_service, 'enqueue_scripts' );
1862
1863
		// Registering Faq_Content_Filter service used for removing faq question and answer tags from the html.
1864
		$this->loader->add_filter( 'the_content', $this->faq_content_filter_service, 'remove_all_faq_question_and_answer_tags' );
1865
		// Hook the content filter service to add entity links.
1866
		if ( ! defined( 'WL_DISABLE_CONTENT_FILTER' ) || ! WL_DISABLE_CONTENT_FILTER ) {
1867
			$this->loader->add_filter( 'the_content', $this->content_filter_service, 'the_content' );
1868
		}
1869
1870
		// Hook the AJAX wl_timeline action to the Timeline service.
1871
		$this->loader->add_action( 'wp_ajax_nopriv_wl_timeline', $this->timeline_service, 'ajax_timeline' );
1872
1873
		// Hook the ShareThis service.
1874
		$this->loader->add_filter( 'the_content', $this->sharethis_service, 'the_content', 99 );
1875
		$this->loader->add_filter( 'the_excerpt', $this->sharethis_service, 'the_excerpt', 99 );
1876
1877
		// Hook the AJAX wl_jsonld action to the JSON-LD service.
1878
		$this->loader->add_action( 'wp_ajax_nopriv_wl_jsonld', $this->jsonld_service, 'get' );
1879
1880
		// Hook the `pre_get_posts` action to the `Wordlift_Category_Taxonomy_Service`
1881
		// in order to tweak WP's `WP_Query` to include entities in queries related
1882
		// to categories.
1883
		$this->loader->add_action( 'pre_get_posts', $this->category_taxonomy_service, 'pre_get_posts', 10, 1 );
1884
1885
		/*
1886
		 * Hook the `pre_get_posts` action to the `Wordlift_Entity_Page_Service`
1887
		 * in order to tweak WP's `WP_Query` to show event related entities in reverse
1888
		 * order of start time.
1889
		 */
1890
		$this->loader->add_action( 'pre_get_posts', $this->entity_page_service, 'pre_get_posts', 10, 1 );
1891
1892
		$this->loader->add_action( 'wl_async_wl_run_sparql_query', $this->sparql_service, 'run_sparql_query', 10, 1 );
1893
1894
		// This hook have to run before the rating service, as otherwise the post might not be a proper entity when rating is done.
1895
		$this->loader->add_action( 'save_post', $this->entity_type_adapter, 'save_post', 9, 3 );
1896
1897
		// Analytics Script Frontend.
1898
		if ( $this->configuration_service->is_analytics_enable() ) {
1899
			$this->loader->add_action( 'wp_enqueue_scripts', $this->analytics_connect, 'enqueue_scripts', 10 );
1900
		}
1901
1902
	}
1903
1904
	/**
1905
	 * Run the loader to execute all of the hooks with WordPress.
1906
	 *
1907
	 * @since    1.0.0
1908
	 */
1909
	public function run() {
1910
		$this->loader->run();
1911
	}
1912
1913
	/**
1914
	 * The name of the plugin used to uniquely identify it within the context of
1915
	 * WordPress and to define internationalization functionality.
1916
	 *
1917
	 * @return    string    The name of the plugin.
1918
	 * @since     1.0.0
1919
	 */
1920
	public function get_plugin_name() {
1921
		return $this->plugin_name;
1922
	}
1923
1924
	/**
1925
	 * The reference to the class that orchestrates the hooks with the plugin.
1926
	 *
1927
	 * @return    Wordlift_Loader    Orchestrates the hooks of the plugin.
1928
	 * @since     1.0.0
1929
	 */
1930
	public function get_loader() {
1931
		return $this->loader;
1932
	}
1933
1934
	/**
1935
	 * Retrieve the version number of the plugin.
1936
	 *
1937
	 * @return    string    The version number of the plugin.
1938
	 * @since     1.0.0
1939
	 */
1940
	public function get_version() {
1941
		return $this->version;
1942
	}
1943
1944
	/**
1945
	 * Load dependencies for WP-CLI.
1946
	 *
1947
	 * @throws Exception
1948
	 * @since 3.18.0
1949
	 */
1950
	private function load_cli_dependencies() {
1951
1952
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'cli/class-wordlift-push-reference-data-command.php';
1953
1954
		$push_reference_data_command = new Wordlift_Push_Reference_Data_Command( $this->relation_service, $this->entity_service, $this->sparql_service, $this->configuration_service, $this->entity_type_service );
1955
1956
		WP_CLI::add_command( 'wl references push', $push_reference_data_command );
1957
1958
	}
1959
1960
	/**
1961
	 * Get the {@link \Wordlift_Dashboard_Service} to allow others to use its functions.
1962
	 *
1963
	 * @return \Wordlift_Dashboard_Service The {@link \Wordlift_Dashboard_Service} instance.
1964
	 * @since 3.20.0
1965
	 */
1966
	public function get_dashboard_service() {
1967
1968
		return $this->dashboard_service;
1969
	}
1970
1971
}
1972