/** * Quickly find out what moderation authority this user has * * What it does: * - builds the moderator, group and board level querys for the user * - stores the information on the current users moderation powers in $user_info['mod_cache'] and $_SESSION['mc'] * * @package Authorization */ function rebuildModCache() { global $user_info; $db = database(); // What groups can they moderate? $group_query = allowedTo('manage_membergroups') ? '1=1' : '0=1'; if ($group_query == '0=1') { $request = $db->query('', ' SELECT id_group FROM {db_prefix}group_moderators WHERE id_member = {int:current_member}', array('current_member' => $user_info['id'])); $groups = array(); while ($row = $db->fetch_assoc($request)) { $groups[] = $row['id_group']; } $db->free_result($request); if (empty($groups)) { $group_query = '0=1'; } else { $group_query = 'id_group IN (' . implode(',', $groups) . ')'; } } // Then, same again, just the boards this time! $board_query = allowedTo('moderate_forum') ? '1=1' : '0=1'; if ($board_query == '0=1') { $boards = boardsAllowedTo('moderate_board', true); if (empty($boards)) { $board_query = '0=1'; } else { $board_query = 'id_board IN (' . implode(',', $boards) . ')'; } } // What boards are they the moderator of? $boards_mod = array(); if (!$user_info['is_guest']) { require_once SUBSDIR . '/Boards.subs.php'; $boards_mod = boardsModerated($user_info['id']); } $mod_query = empty($boards_mod) ? '0=1' : 'b.id_board IN (' . implode(',', $boards_mod) . ')'; $_SESSION['mc'] = array('time' => time(), 'id' => $user_info['id'] && $user_info['name'] ? $user_info['id'] : 0, 'gq' => $group_query, 'bq' => $board_query, 'ap' => boardsAllowedTo('approve_posts'), 'mb' => $boards_mod, 'mq' => $mod_query); call_integration_hook('integrate_mod_cache'); $user_info['mod_cache'] = $_SESSION['mc']; // Might as well clean up some tokens while we are at it. cleanTokens(); }
/** * Builds the 'query_see_board' element for a certain member * * @package Members * @param integer $id_member a valid member id */ function memberQuerySeeBoard($id_member) { global $modSettings; $member = getBasicMemberData($id_member, array('moderation' => true)); if (empty($member['additional_groups'])) { $groups = array($member['id_group'], $member['id_post_group']); } else { $groups = array_merge(array($member['id_group'], $member['id_post_group']), explode(',', $member['additional_groups'])); } foreach ($groups as $k => $v) { $groups[$k] = (int) $v; } $groups = array_unique($groups); if (in_array(1, $groups)) { return '1=1'; } else { require_once SUBSDIR . '/Boards.subs.php'; $boards_mod = boardsModerated($id_member); $mod_query = empty($boards_mod) ? '' : ' OR b.id_board IN (' . implode(',', $boards_mod) . ')'; return '((FIND_IN_SET(' . implode(', b.member_groups) != 0 OR FIND_IN_SET(', $groups) . ', b.member_groups) != 0)' . (!empty($modSettings['deny_boards_access']) ? ' AND (FIND_IN_SET(' . implode(', b.deny_member_groups) = 0 AND FIND_IN_SET(', $groups) . ', b.deny_member_groups) = 0)' : '') . $mod_query . ')'; } }