コード例 #1
0
ファイル: Auth.subs.php プロジェクト: KeiroD/Elkarte
/**
 * 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();
}
コード例 #2
0
ファイル: Members.subs.php プロジェクト: Ralkage/Elkarte
/**
 * 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 . ')';
    }
}