View source
<?php
require_once dirname(__FILE__) . '/visitors.block.inc';
require_once dirname(__FILE__) . '/visitors.exit.inc';
function visitors_help($section) {
switch ($section) {
case 'visitors':
return t('Visitors info.');
default:
return '';
}
}
function visitors_permission() {
return array(
'administer visitors' => array(
'title' => t('Administer visitors module'),
),
'access visitors' => array(
'title' => t('View visitors menu'),
),
'access visitors days of month' => array(
'title' => t('View days of month report'),
),
'access visitors days of week' => array(
'title' => t('View days of week report'),
),
'access visitors hit details' => array(
'title' => t('View hit details report'),
),
'access visitors hosts' => array(
'title' => t('View hosts report'),
),
'access visitors host details' => array(
'title' => t('View host details report'),
),
'access visitors hours' => array(
'title' => t('View hours report'),
),
'access visitors monthly history' => array(
'title' => t('View monthly history report'),
),
'access visitors node' => array(
'title' => t('View node report'),
),
'access visitors recent hits' => array(
'title' => t('View recent hits report'),
),
'access visitors referers' => array(
'title' => t('View referers report'),
),
'access visitors top pages' => array(
'title' => t('View top pages report'),
),
'access visitors user activity' => array(
'title' => t('View user activity report'),
),
);
}
function visitors_menu() {
$items = array();
$items['admin/config/system/visitors'] = array(
'title' => 'Visitors settings',
'description' => 'Configure visitors settings.',
'access arguments' => array(
'administer visitors',
),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'visitors_admin_settings',
),
'type' => MENU_NORMAL_ITEM,
'file' => 'forms/admin_settings.inc',
);
$items['visitors'] = array(
'title' => 'Visitors',
'description' => "Visitors info.",
'position' => 'left',
'page callback' => 'system_admin_menu_block_page',
'access arguments' => array(
'access visitors',
),
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),
);
$items['visitors/hits'] = array(
'title' => 'Recent hits',
'description' => 'View pages that have recently been visited.',
'page callback' => 'visitors_recent_hits',
'access arguments' => array(
'access visitors recent hits',
),
'file' => 'visitors.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['visitors/pages'] = array(
'title' => 'Top pages',
'description' => 'View pages that have been hit frequently.',
'page callback' => 'visitors_top_pages',
'access arguments' => array(
'access visitors top pages',
),
'weight' => 1,
'file' => 'visitors.admin.inc',
);
$items['visitors/monthly_history'] = array(
'title' => 'Monthly history',
'description' => 'View pages count per month.',
'page callback' => 'visitors_monthly_history',
'access arguments' => array(
'access visitors monthly history',
),
'file' => 'visitors.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['visitors/monthly_history/chart'] = array(
'title' => 'Monthly history',
'description' => 'View pages count per month.',
'page callback' => 'chart_visitors_monthly_history',
'access arguments' => array(
'access visitors monthly history',
),
'file' => 'visitors.admin.inc',
'type' => MENU_CALLBACK,
);
$items['visitors/days_of_month'] = array(
'title' => 'Days of month',
'description' => 'View pages count per day of month.',
'page callback' => 'visitors_days_of_month',
'access arguments' => array(
'access visitors days of month',
),
'file' => 'visitors.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['visitors/days_of_month/chart'] = array(
'title' => 'Days of month',
'description' => 'View pages count per day of month.',
'page callback' => 'chart_visitors_days_of_month',
'access arguments' => array(
'access visitors days of month',
),
'file' => 'visitors.admin.inc',
'type' => MENU_CALLBACK,
);
$items['visitors/days_of_week'] = array(
'title' => 'Days of week',
'description' => 'View pages count per day of week.',
'page callback' => 'visitors_days_of_week',
'access arguments' => array(
'access visitors days of week',
),
'file' => 'visitors.admin.inc',
);
$items['visitors/days_of_week/chart'] = array(
'title' => 'Days of week',
'description' => 'View pages count per day of week.',
'page callback' => 'chart_visitors_days_of_week',
'access arguments' => array(
'access visitors days of week',
),
'file' => 'visitors.admin.inc',
'type' => MENU_CALLBACK,
);
$items['visitors/hours'] = array(
'title' => 'Hours',
'description' => 'View pages count per hour.',
'page callback' => 'visitors_hours',
'access arguments' => array(
'access visitors hours',
),
'file' => 'visitors.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['visitors/hours/chart'] = array(
'title' => 'Hours',
'description' => 'View pages count per hour.',
'page callback' => 'chart_visitors_hours',
'access arguments' => array(
'access visitors hours',
),
'file' => 'visitors.admin.inc',
'type' => MENU_CALLBACK,
);
$items['visitors/hosts'] = array(
'title' => 'Hosts',
'description' => 'View pages count per host.',
'page callback' => 'visitors_hosts',
'access arguments' => array(
'access visitors hosts',
),
'file' => 'visitors.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['visitors/user_activity'] = array(
'title' => 'User activity',
'description' => 'View user activity report (hits, nodes, comments).',
'page callback' => 'visitors_user_activity',
'access arguments' => array(
'access visitors user activity',
),
'file' => 'visitors.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['visitors/referers'] = array(
'title' => 'Referers',
'description' => 'View referer list.',
'page callback' => 'visitors_referer_list',
'access arguments' => array(
'access visitors referers',
),
'file' => 'visitors.admin.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['visitors/hosts/%'] = array(
'title' => 'Hits',
'description' => 'View host access log.',
'page callback' => 'visitors_host_hits',
'page arguments' => array(
2,
),
'access arguments' => array(
'access visitors host details',
),
'file' => 'visitors.admin.inc',
'type' => MENU_CALLBACK,
);
$items['visitors/hits/%'] = array(
'title' => 'Details',
'description' => 'View access log.',
'page callback' => 'visitors_hit_details',
'page arguments' => array(
2,
),
'access arguments' => array(
'access visitors hit details',
),
'type' => MENU_CALLBACK,
'file' => 'visitors.admin.inc',
);
$items['node/%node/visitors'] = array(
'title' => 'Visitors',
'page callback' => 'visitors_node',
'access callback' => 'user_access',
'access arguments' => array(
'access visitors node',
),
'type' => MENU_LOCAL_TASK,
'weight' => 2,
'file' => 'visitors.admin.inc',
);
return $items;
}
function visitors_theme() {
return array(
'visitors_block_view' => array(
'arguments' => array(),
),
);
}
function visitors_cron() {
$visitors_flush_log_timer = variable_get('visitors_flush_log_timer', 0);
if ($visitors_flush_log_timer > 0) {
db_delete('visitors')
->condition('visitors_date_time', time() - $visitors_flush_log_timer, '<')
->execute();
}
}
function visitors_get_mysql_current_timezone() {
$query = 'SHOW variables LIKE \'time_zone\'';
return db_query($query)
->fetchField(1);
}
function visitors_get_timezone() {
$timezone = variable_get('date_default_timezone', 0);
if (variable_get('configurable_timezones', 0) == '1') {
global $user;
if ($user->timezone !== NULL) {
$timezone = $user->timezone;
}
}
return $timezone;
}
function visitors_timezone_diff() {
$timezone = visitors_get_timezone();
return timezone_offset_get(timezone_open($timezone), date_create());
}
function visitors_date_format_sql($field_name, $format) {
switch (Database::getConnection()
->driver()) {
case 'pgsql':
return visitors_pgsql_date_format_sql($field_name, $format);
break;
case 'sqlite':
return visitors_sqlite_date_format_sql($field_name, $format);
break;
default:
return visitors_mysql_date_format_sql($field_name, $format);
}
}
function visitors_mysql_date_format_sql($field_name, $format) {
$mysql_current_timezone = visitors_get_mysql_current_timezone();
$diff = visitors_timezone_diff();
$timezone = (int) ($diff / 60 / 60);
$timezone .= sprintf(':%02d', abs($diff) / 60 % 60);
if ($timezone >= 0) {
$timezone = '+' . $timezone;
}
return sprintf("date_format(convert_tz(from_unixtime(%s), '%s', '%s'), '%s')", $field_name, $mysql_current_timezone, $timezone, $format);
}
function visitors_pgsql_date_format_sql($field_name, $format) {
static $format_array = array(
'%H' => "to_char(TIMESTAMP 'epoch' + (%s + (%d)) * INTERVAL '1 second', 'HH24')",
'%a' => "to_char(TIMESTAMP 'epoch' + (%s + (%d)) * INTERVAL '1 second', 'dy')",
'%w' => "cast(to_char(TIMESTAMP 'epoch' + (%s + (%d)) * INTERVAL '1 second', 'D') as integer) - 1",
'%d' => "to_char(TIMESTAMP 'epoch' + (%s + (%d)) * INTERVAL '1 second', 'DD')",
'%Y %M' => "to_char(TIMESTAMP 'epoch' + (%s + (%d)) * INTERVAL '1 second', 'YYYY Month')",
'%Y%m' => "to_char(TIMESTAMP 'epoch' + (%s + (%d)) * INTERVAL '1 second', 'YYYYMM')",
);
if (isset($format_array[$format])) {
$diff = visitors_timezone_diff();
$result = sprintf($format_array[$format], $field_name, $diff);
}
else {
$result = '';
}
return $result;
}
function visitors_sqlite_date_format_sql($field_name, $format) {
static $format_array = array(
'%H' => "strftime('%%H', %s + (%d), 'unixepoch')",
'%a' => "case strftime('%%w', %s + (%d), 'unixepoch')\n when '0' then 'Sun'\n when '1' then 'Mon'\n when '2' then 'Tue'\n when '3' then 'Wed'\n when '4' then 'Thu'\n when '5' then 'Fri'\n when '6' then 'Sat'\n else '' end",
'%w' => "strftime('%%w', %s + (%d), 'unixepoch')",
'%d' => "strftime('%%d', %s + (%d), 'unixepoch')",
'%Y %M' => "strftime('%%Y ', %1\$s + (%2\$d), 'unixepoch') ||\n case strftime('%%m', %1\$s + (%2\$d), 'unixepoch')\n when '01' then 'January'\n when '02' then 'Febuary'\n when '03' then 'March'\n when '04' then 'April'\n when '05' then 'May'\n when '06' then 'June'\n when '07' then 'July'\n when '08' then 'August'\n when '09' then 'September'\n when '10' then 'October'\n when '11' then 'November'\n when '12' then 'December'\n else '' end",
'%Y%m' => "strftime('%%Y%%m', %s + (%d), 'unixepoch')",
);
if (isset($format_array[$format])) {
$diff = visitors_timezone_diff();
$result = sprintf($format_array[$format], $field_name, $diff);
}
else {
$result = '';
}
return $result;
}