Esempio n. 1
0
function get_labels_and_badges($group_list)
{
    global $settings, $context;
    $group_title = null;
    $group_color = '';
    $groups = get_char_membergroup_data();
    $group_limit = 2;
    $badges = '';
    $combined_badges = [];
    $badges_done = 0;
    foreach ($group_list as $id_group) {
        if (empty($groups[$id_group])) {
            continue;
        }
        if ($group_title === null) {
            $group_title = $groups[$id_group]['group_name'];
            $group_color = $groups[$id_group]['online_color'];
        }
        if (empty($groups[$id_group]['parsed_icons'])) {
            continue;
        }
        $badges .= '<div>' . $groups[$id_group]['parsed_icons'] . '</div>';
        $combined_badges[] = '<div class="char_group_title"' . (!empty($groups[$id_group]['online_color']) ? ' style="color:' . $groups[$id_group]['online_color'] . '"' : '') . '>' . $groups[$id_group]['group_name'] . '</div><div class="char_group_badges">' . $groups[$id_group]['parsed_icons'] . '</div>';
        $badges_done++;
        if ($badges_done >= $group_limit) {
            break;
        }
    }
    return ['title' => $group_title, 'color' => $group_color, 'badges' => $badges, 'combined_badges' => $combined_badges];
}
Esempio n. 2
0
function CharacterList()
{
    global $context, $smcFunc, $txt, $scripturl, $modSettings;
    global $image_proxy_enabled, $image_proxy_secret;
    isAllowedTo('view_mlist');
    loadTemplate('Profile-Chars');
    $context['page_title'] = $txt['chars_menu_title'];
    $context['sub_template'] = 'character_list';
    $context['linktree'][] = array('name' => $txt['chars_menu_title'], 'url' => $scripturl . '?action=characters');
    if (isset($_GET['sa']) && $_GET['sa'] == 'sheets') {
        return CharacterSheetList();
    }
    $context['filterable_groups'] = [];
    foreach (get_char_membergroup_data() as $id_group => $group) {
        if ($group['is_character']) {
            $context['filterable_groups'][$id_group] = $group;
        }
    }
    $context['filter_groups'] = [];
    $filter = [];
    if (isset($_POST['filter']) && is_array($_POST['filter'])) {
        $filter = $_POST['filter'];
    } elseif (isset($_GET['filter'])) {
        $filter = explode(',', base64_decode($_GET['filter']));
    }
    if (!empty($filter)) {
        if (allowedTo('admin_forum') && in_array(-1, $filter)) {
            $context['filter_groups'] = true;
        } else {
            foreach ($filter as $filter_val) {
                if (isset($context['filterable_groups'][$filter_val])) {
                    $context['filter_groups'][] = (int) $filter_val;
                }
            }
        }
    }
    $clauses = array('chars.is_main = {int:not_main}');
    $vars = array('not_main' => 0);
    $filter_url = '';
    if (!empty($context['filter_groups'])) {
        if (is_array($context['filter_groups'])) {
            $vars['filter_groups'] = $context['filter_groups'];
            $this_clause = [];
            foreach ($context['filter_groups'] as $group) {
                $this_clause[] = 'FIND_IN_SET(' . $group . ', chars.char_groups)';
            }
            $clauses[] = '(chars.main_char_group IN ({array_int:filter_groups}) OR (' . implode(' OR ', $this_clause) . '))';
            $filter_url = ';filter=' . base64_encode(implode(',', $context['filter_groups']));
        } else {
            $clauses[] = '(chars.main_char_group = 0 AND chars.char_groups = {empty})';
            $filter_url = ';filter=' . base64_encode('-1');
        }
    }
    $request = $smcFunc['db_query']('', '
		SELECT COUNT(id_character)
		FROM {db_prefix}characters AS chars
		WHERE ' . implode(' AND ', $clauses), $vars);
    list($context['char_count']) = $smcFunc['db_fetch_row']($request);
    $smcFunc['db_free_result']($request);
    $context['items_per_page'] = 12;
    $context['page_index'] = constructPageIndex($scripturl . '?action=characters' . $filter_url . ';start=%1$d', $_REQUEST['start'], $context['char_count'], $context['items_per_page'], true);
    $vars['start'] = $_REQUEST['start'];
    $vars['limit'] = $context['items_per_page'];
    $context['char_list'] = [];
    if (!empty($context['char_count'])) {
        if (!empty($modSettings['avatar_max_width_external'])) {
            addInlineCss('
.char_list_avatar { width: ' . $modSettings['avatar_max_width_external'] . 'px; height: ' . $modSettings['avatar_max_height_external'] . 'px; }
.char_list_name { max-width: ' . $modSettings['avatar_max_width_external'] . 'px; }');
        }
        $request = $smcFunc['db_query']('', '
			SELECT chars.id_character, chars.id_member, chars.character_name,
				chars.avatar, chars.posts, chars.date_created,
				chars.main_char_group, chars.char_groups, chars.char_sheet,
				chars.retired
			FROM {db_prefix}characters AS chars
			WHERE ' . implode(' AND ', $clauses) . '
			ORDER BY chars.character_name
			LIMIT {int:start}, {int:limit}', $vars);
        while ($row = $smcFunc['db_fetch_assoc']($request)) {
            if ($image_proxy_enabled && !empty($row['avatar']) && stripos($row['avatar'], 'http://') !== false) {
                $row['avatar'] = $boardurl . '/proxy.php?request=' . urlencode($row['avatar']) . '&hash=' . md5($row['avatar'] . $image_proxy_secret);
            } elseif (empty($row['avatar'])) {
                $row['avatar'] = $modSettings['avatar_url'] . '/default.png';
            }
            $groups = !empty($row['main_char_group']) ? array($row['main_char_group']) : [];
            $groups = array_merge($groups, explode(',', $row['char_groups']));
            $details = get_labels_and_badges($groups);
            $row['group_title'] = $details['title'];
            $row['group_color'] = $details['color'];
            $row['group_badges'] = $details['badges'];
            $context['char_list'][] = $row;
        }
        $smcFunc['db_free_result']($request);
    }
}