You are here

function spaces_announce_nodeapi in Spaces 5

Same name and namespace in other branches
  1. 5.2 spaces_announce/spaces_announce.module \spaces_announce_nodeapi()

Implementation of hook_nodeapi

Log viewing on view, and save primary gid relation on update and insert.

File

spaces_announce/spaces_announce.module, line 38

Code

function spaces_announce_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  if (variable_get('spaces_announce_' . $node->type, false)) {
    switch ($op) {
      case 'view':
        if ($gid = spaces_announce_primary_gid($node->nid)) {
          if (spaces_gid() != $gid) {
            if ($page) {

              // If this is not the primary group than then node is being
              // recieved, so we do two things; log the view, and set context.
              db_query("UPDATE {spaces_announce_log} a SET a.count = a.count + 1, a.viewed = %d WHERE a.nid = %d", time(), $node->nid);
              context_set('spaces', 'annoucement', $node->type);

              // If a ' NODETYPE_announcement' feature is defined give it the chance to
              // become the active feature.
              $context = new StdClass();
              $context->space = 'spaces';
              $context->key = 'feature';
              $context->value = $node->type . '_announcement';
              if ($context = context_ui_context('load', $context)) {
                context_set($context->space, $context->key, $context->value);
              }
            }

            // Add "from" text to content.
            $group = node_load($gid);
            $group_name = spaces_is_member($gid) ? l($group->title, 'node/' . $gid) : $group->title;
            $node->content['announce_primary_group'] = array(
              '#value' => theme('announce_group_label', $group_name),
              '#weight' => -100,
            );
          }
        }
        break;
      case 'update':

        // If the annoucement settings have been changed for a root book page
        //  push those changes to the rest of the book.
        if ($node->type == 'book' && $node->parent == 0) {
          _spaces_announce_apply_book_perms($node);
        }

        // Check to see if the post has a primary_gid, if it doesn't cascade
        // into the 'insert' case so that the primary_gid is silently corrected.
        if (spaces_announce_primary_gid($node->nid)) {
          break;
        }
      case 'insert':
        db_query('INSERT INTO {spaces_announce} (nid, gid) VALUES (%d, %d)', $node->nid, spaces_gid());
        db_query('INSERT INTO {spaces_announce_log} (nid) VALUES (%d)', $node->nid);
        break;
      case 'delete':
        db_query('DELETE FROM {spaces_announce} WHERE nid = %d', $node->nid);
        db_query('DELETE FROM {spaces_announce_log} WHERE nid = %d', $node->nid);
        break;
    }
  }
}