/** * @see UserSession::getGroupData() */ protected function getGroupData() { parent::getGroupData(); // get group permissions from cache (board_to_group) $groups = implode(",", $this->groupIDs); $groupsFileName = StringUtil::getHash(implode("-", $this->groupIDs)); // register cache resource WCF::getCache()->addResource('boardPermissions-' . $groups, WBB_DIR . 'cache/cache.boardPermissions-' . $groupsFileName . '.php', WBB_DIR . 'lib/system/cache/CacheBuilderBoardPermissions.class.php'); // get group data from cache $this->boardPermissions = WCF::getCache()->get('boardPermissions-' . $groups); if (isset($this->boardPermissions['groupIDs']) && $this->boardPermissions['groupIDs'] != $groups) { $this->boardPermissions = array(); } // get board moderator permissions $sql = "SELECT\t\t*\n\t\t\tFROM\t\twbb" . WBB_N . "_board_moderator\n\t\t\tWHERE\t\tgroupID IN (" . implode(',', $this->groupIDs) . ")\n\t\t\t\t\t" . ($this->userID ? " OR userID = " . $this->userID : '') . "\n\t\t\tORDER BY \tuserID DESC"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $boardID = $row['boardID']; unset($row['boardID'], $row['userID'], $row['groupID']); if (!isset($this->boardModeratorPermissions[$boardID])) { $this->boardModeratorPermissions[$boardID] = array(); } foreach ($row as $permission => $value) { if ($value == -1) { continue; } if (!isset($this->boardModeratorPermissions[$boardID][$permission])) { $this->boardModeratorPermissions[$boardID][$permission] = $value; } else { $this->boardModeratorPermissions[$boardID][$permission] = $value || $this->boardModeratorPermissions[$boardID][$permission]; } } } if (count($this->boardModeratorPermissions)) { require_once WBB_DIR . 'lib/data/board/Board.class.php'; Board::inheritPermissions(0, $this->boardModeratorPermissions); } }