'Counter settings', 'description' => 'Show Site Counter, Client IP, and Unique Visitor.', 'access arguments' => array('administer counter'), 'page callback' => 'drupal_get_form', 'page arguments' => array('counter_admin_settings'), 'type' => MENU_NORMAL_ITEM, 'file' => 'counter.settings.inc', ); $items['admin/settings/counter/settings'] = array( 'title' => 'Basic Settings', 'access arguments' => array('administer counter'), 'weight' => -10, 'type' => MENU_DEFAULT_LOCAL_TASK, 'file' => 'counter.settings.inc', ); $items['admin/settings/counter/advanced'] = array( 'title' => 'Advanced', 'access arguments' => array('administer counter'), 'page callback' => 'drupal_get_form', 'page arguments' => array('counter_settings_advanced'), 'type' => MENU_LOCAL_TASK, 'file' => 'counter.settings.inc', ); $items['admin/settings/counter/initial'] = array( 'title' => 'Initial Value', 'access arguments' => array('administer counter'), 'page callback' => 'drupal_get_form', 'page arguments' => array('counter_settings_initial'), 'type' => MENU_LOCAL_TASK, 'file' => 'counter.settings.inc', ); $items['admin/settings/counter/report'] = array( 'title' => 'Report', 'access arguments' => array('administer counter'), 'page callback' => 'drupal_get_form', 'page arguments' => array('counter_settings_report'), 'type' => MENU_LOCAL_TASK, 'file' => 'counter.settings.inc', ); $items['counter/report'] = array( 'title' => 'Counter Report', 'description' => 'View Counter Report', 'access arguments' => array('administer counter'), 'page callback' => 'counter_report', 'type' => MENU_NORMAL_ITEM, 'file' => 'counter.report.inc', ); return $items; } /** * Implementation of hook_block(). * */ function counter_block($op = 'list', $delta = 0) { global $user, $db_url; if ($op == 'list') { $blocks[0]['info'] = 'Counter'; return $blocks; } if ($op == 'view') { $counter_show_site_counter = variable_get('counter_show_site_counter',1); $counter_show_unique_visitor = variable_get('counter_show_unique_visitor',1); $counter_registered_user = variable_get('counter_registered_user',1); $counter_unregistered_user = variable_get('counter_unregistered_user',1); $counter_blocked_user = variable_get('counter_blocked_user',1); $counter_published_node = variable_get('counter_published_node',1); $counter_unpublished_node = variable_get('counter_unpublished_node',1); $counter_show_server_ip = variable_get('counter_show_server_ip',1); $counter_show_ip = variable_get('counter_show_ip',1); $counter_show_counter_since = variable_get('counter_show_counter_since',1); $counter_skip_admin = variable_get('counter_skip_admin',0); $counter_refresh_delay = variable_get('counter_refresh_delay', 10); $counter_insert_delay = variable_get('counter_insert_delay',1); $counter_initial_counter = variable_get('counter_initial_counter', 0); $counter_initial_unique_visitor = variable_get('counter_initial_unique_visitor', 0); $counter_initial_since = variable_get('counter_initial_since', ''); $counter_statistic_today = variable_get('counter_statistic_today',1); $counter_statistic_week = variable_get('counter_statistic_week',1); $counter_statistic_month = variable_get('counter_statistic_month',1); $counter_statistic_year = variable_get('counter_statistic_year',1); //Block display $block['subject'] = 'Counter'; $counter_ip = $_SERVER['REMOTE_ADDR']; $counter_svr_ip = $_SERVER['SERVER_ADDR']; $counter_date = date('Y-m-d H:i:s'); $counter_page = check_plain(request_uri()); //counter_insert_delay $db_types = $GLOBALS['db_type']; //substr($db_url,0, strpos($db_url,':')); switch ($db_types) { case 'mssql': $sql = " SELECT TOP 1 counter_date FROM {counter} ORDER BY counter_date DESC"; break; case 'oracle': $sql = " SELECT counter_date FROM {counter} WHERE ROWNUM=1 ORDER BY counter_date DESC"; break; default: //mysql, mysqli, pgsql $sql = " SELECT counter_date FROM {counter} ORDER BY counter_date DESC LIMIT 1"; } $results = db_query($sql); $data = db_fetch_object($results); $counter_lastdate = $data->counter_date; //Check if permited to insert data $interval = strtotime($counter_date) - strtotime($counter_lastdate); $data_insert = ($interval >= $counter_insert_delay ? 1 : 0); $data_update = ($interval >= $counter_refresh_delay ? 1 : 0); switch ($db_types) { case 'mssql': $sql = " INSERT INTO {counter} (counter_ip,counter_date,counter_page)". " VALUES ('$counter_ip','$counter_date','$counter_page')". " WHERE NOT EXISTS". " (SELECT * FROM {counter} WHERE counter_ip='$counter_ip' ". " AND counter_date='$counter_date' AND counter_page='$counter_page')"; break; case 'oracle': $sql = " INSERT INTO {counter} (counter_ip,counter_date,counter_page)". " VALUES ('$counter_ip','$counter_date','$counter_page')"; break; case 'pgsql': $sql = " INSERT INTO {counter} (counter_ip,counter_date,counter_page)". " VALUES ('$counter_ip','$counter_date','$counter_page')". " WHERE NOT EXISTS". " (SELECT * FROM {counter} WHERE counter_ip='$counter_ip' ". " AND counter_date='$counter_date' AND counter_page='$counter_page')"; break; default: //mysql, mysqli $sql = " INSERT IGNORE INTO {counter} (counter_ip,counter_date,counter_page)". " VALUES ('$counter_ip','$counter_date','$counter_page')"; } if ($data_insert && ($user->uid <> 1)) { $results = db_query($sql); } if ($data_insert && ($user->uid ==1) && !$counter_skip_admin) { $results = db_query($sql); } $sql_site_counter ="SELECT counter_value FROM {counter_data} WHERE counter_name='site_counter'"; $results = db_query($sql_site_counter); $data_site_counter = db_fetch_object($results); $site_counter = $data_site_counter->counter_value; $new_site_counter = $site_counter + 1; $sql = " UPDATE {counter_data} SET counter_value = '%s' WHERE counter_name='site_counter'"; $results = db_query($sql, $new_site_counter); //Read counter_data //published_node, registered_user, site_counter, unique_visitor, unpublished_node, unregistered_user $sql = " SELECT * FROM {counter_data} ORDER BY counter_name"; $results = db_query($sql); $i=0; while ($data = db_fetch_object($results)) { $i++; $counter_name[$i] = $data->counter_name; $counter_value[$i] = $data->counter_value; } //Write output $output = ''; $output .= ''; } else { $output .= ''; } $block['content'] = $output; if (user_access('hide counter') AND $user->uid<>1) { return array(); } return $block; } } ?>