findObjectType($url)) { return null; } switch ($objectType) { case 'wiki page': $objectId = ! empty($_REQUEST['page']) ? $_REQUEST['page'] : null; break; case 'file gallery': $filegallib = TikiLib::lib('filegal'); $objectId = ! empty($_REQUEST['galleryId']) ? $_REQUEST['galleryId'] : null; break; case 'tracker': $objectId = ! empty($_REQUEST['trackerId']) ? $_REQUEST['trackerId'] : null; $itemId = ! empty($_REQUEST['itemId']) ? $_REQUEST['itemId'] : null; if ($itemId) { $objectId = $itemId; $objectType = 'trackeritem'; } break; case 'forum': $objectId = ! empty($_REQUEST['forumId']) ? $_REQUEST['forumId'] : null; break; case 'group': $objectId = ! empty($_REQUEST['group']) ? $_REQUEST['group'] : null; break; case 'articles': $objectId = ! empty($_REQUEST['articleId']) ? $_REQUEST['articleId'] : null; break; case 'blog': $objectId = ! empty($_REQUEST['blogId']) ? $_REQUEST['blogId'] : null; break; case 'calendar': $objectId = ! empty($_REQUEST['calendarId']) ? $_REQUEST['calendarId'] : null; break; case 'sheet': $objectId = ! empty($_REQUEST['sheetId']) ? $_REQUEST['sheetId'] : null; break; } $all = TikiLib::lib('user')->get_permissions(0, -1, 'permName_asc', '', $this->findPermType($objectType), '', true); $accessor = \Perms::get(['type' => $objectType, 'object' => $objectId]); $loaded = $accessor->getResolver()->dump(); $results = []; foreach ($all['data'] as $permDef) { foreach ($loaded['perms'] as $perm => $groups) { if ($perm != str_replace('tiki_p_', '', $permDef['name'])) { continue; } $results[$permDef['type']][$perm] = $groups; } } $loaded['perms'] = $results; return $loaded; } protected function findObjectType($url) { $objectPaths = [ 'wiki page' => [ 'tiki-index.php', 'tiki-listpages.php', 'tiki-editpage.php', 'tiki-copypage.php', 'tiki-pagehistory.php' ], 'file gallery' => [ 'tiki-list_file_gallery.php' ], 'tracker' => [ 'tiki-list_trackers.php', 'tiki-view_tracker.php', 'tiki-view_tracker_item.php', 'tiki-admin_tracker_fields.php' ], 'forum' => [ 'tiki-forums.php', 'tiki-view_forum.php', 'tiki-admin_forums.php', 'tiki-forum_import.php'], 'group' => [ 'tiki-admingroups.php' ], 'articles' => [ 'tiki-list_articles.php', 'tiki-view_articles.php', 'tiki-edit_article.php', 'tiki-read_article.php' ], 'blog' => [ 'tiki-list_blogs.php', 'tiki-edit_blog.php', 'tiki-blog_post.php', 'tiki-list_posts.php', 'tiki-view_blog.php', 'tiki-view_blog_post.php' ], 'calendar' => [ 'tiki-calendar.php', 'tiki-calendar_edit_item.php', 'tiki-admin_calendars.php', 'tiki-calendar_import.php' ], 'sheet' => [ 'tiki-sheets.php', 'tiki-view_sheets.php', 'tiki-graph_sheet.php', 'tiki-history_sheets.php', 'tiki-export_sheet.php', 'tiki-import_sheet.php', ], ]; foreach ($objectPaths as $object => $paths) { foreach ($paths as $path) { if (strpos($url, $path) !== false) { return $object; } } } return null; } protected function findPermType($objectType) { switch ($objectType) { case 'wiki page': return 'wiki'; case 'file gallery': return 'file galleries'; case 'tracker': case 'trackeritem': return 'trackers'; case 'forum': return 'forums'; case 'group': return 'group'; case 'articles': return 'articles'; case 'blog': return 'blogs'; case 'calendar': return 'calendar'; case 'sheet': return 'sheet'; } } }