PluginProbe
User Access Manager / 2.1.9
User Access Manager v2.1.9
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
user-access-manager / src / UserAccessManager.php

UserAccessManager.php in User Access Manager 2.1.9, at src/UserAccessManager.php

766 lines 25.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * UserAccessManager.php
4 *
5 * The UserAccessManager class file.
6 *
7 * PHP versions 5
8 *
9 * @author Alexander Schneider <alexanderschneider85@gmail.com>
10 * @copyright 2008-2017 Alexander Schneider
11 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2
12 * @version SVN: $id$
13 * @link http://wordpress.org/extend/plugins/user-access-manager/
14 */
15 namespace UserAccessManager;
16
17 use UserAccessManager\Access\AccessHandler;
18 use UserAccessManager\Cache\Cache;
19 use UserAccessManager\Cache\CacheProviderFactory;
20 use UserAccessManager\Config\ConfigFactory;
21 use UserAccessManager\Config\MainConfig;
22 use UserAccessManager\Config\ConfigParameterFactory;
23 use UserAccessManager\Controller\Backend\DynamicGroupsController;
24 use UserAccessManager\Controller\Backend\PostObjectController;
25 use UserAccessManager\Controller\Backend\SetupController;
26 use UserAccessManager\Controller\Backend\TermObjectController;
27 use UserAccessManager\Controller\Backend\UserObjectController;
28 use UserAccessManager\Controller\ControllerFactory;
29 use UserAccessManager\Database\Database;
30 use UserAccessManager\File\FileHandler;
31 use UserAccessManager\File\FileObjectFactory;
32 use UserAccessManager\File\FileProtectionFactory;
33 use UserAccessManager\Object\ObjectHandler;
34 use UserAccessManager\ObjectMembership\ObjectMembershipHandlerFactory;
35 use UserAccessManager\Setup\SetupHandler;
36 use UserAccessManager\UserGroup\UserGroupFactory;
37 use UserAccessManager\User\UserHandler;
38 use UserAccessManager\UserGroup\UserGroupHandler;
39 use UserAccessManager\Util\Util;
40 use UserAccessManager\Widget\WidgetFactory;
41 use UserAccessManager\Wrapper\Php;
42 use UserAccessManager\Wrapper\Wordpress;
43
44 /**
45 * Class UserAccessManager
46 *
47 * @package UserAccessManager
48 */
49 class UserAccessManager
50 {
51 const VERSION = '2.1.9';
52 const DB_VERSION = '1.6.1';
53
54 /**
55 * @var Php
56 */
57 private $php;
58
59 /**
60 * @var Wordpress
61 */
62 private $wordpress;
63
64 /**
65 * @var Util
66 */
67 private $util;
68
69 /**
70 * @var Cache
71 */
72 private $cache;
73
74 /**
75 * @var MainConfig
76 */
77 private $config;
78
79 /**
80 * @var Database
81 */
82 private $database;
83
84 /**
85 * @var ObjectHandler
86 */
87 private $objectHandler;
88
89 /**
90 * @var UserHandler
91 */
92 private $userHandler;
93
94 /**
95 * @var UserGroupHandler
96 */
97 private $userGroupHandler;
98
99 /**
100 * @var AccessHandler
101 */
102 private $accessHandler;
103
104 /**
105 * @var FileHandler
106 */
107 private $fileHandler;
108
109 /**
110 * @var SetupHandler
111 */
112 private $setupHandler;
113
114 /**
115 * @var UserGroupFactory
116 */
117 private $userGroupFactory;
118
119 /**
120 * @var ObjectMembershipHandlerFactory
121 */
122 private $membershipHandlerFactory;
123
124 /**
125 * @var ControllerFactory
126 */
127 private $controllerFactory;
128
129 /**
130 * @var WidgetFactory
131 */
132 private $widgetFactory;
133
134 /**
135 * @var CacheProviderFactory
136 */
137 private $cacheProviderFactory;
138
139 /**
140 * @var ConfigFactory
141 */
142 private $configFactory;
143
144 /**
145 * @var ConfigParameterFactory
146 */
147 private $configParameterFactory;
148
149 /**
150 * @var FileProtectionFactory
151 */
152 private $fileProtectionFactory;
153
154 /**
155 * @var FileObjectFactory
156 */
157 private $fileObjectFactory;
158
159 /**
160 * UserAccessManager constructor.
161 *
162 * @param Php $php
163 * @param Wordpress $wordpress
164 * @param Util $util
165 * @param Cache $cache
166 * @param MainConfig $config
167 * @param Database $database
168 * @param ObjectHandler $objectHandler
169 * @param UserHandler $userHandler
170 * @param UserGroupHandler $userGroupHandler
171 * @param AccessHandler $accessHandler
172 * @param FileHandler $fileHandler
173 * @param SetupHandler $setupHandler
174 * @param UserGroupFactory $userGroupFactory
175 * @param ObjectMembershipHandlerFactory $membershipHandlerFactory
176 * @param ControllerFactory $controllerFactory
177 * @param WidgetFactory $widgetFactory
178 * @param CacheProviderFactory $cacheProviderFactory
179 * @param ConfigFactory $configFactory
180 * @param ConfigParameterFactory $configParameterFactory
181 * @param FileProtectionFactory $fileProtectionFactory
182 * @param FileObjectFactory $fileObjectFactory
183 */
184 public function __construct(
185 Php $php,
186 Wordpress $wordpress,
187 Util $util,
188 Cache $cache,
189 MainConfig $config,
190 Database $database,
191 ObjectHandler $objectHandler,
192 UserHandler $userHandler,
193 UserGroupHandler $userGroupHandler,
194 AccessHandler $accessHandler,
195 FileHandler $fileHandler,
196 SetupHandler $setupHandler,
197 UserGroupFactory $userGroupFactory,
198 ObjectMembershipHandlerFactory $membershipHandlerFactory,
199 ControllerFactory $controllerFactory,
200 WidgetFactory $widgetFactory,
201 CacheProviderFactory $cacheProviderFactory,
202 ConfigFactory $configFactory,
203 ConfigParameterFactory $configParameterFactory,
204 FileProtectionFactory $fileProtectionFactory,
205 FileObjectFactory $fileObjectFactory
206 ) {
207 $this->php = $php;
208 $this->wordpress = $wordpress;
209 $this->util = $util;
210 $this->cache = $cache;
211 $this->config = $config;
212 $this->database = $database;
213 $this->objectHandler = $objectHandler;
214 $this->userHandler = $userHandler;
215 $this->userGroupHandler = $userGroupHandler;
216 $this->accessHandler = $accessHandler;
217 $this->fileHandler = $fileHandler;
218 $this->setupHandler = $setupHandler;
219 $this->userGroupFactory = $userGroupFactory;
220 $this->membershipHandlerFactory = $membershipHandlerFactory;
221 $this->controllerFactory = $controllerFactory;
222 $this->widgetFactory = $widgetFactory;
223 $this->cacheProviderFactory = $cacheProviderFactory;
224 $this->configFactory = $configFactory;
225 $this->configParameterFactory = $configParameterFactory;
226 $this->fileProtectionFactory = $fileProtectionFactory;
227 $this->fileObjectFactory = $fileObjectFactory;
228
229 $this->cache->setActiveCacheProvider($this->config->getActiveCacheProvider());
230 }
231
232 /**
233 * @return Php
234 */
235 public function getPhp()
236 {
237 return $this->php;
238 }
239
240 /**
241 * @return Wordpress
242 */
243 public function getWordpress()
244 {
245 return $this->wordpress;
246 }
247
248 /**
249 * @return Util
250 */
251 public function getUtil()
252 {
253 return $this->util;
254 }
255
256 /**
257 * @return Cache
258 */
259 public function getCache()
260 {
261 return $this->cache;
262 }
263
264 /**
265 * @return MainConfig
266 */
267 public function getConfig()
268 {
269 return $this->config;
270 }
271
272 /**
273 * @return Database
274 */
275 public function getDatabase()
276 {
277 return $this->database;
278 }
279
280 /**
281 * @return ObjectHandler
282 */
283 public function getObjectHandler()
284 {
285 return $this->objectHandler;
286 }
287
288 /**
289 * @return UserHandler
290 */
291 public function getUserHandler()
292 {
293 return $this->userHandler;
294 }
295
296 public function getUserGroupHandler()
297 {
298 return $this->userGroupHandler;
299 }
300
301 /**
302 * @return AccessHandler
303 */
304 public function getAccessHandler()
305 {
306 return $this->accessHandler;
307 }
308
309 /**
310 * @return FileHandler
311 */
312 public function getFileHandler()
313 {
314 return $this->fileHandler;
315 }
316
317 /**
318 * @return SetupHandler
319 */
320 public function getSetupHandler()
321 {
322 return $this->setupHandler;
323 }
324
325 /**
326 * @return UserGroupFactory
327 */
328 public function getUserGroupFactory()
329 {
330 return $this->userGroupFactory;
331 }
332
333 /**
334 * @return ObjectMembershipHandlerFactory
335 */
336 public function getObjectMembershipHandlerFactory()
337 {
338 return $this->membershipHandlerFactory;
339 }
340
341 /**
342 * @return ControllerFactory
343 */
344 public function getControllerFactory()
345 {
346 return $this->controllerFactory;
347 }
348
349 /**
350 * @return WidgetFactory
351 */
352 public function getWidgetFactory()
353 {
354 return $this->widgetFactory;
355 }
356
357 /**
358 * @return CacheProviderFactory
359 */
360 public function getCacheProviderFactory()
361 {
362 return $this->cacheProviderFactory;
363 }
364
365 /**
366 * @return ConfigFactory
367 */
368 public function getConfigFactory()
369 {
370 return $this->configFactory;
371 }
372
373 /**
374 * @return ConfigParameterFactory
375 */
376 public function getConfigParameterFactory()
377 {
378 return $this->configParameterFactory;
379 }
380
381 /**
382 * @return FileProtectionFactory
383 */
384 public function getFileProtectionFactory()
385 {
386 return $this->fileProtectionFactory;
387 }
388
389 /**
390 * @return FileObjectFactory
391 */
392 public function getFileObjectFactory()
393 {
394 return $this->fileObjectFactory;
395 }
396
397 /**
398 * Resister the administration menu.
399 */
400 public function registerAdminMenu()
401 {
402 if ($this->userHandler->checkUserAccess() === true) {
403 //TODO
404 /**
405 * --- BOF ---
406 * Not the best way to handle full user access. Capabilities seems
407 * to be the right way, but it is way difficult.
408 */
409 //Admin main menu
410 $this->wordpress->addMenuPage(
411 'User Access Manager',
412 'UAM',
413 'manage_options',
414 'uam_user_group',
415 null,
416 'div'
417 );
418
419 //Admin sub menus
420 $backendUserGroupController = $this->controllerFactory->createBackendUserGroupController();
421 $this->wordpress->addSubmenuPage(
422 'uam_user_group',
423 TXT_UAM_MANAGE_GROUP,
424 TXT_UAM_MANAGE_GROUP,
425 'read',
426 'uam_user_group',
427 [$backendUserGroupController, 'render']
428 );
429
430 $backendSettingsController = $this->controllerFactory->createBackendSettingsController();
431 $this->wordpress->addSubmenuPage(
432 'uam_user_group',
433 TXT_UAM_SETTINGS,
434 TXT_UAM_SETTINGS,
435 'read',
436 'uam_settings',
437 [$backendSettingsController, 'render']
438 );
439
440 $backendSetupController = $this->controllerFactory->createBackendSetupController();
441 $this->wordpress->addSubmenuPage(
442 'uam_user_group',
443 TXT_UAM_SETUP,
444 TXT_UAM_SETUP,
445 'read',
446 'uam_setup',
447 [$backendSetupController, 'render']
448 );
449
450 $backendAboutController = $this->controllerFactory->createBackendAboutController();
451 $this->wordpress->addSubmenuPage(
452 'uam_user_group',
453 TXT_UAM_ABOUT,
454 TXT_UAM_ABOUT,
455 'read',
456 'uam_about',
457 [$backendAboutController, 'render']
458 );
459
460 $this->wordpress->doAction('uam_add_sub_menu');
461
462 /**
463 * --- EOF ---
464 */
465 }
466 }
467
468 /**
469 * Adds the backend filters.
470 *
471 * @param DynamicGroupsController $dynamicGroupController
472 * @param PostObjectController $postObjectController
473 * @param TermObjectController $termObjectController
474 * @param UserObjectController $userObjectController
475 * @param array $taxonomies
476 */
477 private function addAdminActions(
478 DynamicGroupsController $dynamicGroupController,
479 PostObjectController $postObjectController,
480 TermObjectController $termObjectController,
481 UserObjectController $userObjectController,
482 array $taxonomies
483 ) {
484 $this->wordpress->addAction(
485 'manage_posts_custom_column',
486 [$postObjectController, 'addPostColumn'],
487 10,
488 2
489 );
490 $this->wordpress->addAction(
491 'manage_pages_custom_column',
492 [$postObjectController, 'addPostColumn'],
493 10,
494 2
495 );
496 $this->wordpress->addAction('save_post', [$postObjectController, 'savePostData']);
497 $this->wordpress->addAction('edit_user_profile', [$userObjectController, 'showUserProfile']);
498 $this->wordpress->addAction('user_new_form', [$userObjectController, 'showUserProfile']);
499 $this->wordpress->addAction('user_register', [$userObjectController, 'saveUserData']);
500 $this->wordpress->addAction('profile_update', [$userObjectController, 'saveUserData']);
501
502 $this->wordpress->addAction('bulk_edit_custom_box', [$postObjectController, 'addBulkAction']);
503 $this->wordpress->addAction('create_term', [$termObjectController, 'saveTermData']);
504 $this->wordpress->addAction('edit_term', [$termObjectController, 'saveTermData']);
505
506 //Taxonomies
507 foreach ($taxonomies as $taxonomy) {
508 $this->wordpress->addAction(
509 'manage_'.$taxonomy.'_custom_column',
510 [$termObjectController, 'addTermColumn'],
511 10,
512 3
513 );
514 $this->wordpress->addAction(
515 $taxonomy.'_add_form_fields',
516 [$termObjectController, 'showTermEditForm']
517 );
518 $this->wordpress->addAction(
519 $taxonomy.'_edit_form_fields',
520 [$termObjectController, 'showTermEditForm']
521 );
522 }
523
524 if ($this->config->lockFile() === true) {
525 $this->wordpress->addAction(
526 'manage_media_custom_column',
527 [$postObjectController, 'addPostColumn'],
528 10,
529 2
530 );
531 $this->wordpress->addAction(
532 'attachment_fields_to_edit',
533 [$postObjectController, 'showMediaFile'],
534 10,
535 2
536 );
537 $this->wordpress->addAction(
538 'wp_ajax_save-attachment-compat',
539 [$postObjectController, 'saveAjaxAttachmentData'],
540 1,
541 9
542 );
543 }
544
545 //Admin ajax actions
546 $this->wordpress->addAction(
547 'wp_ajax_uam-get-dynamic-group',
548 [$dynamicGroupController, 'getDynamicGroupsForAjax']
549 );
550 }
551
552 /**
553 * Adds the admin filters.
554 *
555 * @param PostObjectController $postObjectController
556 * @param TermObjectController $termObjectController
557 * @param UserObjectController $userObjectController
558 * @param array $taxonomies
559 */
560 private function addAdminFilters(
561 PostObjectController $postObjectController,
562 TermObjectController $termObjectController,
563 UserObjectController $userObjectController,
564 array $taxonomies
565 ) {
566 //The filter we use instead of add|edit_attachment action, reason see top
567 $this->wordpress->addFilter('attachment_fields_to_save', [$postObjectController, 'saveAttachmentData']);
568
569 $this->wordpress->addFilter('manage_posts_columns', [$postObjectController, 'addPostColumnsHeader']);
570 $this->wordpress->addFilter('manage_pages_columns', [$postObjectController, 'addPostColumnsHeader']);
571
572 $this->wordpress->addFilter('manage_users_columns', [$userObjectController, 'addUserColumnsHeader'], 10);
573 $this->wordpress->addFilter(
574 'manage_users_custom_column',
575 [$userObjectController, 'addUserColumn'],
576 10,
577 3
578 );
579
580 foreach ($taxonomies as $taxonomy) {
581 $this->wordpress->addFilter(
582 'manage_edit-'.$taxonomy.'_columns',
583 [$termObjectController, 'addTermColumnsHeader']
584 );
585 }
586
587 if ($this->config->lockFile() === true) {
588 $this->wordpress->addFilter('manage_media_columns', [$postObjectController, 'addPostColumnsHeader']);
589 }
590 }
591
592 /**
593 * Adds the admin meta boxes.
594 *
595 * @param PostObjectController $postObjectController
596 */
597 private function addAdminMetaBoxes(PostObjectController $postObjectController)
598 {
599 $postTypes = $this->objectHandler->getPostTypes();
600
601 foreach ($postTypes as $postType) {
602 // there is no need for a meta box for attachments if files are locked
603 if ($postType === ObjectHandler::ATTACHMENT_OBJECT_TYPE && $this->config->lockFile() !== true) {
604 continue;
605 }
606
607 $this->wordpress->addMetaBox(
608 'uam_post_access',
609 TXT_UAM_COLUMN_ACCESS,
610 [$postObjectController, 'editPostContent'],
611 $postType,
612 'side'
613 );
614 }
615 }
616
617 /**
618 * Register the admin actions and filters
619 */
620 public function registerAdminActionsAndFilters()
621 {
622 $backendController = $this->controllerFactory->createBackendController();
623 $this->wordpress->addAction('admin_enqueue_scripts', [$backendController, 'enqueueStylesAndScripts']);
624 $this->wordpress->addAction('wp_dashboard_setup', [$backendController, 'setupAdminDashboard']);
625 $updateAction = $backendController->getRequestParameter('uam_update_db');
626
627 if ($this->setupHandler->getDatabaseHandler()->isDatabaseUpdateNecessary() === true
628 && $updateAction !== SetupController::UPDATE_BLOG
629 && $updateAction !== SetupController::UPDATE_NETWORK
630 ) {
631 $this->wordpress->addAction('admin_notices', [$backendController, 'showDatabaseNotice']);
632 }
633
634 $taxonomies = $this->objectHandler->getTaxonomies();
635 $taxonomy = $backendController->getRequestParameter('taxonomy');
636
637 if ($taxonomy !== null) {
638 $taxonomies[$taxonomy] = $taxonomy;
639 }
640
641 $objectController = $this->controllerFactory->createBackendObjectController();
642 $postObjectController = $this->controllerFactory->createBackendPostObjectController();
643 $termObjectController = $this->controllerFactory->createBackendTermObjectController();
644 $userObjectController = $this->controllerFactory->createBackendUserObjectController();
645 $dynamicGroupController = $this->controllerFactory->createBackendDynamicGroupsController();
646
647 if ($this->userHandler->checkUserAccess() === true
648 || $this->config->authorsCanAddPostsToGroups() === true
649 ) {
650 //Admin actions
651 $this->addAdminActions(
652 $dynamicGroupController,
653 $postObjectController,
654 $termObjectController,
655 $userObjectController,
656 $taxonomies
657 );
658
659 //Admin filters
660 $this->addAdminFilters(
661 $postObjectController,
662 $termObjectController,
663 $userObjectController,
664 $taxonomies
665 );
666
667 //Admin meta boxes
668 $this->addAdminMetaBoxes($postObjectController);
669 }
670
671 //Clean up at deleting should always be done.
672 $this->wordpress->addAction('delete_post', [$postObjectController, 'removePostData']);
673 $this->wordpress->addAction('delete_attachment', [$postObjectController, 'removePostData']);
674 $this->wordpress->addAction('delete_user', [$userObjectController, 'removeUserData']);
675 $this->wordpress->addAction('delete_term', [$termObjectController, 'removeTermData']);
676
677 $objectController->checkRightsToEditContent();
678 }
679
680 /**
681 * Adds the actions and filers.
682 */
683 public function addActionsAndFilters()
684 {
685 //Actions
686 $this->wordpress->addAction('admin_menu', [$this, 'registerAdminMenu']);
687 $this->wordpress->addAction('admin_init', [$this, 'registerAdminActionsAndFilters']);
688 $this->wordpress->addAction('registered_post_type', [$this->objectHandler, 'registeredPostType'], 10, 2);
689 $this->wordpress->addAction('registered_taxonomy', [$this->objectHandler, 'registeredTaxonomy'], 10, 3);
690 $this->wordpress->addAction('registered_post_type', [$this->config, 'flushConfigParameters']);
691 $this->wordpress->addAction('registered_taxonomy', [$this->config, 'flushConfigParameters']);
692
693 // General frontend controller
694 $frontendController = $this->controllerFactory->createFrontendController();
695
696 $this->wordpress->addAction('wp_enqueue_scripts', [$frontendController, 'enqueueStylesAndScripts']);
697 $this->wordpress->addFilter('get_ancestors', [$frontendController, 'showAncestors'], 20, 4);
698 $this->wordpress->addFilter('wpseo_sitemap_entry', [$frontendController, 'getWpSeoUrl'], 1, 3);
699
700 // Post controller
701 $frontendPostController = $this->controllerFactory->createFrontendPostController();
702
703 $this->wordpress->addFilter('posts_pre_query', [$frontendPostController, 'postsPreQuery'], 10, 2);
704 $this->wordpress->addFilter('the_posts', [$frontendPostController, 'showPosts'], 9);
705 $this->wordpress->addFilter('get_attached_file', [$frontendPostController, 'getAttachedFile'], 10, 2);
706 $this->wordpress->addFilter('posts_where_paged', [$frontendPostController, 'showPostSql']);
707 $this->wordpress->addFilter('comments_array', [$frontendPostController, 'showComment']);
708 $this->wordpress->addFilter('the_comments', [$frontendPostController, 'showComment']);
709 $this->wordpress->addFilter('get_pages', [$frontendPostController, 'showPages'], 20);
710 $this->wordpress->addFilter('get_next_post_where', [$frontendPostController, 'showNextPreviousPost']);
711 $this->wordpress->addFilter('get_previous_post_where', [$frontendPostController, 'showNextPreviousPost']);
712 $this->wordpress->addFilter('edit_post_link', [$frontendPostController, 'showEditLink'], 10, 2);
713 $this->wordpress->addFilter('parse_query', [$frontendPostController, 'parseQuery']);
714 $this->wordpress->addFilter('getarchives_where', [$frontendPostController, 'showPostSql']);
715 $this->wordpress->addFilter('wp_count_posts', [$frontendPostController, 'showPostCount'], 10, 3);
716
717 // Short code controller
718 $frontendShortCodeController = $this->controllerFactory->createFrontendShortCodeController();
719
720 $this->wordpress->addShortCode('LOGIN_FORM', [$frontendShortCodeController, 'loginFormShortCode']); // Legacy
721 $this->wordpress->addShortCode('uam_login_form', [$frontendShortCodeController, 'loginFormShortCode']);
722 $this->wordpress->addShortCode('uam_public', [$frontendShortCodeController, 'publicShortCode']);
723 $this->wordpress->addShortCode('uam_private', [$frontendShortCodeController, 'privateShortCode']);
724
725 // Term controller
726 $frontendTermController = $this->controllerFactory->createFrontendTermController();
727
728 $this->wordpress->addFilter('get_terms_args', [$frontendTermController, 'getTermArguments']);
729 $this->wordpress->addFilter('get_terms', [$frontendTermController, 'showTerms'], 20);
730 $this->wordpress->addFilter('get_term', [$frontendTermController, 'showTerm'], 20, 2);
731 $this->wordpress->addFilter('wp_get_nav_menu_items', [$frontendTermController, 'showCustomMenu']);
732
733 // Redirect controller
734 $frontendRedirectController = $this->controllerFactory->createFrontendRedirectController();
735
736 $this->wordpress->addFilter('wp_get_attachment_thumb_url', [$frontendRedirectController, 'getFileUrl'], 10, 2);
737 $this->wordpress->addFilter('wp_get_attachment_url', [$frontendRedirectController, 'getFileUrl'], 10, 2);
738 $this->wordpress->addFilter('post_link', [$frontendRedirectController, 'cachePostLinks'], 10, 2);
739
740 $getFile = $frontendController->getRequestParameter('uamgetfile');
741
742 if ($this->config->getRedirect() !== false || $getFile !== null) {
743 $this->wordpress->addFilter('wp_headers', [$frontendRedirectController, 'redirect'], 10, 2);
744 }
745
746 $testXSendFile = $frontendController->getRequestParameter('testXSendFile');
747
748 if ($testXSendFile !== null) {
749 $this->wordpress->addFilter('wp_headers', [$frontendRedirectController, 'testXSendFile'], 10, 2);
750 }
751
752 // Admin object controller
753 $backendCacheController = $this->controllerFactory->createBackendCacheController();
754
755 $this->wordpress->addFilter('clean_term_cache', [$backendCacheController, 'invalidateTermCache']);
756 $this->wordpress->addFilter('clean_object_term_cache', [$backendCacheController, 'invalidateTermCache']);
757 $this->wordpress->addFilter('clean_post_cache', [$backendCacheController, 'invalidatePostCache']);
758 $this->wordpress->addFilter('clean_attachment_cache', [$backendCacheController, 'invalidatePostCache']);
759
760 // Widgets
761 $this->wordpress->addAction('widgets_init', function () {
762 $this->wordpress->registerWidget($this->widgetFactory->createLoginWidget());
763 });
764 }
765 }
766