/** * @see \wcf\system\cache\builder\AbstractCacheBuilder::rebuild() */ public function rebuild(array $parameters) { $data = array('types' => array(), 'groups' => array()); // get all user groups $groupList = new UserGroupList(); $groupList->readObjects(); $groups = $groupList->getObjects(); foreach ($groups as $group) { if (!isset($data['types'][$group->groupType])) { $data['types'][$group->groupType] = array(); } $data['types'][$group->groupType][] = $group->groupID; $data['groups'][$group->groupID] = $group; } return $data; }
/** * @see wcf\system\cache\ICacheBuilder::getData() */ public function getData(array $cacheResource) { $data = array('types' => array(), 'groups' => array()); // get all user groups $groupList = new UserGroupList(); $groupList->sqlLimit = 0; $groupList->readObjects(); $groups = $groupList->getObjects(); foreach ($groups as $group) { if (!isset($data['types'][$group->groupType])) { $data['types'][$group->groupType] = array(); } $data['types'][$group->groupType][] = $group->groupID; $data['groups'][$group->groupID] = $group; } return $data; }
/** * Returns an array of ids of admin groups. * * @return array<integer> */ protected static function getAdminGroupIDs() { if (empty(self::$adminGroupIDs)) { $userGroupList = new UserGroupList(); $userGroupList->readObjects(); foreach ($userGroupList as $userGroup) { if ($userGroup->isAdminGroup()) { self::$adminGroupIDs[] = $userGroup->groupID; } } } return self::$adminGroupIDs; }
/** * Updates the value from the accessiblegroups option. * * @param integer $groupID this group is added or deleted in the value * @param boolean $delete flag for group deletion */ protected static function updateAccessibleGroups($groupID, $delete = false) { if ($delete) { $sql = "UPDATE wcf".WCF_N."_user_group_option_value SET optionValue = ? WHERE groupID = ? AND optionID = ?"; $updateStatement = WCF::getDB()->prepareStatement($sql); $sql = "SELECT groupID, optionValue, groupOption.optionID FROM wcf".WCF_N."_user_group_option groupOption LEFT JOIN wcf".WCF_N."_user_group_option_value optionValue ON (groupOption.optionID = optionValue.optionID) WHERE groupOption.optionname = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array('admin.user.accessibleGroups')); while ($row = $statement->fetchArray()) { $valueIDs = explode(',', $row['optionValue']); if (in_array($groupID, $valueIDs)) { $key = array_keys($valueIDs, $groupID); if (!empty($key)) unset($valueIDs[$key[0]]); $updateStatement->execute(array(implode(',', $valueIDs), $row['groupID'], $row['optionID'])); } } return; } $userGroupList = new UserGroupList(); $userGroupList->readObjects(); foreach ($userGroupList as $userGroup) { $groupIDs[] = $userGroup->groupID; if ($userGroup->isAdminGroup()) { $updateGroupIDs[] = $userGroup->groupID; } } $sql = "SELECT optionID FROM wcf".WCF_N."_user_group_option WHERE optionName = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array('admin.user.accessibleGroups')); $row = $statement->fetchArray(); $optionID = $row['optionID']; // update optionValue from groups which got all existing groups as value if (!empty($updateGroupIDs)) { $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add('groupID IN (?)', array($updateGroupIDs)); $conditionBuilder->add('optionID = ?', array($optionID)); $sql = "UPDATE wcf".WCF_N."_user_group_option_value SET optionValue = ? ".$conditionBuilder; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array_merge((array) implode(',', $groupIDs), $conditionBuilder->getParameters())); } }
/** * Updates the value from the accessiblegroups option. * * @param integer $groupID this group is added or deleted in the value * @param boolean $delete flag for group deletion */ protected static function updateAccessibleGroups($groupID, $delete = false) { $sql = "SELECT\toptionID\n\t\t\tFROM\twcf" . WCF_N . "_user_group_option\n\t\t\tWHERE\toptionName = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array('admin.user.accessibleGroups')); $optionID = $statement->fetchColumn(); $statement->closeCursor(); if (!$optionID) { throw new SystemException("Unable to find 'admin.user.accessibleGroups' user option"); } $userGroupList = new UserGroupList(); $userGroupList->getConditionBuilder()->add('user_group.groupID <> ?', array($groupID)); $userGroupList->readObjects(); $groupIDs = array(); foreach ($userGroupList as $userGroup) { $groupIDs[] = $userGroup->groupID; } $sql = "UPDATE\twcf" . WCF_N . "_user_group_option_value\n\t\t\tSET\toptionValue = ?\n\t\t\tWHERE\t\tgroupID = ?\n\t\t\t\tAND\toptionID = ?"; $updateStatement = WCF::getDB()->prepareStatement($sql); $sql = "SELECT\t\tgroupID, optionValue\n\t\t\tFROM\t\twcf" . WCF_N . "_user_group_option_value\n\t\t\tWHERE\t\toptionID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($optionID)); while ($row = $statement->fetchArray()) { $valueIDs = explode(',', $row['optionValue']); if ($delete) { $valueIDs = array_filter($valueIDs, function ($item) use($groupID) { return $item != $groupID; }); } else { if (count(array_diff($groupIDs, $valueIDs)) == 0) { $valueIDs[] = $groupID; } } $updateStatement->execute(array(implode(',', $valueIDs), $row['groupID'], $optionID)); } }