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

Kjartan Mannes's avatar
Kjartan Mannes committed
function tracker_help($section = 'admin/help#tracker') {
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/system/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
function tracker_link($type) {
Kjartan Mannes's avatar
Kjartan Mannes committed
  if ($type == 'system' && user_access('access content')) {
    menu('tracker', t('recent posts'), 'tracker_page', 1);
Dries Buytaert's avatar
Dries Buytaert committed
  }
}

Dries Buytaert's avatar
 
Dries Buytaert committed
function tracker_page() {
  global $user;

  $output .= '';

  if ($user->uid) {
    $output .= "<ul>";
    $output .= " <li>". l(t('Your active posts and discussions'), "tracker/$user->uid") ."</li>";
    $output .= " <li>". l(t('All active posts and discussions'), 'tracker') ."</li>";
    $output .= "</ul>";
  }
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
  if (arg(1)) {
    $uid = check_query(arg(1));
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
 
Dries Buytaert committed
    $result = pager_query("SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, MAX(GREATEST(n.changed, c.timestamp)) AS last_post FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.status = 1 AND (n.uid = '$uid' OR c.uid = '$uid') GROUP BY n.nid, n.title, n.type, n.changed, n.uid, u.name ORDER BY last_post DESC", 25, 0, "SELECT COUNT(DISTINCT(n.nid)) FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid WHERE n.status = 1 AND (n.uid = '$uid' OR c.uid = '$uid')");
Dries Buytaert's avatar
 
Dries Buytaert committed

Dries Buytaert's avatar
Dries Buytaert committed
  }
  else {
Dries Buytaert's avatar
 
Dries Buytaert committed
    $result = pager_query("SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, MAX(GREATEST(n.changed, c.timestamp)) AS last_post FROM {node} n LEFT JOIN {comments} c ON n.nid = c.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.status = 1 GROUP BY n.nid, n.title, n.type, n.changed, n.uid, u.name ORDER BY last_post DESC", 25, 0, "SELECT COUNT(nid) FROM {node} WHERE status = 1");
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:
    if ($all = comment_num_all($node->nid)) {
      $comments = $all;
Dries Buytaert's avatar
 
Dries Buytaert committed

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

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

Dries Buytaert's avatar
 
Dries Buytaert committed
  if ($pager = theme('pager', NULL, 25, 0)) {
   $rows[] = array(array('data' => $pager, 'colspan' => 4));
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'));

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

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
function tracker_user($type, &$edit, &$user) {
Dries Buytaert's avatar
 
Dries Buytaert committed
  if ($type == 'view' && user_access("access content")) {
    return array(t('History') => form_item(t("Recent posts"), l(t("recent posts"), "tracker/$user->uid")));
Dries Buytaert's avatar
 
Dries Buytaert committed
  }
Dries Buytaert's avatar
Dries Buytaert committed
}

Dries Buytaert's avatar
 
Dries Buytaert committed
?>