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]; }
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); } }