PluginProbe
User Access Manager / 2.0.10
User Access Manager v2.0.10
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 / UserAccessManager.php

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

555 lines 18.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\AccessHandler\AccessHandler;
18 use UserAccessManager\Cache\Cache;
19 use UserAccessManager\Config\Config;
20 use UserAccessManager\Config\ConfigParameterFactory;
21 use UserAccessManager\Controller\AdminSetupController;
22 use UserAccessManager\Controller\ControllerFactory;
23 use UserAccessManager\Database\Database;
24 use UserAccessManager\FileHandler\FileHandler;
25 use UserAccessManager\FileHandler\FileObjectFactory;
26 use UserAccessManager\FileHandler\FileProtectionFactory;
27 use UserAccessManager\ObjectHandler\ObjectHandler;
28 use UserAccessManager\SetupHandler\SetupHandler;
29 use UserAccessManager\UserGroup\UserGroupFactory;
30 use UserAccessManager\Util\Util;
31 use UserAccessManager\Wrapper\Php;
32 use UserAccessManager\Wrapper\Wordpress;
33
34 /**
35 * Class UserAccessManager
36 *
37 * @package UserAccessManager
38 */
39 class UserAccessManager
40 {
41 const VERSION = '2.0.10';
42 const DB_VERSION = '1.5.1';
43
44 /**
45 * @var Php
46 */
47 private $php;
48
49 /**
50 * @var Wordpress
51 */
52 private $wordpress;
53
54 /**
55 * @var Util
56 */
57 private $util;
58
59 /**
60 * @var Cache
61 */
62 private $cache;
63
64 /**
65 * @var Config
66 */
67 private $config;
68
69 /**
70 * @var Database
71 */
72 private $database;
73
74 /**
75 * @var ObjectHandler
76 */
77 private $objectHandler;
78
79 /**
80 * @var AccessHandler
81 */
82 private $accessHandler;
83
84 /**
85 * @var FileHandler
86 */
87 private $fileHandler;
88
89 /**
90 * @var SetupHandler
91 */
92 private $setupHandler;
93
94 /**
95 * @var UserGroupFactory
96 */
97 private $userGroupFactory;
98
99 /**
100 * @var ControllerFactory
101 */
102 private $controllerFactory;
103
104 /**
105 * @var ConfigParameterFactory
106 */
107 private $configParameterFactory;
108
109 /**
110 * @var FileProtectionFactory
111 */
112 private $fileProtectionFactory;
113
114 /**
115 * @var FileObjectFactory
116 */
117 private $fileObjectFactory;
118
119 /**
120 * UserAccessManager constructor.
121 *
122 * @param Php $php
123 * @param Wordpress $wordpress
124 * @param Util $util
125 * @param Cache $cache
126 * @param Config $config
127 * @param Database $database
128 * @param ObjectHandler $objectHandler
129 * @param AccessHandler $accessHandler
130 * @param FileHandler $fileHandler
131 * @param SetupHandler $setupHandler
132 * @param UserGroupFactory $userGroupFactory
133 * @param ControllerFactory $controllerFactory
134 * @param ConfigParameterFactory $configParameterFactory
135 * @param FileProtectionFactory $fileProtectionFactory
136 * @param FileObjectFactory $fileObjectFactory
137 */
138 public function __construct(
139 Php $php,
140 Wordpress $wordpress,
141 Util $util,
142 Cache $cache,
143 Config $config,
144 Database $database,
145 ObjectHandler $objectHandler,
146 AccessHandler $accessHandler,
147 FileHandler $fileHandler,
148 SetupHandler $setupHandler,
149 UserGroupFactory $userGroupFactory,
150 ControllerFactory $controllerFactory,
151 ConfigParameterFactory $configParameterFactory,
152 FileProtectionFactory $fileProtectionFactory,
153 FileObjectFactory $fileObjectFactory
154 ) {
155 $this->php = $php;
156 $this->wordpress = $wordpress;
157 $this->util = $util;
158 $this->cache = $cache;
159 $this->config = $config;
160 $this->database = $database;
161 $this->objectHandler = $objectHandler;
162 $this->accessHandler = $accessHandler;
163 $this->fileHandler = $fileHandler;
164 $this->setupHandler = $setupHandler;
165 $this->userGroupFactory = $userGroupFactory;
166 $this->controllerFactory = $controllerFactory;
167 $this->configParameterFactory = $configParameterFactory;
168 $this->fileProtectionFactory = $fileProtectionFactory;
169 $this->fileObjectFactory = $fileObjectFactory;
170 }
171
172 /**
173 * @return Php
174 */
175 public function getPhp()
176 {
177 return $this->php;
178 }
179
180 /**
181 * @return Wordpress
182 */
183 public function getWordpress()
184 {
185 return $this->wordpress;
186 }
187
188 /**
189 * @return Util
190 */
191 public function getUtil()
192 {
193 return $this->util;
194 }
195
196 /**
197 * @return Cache
198 */
199 public function getCache()
200 {
201 return $this->cache;
202 }
203
204 /**
205 * @return Config
206 */
207 public function getConfig()
208 {
209 return $this->config;
210 }
211
212 /**
213 * @return Database
214 */
215 public function getDatabase()
216 {
217 return $this->database;
218 }
219
220 /**
221 * @return ObjectHandler
222 */
223 public function getObjectHandler()
224 {
225 return $this->objectHandler;
226 }
227
228 /**
229 * @return AccessHandler
230 */
231 public function getAccessHandler()
232 {
233 return $this->accessHandler;
234 }
235
236 /**
237 * @return FileHandler
238 */
239 public function getFileHandler()
240 {
241 return $this->fileHandler;
242 }
243
244 /**
245 * @return SetupHandler
246 */
247 public function getSetupHandler()
248 {
249 return $this->setupHandler;
250 }
251
252 /**
253 * @return UserGroupFactory
254 */
255 public function getUserGroupFactory()
256 {
257 return $this->userGroupFactory;
258 }
259
260 /**
261 * @return ControllerFactory
262 */
263 public function getControllerFactory()
264 {
265 return $this->controllerFactory;
266 }
267
268 /**
269 * @return ConfigParameterFactory
270 */
271 public function getConfigParameterFactory()
272 {
273 return $this->configParameterFactory;
274 }
275
276 /**
277 * @return FileProtectionFactory
278 */
279 public function getFileProtectionFactory()
280 {
281 return $this->fileProtectionFactory;
282 }
283
284 /**
285 * @return FileObjectFactory
286 */
287 public function getFileObjectFactory()
288 {
289 return $this->fileObjectFactory;
290 }
291
292 /**
293 * Resister the administration menu.
294 */
295 public function registerAdminMenu()
296 {
297 if ($this->accessHandler->checkUserAccess() === true) {
298 //TODO
299 /**
300 * --- BOF ---
301 * Not the best way to handle full user access. Capabilities seems
302 * to be the right way, but it is way difficult.
303 */
304 //Admin main menu
305 $this->wordpress->addMenuPage(
306 'User Access Manager',
307 'UAM',
308 'manage_options',
309 'uam_user_group',
310 null,
311 'div'
312 );
313
314 //Admin sub menus
315 $adminUserGroupController = $this->controllerFactory->createAdminUserGroupController();
316 $this->wordpress->addSubmenuPage(
317 'uam_user_group',
318 TXT_UAM_MANAGE_GROUP,
319 TXT_UAM_MANAGE_GROUP,
320 'read',
321 'uam_user_group',
322 [$adminUserGroupController, 'render']
323 );
324
325 $adminSetupController = $this->controllerFactory->createAdminSettingsController();
326 $this->wordpress->addSubmenuPage(
327 'uam_user_group',
328 TXT_UAM_SETTINGS,
329 TXT_UAM_SETTINGS,
330 'read',
331 'uam_settings',
332 [$adminSetupController, 'render']
333 );
334
335 $adminSetupController = $this->controllerFactory->createAdminSetupController();
336 $this->wordpress->addSubmenuPage(
337 'uam_user_group',
338 TXT_UAM_SETUP,
339 TXT_UAM_SETUP,
340 'read',
341 'uam_setup',
342 [$adminSetupController, 'render']
343 );
344
345 $adminAboutController = $this->controllerFactory->createAdminAboutController();
346 $this->wordpress->addSubmenuPage(
347 'uam_user_group',
348 TXT_UAM_ABOUT,
349 TXT_UAM_ABOUT,
350 'read',
351 'uam_about',
352 [$adminAboutController, 'render']
353 );
354
355 $this->wordpress->doAction('uam_add_sub_menu');
356
357 /**
358 * --- EOF ---
359 */
360 }
361 }
362
363 /**
364 * Register the admin actions and filters
365 */
366 public function registerAdminActionsAndFilters()
367 {
368 $adminController = $this->controllerFactory->createAdminController();
369 $this->wordpress->addAction('admin_enqueue_scripts', [$adminController, 'enqueueStylesAndScripts']);
370 $this->wordpress->addAction('wp_dashboard_setup', [$adminController, 'setupAdminDashboard']);
371 $updateAction = $adminController->getRequestParameter('uam_update_db');
372
373 if ($this->setupHandler->isDatabaseUpdateNecessary() === true
374 && $updateAction !== AdminSetupController::UPDATE_BLOG
375 && $updateAction !== AdminSetupController::UPDATE_NETWORK
376 ) {
377 $this->wordpress->addAction('admin_notices', [$adminController, 'showDatabaseNotice']);
378 }
379
380 $taxonomies = $this->objectHandler->getTaxonomies();
381 $taxonomy = $adminController->getRequestParameter('taxonomy');
382
383 if ($taxonomy !== null) {
384 $taxonomies[$taxonomy] = $taxonomy;
385 }
386
387 $adminObjectController = $this->controllerFactory->createAdminObjectController();
388
389 if ($this->accessHandler->checkUserAccess() === true
390 || $this->config->authorsCanAddPostsToGroups() === true
391 ) {
392 //Admin actions
393 $this->wordpress->addAction(
394 'manage_posts_custom_column',
395 [$adminObjectController, 'addPostColumn'],
396 10,
397 2
398 );
399 $this->wordpress->addAction(
400 'manage_pages_custom_column',
401 [$adminObjectController, 'addPostColumn'],
402 10,
403 2
404 );
405 $this->wordpress->addAction('save_post', [$adminObjectController, 'savePostData']);
406 $this->wordpress->addAction('edit_user_profile', [$adminObjectController, 'showUserProfile']);
407 $this->wordpress->addAction('profile_update', [$adminObjectController, 'saveUserData']);
408
409 $this->wordpress->addAction('bulk_edit_custom_box', [$adminObjectController, 'addBulkAction']);
410 $this->wordpress->addAction('create_term', [$adminObjectController, 'saveTermData']);
411 $this->wordpress->addAction('edit_term', [$adminObjectController, 'saveTermData']);
412
413 //Taxonomies
414 foreach ($taxonomies as $taxonomy) {
415 $this->wordpress->addAction(
416 'manage_'.$taxonomy.'_custom_column',
417 [$adminObjectController, 'addTermColumn'],
418 10,
419 3
420 );
421 $this->wordpress->addAction(
422 $taxonomy.'_add_form_fields',
423 [$adminObjectController, 'showTermEditForm']
424 );
425 $this->wordpress->addAction(
426 $taxonomy.'_edit_form_fields',
427 [$adminObjectController, 'showTermEditForm']
428 );
429 }
430
431 if ($this->config->lockFile() === true) {
432 $this->wordpress->addAction(
433 'manage_media_custom_column',
434 [$adminObjectController, 'addPostColumn'],
435 10,
436 2
437 );
438 $this->wordpress->addAction(
439 'attachment_fields_to_edit',
440 [$adminObjectController, 'showMediaFile'],
441 10,
442 2
443 );
444 $this->wordpress->addAction(
445 'wp_ajax_save-attachment-compat',
446 [$adminObjectController, 'saveAjaxAttachmentData'],
447 1,
448 9
449 );
450 }
451
452 //Admin filters
453 //The filter we use instead of add|edit_attachment action, reason see top
454 $this->wordpress->addFilter('attachment_fields_to_save', [$adminObjectController, 'saveAttachmentData']);
455
456 $this->wordpress->addFilter('manage_posts_columns', [$adminObjectController, 'addPostColumnsHeader']);
457 $this->wordpress->addFilter('manage_pages_columns', [$adminObjectController, 'addPostColumnsHeader']);
458
459 $this->wordpress->addFilter('manage_users_columns', [$adminObjectController, 'addUserColumnsHeader'], 10);
460 $this->wordpress->addFilter(
461 'manage_users_custom_column',
462 [$adminObjectController, 'addUserColumn'],
463 10,
464 3
465 );
466
467 foreach ($taxonomies as $taxonomy) {
468 $this->wordpress->addFilter(
469 'manage_edit-'.$taxonomy.'_columns',
470 [$adminObjectController, 'addTermColumnsHeader']
471 );
472 }
473
474 if ($this->config->lockFile() === true) {
475 $this->wordpress->addFilter('manage_media_columns', [$adminObjectController, 'addPostColumnsHeader']);
476 }
477
478 //Admin meta boxes
479 $postTypes = $this->objectHandler->getPostTypes();
480
481 foreach ($postTypes as $postType) {
482 // there is no need for a meta box for attachments if files are locked
483 if ($postType === ObjectHandler::ATTACHMENT_OBJECT_TYPE && $this->config->lockFile() !== true) {
484 continue;
485 }
486
487 $this->wordpress->addMetaBox(
488 'uma_post_access',
489 TXT_UAM_COLUMN_ACCESS,
490 [$adminObjectController, 'editPostContent'],
491 $postType,
492 'side'
493 );
494 }
495 }
496
497 //Clean up at deleting should always be done.
498 $this->wordpress->addAction('update_option_permalink_structure', [$adminObjectController, 'updatePermalink']);
499 $this->wordpress->addAction('delete_post', [$adminObjectController, 'removePostData']);
500 $this->wordpress->addAction('delete_attachment', [$adminObjectController, 'removePostData']);
501 $this->wordpress->addAction('delete_user', [$adminObjectController, 'removeUserData']);
502 $this->wordpress->addAction('delete_term', [$adminObjectController, 'removeTermData']);
503
504 $adminObjectController->checkRightsToEditContent();
505 }
506
507 /**
508 * Adds the actions and filers.
509 */
510 public function addActionsAndFilters()
511 {
512 $frontendController = $this->controllerFactory->createFrontendController();
513
514 //Actions
515 $this->wordpress->addAction('admin_menu', [$this, 'registerAdminMenu']);
516 $this->wordpress->addAction('admin_init', [$this, 'registerAdminActionsAndFilters']);
517 $this->wordpress->addAction('registered_post_type', [$this->objectHandler, 'registeredPostType'], 10, 2);
518 $this->wordpress->addAction('registered_taxonomy', [$this->objectHandler, 'registeredTaxonomy'], 10, 3);
519 $this->wordpress->addAction('registered_post_type', [$this->config, 'flushConfigParameters']);
520 $this->wordpress->addAction('registered_taxonomy', [$this->config, 'flushConfigParameters']);
521 $this->wordpress->addAction('wp_enqueue_scripts', [$frontendController, 'enqueueStylesAndScripts']);
522
523 //Filters
524 $getFile = $frontendController->getRequestParameter('uamgetfile');
525
526 if ($this->config->getRedirect() !== false || $getFile !== null) {
527 $this->wordpress->addFilter('wp_headers', [$frontendController, 'redirect'], 10, 2);
528 }
529
530 $this->wordpress->addFilter('wp_get_attachment_thumb_url', [$frontendController, 'getFileUrl'], 10, 2);
531 $this->wordpress->addFilter('wp_get_attachment_url', [$frontendController, 'getFileUrl'], 10, 2);
532 $this->wordpress->addFilter('posts_pre_query', [$frontendController, 'postsPreQuery'], 10, 2);
533 $this->wordpress->addFilter('the_posts', [$frontendController, 'showPosts']);
534 $this->wordpress->addFilter('get_attached_file', [$frontendController, 'getAttachedFile'], 10, 2);
535 $this->wordpress->addFilter('the_content', [$frontendController, 'showContent']);
536 $this->wordpress->addFilter('posts_where_paged', [$frontendController, 'showPostSql']);
537 $this->wordpress->addFilter('get_terms_args', [$frontendController, 'getTermArguments']);
538 $this->wordpress->addFilter('wp_get_nav_menu_items', [$frontendController, 'showCustomMenu']);
539 $this->wordpress->addFilter('comments_array', [$frontendController, 'showComment']);
540 $this->wordpress->addFilter('the_comments', [$frontendController, 'showComment']);
541 $this->wordpress->addFilter('get_pages', [$frontendController, 'showPages'], 20);
542 $this->wordpress->addFilter('get_terms', [$frontendController, 'showTerms'], 20);
543 $this->wordpress->addFilter('get_term', [$frontendController, 'showTerm'], 20, 2);
544 $this->wordpress->addFilter('get_ancestors', [$frontendController, 'showAncestors'], 20, 4);
545 $this->wordpress->addFilter('get_next_post_where', [$frontendController, 'showNextPreviousPost']);
546 $this->wordpress->addFilter('get_previous_post_where', [$frontendController, 'showNextPreviousPost']);
547 $this->wordpress->addFilter('post_link', [$frontendController, 'cachePostLinks'], 10, 2);
548 $this->wordpress->addFilter('edit_post_link', [$frontendController, 'showGroupMembership'], 10, 2);
549 $this->wordpress->addFilter('parse_query', [$frontendController, 'parseQuery']);
550 $this->wordpress->addFilter('getarchives_where', [$frontendController, 'showPostSql']);
551 $this->wordpress->addFilter('wp_count_posts', [$frontendController, 'showPostCount'], 10, 3);
552 $this->wordpress->addFilter('wpseo_sitemap_entry', [$frontendController, 'getWpSeoUrl'], 1, 3);
553 }
554 }
555