PluginProbe
User Access Manager / 2.1.11
User Access Manager v2.1.11
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.11, at src/UserAccessManager.php

760 lines 24.7 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.11';
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('add_attachment', [$postObjectController, 'addAttachment']);
498 $this->wordpress->addAction('edit_user_profile', [$userObjectController, 'showUserProfile']);
499 $this->wordpress->addAction('user_new_form', [$userObjectController, 'showUserProfile']);
500 $this->wordpress->addAction('user_register', [$userObjectController, 'saveUserData']);
501 $this->wordpress->addAction('profile_update', [$userObjectController, 'saveUserData']);
502
503 $this->wordpress->addAction('bulk_edit_custom_box', [$postObjectController, 'addBulkAction']);
504 $this->wordpress->addAction('create_term', [$termObjectController, 'saveTermData']);
505 $this->wordpress->addAction('edit_term', [$termObjectController, 'saveTermData']);
506
507 //Taxonomies
508 foreach ($taxonomies as $taxonomy) {
509 $this->wordpress->addAction(
510 'manage_'.$taxonomy.'_custom_column',
511 [$termObjectController, 'addTermColumn'],
512 10,
513 3
514 );
515 $this->wordpress->addAction(
516 $taxonomy.'_add_form_fields',
517 [$termObjectController, 'showTermEditForm']
518 );
519 $this->wordpress->addAction(
520 $taxonomy.'_edit_form_fields',
521 [$termObjectController, 'showTermEditForm']
522 );
523 }
524
525 if ($this->config->lockFile() === true) {
526 $this->wordpress->addAction(
527 'manage_media_custom_column',
528 [$postObjectController, 'addPostColumn'],
529 10,
530 2
531 );
532 $this->wordpress->addAction(
533 'attachment_fields_to_edit',
534 [$postObjectController, 'showMediaFile'],
535 10,
536 2
537 );
538 $this->wordpress->addAction(
539 'wp_ajax_save-attachment-compat',
540 [$postObjectController, 'saveAjaxAttachmentData'],
541 1,
542 9
543 );
544 }
545
546 //Admin ajax actions
547 $this->wordpress->addAction(
548 'wp_ajax_uam-get-dynamic-group',
549 [$dynamicGroupController, 'getDynamicGroupsForAjax']
550 );
551 }
552
553 /**
554 * Adds the admin filters.
555 *
556 * @param PostObjectController $postObjectController
557 * @param TermObjectController $termObjectController
558 * @param UserObjectController $userObjectController
559 * @param array $taxonomies
560 */
561 private function addAdminFilters(
562 PostObjectController $postObjectController,
563 TermObjectController $termObjectController,
564 UserObjectController $userObjectController,
565 array $taxonomies
566 ) {
567 //The filter we use instead of add|edit_attachment action, reason see top
568 $this->wordpress->addFilter('attachment_fields_to_save', [$postObjectController, 'saveAttachmentData']);
569
570 $this->wordpress->addFilter('manage_posts_columns', [$postObjectController, 'addPostColumnsHeader']);
571 $this->wordpress->addFilter('manage_pages_columns', [$postObjectController, 'addPostColumnsHeader']);
572
573 $this->wordpress->addFilter('manage_users_columns', [$userObjectController, 'addUserColumnsHeader'], 10);
574 $this->wordpress->addFilter(
575 'manage_users_custom_column',
576 [$userObjectController, 'addUserColumn'],
577 10,
578 3
579 );
580
581 foreach ($taxonomies as $taxonomy) {
582 $this->wordpress->addFilter(
583 'manage_edit-'.$taxonomy.'_columns',
584 [$termObjectController, 'addTermColumnsHeader']
585 );
586 }
587
588 if ($this->config->lockFile() === true) {
589 $this->wordpress->addFilter('manage_media_columns', [$postObjectController, 'addPostColumnsHeader']);
590 }
591 }
592
593 /**
594 * Adds the admin meta boxes.
595 *
596 * @param PostObjectController $postObjectController
597 */
598 private function addAdminMetaBoxes(PostObjectController $postObjectController)
599 {
600 $postTypes = $this->objectHandler->getPostTypes();
601
602 foreach ($postTypes as $postType) {
603 // there is no need for a meta box for attachments if files are locked
604 if ($postType === ObjectHandler::ATTACHMENT_OBJECT_TYPE && $this->config->lockFile() !== true) {
605 continue;
606 }
607
608 $this->wordpress->addMetaBox(
609 'uam_post_access',
610 TXT_UAM_COLUMN_ACCESS,
611 [$postObjectController, 'editPostContent'],
612 $postType,
613 'side'
614 );
615 }
616 }
617
618 /**
619 * Register the admin actions and filters
620 */
621 public function registerAdminActionsAndFilters()
622 {
623 $backendController = $this->controllerFactory->createBackendController();
624 $this->wordpress->addAction('admin_enqueue_scripts', [$backendController, 'enqueueStylesAndScripts']);
625 $this->wordpress->addAction('wp_dashboard_setup', [$backendController, 'setupAdminDashboard']);
626 $this->wordpress->addAction('admin_notices', [$backendController, 'showAdminNotice']);
627
628 $taxonomies = $this->objectHandler->getTaxonomies();
629 $taxonomy = $backendController->getRequestParameter('taxonomy');
630
631 if ($taxonomy !== null) {
632 $taxonomies[$taxonomy] = $taxonomy;
633 }
634
635 $objectController = $this->controllerFactory->createBackendObjectController();
636 $postObjectController = $this->controllerFactory->createBackendPostObjectController();
637 $termObjectController = $this->controllerFactory->createBackendTermObjectController();
638 $userObjectController = $this->controllerFactory->createBackendUserObjectController();
639 $dynamicGroupController = $this->controllerFactory->createBackendDynamicGroupsController();
640
641 if ($this->userHandler->checkUserAccess() === true
642 || $this->config->authorsCanAddPostsToGroups() === true
643 ) {
644 //Admin actions
645 $this->addAdminActions(
646 $dynamicGroupController,
647 $postObjectController,
648 $termObjectController,
649 $userObjectController,
650 $taxonomies
651 );
652
653 //Admin filters
654 $this->addAdminFilters(
655 $postObjectController,
656 $termObjectController,
657 $userObjectController,
658 $taxonomies
659 );
660
661 //Admin meta boxes
662 $this->addAdminMetaBoxes($postObjectController);
663 }
664
665 //Clean up at deleting should always be done.
666 $this->wordpress->addAction('delete_post', [$postObjectController, 'removePostData']);
667 $this->wordpress->addAction('delete_attachment', [$postObjectController, 'removePostData']);
668 $this->wordpress->addAction('delete_user', [$userObjectController, 'removeUserData']);
669 $this->wordpress->addAction('delete_term', [$termObjectController, 'removeTermData']);
670
671 $objectController->checkRightsToEditContent();
672 }
673
674 /**
675 * Adds the actions and filers.
676 */
677 public function addActionsAndFilters()
678 {
679 //Actions
680 $this->wordpress->addAction('admin_menu', [$this, 'registerAdminMenu']);
681 $this->wordpress->addAction('admin_init', [$this, 'registerAdminActionsAndFilters']);
682 $this->wordpress->addAction('registered_post_type', [$this->objectHandler, 'registeredPostType'], 10, 2);
683 $this->wordpress->addAction('registered_taxonomy', [$this->objectHandler, 'registeredTaxonomy'], 10, 3);
684 $this->wordpress->addAction('registered_post_type', [$this->config, 'flushConfigParameters']);
685 $this->wordpress->addAction('registered_taxonomy', [$this->config, 'flushConfigParameters']);
686
687 // General frontend controller
688 $frontendController = $this->controllerFactory->createFrontendController();
689
690 $this->wordpress->addAction('wp_enqueue_scripts', [$frontendController, 'enqueueStylesAndScripts']);
691 $this->wordpress->addFilter('get_ancestors', [$frontendController, 'showAncestors'], 20, 4);
692 $this->wordpress->addFilter('wpseo_sitemap_entry', [$frontendController, 'getWpSeoUrl'], 1, 3);
693
694 // Post controller
695 $frontendPostController = $this->controllerFactory->createFrontendPostController();
696
697 $this->wordpress->addFilter('posts_pre_query', [$frontendPostController, 'postsPreQuery'], 10, 2);
698 $this->wordpress->addFilter('the_posts', [$frontendPostController, 'showPosts'], 9);
699 $this->wordpress->addFilter('get_attached_file', [$frontendPostController, 'getAttachedFile'], 10, 2);
700 $this->wordpress->addFilter('posts_where_paged', [$frontendPostController, 'showPostSql']);
701 $this->wordpress->addFilter('comments_array', [$frontendPostController, 'showComment']);
702 $this->wordpress->addFilter('the_comments', [$frontendPostController, 'showComment']);
703 $this->wordpress->addFilter('get_pages', [$frontendPostController, 'showPages'], 20);
704 $this->wordpress->addFilter('get_next_post_where', [$frontendPostController, 'showNextPreviousPost']);
705 $this->wordpress->addFilter('get_previous_post_where', [$frontendPostController, 'showNextPreviousPost']);
706 $this->wordpress->addFilter('edit_post_link', [$frontendPostController, 'showEditLink'], 10, 2);
707 $this->wordpress->addFilter('parse_query', [$frontendPostController, 'parseQuery']);
708 $this->wordpress->addFilter('getarchives_where', [$frontendPostController, 'showPostSql']);
709 $this->wordpress->addFilter('wp_count_posts', [$frontendPostController, 'showPostCount'], 10, 3);
710
711 // Short code controller
712 $frontendShortCodeController = $this->controllerFactory->createFrontendShortCodeController();
713
714 $this->wordpress->addShortCode('LOGIN_FORM', [$frontendShortCodeController, 'loginFormShortCode']); // Legacy
715 $this->wordpress->addShortCode('uam_login_form', [$frontendShortCodeController, 'loginFormShortCode']);
716 $this->wordpress->addShortCode('uam_public', [$frontendShortCodeController, 'publicShortCode']);
717 $this->wordpress->addShortCode('uam_private', [$frontendShortCodeController, 'privateShortCode']);
718
719 // Term controller
720 $frontendTermController = $this->controllerFactory->createFrontendTermController();
721
722 $this->wordpress->addFilter('get_terms_args', [$frontendTermController, 'getTermArguments']);
723 $this->wordpress->addFilter('get_terms', [$frontendTermController, 'showTerms'], 20);
724 $this->wordpress->addFilter('get_term', [$frontendTermController, 'showTerm'], 20, 2);
725 $this->wordpress->addFilter('wp_get_nav_menu_items', [$frontendTermController, 'showCustomMenu']);
726
727 // Redirect controller
728 $frontendRedirectController = $this->controllerFactory->createFrontendRedirectController();
729
730 $this->wordpress->addFilter('wp_get_attachment_thumb_url', [$frontendRedirectController, 'getFileUrl'], 10, 2);
731 $this->wordpress->addFilter('wp_get_attachment_url', [$frontendRedirectController, 'getFileUrl'], 10, 2);
732 $this->wordpress->addFilter('post_link', [$frontendRedirectController, 'cachePostLinks'], 10, 2);
733
734 $getFile = $frontendController->getRequestParameter('uamgetfile');
735
736 if ($this->config->getRedirect() !== false || $getFile !== null) {
737 $this->wordpress->addFilter('wp_headers', [$frontendRedirectController, 'redirect'], 10, 2);
738 }
739
740 $testXSendFile = $frontendController->getRequestParameter('testXSendFile');
741
742 if ($testXSendFile !== null) {
743 $this->wordpress->addFilter('wp_headers', [$frontendRedirectController, 'testXSendFile'], 10, 2);
744 }
745
746 // Admin object controller
747 $backendCacheController = $this->controllerFactory->createBackendCacheController();
748
749 $this->wordpress->addFilter('clean_term_cache', [$backendCacheController, 'invalidateTermCache']);
750 $this->wordpress->addFilter('clean_object_term_cache', [$backendCacheController, 'invalidateTermCache']);
751 $this->wordpress->addFilter('clean_post_cache', [$backendCacheController, 'invalidatePostCache']);
752 $this->wordpress->addFilter('clean_attachment_cache', [$backendCacheController, 'invalidatePostCache']);
753
754 // Widgets
755 $this->wordpress->addAction('widgets_init', function () {
756 $this->wordpress->registerWidget($this->widgetFactory->createLoginWidget());
757 });
758 }
759 }
760