function _prev_next_add in Previous/Next API 6
Same name and namespace in other branches
- 7.2 prev_next.module \_prev_next_add()
- 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);
}
}
}
}