3 namespace wcf\system\category
;
5 use wcf\data\category\Category
;
6 use wcf\data\user\User
;
7 use wcf\system\cache\builder\CategoryACLOptionCacheBuilder
;
8 use wcf\system\SingletonFactory
;
12 * Handles the category permissions.
14 * @author Matthias Schmidt
15 * @copyright 2001-2019 WoltLab GmbH
16 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
18 class CategoryPermissionHandler
extends SingletonFactory
21 * cached category acl options
24 protected $categoryPermissions = [];
27 * Returns the acl options for the given category and for the given user.
28 * If no user is given, the active user is used.
30 * @param Category $category
34 public function getPermissions(Category
$category, ?User
$user = null)
37 $user = WCF
::getUser();
41 if (isset($this->categoryPermissions
[$category->categoryID
])) {
42 if (isset($this->categoryPermissions
[$category->categoryID
]['group'])) {
43 foreach ($user->getGroupIDs() as $groupID) {
44 if (isset($this->categoryPermissions
[$category->categoryID
]['group'][$groupID])) {
45 foreach ($this->categoryPermissions
[$category->categoryID
]['group'][$groupID] as $optionName => $optionValue) {
46 if (isset($permissions[$optionName])) {
47 $permissions[$optionName] = $permissions[$optionName] ||
$optionValue;
49 $permissions[$optionName] = $optionValue;
57 isset($this->categoryPermissions
[$category->categoryID
]['user'])
58 && isset($this->categoryPermissions
[$category->categoryID
]['user'][$user->userID
])
60 foreach ($this->categoryPermissions
[$category->categoryID
]['user'][$user->userID
] as $optionName => $optionValue) {
61 $permissions[$optionName] = $optionValue;
72 protected function init()
74 $this->categoryPermissions
= CategoryACLOptionCacheBuilder
::getInstance()->getData();
78 * Resets the category permission cache.
80 public function resetCache()
82 CategoryACLOptionCacheBuilder
::getInstance()->reset();