You are here

function _prev_next_add in Previous/Next API 6

Same name and namespace in other branches
  1. 7.2 prev_next.module \_prev_next_add()
  2. 7 prev_next.module \_prev_next_add()

Create or update the prev_next records.

4 calls to _prev_next_add()
prev_next_cron in ./prev_next.module
Implementation of hook_cron().
prev_next_nodeapi in ./prev_next.module
Implementation of hook_nodeapi().
_prev_next_modify in ./prev_next.module
Update the prev_next records.
_prev_next_modify_pointing_nodes in ./prev_next.module
Update other nodes pointing to a particular node

File

./prev_next.module, line 407

Code

function _prev_next_add($nid) {
  $node_type = db_result(db_query("SELECT type FROM {node} WHERE nid = %d LIMIT 1", $nid));
  $search_criteria = variable_get(PREV_NEXT_NODE_TYPE . $node_type . '_indexing_criteria', PREV_NEXT_INDEXING_CRITERIA_DEFAULT);
  $criteria_value = db_result(db_query("SELECT %s FROM {node} WHERE nid = %d LIMIT 1", $search_criteria, $nid));
  $cond = _prev_next_node_types_sql($node_type);
  $next_nid = db_result(db_query("SELECT nid FROM {node} WHERE %s > '%s' AND status = 1 {$cond} ORDER BY %s ASC LIMIT 1", $search_criteria, $criteria_value, $search_criteria));
  $prev_nid = db_result(db_query("SELECT nid FROM {node} WHERE %s < '%s' AND status = 1 {$cond} ORDER BY %s DESC LIMIT 1", $search_criteria, $criteria_value, $search_criteria));

  // Update the node-level data
  $exists = db_result(db_query('SELECT COUNT(*) FROM {prev_next_node} WHERE nid = %d', $nid));
  if ($exists) {
    db_query('UPDATE {prev_next_node} SET prev_nid = %d, next_nid = %d, changed = %d WHERE nid = %d', $prev_nid, $next_nid, time(), $nid);
  }
  else {
    db_query('INSERT INTO {prev_next_node} (prev_nid, next_nid, changed, nid) VALUES (%d, %d, %d, %d)', $prev_nid, $next_nid, time(), $nid);
  }

  // Update the other nodes pointing to this node
  foreach (node_get_types() as $type => $name) {
    if (variable_get(PREV_NEXT_NODE_TYPE . $type, 0)) {
      $search_criteria = variable_get(PREV_NEXT_NODE_TYPE . $type . '_indexing_criteria', PREV_NEXT_INDEXING_CRITERIA_DEFAULT);
      $criteria_value = db_result(db_query("SELECT %s FROM {node} WHERE nid = %d LIMIT 1", $search_criteria, $nid));
      $cond = _prev_next_node_types_sql($node_type);
      $next_nid = db_result(db_query("SELECT nid FROM {node} WHERE %s < '%s' AND status = 1 {$cond} ORDER BY %s DESC LIMIT 1", $search_criteria, $criteria_value, $search_criteria));
      if ($next_nid) {
        db_query("UPDATE {prev_next_node} SET next_nid = %d WHERE nid = %d", $nid, $next_nid);
      }
      $prev_nid = db_result(db_query("SELECT nid FROM {node} WHERE %s > '%s' AND status = 1 {$cond} ORDER BY %s ASC LIMIT 1", $search_criteria, $criteria_value, $search_criteria));
      if ($prev_nid) {
        db_query("UPDATE {prev_next_node} SET prev_nid = %d WHERE nid = %d", $nid, $prev_nid);
      }
    }
  }
}