コード例 #1
0
 /**
  * @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;
 }
コード例 #2
0
 /**
  * @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;
 }
コード例 #3
0
	/**
	 * 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;
	}
コード例 #4
0
ファイル: UserGroupEditor.class.php プロジェクト: 0xLeon/WCF
	/**
	 * 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()));
		}
	}
コード例 #5
0
 /**
  * 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));
     }
 }