### Eclipse Workspace Patch 1.0 #P prev_next Index: prev_next.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/prev_next/prev_next.module,v retrieving revision 1.1 diff -u -r1.1 prev_next.module --- prev_next.module 7 May 2009 22:12:04 -0000 1.1 +++ prev_next.module 25 Oct 2009 14:39:35 -0000 @@ -2,6 +2,7 @@ // $Id: prev_next.module,v 1.1 2009/05/07 22:12:04 kbahey Exp $ define('PREV_NEXT_BATCH_SIZE_DEFAULT', 200); +define('PREV_NEXT_INDEXING_CRITERIA_DEFAULT', 'nid'); define('PREV_NEXT_NODE_TYPE', 'prev_next_node_type_'); /** @@ -71,6 +72,24 @@ '#required' => TRUE, ); + $form['indexing_criteria'] = array( + '#title' => t('Indexing criteria'), + '#type' => 'select', + '#options' => array( + 'nid' => t('Node ID'), + 'created' => t('Post date'), + 'changed' => t('Updated date'), + 'title' => t('Title') + ), + '#default_value' => variable_get('indexing_criteria',PREV_NEXT_INDEXING_CRITERIA_DEFAULT), + '#description' => t('Note: changing this value will reset the entire Prev/Next index.') + ); + + $form['current_indexing_criteria'] = array( + '#type' => 'hidden', + '#value' => variable_get('indexing_criteria',PREV_NEXT_INDEXING_CRITERIA_DEFAULT) + ); + $form['node_types'] = array( '#type' => 'fieldset', '#title' => t('Content types'), @@ -85,6 +104,8 @@ ); } + $form['#submit'][] = 'prev_next_admin_submit'; + return system_settings_form($form); } @@ -105,6 +126,18 @@ } } +/** + * Submit callback. + */ +function prev_next_admin_submit($form, &$form_state) { + // If the search criteria has been changed, re-index. + if ($form_state['values']['current_indexing_criteria'] != $form_state['values']['indexing_criteria']) { + prev_next_reindex(); + drupal_set_message(t('The Prev/Next index will be rebuilt.')); + } + $form_state['redirect'] = 'admin/settings/prev_next'; +} + function prev_next_reindex_confirm() { return confirm_form(array(), t('Are you sure you want to re-index Prev/Next?'), 'admin/settings/prev_next', t(' The entire Prev/Next index will be reset and rebuilt incrementally as cron runs. action cannot be undone.'), t('Re-index'), t('Cancel')); @@ -175,10 +208,12 @@ */ function _prev_next_add($nid) { $cond = _prev_next_node_types_sql(); + $search_criteria = variable_get('indexing_criteria', PREV_NEXT_INDEXING_CRITERIA_DEFAULT); - $next_nid = db_result(db_query("SELECT nid FROM {node} WHERE nid > %d AND status = 1 $cond ORDER BY nid ASC LIMIT 1", $nid)); + $criteria_value = db_result(db_query("SELECT %s FROM {node} WHERE nid = %d LIMIT 1", $search_criteria, $nid)); + $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 nid < %d AND status = 1 $cond ORDER BY nid DESC LIMIT 1", $nid)); + $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));