Файл: apwa/includes/acp/acp_referrers.php
Строк: 176
<?php
//
// file: includes/acp/acp_referrers.php
// author: abdev
// begin: 11/14/2010
// version: 0.0.6 - 07/16/2013
// licence: http://opensource.org/licenses/gpl-license.php GNU Public License
//
// ignore
if ( !defined('IN_PHPBB') )
{
exit;
}
class acp_referrers
{
var $u_action;
function main($id, $mode)
{
global $user, $phpEx, $phpbb_admin_path, $phpbb_root_path;
switch ( $mode )
{
case 'manage':
$this->tpl_name = 'acp_referrers';
$this->page_title = 'ACP_REF_MANAGE';
$this->ref_manage($id, $mode);
break;
case 'prune':
$this->tpl_name = 'acp_prune_referrers';
$this->page_title = 'ACP_REF_PRUNE';
$this->ref_prune($id, $mode);
break;
}
}
function ref_manage($id, $mode)
{
global $db, $user, $auth, $template, $cache;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
// define vars here
$action = request_var('action', '');
$ref_id = request_var('id', 0);
$start = request_var('start', 0);
$deletemark = !empty($_POST['delmarked']) ? true : false;
$deleteall = !empty($_POST['delall']) ? true : false;
$mark = request_var('mark', array(0));
// sort keys
$sort_days = request_var('st', 0);
$sort_key = request_var('sk', 'l');
$sort_dir = request_var('sd', 'd');
// form name
$form_name = 'acp_referrers';
add_form_key($form_name);
// whois (special case)
if ( $action == 'whois' )
{
include $phpbb_root_path . 'includes/functions_user.' . $phpEx;
$this->page_title = 'WHOIS';
$user->add_lang('acp/users');
$this->tpl_name = 'simple_body';
$ref_ip = request_var('ref_ip', '');
$domain = gethostbyaddr($ref_ip);
$ipwhois = user_ipwhois($ref_ip);
$template->assign_vars(array(
'MESSAGE_TITLE' => $user->lang('IP_WHOIS_FOR', $domain),
'MESSAGE_TEXT' => nl2br($ipwhois),
));
return;
}
if ( $deletemark || $deleteall )
{
if ( confirm_box(true) )
{
$sql_where = '';
if ( $deletemark && sizeof($mark) )
{
$sql_in = array();
foreach ( $mark as $marked )
{
$sql_in[] = $marked;
}
$sql_where = ' WHERE ' . $db->sql_in_set('ref_id', $sql_in);
unset($sql_in, $marked);
// get hosts for logs
$sql = 'SELECT ref_host FROM ' . REFERRERS_TABLE . $sql_where;
$result = $db->sql_query($sql);
$host_list = '';
while ( $row = $db->sql_fetchrow($result) )
{
$host_list .= empty($host_list) ? $row['ref_host'] : ', ' . $row['ref_host'];
}
$db->sql_freeresult($result);
}
if ( $sql_where )
{
$sql = 'DELETE FROM ' . REFERRERS_TABLE . $sql_where;
$db->sql_query($sql);
add_log('admin', 'LOG_REFERRER_REMOVED', $host_list);
}
else if ( $deleteall )
{
// clear table
switch ( $db->sql_layer )
{
case 'sqlite':
case 'firebird':
$db->sql_query('DELETE FROM ' . REFERRERS_TABLE);
break;
default:
$db->sql_query('TRUNCATE TABLE ' . REFERRERS_TABLE);
break;
}
add_log('admin', 'LOG_REFERRER_REMOVED_ALL');
}
}
else
{
confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
'i' => $id,
'start' => $start,
'delmarked' => $deletemark,
'delall' => $deleteall,
'mark' => $mark,
'st' => $sort_days,
'sk' => $sort_key,
'sd' => $sort_dir,
'mode' => $mode,
'id' => $ref_id,
'action' => $action,
)));
}
}
// sorting
$limit_days = array(0 => $user->lang['ALL_ENTRIES'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
$sort_by_text = array('h' => $user->lang['SORT_HOST'], 'v' => $user->lang['SORT_VISITS'], 'f' => $user->lang['SORT_FIRST'], 'l' => $user->lang['SORT_LAST']);
$sort_by_sql = array('h' => 'ref_host', 'v' => 'ref_hits', 'f' => 'ref_first', 'l' => 'ref_last');
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
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);
// define sort sql for use in displaying referrers
$sql_where = $sort_days ? (time() - ($sort_days * 86400)) : 0;
$sql_sort = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC');
$sql = 'SELECT * FROM ' . REFERRERS_TABLE . '
' . ($sort_days ? ' WHERE ' . ($sort_key == 'f' ? 'ref_first' : 'ref_last') . ' >= ' . $sql_where : '') . '
ORDER BY ' . $sql_sort;
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
while ( $row = $db->sql_fetchrow($result) )
{
$template->assign_block_vars('row', array(
'REF_ID' => (int) $row['ref_id'],
'REF_HOST' => $row['ref_host'],
'REF_URL_SHORT' => isset($row['ref_url'][50]) ? substr($row['ref_url'], 0, 50) . '...' : $row['ref_url'],
'REF_URL_FULL' => $row['ref_url'],
'REF_IP' => $row['ref_ip'],
'REF_HITS' => (int) $row['ref_hits'],
'REF_FIRST' => $user->format_date($row['ref_first']),
'REF_LAST' => $user->format_date($row['ref_last']),
'U_WHOIS' => $this->u_action . '&action=whois&ref_ip=' . $row['ref_ip'],
'U_DELETE' => $this->u_action . '&action=delete&id=' . $row['ref_id'],
));
}
$db->sql_freeresult($result);
// used for pagination
$sql = 'SELECT COUNT(ref_id) AS total_entries
FROM ' . REFERRERS_TABLE .
($sort_days ? ' WHERE ' . ($sort_key == 'f' ? 'ref_first' : 'ref_last') . ' >= ' . $sql_where : '') . '
ORDER BY ' . $sql_sort;
$result = $db->sql_query($sql);
$count = (int) $db->sql_fetchfield('total_entries');
$db->sql_freeresult($result);
// send to template
$template->assign_vars(array(
'U_ACTION' => $this->u_action,
'PAGINATION' => generate_pagination($this->u_action . '&' . $u_sort_param, $count, $config['topics_per_page'], $start, true),
'S_ON_PAGE' => on_page($count, $config['topics_per_page'], $start),
'S_LIMIT_DAYS' => $s_limit_days,
'S_SORT_KEY' => $s_sort_key,
'S_SORT_DIR' => $s_sort_dir,
'S_REFDEL' => $auth->acl_get('a_refdel'),
));
}
function ref_prune($id, $mode)
{
global $db, $user, $auth, $template, $cache;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
// load language
$user->add_lang('memberlist');
$submit = isset($_POST['submit']) ? true : false;
if ( $submit )
{
if ( confirm_box(true) )
{
$ref_host = request_var('ref_host', '', true);
$ref_hits_select = request_var('ref_hits_select', 'eq');
$ref_first_select = request_var('ref_first_select', 'lt');
$ref_last_select = request_var('ref_last_select', 'lt');
$ref_hits = request_var('ref_hits', '');
$ref_first = request_var('ref_first', '');
$ref_last = request_var('ref_last', '');
$ref_first = $ref_first ? explode('-', $ref_first) : array();
$ref_last = $ref_last ? explode('-', $ref_last) : array();
if ( (sizeof($ref_first) && sizeof($ref_first) != 3) || (sizeof($ref_last) && sizeof($ref_last) != 3) )
{
trigger_error($user->lang['REF_WRONG_DATE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$key_match = array('lt' => '<', 'gt' => '>', 'eq' => '=');
// define conditions here
$sql_where = '';
$sql_where .= $ref_host ? ($sql_where ? ' AND' : ' WHERE') . ' ref_host ' . $db->sql_like_expression(str_replace('*', $db->any_char, $ref_host)) : '';
$sql_where .= !empty($ref_hits) ? ($sql_where ? ' AND' : ' WHERE') . ' ref_hits ' . $key_match[$ref_hits_select] . ' ' . (int) $ref_hits : '';
$sql_where .= sizeof($ref_first) ? ($sql_where ? ' AND' : ' WHERE') . ' ref_first ' . $key_match[$ref_first_select] . ' ' . gmmktime(0, 0, 0, (int) $ref_first[1], (int) $ref_first[2], (int) $ref_first[0]) : '';
$sql_where .= sizeof($ref_last) ? ($sql_where ? ' AND' : ' WHERE') . ' ref_last ' . $key_match[$ref_last_select] . ' ' . gmmktime(0, 0, 0, (int) $ref_last[1], (int) $ref_last[2], (int) $ref_last[0]) : '';
if ( $sql_where )
{
$sql = 'SELECT COUNT(ref_id) AS total_entries FROM ' . REFERRERS_TABLE . "$sql_where";
$result = $db->sql_query($sql);
$count = (int) $db->sql_fetchfield('total_entries');
$db->sql_freeresult($result);
if ( !$count )
{
trigger_error($user->lang['REF_PRUNE_FAILURE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
}
$sql = 'DELETE FROM ' . REFERRERS_TABLE . "$sql_where";
$db->sql_query($sql);
add_log('admin', 'LOG_REFERRER_PRUNE');
trigger_error($user->lang['REF_PRUNE_SUCCESS'] . adm_back_link($this->u_action));
return;
}
else
{
confirm_box(false, $user->lang['ACP_REF_PRUNE_CONFIRM'], build_hidden_fields(array(
'i' => $id,
'mode' => $mode,
'submit' => 1,
'ref_hits_select' => request_var('ref_hits_select', ''),
'ref_hits' => request_var('ref_hits', ''),
'ref_host' => request_var('ref_host', '', true),
'ref_first_select' => request_var('ref_first_select', ''),
'ref_first' => request_var('ref_first', ''),
'ref_last_select' => request_var('ref_last_select', ''),
'ref_last' => request_var('ref_last', ''),
)));
}
}
$find_count = array('lt' => $user->lang['LESS_THAN'], 'eq' => $user->lang['EQUAL_TO'], 'gt' => $user->lang['MORE_THAN']);
$s_hits_count = '';
foreach ( $find_count as $key => $value )
{
$selected = ($key == 'eq') ? ' selected="selected"' : '';
$s_hits_count .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>';
}
unset($key);
$find_time = array('lt' => $user->lang['BEFORE'], 'gt' => $user->lang['AFTER']);
$s_find_first_time = '';
foreach ( $find_time as $key => $value )
{
$s_find_first_time .= '<option value="' . $key . '">' . $value . '</option>';
}
unset($key);
$s_find_last_time = '';
foreach ( $find_time as $key => $value )
{
$s_find_last_time .= '<option value="' . $key . '">' . $value . '</option>';
}
unset($key);
$template->assign_vars(array(
'U_ACTION' => $this->u_action,
'U_BACK' => $this->u_action,
'S_HITS_OPTIONS' => $s_hits_count,
'S_FIRST_OPTIONS' => $s_find_first_time,
'S_LAST_OPTIONS' => $s_find_last_time,
));
}
}