PluginProbe
User Access Manager / 2.1.12
User Access Manager v2.1.12
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.12, at src/UserAccessManager.php

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