Skip to content
Snippets Groups Projects
tracker.module 4 KiB
Newer Older
Dries Buytaert's avatar
Dries Buytaert committed
<?php
Dries Buytaert's avatar
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
/**
 * @file
 * Enables tracking of recent posts for users.
 */

/**
 * Implementation of hook_help().
 */
function tracker_help($section) {
Dries Buytaert's avatar
 
Dries Buytaert committed
  switch ($section) {
Dries Buytaert's avatar
 
Dries Buytaert committed
    case 'admin/help#tracker':
      return t('<p>The tracker module is a handy module for displaying the most recent posts.  By following the <em>recent posts</em> link in the user block, a user may quickly review all recent postings.</p>');
Dries Buytaert's avatar
 
Dries Buytaert committed
    case 'admin/modules#description':
Kjartan Mannes's avatar
Kjartan Mannes committed
      return t('Enables tracking of recent posts for users.');
Dries Buytaert's avatar
 
Dries Buytaert committed
  }
Dries Buytaert's avatar
 
Dries Buytaert committed
}

Dries Buytaert's avatar
 
Dries Buytaert committed
/**
Dries Buytaert's avatar
 
Dries Buytaert committed
 * Implementation of hook_menu().
Dries Buytaert's avatar
 
Dries Buytaert committed
 */
Dries Buytaert's avatar
 
Dries Buytaert committed
function tracker_menu($may_cache) {
Dries Buytaert's avatar
 
Dries Buytaert committed
  global $user;
Dries Buytaert's avatar
 
Dries Buytaert committed
  $items = array();
Dries Buytaert's avatar
 
Dries Buytaert committed

  if ($may_cache) {
    $items[] = array('path' => 'tracker', 'title' => t('recent posts'),
      'callback' => 'tracker_page', 'access' => user_access('access content'),
      'weight' => 1);

    if ($user->uid) {
      $items[] = array('path' => 'tracker/all', 'title' => t('all recent posts'),
        'type' => MENU_DEFAULT_LOCAL_TASK);
      $items[] = array('path' => 'tracker/'. $user->uid, 'title' => t('my recent posts'),
        'type' => MENU_LOCAL_TASK);
    }
Dries Buytaert's avatar
 
Dries Buytaert committed
  }
Dries Buytaert's avatar
 
Dries Buytaert committed
  else {
    if (arg(0) == 'user' && is_numeric(arg(1))) {
      $items[] = array('path' => 'user/'. arg(1) .'/track', 'title' => t('track'),
Dries Buytaert's avatar
 
Dries Buytaert committed
          'callback' => 'tracker_track_user', 'access' => user_access('access content'),
          'type' => MENU_LOCAL_TASK);
    }
  }
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
  return $items;
Dries Buytaert's avatar
Dries Buytaert committed
}

Dries Buytaert's avatar
 
Dries Buytaert committed
/**
 * Menu callback. Prints a listing of active nodes on the site.
 */
function tracker_track_user() {
  if ($account = user_load(array('uid' => arg(1)))) {
    drupal_set_title($account->name);
    tracker_page($account->uid);
  }
Dries Buytaert's avatar
 
Dries Buytaert committed
}

/**
 * Menu callback. Prints a listing of active nodes on the site.
 */
function tracker_page($uid = 0) {
Dries Buytaert's avatar
 
Dries Buytaert committed
  global $user;

  $output .= '';

  if ($uid) {
    $result = pager_query('SELECT DISTINCT n.nid, n.title, n.type, n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, l.comment_count FROM {node} n '. node_access_join_sql() .' INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {users} u ON n.uid = u.uid LEFT JOIN {comments} c ON n.nid = c.nid AND c.status = 0 WHERE n.status = 1 AND '. node_access_where_sql() .' AND (n.uid = %d OR c.uid = %d) ORDER BY last_post DESC', 25, 0, 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n '. node_access_join_sql() .' LEFT JOIN {comments} c ON n.nid = c.nid AND c.status = 0 WHERE n.status = 1 AND '. node_access_where_sql() .' AND (n.uid = %d OR c.uid = %d)', $uid, $uid);
Dries Buytaert's avatar
Dries Buytaert committed
  }
  else {
    $result = pager_query('SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, l.comment_count FROM {node} n '. node_access_join_sql() .' INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {node_comment_statistics} l ON n.nid = l.nid WHERE n.status = 1 AND '. node_access_where_sql() .' ORDER BY last_post DESC', 25, 0, 'SELECT COUNT(n.nid) FROM {node} n '. node_access_join_sql() .' WHERE n.status = 1 AND '. node_access_where_sql());
Dries Buytaert's avatar
 
Dries Buytaert committed
  }
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
  while ($node = db_fetch_object($result)) {
    // Determine the number of comments:
Dries Buytaert's avatar
 
Dries Buytaert committed
    $comments = 0;
    if (module_exist('comment') && $node->comment_count) {
      $comments = $node->comment_count;
Dries Buytaert's avatar
 
Dries Buytaert committed

      if ($new = comment_num_new($node->nid)) {
        $comments .= '<br />';
        $comments .= l(t('%num new', array('%num' => $new)), "node/$node->nid", NULL, NULL, 'new');
Dries Buytaert's avatar
 
Dries Buytaert committed
      }
Dries Buytaert's avatar
 
Dries Buytaert committed
    }

Dries Buytaert's avatar
 
Dries Buytaert committed
    $rows[] = array(
Dries Buytaert's avatar
 
Dries Buytaert committed
      node_invoke($node->type, 'node_name'),
Dries Buytaert's avatar
 
Dries Buytaert committed
      l($node->title, "node/$node->nid") .' '. (node_is_new($node->nid, $node->changed) ? theme('mark') : ''),
Dries Buytaert's avatar
 
Dries Buytaert committed
      format_name($node),
      array('class' => 'replies', 'data' => $comments),
Dries Buytaert's avatar
 
Dries Buytaert committed
      t('%time ago', array('%time' => format_interval(time() - $node->last_post)))
Dries Buytaert's avatar
 
Dries Buytaert committed
    );
Dries Buytaert's avatar
Dries Buytaert committed
  }

Dries Buytaert's avatar
 
Dries Buytaert committed
  if ($pager = theme('pager', NULL, 25, 0)) {
Dries Buytaert's avatar
 
Dries Buytaert committed
   $rows[] = array(array('data' => $pager, 'colspan' => '5'));
Dries Buytaert's avatar
 
Dries Buytaert committed
  }

Dries Buytaert's avatar
 
Dries Buytaert committed
  $header = array(t('Type'), t('Post'), t('Author'), t('Replies'), t('Last post'));
Dries Buytaert's avatar
 
Dries Buytaert committed

  $output .= '<div id="tracker">';
  $output .= theme('table', $header, $rows);
  $output .= '</div>';
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
  print theme('page', $output);
Dries Buytaert's avatar
Dries Buytaert committed
}

Dries Buytaert's avatar
 
Dries Buytaert committed
?>