$condition .= db_quote(' AND ( redirect=?s OR redirect IS NULL) AND object_id=?i', '', 0); } $sorting = db_sort($params, $sortings, 'timestamp', 'desc'); if (!empty($group_by)) { $group_by = ' GROUP BY ' . $group_by; } if (!empty($params['items_per_page'])) { $params['total_items'] = db_get_field("SELECT COUNT(*) FROM ?:hw_404 ?p WHERE ?p ?p ?p", $join, $condition, $group_by, $sorting); $limit = db_paginate($params['page'], $params['items_per_page']); } $errors = db_get_hash_array("SELECT " . implode(', ', $fields) . " FROM ?:hw_404 ?p WHERE ?p ?p ?p ?p", 'id', $join, $condition, $group_by, $sorting, $limit); //generate urls if (!empty($_REQUEST['show']) && $_REQUEST['show'] == 'all' && !empty($errors)) { foreach ($errors as $key => $error) { if ($error['object_id'] > 0) { $errors[$key]['redirect'] = fn_hw_404_fixer_generate_url($error['type'], $error['object_id']); } } } Registry::get('view')->assign('errors', $errors); Registry::get('view')->assign('search', $params); #stats $hw_404_stats = array(); $hw_404_stats['total'] = (int) db_get_field('SELECT COUNT(*) FROM ?:hw_404'); $hw_404_stats['redirected'] = (int) db_get_field('SELECT COUNT(*) FROM ?:hw_404 WHERE (`redirect` IS NOT NULL AND `redirect`!=?s) OR (object_id>0)', ''); $hw_404_stats['pending'] = $hw_404_stats['total'] - $hw_404_stats['redirected']; Registry::get('view')->assign('hw_404_stats', $hw_404_stats); } if ($mode == 'update') { $error_data = db_get_row('SELECT * FROM ?:hw_404 WHERE id=?i', $_REQUEST['id']); Registry::get('view')->assign('error_data', $error_data);
function fn_hw_404_fixer_before_dispatch() { if (AREA == 'C') { if (Registry::get('runtime.controller') == '_no_page') { $url = $_SERVER['REDIRECT_URL']; //REQUEST_URI if (empty($url)) { $url = $_SERVER['REQUEST_URI']; } if (empty($url)) { return false; } //exit if no url $redirect = ''; $redirect_type = 301; $data = db_get_row('SELECT * FROM ?:hw_404 WHERE MD5(url)=?s', md5($url)); if (empty($data)) { #insert $vars = array(); $vars['url'] = $url; $vars['created'] = TIME; $vars['referer'] = !empty($_SERVER['HTTP_REFERER']) ? (string) $_SERVER['HTTP_REFERER'] : ''; $vars['hits'] = 1; $vars['company_id'] = Registry::get('runtime.company_id'); $vars['url_type'] = strtolower(trim(end(explode('.', $vars['url'])))); if (!in_array($vars['url_type'], array('html', 'htm', 'php', 'asp', 'aspx', 'jpg', 'png', 'pdf', 'ico', 'txt'))) { $vars['url_type'] = ''; } $vars['redirect_type'] = 301; #search in redirects $seo_redirects = db_get_field("SHOW TABLES LIKE '?:seo_redirects'"); if (!empty($seo_redirects)) { $new_url_data = db_get_row('SELECT * FROM `?:seo_redirects` WHERE `src`=?s', $vars['url']); if (!empty($new_url_data)) { if (!empty($new_url_data['dest'])) { $redirect = $vars['redirect'] = $new_url_data['dest']; } elseif ((int) $new_url_data['object_id'] > 0) { if ($new_url_data['type'] == 'c') { $redirect = $vars['redirect'] = fn_url('categories.view&category_id=' . $new_url_data['object_id'], 'C', 'http'); } if ($new_url_data['type'] == 'p') { $redirect = $vars['redirect'] = fn_url('products.view&product_id=' . $new_url_data['object_id'], 'C', 'http'); } } } } db_query("INSERT INTO ?:hw_404 ?e", $vars); } else { if (empty($data['redirect']) && $data['object_id'] > 0) { $data['redirect'] = fn_hw_404_fixer_generate_url($data['type'], $data['object_id'], $data['lang_code'], 'http'); } $redirect = $data['redirect']; $redirect_type = $data['redirect_type']; db_query('UPDATE ?:hw_404 SET hits = hits+1 WHERE id=?i', $data['id']); } #redirect if (!empty($redirect)) { if (!in_array((int) $redirect_type, array(301, 302))) { $redirect_type = 301; } //security mesures header("Location: {$redirect}", true, $redirect_type); exit(0); } } } }