diff --git includes/functions_content.php includes/functions_content.php index ce70fb1..ebfbaf7 100644 --- includes/functions_content.php +++ includes/functions_content.php @@ -1213,8 +1213,20 @@ function get_username_string($mode, $user_id, $username, $username_colour = '', { global $phpbb_root_path, $phpEx, $user, $auth; - $profile_url = ''; + static $profile_cache; + static $profile_url_base; + + if ($mode == 'profile' && isset($profile_cache[$user_id])) + { + // We don't cache 'no_profile' mode + return $profile_cache[$user_id]; + } + $username_colour = ($username_colour) ? '#' . $username_colour : ''; + if ($mode == 'colour') + { + return $username_colour; + } if ($guest_username === false) { @@ -1225,64 +1237,66 @@ function get_username_string($mode, $user_id, $username, $username_colour = '', $username = ($user_id && $user_id != ANONYMOUS) ? $username : ((!empty($guest_username)) ? $guest_username : $user->lang['GUEST']); } - // Only show the link if not anonymous - if ($mode != 'no_profile' && $user_id && $user_id != ANONYMOUS) + if ($mode == 'username') + { + return $username; + } + + if (!isset($profile_url_base)) { - // Do not show the link if the user is already logged in but do not have u_viewprofile permissions (relevant for bots mostly). - // For all others the link leads to a login page or the profile. - if ($user->data['user_id'] != ANONYMOUS && !$auth->acl_get('u_viewprofile')) + if ($user->data['user_id'] != ANONYMOUS && $auth->acl_get('u_viewprofile')) { - $profile_url = ''; + $profile_url_base = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile'); } else { - $profile_url = ($custom_profile_url !== false) ? $custom_profile_url . '&u=' . (int) $user_id : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . (int) $user_id); + $profile_url_base = ''; } } + + // Only show the link if not anonymous + if ($mode != 'no_profile' && $user_id && $user_id != ANONYMOUS && $profile_url_base) + { + $profile_url = (($custom_profile_url !== false) ? $custom_profile_url : $profile_url_base) . '&u=' . (int) $user_id; + } else { $profile_url = ''; } - switch ($mode) - { - case 'profile': - return $profile_url; - break; - - case 'username': - return $username; - break; - case 'colour': - return $username_colour; - break; + if ($mode == 'profile') + { + return $profile_url; + } - case 'no_profile': - case 'full': - default: + // If we arive here mode is 'profile' or 'no_profile' + $tpl = ''; + if (!$profile_url && !$username_colour) + { + $tpl = '{USERNAME}'; + } + else if (!$profile_url && $username_colour) + { + $tpl = '{USERNAME}'; + } + else if ($profile_url && !$username_colour) + { + $tpl = '{USERNAME}'; + } + else if ($profile_url && $username_colour) + { + $tpl = '{USERNAME}'; + } - $tpl = ''; - if (!$profile_url && !$username_colour) - { - $tpl = '{USERNAME}'; - } - else if (!$profile_url && $username_colour) - { - $tpl = '{USERNAME}'; - } - else if ($profile_url && !$username_colour) - { - $tpl = '{USERNAME}'; - } - else if ($profile_url && $username_colour) - { - $tpl = '{USERNAME}'; - } + $profile = str_replace(array('{PROFILE_URL}', '{USERNAME_COLOUR}', '{USERNAME}'), array($profile_url, $username_colour, $username), $tpl); - return str_replace(array('{PROFILE_URL}', '{USERNAME_COLOUR}', '{USERNAME}'), array($profile_url, $username_colour, $username), $tpl); - break; + if ($mode != 'no_profile') + { + $profile_cache[$user_id] = $profile; } + + return $profile; } /**