| Conditions | 39 |
| Paths | > 20000 |
| Total Lines | 252 |
| Lines | 8 |
| Ratio | 3.17 % |
| 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 |
||
| 135 | public function view_route($cat_id, $page = 1, $sort_days = 0, $sort_key = '', $sort_dir = '', $mode = '') |
||
| 136 | { |
||
| 137 | if (false === $this->categorie->get($cat_id)) |
||
| 138 | { |
||
| 139 | throw new \phpbb\exception\http_exception(404, 'DIR_ERROR_NO_CATS'); |
||
| 140 | } |
||
| 141 | |||
| 142 | $start = ($page - 1) * $this->config['dir_show']; |
||
| 143 | |||
| 144 | $default_sort_days = 0; |
||
| 145 | $default_sort_key = (string) substr($this->config['dir_default_order'], 0, 1); |
||
| 146 | $default_sort_dir = (string) substr($this->config['dir_default_order'], 2); |
||
| 147 | |||
| 148 | $sort_days = (!$sort_days) ? $this->request->variable('st', $default_sort_days) : $sort_days; |
||
| 149 | $sort_key = (!$sort_key) ? $this->request->variable('sk', $default_sort_key) : $sort_key; |
||
| 150 | $sort_dir = (!$sort_dir) ? $this->request->variable('sd', $default_sort_dir) : $sort_dir; |
||
| 151 | $link_list = $rowset = array(); |
||
| 152 | |||
| 153 | // Categorie ordering options |
||
| 154 | $limit_days = array(0 => $this->language->lang('SEE_ALL'), 1 => $this->language->lang('1_DAY'), 7 => $this->language->lang('7_DAYS'), 14 => $this->language->lang('2_WEEKS'), 30 => $this->language->lang('1_MONTH'), 90 => $this->language->lang('3_MONTHS'), 180 => $this->language->lang('6_MONTHS'), 365 => $this->language->lang('1_YEAR')); |
||
| 155 | $sort_by_text = array('a' => $this->language->lang('AUTHOR'), 't' => $this->language->lang('POST_TIME'), 'r' => $this->language->lang('DIR_COMMENTS_ORDER'), 's' => $this->language->lang('DIR_NAME_ORDER'), 'v' => $this->language->lang('DIR_NB_CLICKS_ORDER')); |
||
| 156 | $sort_by_sql = array('a' => 'u.username_clean', 't' => array('l.link_time', 'l.link_id'), 'r' => 'l.link_comment', 's' => 'LOWER(l.link_name)', 'v' => 'l.link_view'); |
||
| 157 | |||
| 158 | $s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = ''; |
||
| 159 | gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param, $default_sort_days, $default_sort_key, $default_sort_dir); |
||
| 160 | |||
| 161 | $u_sort_param = ($sort_days === $default_sort_days && $sort_key == $default_sort_key && $sort_dir == $default_sort_dir) ? array() : array('sort_days' => $sort_days, 'sort_key' => $sort_key, 'sort_dir' => $sort_dir); |
||
| 162 | |||
| 163 | // Are we watching this categorie? |
||
| 164 | $s_watching_categorie = array( |
||
| 165 | 'link' => '', |
||
| 166 | 'link_toggle' => '', |
||
| 167 | 'title' => '', |
||
| 168 | 'title_toggle' => '', |
||
| 169 | 'is_watching' => false, |
||
| 170 | ); |
||
| 171 | |||
| 172 | if ($this->config['email_enable'] && $this->user->data['is_registered']) |
||
| 173 | { |
||
| 174 | $notify_status = (isset($this->categorie->data['notify_status'])) ? $this->categorie->data['notify_status'] : null; |
||
| 175 | |||
| 176 | if (($message = $this->categorie->watch_categorie($mode, $s_watching_categorie, $this->user->data['user_id'], $cat_id, $notify_status))) |
||
| 177 | { |
||
| 178 | return $this->helper->message($message); |
||
| 179 | } |
||
| 180 | } |
||
| 181 | |||
| 182 | // A deadline has been selected |
||
| 183 | if ($sort_days) |
||
| 184 | { |
||
| 185 | $min_post_time = time() - ($sort_days * 86400); |
||
| 186 | |||
| 187 | $sql = 'SELECT COUNT(link_id) AS nb_links |
||
| 188 | FROM ' . $this->links_table . ' |
||
| 189 | WHERE link_cat = ' . (int) $cat_id . ' |
||
| 190 | AND link_time >= ' . (int) $min_post_time; |
||
| 191 | $result = $this->db->sql_query($sql); |
||
| 192 | $nb_links = (int) $this->db->sql_fetchfield('nb_links'); |
||
| 193 | $this->db->sql_freeresult($result); |
||
| 194 | |||
| 195 | if ($this->request->is_set_post('sort')) |
||
| 196 | { |
||
| 197 | $start = 0; |
||
| 198 | } |
||
| 199 | $sql_limit_time = " AND l.link_time >= $min_post_time"; |
||
| 200 | } |
||
| 201 | else |
||
| 202 | { |
||
| 203 | $sql_limit_time = ''; |
||
| 204 | $nb_links = (int) $this->categorie->data['cat_links']; |
||
| 205 | } |
||
| 206 | |||
| 207 | // Make sure $start is set to the last page if it exceeds the amount |
||
| 208 | $start = $this->pagination->validate_start($start, $this->config['dir_show'], $nb_links); |
||
| 209 | |||
| 210 | // Build navigation links |
||
| 211 | $this->categorie->generate_dir_nav($this->categorie->data); |
||
| 212 | |||
| 213 | // Jumpbox |
||
| 214 | $this->categorie->make_cat_jumpbox(); |
||
| 215 | |||
| 216 | $base_url = array( |
||
| 217 | 'routes' => 'ernadoo_phpbbdirectory_dynamic_route_' . $cat_id, |
||
| 218 | 'params' => array_merge(array('cat_id' => $cat_id), $u_sort_param), |
||
| 219 | ); |
||
| 220 | |||
| 221 | $this->pagination->generate_template_pagination($base_url, 'pagination', 'page', $nb_links, $this->config['dir_show'], $start); |
||
| 222 | |||
| 223 | $this->template->assign_vars(array( |
||
| 224 | 'CAT_NAME' => $this->categorie->data['cat_name'], |
||
| 225 | |||
| 226 | 'S_SELECT_SORT_DIR' => $s_sort_dir, |
||
| 227 | 'S_SELECT_SORT_KEY' => $s_sort_key, |
||
| 228 | 'S_SELECT_SORT_DAYS' => $s_limit_days, |
||
| 229 | 'S_CATLIST' => $this->categorie->make_cat_select($cat_id), |
||
| 230 | 'S_PAGE_ACTION' => $this->helper->route('ernadoo_phpbbdirectory_dynamic_route_' . $cat_id, array('page' => $page)), |
||
| 231 | 'S_CAT_ID' => $cat_id, |
||
| 232 | |||
| 233 | 'TOTAL_LINKS' => $this->language->lang('DIR_NB_LINKS', (int) $nb_links), |
||
| 234 | |||
| 235 | 'U_NEW_SITE' => $this->helper->route('ernadoo_phpbbdirectory_new_controller', array('cat_id' => $cat_id)), |
||
| 236 | |||
| 237 | 'U_VIEW_CAT' => $this->helper->route('ernadoo_phpbbdirectory_dynamic_route_' . $cat_id), |
||
| 238 | 'U_WATCH_CAT' => $s_watching_categorie['link'], |
||
| 239 | 'U_WATCH_CAT_TOGGLE' => $s_watching_categorie['link_toggle'], |
||
| 240 | 'S_WATCH_CAT_TITLE' => $s_watching_categorie['title'], |
||
| 241 | 'S_WATCH_CAT_TOGGLE' => $s_watching_categorie['title_toggle'], |
||
| 242 | 'S_WATCHING_CAT' => $s_watching_categorie['is_watching'], |
||
| 243 | )); |
||
| 244 | |||
| 245 | // If the user is trying to reach late pages, start searching from the end |
||
| 246 | $store_reverse = false; |
||
| 247 | $sql_limit = $this->config['dir_show']; |
||
| 248 | if ($start > $nb_links / 2) |
||
| 249 | { |
||
| 250 | $store_reverse = true; |
||
| 251 | |||
| 252 | // Select the sort order |
||
| 253 | $direction = (($sort_dir == 'd') ? 'ASC' : 'DESC'); |
||
| 254 | |||
| 255 | $sql_limit = $this->pagination->reverse_limit($start, $sql_limit, $nb_links); |
||
| 256 | $sql_start = $this->pagination->reverse_start($start, $sql_limit, $nb_links); |
||
| 257 | } |
||
| 258 | else |
||
| 259 | { |
||
| 260 | // Select the sort order |
||
| 261 | $direction = (($sort_dir == 'd') ? 'DESC' : 'ASC'); |
||
| 262 | $sql_start = $start; |
||
| 263 | } |
||
| 264 | |||
| 265 | View Code Duplication | if (is_array($sort_by_sql[$sort_key])) |
|
| 266 | { |
||
| 267 | $sql_sort_order = implode(' ' . $direction . ', ', $sort_by_sql[$sort_key]) . ' ' . $direction; |
||
| 268 | } |
||
| 269 | else |
||
| 270 | { |
||
| 271 | $sql_sort_order = $sort_by_sql[$sort_key] . ' ' . $direction; |
||
| 272 | } |
||
| 273 | |||
| 274 | // Grab just the sorted link ids |
||
| 275 | $sql_array = array( |
||
| 276 | 'SELECT' => 'l.link_id', |
||
| 277 | 'FROM' => array( |
||
| 278 | $this->links_table => 'l'), |
||
| 279 | 'LEFT_JOIN' => array( |
||
| 280 | array( |
||
| 281 | 'FROM' => array(USERS_TABLE => 'u'), |
||
| 282 | 'ON' => 'l.link_user_id = u.user_id' |
||
| 283 | ), |
||
| 284 | ), |
||
| 285 | 'WHERE' => "l.link_cat = $cat_id |
||
| 286 | AND l.link_active = 1 |
||
| 287 | $sql_limit_time", |
||
| 288 | 'ORDER_BY' => $sql_sort_order |
||
| 289 | ); |
||
| 290 | |||
| 291 | $sql = $this->db->sql_build_query('SELECT', $sql_array); |
||
| 292 | $result = $this->db->sql_query_limit($sql, $sql_limit, $sql_start); |
||
| 293 | |||
| 294 | while ($row = $this->db->sql_fetchrow($result)) |
||
| 295 | { |
||
| 296 | $link_list[] = (int) $row['link_id']; |
||
| 297 | } |
||
| 298 | $this->db->sql_freeresult($result); |
||
| 299 | |||
| 300 | if (count($link_list)) |
||
| 301 | { |
||
| 302 | // We get links, informations about poster, votes and number of comments |
||
| 303 | $sql_array = array( |
||
| 304 | 'SELECT' => 'l.link_id, l.link_cat, l.link_url, l.link_user_id, l.link_comment, l. link_description, l.link_banner, l.link_rss, l. link_uid, l.link_bitfield, l.link_flags, l.link_vote, l.link_note, l.link_view, l.link_time, l.link_name, l.link_flag, l.link_thumb, u.user_id, u.username, u.user_colour, v.vote_user_id', |
||
| 305 | 'FROM' => array( |
||
| 306 | $this->links_table => 'l'), |
||
| 307 | 'LEFT_JOIN' => array( |
||
| 308 | array( |
||
| 309 | 'FROM' => array(USERS_TABLE => 'u'), |
||
| 310 | 'ON' => 'l.link_user_id = u.user_id' |
||
| 311 | ), |
||
| 312 | array( |
||
| 313 | 'FROM' => array($this->votes_table => 'v'), |
||
| 314 | 'ON' => 'l.link_id = v.vote_link_id AND v.vote_user_id = ' . $this->user->data['user_id'] |
||
| 315 | ) |
||
| 316 | ), |
||
| 317 | 'WHERE' => $this->db->sql_in_set('l.link_id', $link_list) |
||
| 318 | ); |
||
| 319 | |||
| 320 | $sql = $this->db->sql_build_query('SELECT', $sql_array); |
||
| 321 | $result = $this->db->sql_query($sql); |
||
| 322 | |||
| 323 | while ($site = $this->db->sql_fetchrow($result)) |
||
| 324 | { |
||
| 325 | $rowset[$site['link_id']] = $site; |
||
| 326 | } |
||
| 327 | $this->db->sql_freeresult($result); |
||
| 328 | |||
| 329 | $link_list = ($store_reverse) ? array_reverse($link_list) : $link_list; |
||
| 330 | |||
| 331 | $votes_status = ($this->categorie->data['cat_allow_votes']) ? true : false; |
||
| 332 | $comments_status = ($this->categorie->data['cat_allow_comments']) ? true : false; |
||
| 333 | |||
| 334 | foreach ($link_list as $link_id) |
||
| 335 | { |
||
| 336 | $site = &$rowset[$link_id]; |
||
| 337 | |||
| 338 | $s_flag = $this->link->display_flag($site); |
||
| 339 | $s_note = $this->link->display_note($site['link_note'], $site['link_vote'], $votes_status); |
||
| 340 | $s_thumb = $this->link->display_thumb($site); |
||
| 341 | $s_vote = $this->link->display_vote($site); |
||
| 342 | $s_banner = $this->link->display_bann($site); |
||
| 343 | $s_rss = $this->link->display_rss($site); |
||
| 344 | |||
| 345 | $edit_allowed = ($this->user->data['is_registered'] && ($this->auth->acl_get('m_edit_dir') || ($this->user->data['user_id'] == $site['link_user_id'] && $this->auth->acl_get('u_edit_dir')))); |
||
| 346 | $delete_allowed = ($this->user->data['is_registered'] && ($this->auth->acl_get('m_delete_dir') || ($this->user->data['user_id'] == $site['link_user_id'] && $this->auth->acl_get('u_delete_dir')))); |
||
| 347 | |||
| 348 | $this->template->assign_block_vars('site', array( |
||
| 349 | 'BANNER' => $s_banner, |
||
| 350 | 'COUNT' => $this->language->lang('DIR_NB_CLICKS', (int) $site['link_view']), |
||
| 351 | 'DESCRIPTION' => generate_text_for_display($site['link_description'], $site['link_uid'], $site['link_bitfield'], $site['link_flags']), |
||
| 352 | 'LINK_ID' => $site['link_id'], |
||
| 353 | 'NAME' => $site['link_name'], |
||
| 354 | 'NB_COMMENT' => ($comments_status) ? $this->language->lang('DIR_NB_COMMS', (int) $site['link_comment']) : '', |
||
| 355 | 'NB_VOTE' => $this->language->lang('DIR_NB_VOTES', (int) $site['link_vote']), |
||
| 356 | 'NOTE' => $s_note, |
||
| 357 | 'RSS' => $s_rss, |
||
| 358 | 'TIME' => ($site['link_time']) ? $this->user->format_date($site['link_time']) : '', |
||
| 359 | 'USER' => get_username_string('full', $site['link_user_id'], $site['username'], $site['user_colour']), |
||
| 360 | 'VOTE_LIST' => ($votes_status) ? $s_vote : '', |
||
| 361 | |||
| 362 | 'IMG_FLAG' => $s_flag, |
||
| 363 | 'ON_CLICK' => "onclick=\"window.open('".$this->helper->route('ernadoo_phpbbdirectory_view_controller', array('link_id' => (int) $site['link_id']))."'); return false;\"", |
||
| 364 | |||
| 365 | 'S_NEW_LINK' => (((time() - $site['link_time']) / 86400) <= $this->config['dir_new_time']) ? true : false, |
||
| 366 | |||
| 367 | 'U_COMMENT' => ($comments_status) ? $this->helper->route('ernadoo_phpbbdirectory_comment_view_controller', array('link_id' => (int) $site['link_id'])) : '', |
||
| 368 | 'U_DELETE' => $delete_allowed ? $this->helper->route('ernadoo_phpbbdirectory_delete_controller', array('cat_id' => (int) $cat_id, 'link_id' => (int) $site['link_id'], '_referer' => $this->helper->get_current_url())) : '', |
||
| 369 | 'U_EDIT' => $edit_allowed ? $this->helper->route('ernadoo_phpbbdirectory_edit_controller', array('cat_id' => (int) $cat_id, 'link_id' => (int) $site['link_id'])) : '', |
||
| 370 | 'U_FORM_VOTE' => ($votes_status) ? $this->helper->route('ernadoo_phpbbdirectory_vote_controller', array('cat_id' => (int) $site['link_cat'], 'link_id' => (int) $site['link_id'])) : '', |
||
| 371 | 'U_LINK' => $site['link_url'], |
||
| 372 | 'U_THUMB' => $s_thumb, |
||
| 373 | )); |
||
| 374 | } |
||
| 375 | } |
||
| 376 | else |
||
| 377 | { |
||
| 378 | $this->template->assign_block_vars('no_draw_link', array()); |
||
| 379 | } |
||
| 380 | |||
| 381 | $page_title = $this->language->lang('DIRECTORY') . ' - ' . $this->categorie->data['cat_name']; |
||
| 382 | |||
| 383 | $this->categorie->display(); |
||
| 384 | |||
| 385 | return $this->helper->render('view_cat.html', $page_title); |
||
| 386 | } |
||
| 387 | |||
| 432 |