diff --git a/phpBB/index.php b/phpBB/index.php index d797ae1230..ac6ab8a134 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -86,52 +86,10 @@ if (($mark_notification = $request->variable('mark_notification', 0))) display_forums('', $config['load_moderators']); -$order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend'; -// Grab group details for legend display -if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) -{ - $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend - FROM ' . GROUPS_TABLE . ' - WHERE group_legend > 0 - ORDER BY ' . $order_legend . ' ASC'; -} -else -{ - $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type, g.group_legend - FROM ' . GROUPS_TABLE . ' g - LEFT JOIN ' . USER_GROUP_TABLE . ' ug - ON ( - g.group_id = ug.group_id - AND ug.user_id = ' . $user->data['user_id'] . ' - AND ug.user_pending = 0 - ) - WHERE g.group_legend > 0 - AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ') - ORDER BY g.' . $order_legend . ' ASC'; -} -$result = $db->sql_query($sql); - /** @var \phpbb\group\helper $group_helper */ $group_helper = $phpbb_container->get('group_helper'); -$legend = array(); -while ($row = $db->sql_fetchrow($result)) -{ - $colour_text = ($row['group_colour']) ? ' style="color:#' . $row['group_colour'] . '"' : ''; - $group_name = $group_helper->get_name($row['group_name']); - - if ($row['group_name'] == 'BOTS' || ($user->data['user_id'] != ANONYMOUS && !$auth->acl_get('u_viewprofile'))) - { - $legend[] = '' . $group_name . ''; - } - else - { - $legend[] = '' . $group_name . ''; - } -} -$db->sql_freeresult($result); - -$legend = implode($user->lang['COMMA_SEPARATOR'], $legend); +$group_helper->display_legend($db, $template); // Generate birthday list if required ... $show_birthdays = ($config['load_birthdays'] && $config['allow_birthdays'] && $auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel')); @@ -219,7 +177,6 @@ $template->assign_vars(array( 'TOTAL_USERS' => $user->lang('TOTAL_USERS', (int) $config['num_users']), 'NEWEST_USER' => $user->lang('NEWEST_USER', get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), - 'LEGEND' => $legend, 'BIRTHDAY_LIST' => (empty($birthday_list)) ? '' : implode($user->lang['COMMA_SEPARATOR'], $birthday_list), 'S_LOGIN_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login'), diff --git a/phpBB/phpbb/group/helper.php b/phpBB/phpbb/group/helper.php index c56c08c0a4..4098846709 100644 --- a/phpBB/phpbb/group/helper.php +++ b/phpBB/phpbb/group/helper.php @@ -17,9 +17,11 @@ use phpbb\auth\auth; use phpbb\avatar\helper as avatar_helper; use phpbb\cache\service as cache; use phpbb\config\config; +use phpbb\db\driver\driver_interface; use phpbb\language\language; use phpbb\event\dispatcher_interface; use phpbb\path_helper; +use phpbb\template\template; use phpbb\user; class helper @@ -294,8 +296,56 @@ class helper * * @return array Avatar data */ - function get_avatar($group_row, $alt = 'GROUP_AVATAR', $ignore_config = false, $lazy = false) + public function get_avatar($group_row, $alt = 'GROUP_AVATAR', $ignore_config = false, $lazy = false) { return $this->avatar_helper->get_group_avatar($group_row, $alt, $ignore_config, $lazy); } + + /** + * Display groups legend + * + * @param driver_interface $db + * @param template $template + * @return void + */ + public function display_legend(driver_interface $db, template $template): void + { + $order_legend = $this->config['legend_sort_groupname'] ? 'group_name' : 'group_legend'; + + // Grab group details for legend display + if ($this->auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) + { + $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend + FROM ' . GROUPS_TABLE . ' + WHERE group_legend > 0 + ORDER BY ' . $order_legend . ' ASC'; + } + else + { + $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type, g.group_legend + FROM ' . GROUPS_TABLE . ' g + LEFT JOIN ' . USER_GROUP_TABLE . ' ug + ON ( + g.group_id = ug.group_id + AND ug.user_id = ' . $this->user->data['user_id'] . ' + AND ug.user_pending = 0 + ) + WHERE g.group_legend > 0 + AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $this->user->data['user_id'] . ') + ORDER BY g.' . $order_legend . ' ASC'; + } + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + $show_group_url = $row['group_name'] != 'BOTS' && $this->auth->acl_get('u_viewprofile'); + + $template->assign_block_vars('LEGEND', [ + 'GROUP_COLOR' => $row['group_colour'] ?: '', + 'GROUP_NAME' => $this->get_name($row['group_name']), + 'GROUP_URL' => $show_group_url ? append_sid("{$this->path_helper->get_phpbb_root_path()}memberlist.{$this->path_helper->get_php_ext()}", 'mode=group&g=' . $row['group_id']) : '', + ]); + } + $db->sql_freeresult($result); + } } diff --git a/phpBB/styles/prosilver/template/index_body.html b/phpBB/styles/prosilver/template/index_body.html index 4b41e2b83c..7b69b92a5f 100644 --- a/phpBB/styles/prosilver/template/index_body.html +++ b/phpBB/styles/prosilver/template/index_body.html @@ -41,10 +41,24 @@
- {TOTAL_USERS_ONLINE} ({L_ONLINE_EXPLAIN})
{RECORD_USERS}
+ {TOTAL_USERS_ONLINE} ({L_ONLINE_EXPLAIN})
{RECORD_USERS}
{LOGGED_IN_USER_LIST}
-
{L_LEGEND}{L_COLON} {LEGEND}
+ {% if LEGEND|length > 0 %}
+ {% apply spaceless %}
+
+
+ {{ lang('LEGEND') ~ lang('COLON') }}
+ {% for group in LEGEND %}
+ {% if group.GROUP_URL %}
+ {{ group.GROUP_NAME }}{% if not loop.last %}, {% endif %}
+ {% else %}
+ {{ group.GROUP_NAME }}{% if not loop.last %}, {% endif %}
+ {% endif %}
+ {% endfor %}
+
+ {% endapply %}
+ {% endif %}
{L_LEGEND}{L_COLON} {LEGEND}
+{% if LEGEND|length > 0 %} + {% apply spaceless %} ++ + {{ lang('LEGEND') ~ lang('COLON') }} + {% for group in LEGEND %} + {% if group.GROUP_URL %} + {{ group.GROUP_NAME }}{% if not loop.last %}, {% endif %} + {% else %} + {{ group.GROUP_NAME }}{% if not loop.last %}, {% endif %} + {% endif %} + {% endfor %} + +
+ {% endapply %} +{% endif %}