You are here

function modr8_nodeapi in modr8 5

Same name and namespace in other branches
  1. 6 modr8.module \modr8_nodeapi()

Implementation of hook_nodeapi

File

./modr8.module, line 161
Easy dedicated content moderation

Code

function modr8_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {

  // add messages here..
  switch ($op) {
    case 'load':
      return db_fetch_array(db_query('SELECT n.moderate FROM {node} n WHERE n.nid = %d', $node->nid));
    case 'prepare':
      if (!isset($node->nid)) {

        //a new node
        $node_options = variable_get('node_options_' . $node->type, array(
          'status',
          'promote',
        ));
        $node->moderate = in_array('moderate', $node_options) && !user_access('bypass moderation queue');
      }
      break;
    case 'submit':
      if ($node->moderate && user_access('bypass moderation queue')) {
        if (!user_access('administer nodes')) {

          // Don't reset for admins
          $node->moderate = 0;
        }
      }
      break;
    case 'view':
      if ($node->moderate && empty($node->modr8_form_teaser) && empty($node->in_preview) && ($teaser || $page)) {
        $node->content['modr8_message'] = array(
          '#value' => theme('modr8_message', $teaser, $node->type, 'view'),
          '#weight' => -100,
        );
      }
      break;
    case 'update':
    case 'insert':
      db_query('UPDATE {node} SET moderate = %d WHERE nid = %d', $node->moderate, $node->nid);
      if ($node->moderate) {

        //cut this?
        theme('modr8_message', FALSE, $node->type, $op);
      }
      break;
    case 'delete':

      // Delete log entries when a node is deleted, unless it's deleted while
      // in moderation.  In the latter case, we want to retain the log to see
      // which moderator deleted the node  and any message they sent.
      if (!$node->moderate) {
        db_query("DELETE FROM {modr8_log} WHERE nid = %d", $node->nid);
      }
      break;
  }
}