diff --git user_visits.admin.inc user_visits.admin.inc index 736cf3d..46bcbc6 100644 --- user_visits.admin.inc +++ user_visits.admin.inc @@ -15,7 +15,7 @@ function user_visits_settings() { $form['user_activity'] = array( '#type' => 'fieldset', '#title' => t('Display settings'), - '#description' => t("Choose if you want the visitors to be displayed on the user's profile page or not. Alternatively you may use the provided !blocks to display a user's visitors.", array('!blocks' => l('blocks', 'admin/build/block'))), + '#description' => t("Choose if you want the visitors to be displayed on the user's profile page or not. Alternatively you may use the provided !blocks to display a user's visitors.", array('!blocks' => l('blocks', 'admin/structure/block'))), ); $form['user_activity']['user_visits_display'] = array( '#type' => 'radios', diff --git user_visits.install user_visits.install index 69c0032..54a2ba8 100644 --- user_visits.install +++ user_visits.install @@ -6,28 +6,32 @@ */ function user_visits_schema() { $schema['user_visits'] = array( - 'description' => t('The base table user activity.'), + 'description' => 'The base table user activity.', 'fields' => array( 'uid' => array( - 'description' => t('The primary identifier for a user.'), + 'description' => 'The primary identifier for a user.', 'type' => 'int', 'unsigned' => TRUE, - 'not null' => TRUE), + 'not null' => TRUE + ), 'vuid' => array( - 'description' => t('The primary identifier for a visitor.'), + 'description' => 'The primary identifier for a visitor.', 'type' => 'int', 'unsigned' => TRUE, - 'not null' => TRUE), + 'not null' => TRUE + ), 'visit' => array( - 'description' => t('Timestamp of visit.'), + 'description' => 'Timestamp of visit.', 'type' => 'int', 'unsigned' => TRUE, - 'not null' => TRUE), + 'not null' => TRUE + ), 'referer' => array( - 'description' => t('Whre the user came from.'), + 'description' => 'Whre the user came from.', 'type' => 'varchar', - 'length' => 255), + 'length' => 255 ), + ), 'indexes' => array( 'uid' => array('uid'), 'vuid' => array('vuid'), @@ -37,18 +41,9 @@ function user_visits_schema() { } /** - * Implementation of hook_install(). - */ -function user_visits_install() { - drupal_install_schema('user_visits'); -} - -/** * Implementation of hook_uninstall(). */ function user_visits_uninstall() { - drupal_uninstall_schema('user_visits'); - variable_del('user_visits_display'); variable_del('user_visits_block_items_0'); variable_del('user_visits_block_items_1'); diff --git user_visits.module user_visits.module index eabf0fa..ad6e663 100644 --- user_visits.module +++ user_visits.module @@ -23,9 +23,7 @@ function user_visits_help($path, $arg) { * Implementation of hook_menu(); */ function user_visits_menu() { - global $user; - - $items['admin/user/user_visits'] = array( + $items['admin/people/user_visits'] = array( 'title' => 'User visits', 'description' => "Configure where to display a user's visitors.", 'page callback' => 'drupal_get_form', @@ -38,49 +36,59 @@ function user_visits_menu() { } /** - * Implementation of hook_block(). + * Implements hook_block_info(). */ -function user_visits_block($op = 'list', $delta = 0, $edit = array()) { - if ($op == 'list') { - $blocks[0] = array( - 'info' => t('Latest visitors'), - ); - $blocks[1] = array( - 'info' => t('My latest visitors'), - ); - return $blocks; - } - else if ($op == 'configure') { - $form['items'] = array( - '#type' => 'select', - '#title' => t('Number of items'), - '#default_value' => variable_get('user_visits_block_items_'. $delta, 5), - '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25)), - ); - return $form; - } - else if ($op == 'save') { - variable_set('user_visits_block_items_'. $delta, $edit['items']); - } - else if ($op == 'view') { - $limit = variable_get('user_visits_block_items_'. $delta, 5); - switch ($delta) { - case 0: - $block = array( - 'subject' => t('Latest visitors'), - 'content' => user_visits_display_block_1(NULL, $limit), - ); - break; - case 1: - global $user; - $block = array( - 'subject' => t('My latest visitors'), - 'content' => user_visits_display_block_1($user->uid, $limit), - ); - break; - } - return $block; +function user_visits_block_info() { + $blocks[0] = array( + 'info' => t('Latest visitors'), + ); + $blocks[1] = array( + 'info' => t('My latest visitors'), + ); + return $blocks; +} + +/** + * Implements hook_block_configure(). + */ +function user_visits_block_configure($delta = 0) { + $form['items'] = array( + '#type' => 'select', + '#title' => t('Number of items'), + '#default_value' => variable_get('user_visits_block_items_'. $delta, 5), + '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25)), + ); + return $form; +} + +/** + * Implements hook_block_save(). + */ +function user_visits_block_save($delta = 0, $edit = array()) { + variable_set('user_visits_block_items_'. $delta, $edit['items']); +} + +/** + * Implements hook_block_view(). + */ +function user_visits_block_view($delta = 0) { + $limit = variable_get('user_visits_block_items_'. $delta, 5); + switch ($delta) { + case 0: + $block = array( + 'subject' => t('Latest visitors'), + 'content' => user_visits_display_block_1(NULL, $limit), + ); + break; + case 1: + global $user; + $block = array( + 'subject' => t('My latest visitors'), + 'content' => user_visits_display_block_1($user->uid, $limit), + ); + break; } + return $block; } /** @@ -95,74 +103,91 @@ function user_visits_display_block_1($uid = NULL, $limit = 5) { if (is_array($visitors)) { foreach ($visitors as $visitor) { $account = user_load(array('uid' => $visitor->vuid)); - $output .= theme('user_visits', $account, $visitor->visit); + $output .= theme('user_visits', array('account' => $account, 'timestamp' => $visitor->visit)); } } - $output .= theme('user_visits_total', user_visits_total($uid)); + $output .= theme('user_visits_total', array('total' => user_visits_total($uid))); } return $output; } /** - * Implementation of hook_perm(); + * Implements hook_permission(); */ -function user_visits_perm() { - return array('administer user visits'); +function user_visits_permission() { + return array( + 'administer user visits' => array( + 'title' => t('Administer user visits'), + ), + ); } /** - * Implementation of hook_user(); + * Implements hook_user_view(); */ -function user_visits_user($op, &$edit, &$account, $category = NULL) { - switch ($op) { - case 'view': - //Display visitors on the user's profile - if (variable_get('user_visits_display', 0)) { - $visitors = user_visits_latest($account->uid); - if (is_array($visitors)) { - foreach ($visitors as $visitor) { - $user_account = user_load(array('uid' => $visitor->vuid)); - $output .= theme('user_visits', $user_account, $visitor->visit, $visitor->referer); - } - } - - $account->content['summary']['user_visits'] = array( - '#type' => 'user_profile_item', - '#title' => t('Latest visitors'), - '#value' => $output ? $output : t('No visits by now'), - '#weight' => 10, - '#attributes' => array('class' => 'user-visits'), - ); +function user_visits_user_view($account, $view_mode, $langcode) { + // Display visitors on the user's profile. + if (variable_get('user_visits_display', 0)) { + $visitors = user_visits_latest($account->uid); + if (is_array($visitors)) { + foreach ($visitors as $visitor) { + $user_account = user_load($visitor->vuid); + $output .= theme('user_visits', array('account' => $user_account, 'timestamp' => $visitor->visit, 'referer' => $visitor->referer)); } - break; - case 'delete': - db_query("DELETE FROM {user_visits} WHERE uid=%d", $account->uid); - break; + } + + $account->content['summary']['user_visits'] = array( + '#type' => 'user_profile_item', + '#title' => t('Latest visitors'), + '#markup' => isset($output) ? $output : t('No visits by now'), + '#weight' => 10, + '#attributes' => array('class' => 'user-visits'), + ); } - +} + +/** + * Implements hook_user_delete(); + */ +function user_visits_user_delete(&$edit, &$account, $category = NULL) { + db_delete('user_visits') + ->condition('uid', $account->uid) + ->execute(); } /** * Update counter */ function user_visits_count($vuid, $uid) { - db_query("DELETE FROM {user_visits} WHERE uid=%d AND vuid=%d", $uid, $vuid); - return db_query("INSERT INTO {user_visits} (uid, vuid, visit, referer) VALUES (%d, %d, %d, '%s')", $uid, $vuid, time(), referer_uri()); + db_delete('user_visits') + ->condition('uid', $uid) + ->condition('vuid', $vuid) + ->execute(); + + $item = array(); + $item['uid'] = $uid; + $item['vuid'] = $vuid; + $item['visit'] = REQUEST_TIME; + $item['referer'] = $_SERVER['HTTP_REFERER']; + + return drupal_write_record('user_visits', $item); } /** * Get the total of visits */ function user_visits_total($uid) { - return db_result(db_query("SELECT COUNT(visit) AS count FROM {user_visits} WHERE uid=%d", $uid)); + return db_query("SELECT COUNT(visit) AS count FROM {user_visits} WHERE uid = :uid", array(':uid' => $uid))->fetchField(); } /** * Get the latest visits */ function user_visits_latest($uid, $limit = 5) { - $result = db_query("SELECT * FROM {user_visits} WHERE uid=%d ORDER BY visit DESC LIMIT %d", $uid, $limit); - while ($visitor = db_fetch_object($result)) { + $result = db_query_range("SELECT * FROM {user_visits} WHERE uid = :uid ORDER BY visit DESC", 0, $limit, array(':uid' => $uid)); + + $visitors = array(); + foreach ($result as $visitor) { $visitors[] = $visitor; } return $visitors; @@ -181,7 +206,7 @@ function user_visit_is_hidden($user) { */ function user_visits_exit() { global $user; - $referer = referer_uri(); + $referer = $_SERVER['HTTP_REFERER']; $i = 0; //Don't count anonymous-clicks @@ -194,13 +219,12 @@ function user_visits_exit() { return; } //Try not to count clicks from the user's other profile pages - if (strpos(referer_uri(), arg(0) .'/'. arg(1))) { + if (strpos($_SERVER['HTTP_REFERER'], arg(0) .'/'. arg(1))) { return; } // Record visits on profile nodes - if (arg(0) == 'node' && is_numeric(arg(1)) && !arg(2)) { - $node = node_load(array('nid' => arg(1))); + if ($node = menu_get_object()) { if ((module_exists('nodeprofile') && is_nodeprofile($node->type)) OR (module_exists('usernode') && $nody->type == USERNODE_CONTENT_TYPE)) { //Don't count self-clicks if ($user->uid != $node->uid) { @@ -247,14 +271,14 @@ function user_visits_exit() { function user_visits_theme($existing, $type, $theme, $path) { return array( 'user_visits' => array( - 'arguments' => array( + 'variables' => array( 'account' => NULL, 'timestamp' => NULL, 'referer' => NULL, ), ), 'user_visits_total' => array( - 'arguments' => array( + 'variables' => array( 'total' => NULL, ), ), @@ -264,10 +288,14 @@ function user_visits_theme($existing, $type, $theme, $path) { /** * Themeable function */ -function theme_user_visits($account, $timestamp = NULL, $referer = NULL) { +function theme_user_visits($vars) { + $account = $vars['account']; + $timestamp = $vars['timestamp']; + $referer = $vars['referer']; + $output = '
'."\n"; - $output .= theme('user_picture', $account); - $output .= '
'. theme('username', $account) .'
'."\n"; + $output .= theme('user_picture', array('account' => $account)); + $output .= '
'. theme('username', array('account' => $account)) .'
'."\n"; if ($timestamp) { $output .= $timestamp ? '
'. t('!time ago', array('!time' => format_interval(time() - $timestamp))) .'
'."\n" : ''; $output .= $referer ? '
'. t('Referer !link', array('!link' => l($referer, $referer))) .'
'."\n" : ''; @@ -279,7 +307,9 @@ function theme_user_visits($account, $timestamp = NULL, $referer = NULL) { /** * Themeable function */ -function theme_user_visits_total($total = 0) { +function theme_user_visits_total($vars) { + $total = $vars['total']; + $output = '
'. t('Total visits %total', array('%total' => $total)) .'
'; return $output; }