/** * @see CacheBuilder::getData() */ public function getData($cacheResource) { list($cache, $groupIDs) = explode('-', $cacheResource['cache']); $data = array(); $sql = "SELECT\t\t*\n\t\t\tFROM\t\twbb" . WBB_N . "_board_to_group\n\t\t\tWHERE\t\tgroupID IN (" . $groupIDs . ")"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $boardID = $row['boardID']; unset($row['boardID'], $row['groupID']); foreach ($row as $permission => $value) { if ($value == -1) { continue; } if (!isset($data[$boardID][$permission])) { $data[$boardID][$permission] = $value; } else { $data[$boardID][$permission] = $value || $data[$boardID][$permission]; } } } if (count($data)) { require_once WBB_DIR . 'lib/data/board/Board.class.php'; Board::inheritPermissions(0, $data); } $data['groupIDs'] = $groupIDs; return $data; }
/** * @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); } }
/** * @see UserSession::getGroupData() */ protected function getGroupData() { parent::getGroupData(); // get user permissions (board_to_user) $userPermissions = array(); $sql = "SELECT\t\t*\n\t\t\tFROM\t\twbb" . WBB_N . "_board_to_user\n\t\t\tWHERE\t\tuserID = " . $this->userID; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $boardID = $row['boardID']; unset($row['boardID'], $row['userID']); $userPermissions[$boardID] = $row; } if (count($userPermissions)) { require_once WBB_DIR . 'lib/data/board/Board.class.php'; Board::inheritPermissions(0, $userPermissions); foreach ($userPermissions as $boardID => $row) { foreach ($row as $key => $val) { if ($val != -1) { $this->boardPermissions[$boardID][$key] = $val; } } } } // get group leader status if (MODULE_MODERATED_USER_GROUP == 1) { $sql = "SELECT\tCOUNT(*) AS count\n\t\t\t\tFROM\twcf" . WCF_N . "_group_leader leader, wcf" . WCF_N . "_group usergroup\n\t\t\t\tWHERE\t(leader.leaderUserID = " . $this->userID . "\n\t\t\t\t\tOR leader.leaderGroupID IN (" . implode(',', $this->getGroupIDs()) . "))\n\t\t\t\t\tAND leader.groupID = usergroup.groupID"; $row = WCF::getDB()->getFirstRow($sql); $this->groupData['wcf.group.isGroupLeader'] = $row['count'] ? 1 : 0; } }