| Conditions | 28 |
| Paths | 7560 |
| Total Lines | 169 |
| Code Lines | 93 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 28 | function getMembersOnlineStats($membersOnlineOptions) |
||
| 29 | { |
||
| 30 | global $smcFunc, $scripturl, $user_info, $modSettings, $txt; |
||
| 31 | |||
| 32 | // The list can be sorted in several ways. |
||
| 33 | $allowed_sort_options = array( |
||
| 34 | '', // No sorting. |
||
| 35 | 'log_time', |
||
| 36 | 'real_name', |
||
| 37 | 'show_online', |
||
| 38 | 'online_color', |
||
| 39 | 'group_name', |
||
| 40 | ); |
||
| 41 | // Default the sorting method to 'most recent online members first'. |
||
| 42 | if (!isset($membersOnlineOptions['sort'])) |
||
| 43 | { |
||
| 44 | $membersOnlineOptions['sort'] = 'log_time'; |
||
| 45 | $membersOnlineOptions['reverse_sort'] = true; |
||
| 46 | } |
||
| 47 | |||
| 48 | // Not allowed sort method? Bang! Error! |
||
| 49 | elseif (!in_array($membersOnlineOptions['sort'], $allowed_sort_options)) |
||
| 50 | { |
||
| 51 | loadLanguage('Errors'); |
||
| 52 | trigger_error($txt['get_members_online_stats_invalid_sort'], E_USER_NOTICE); |
||
| 53 | } |
||
| 54 | |||
| 55 | // Initialize the array that'll be returned later on. |
||
| 56 | $membersOnlineStats = array( |
||
| 57 | 'users_online' => array(), |
||
| 58 | 'list_users_online' => array(), |
||
| 59 | 'online_groups' => array(), |
||
| 60 | 'num_guests' => 0, |
||
| 61 | 'num_spiders' => 0, |
||
| 62 | 'num_buddies' => 0, |
||
| 63 | 'num_users_hidden' => 0, |
||
| 64 | 'num_users_online' => 0, |
||
| 65 | ); |
||
| 66 | |||
| 67 | // Get any spiders if enabled. |
||
| 68 | $spiders = array(); |
||
| 69 | $spider_finds = array(); |
||
| 70 | if (!empty($modSettings['show_spider_online']) && ($modSettings['show_spider_online'] < 3 || allowedTo('admin_forum')) && !empty($modSettings['spider_name_cache'])) |
||
| 71 | $spiders = $smcFunc['json_decode']($modSettings['spider_name_cache'], true); |
||
| 72 | |||
| 73 | // Load the users online right now. |
||
| 74 | $request = $smcFunc['db_query']('', ' |
||
| 75 | SELECT |
||
| 76 | lo.id_member, lo.log_time, lo.id_spider, mem.real_name, mem.member_name, mem.show_online, |
||
| 77 | mg.online_color, mg.id_group, mg.group_name, mg.hidden, mg.group_type, mg.id_parent |
||
| 78 | FROM {db_prefix}log_online AS lo |
||
| 79 | LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = lo.id_member) |
||
| 80 | LEFT JOIN {db_prefix}membergroups AS mg ON (mg.id_group = CASE WHEN mem.id_group = {int:reg_mem_group} THEN mem.id_post_group ELSE mem.id_group END)', |
||
| 81 | array( |
||
| 82 | 'reg_mem_group' => 0, |
||
| 83 | ) |
||
| 84 | ); |
||
| 85 | while ($row = $smcFunc['db_fetch_assoc']($request)) |
||
| 86 | { |
||
| 87 | if (empty($row['real_name'])) |
||
| 88 | { |
||
| 89 | // Do we think it's a spider? |
||
| 90 | if ($row['id_spider'] && isset($spiders[$row['id_spider']])) |
||
| 91 | { |
||
| 92 | $spider_finds[$row['id_spider']] = isset($spider_finds[$row['id_spider']]) ? $spider_finds[$row['id_spider']] + 1 : 1; |
||
| 93 | $membersOnlineStats['num_spiders']++; |
||
| 94 | } |
||
| 95 | // Guests are only nice for statistics. |
||
| 96 | $membersOnlineStats['num_guests']++; |
||
| 97 | |||
| 98 | continue; |
||
| 99 | } |
||
| 100 | |||
| 101 | elseif (empty($row['show_online']) && empty($membersOnlineOptions['show_hidden'])) |
||
| 102 | { |
||
| 103 | // Just increase the stats and don't add this hidden user to any list. |
||
| 104 | $membersOnlineStats['num_users_hidden']++; |
||
| 105 | continue; |
||
| 106 | } |
||
| 107 | |||
| 108 | // Some basic color coding... |
||
| 109 | if (!empty($row['online_color'])) |
||
| 110 | $link = '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '" style="color: ' . $row['online_color'] . ';">' . $row['real_name'] . '</a>'; |
||
| 111 | else |
||
| 112 | $link = '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>'; |
||
| 113 | |||
| 114 | // Buddies get counted and highlighted. |
||
| 115 | $is_buddy = in_array($row['id_member'], $user_info['buddies']); |
||
| 116 | if ($is_buddy) |
||
| 117 | { |
||
| 118 | $membersOnlineStats['num_buddies']++; |
||
| 119 | $link = '<strong>' . $link . '</strong>'; |
||
| 120 | } |
||
| 121 | |||
| 122 | // A lot of useful information for each member. |
||
| 123 | $membersOnlineStats['users_online'][$row[$membersOnlineOptions['sort']] . '_' . $row['member_name']] = array( |
||
| 124 | 'id' => $row['id_member'], |
||
| 125 | 'username' => $row['member_name'], |
||
| 126 | 'name' => $row['real_name'], |
||
| 127 | 'group' => $row['id_group'], |
||
| 128 | 'href' => $scripturl . '?action=profile;u=' . $row['id_member'], |
||
| 129 | 'link' => $link, |
||
| 130 | 'is_buddy' => $is_buddy, |
||
| 131 | 'hidden' => empty($row['show_online']), |
||
| 132 | 'is_last' => false, |
||
| 133 | ); |
||
| 134 | |||
| 135 | // This is the compact version, simply implode it to show. |
||
| 136 | $membersOnlineStats['list_users_online'][$row[$membersOnlineOptions['sort']] . '_' . $row['member_name']] = empty($row['show_online']) ? '<em>' . $link . '</em>' : $link; |
||
| 137 | |||
| 138 | // Store all distinct (primary) membergroups that are shown. |
||
| 139 | if (!isset($membersOnlineStats['online_groups'][$row['id_group']])) |
||
| 140 | $membersOnlineStats['online_groups'][$row['id_group']] = array( |
||
| 141 | 'id' => $row['id_group'], |
||
| 142 | 'name' => $row['group_name'], |
||
| 143 | 'color' => $row['online_color'], |
||
| 144 | 'hidden' => $row['hidden'], |
||
| 145 | 'type' => $row['group_type'], |
||
| 146 | 'parent' => $row['id_parent'], |
||
| 147 | ); |
||
| 148 | } |
||
| 149 | $smcFunc['db_free_result']($request); |
||
| 150 | |||
| 151 | // If there are spiders only and we're showing the detail, add them to the online list - at the bottom. |
||
| 152 | if (!empty($spider_finds) && $modSettings['show_spider_online'] > 1) |
||
| 153 | { |
||
| 154 | $sort = $membersOnlineOptions['sort'] === 'log_time' && $membersOnlineOptions['reverse_sort'] ? 0 : 'zzz_'; |
||
| 155 | foreach ($spider_finds as $id => $count) |
||
| 156 | { |
||
| 157 | $link = $spiders[$id] . ($count > 1 ? ' (' . $count . ')' : ''); |
||
| 158 | $membersOnlineStats['users_online'][$sort . '_' . $spiders[$id]] = array( |
||
| 159 | 'id' => 0, |
||
| 160 | 'username' => $spiders[$id], |
||
| 161 | 'name' => $link, |
||
| 162 | 'group' => $txt['spiders'], |
||
| 163 | 'href' => '', |
||
| 164 | 'link' => $link, |
||
| 165 | 'is_buddy' => false, |
||
| 166 | 'hidden' => false, |
||
| 167 | 'is_last' => false, |
||
| 168 | ); |
||
| 169 | $membersOnlineStats['list_users_online'][$sort . '_' . $spiders[$id]] = $link; |
||
| 170 | } |
||
| 171 | } |
||
| 172 | |||
| 173 | // Time to sort the list a bit. |
||
| 174 | if (!empty($membersOnlineStats['users_online'])) |
||
| 175 | { |
||
| 176 | // Determine the sort direction. |
||
| 177 | $sortFunction = empty($membersOnlineOptions['reverse_sort']) ? 'ksort' : 'krsort'; |
||
| 178 | |||
| 179 | // Sort the two lists. |
||
| 180 | $sortFunction($membersOnlineStats['users_online']); |
||
| 181 | $sortFunction($membersOnlineStats['list_users_online']); |
||
| 182 | |||
| 183 | // Mark the last list item as 'is_last'. |
||
| 184 | $userKeys = array_keys($membersOnlineStats['users_online']); |
||
| 185 | $membersOnlineStats['users_online'][end($userKeys)]['is_last'] = true; |
||
| 186 | } |
||
| 187 | |||
| 188 | // Also sort the membergroups. |
||
| 189 | ksort($membersOnlineStats['online_groups']); |
||
| 190 | |||
| 191 | // Hidden and non-hidden members make up all online members. |
||
| 192 | $membersOnlineStats['num_users_online'] = count($membersOnlineStats['users_online']) + $membersOnlineStats['num_users_hidden'] - (isset($modSettings['show_spider_online']) && $modSettings['show_spider_online'] > 1 ? count($spider_finds) : 0); |
||
| 193 | |||
| 194 | call_integration_hook('integrate_online_stats', array(&$membersOnlineStats)); |
||
| 195 | |||
| 196 | return $membersOnlineStats; |
||
| 197 | } |
||
| 269 | ?> |