Index: mongodb.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/mongodb/mongodb.module,v retrieving revision 1.18 diff -u -p -r1.18 mongodb.module --- mongodb.module 22 Oct 2010 21:34:57 -0000 1.18 +++ mongodb.module 23 Dec 2010 03:11:06 -0000 @@ -175,3 +175,22 @@ function mongodb_next_id($name, $existin } return $value; } + +/** + * MongoDB version of pager_query(). + */ +function mongodb_pager_query($collection_name, $conditions, $sort = array(), $limit = 10, $element = 0) { + global $pager_page_array, $pager_total, $pager_total_items; + $page_string = isset($_GET['page']) ? $_GET['page'] : ''; + + // Convert comma-separated $page to an array, used by other functions. + $pager_page_array = explode(',', $page_string); + + // We calculate the total of pages as ceil(items / limit). + $cursor = mongodb_collection($collection_name)->find($conditions); + $pager_total_items[$element] = $cursor->count(); + $pager_total[$element] = ceil($pager_total_items[$element] / $limit); + $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1)); + $cursor->skip($pager_page_array[$element] * $limit)->limit($limit); + return $cursor; +} Index: mongodb_watchdog/mongodb_watchdog.admin.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/mongodb/mongodb_watchdog/mongodb_watchdog.admin.inc,v retrieving revision 1.10 diff -u -p -r1.10 mongodb_watchdog.admin.inc --- mongodb_watchdog/mongodb_watchdog.admin.inc 1 Oct 2010 18:39:01 -0000 1.10 +++ mongodb_watchdog/mongodb_watchdog.admin.inc 23 Dec 2010 03:11:06 -0000 @@ -34,17 +34,13 @@ function mongodb_watchdog_overview() { WATCHDOG_EMERGENCY => 'mongodb_watchdog-emergency', ); - global $pager_page_array, $pager_total, $pager_total_items, $pager_limits; $per_page = 50; - $page = isset($_GET['page']) ? $_GET['page'] : ''; - $pager_page_array = explode(',', $page); - $on_page = $pager_page_array[0]; - $cursor = mongodb_collection(variable_get('mongodb_collectionname', 'watchdog')) - ->find(mongodb_watchdog_build_filter_query()) - ->limit($per_page) - ->skip($on_page * $per_page) - ->sort(array('timestamp' => -1)); + $cursor = mongodb_pager_query( + variable_get('mongodb_collectionname', 'watchdog'), + mongodb_watchdog_build_filter_query(), + array('timestamp' => -1), + $per_page); $build['mongodb_watchdog_filter_form'] = drupal_get_form('mongodb_watchdog_filter_form'); $build['mongodb_watchdog_clear_log_form'] = drupal_get_form('mongodb_watchdog_clear_log_form'); @@ -90,17 +86,9 @@ function mongodb_watchdog_overview() { ); // Add the pager. - if ($on_page > 0 || count($rows) >= $per_page) { - $pager_total_items[0] = mongodb_collection(variable_get('mongodb_collectionname', 'watchdog')) - ->find(mongodb_watchdog_build_filter_query()) - ->count(); - $pager_total[0] = ceil($pager_total_items[0] / $per_page); - $pager_page_array[0] = max(0, min((int) $pager_page_array[0], ((int)$pager_total[0]) - 1)); - $pager_limits[0] = $per_page; - $build['pager'] = array( - '#theme' => 'pager', - ); - } + $build['pager'] = array( + '#theme' => 'pager', + ); return $build; } @@ -161,10 +149,9 @@ function mongodb_watchdog_event($dblog) '#rows' => $rows, '#attributes' => array('class' => array('dblog-event')), ); - $total = min($dblog['count'], variable_get('mongodb_watchdog_items', 10000)); $limit = 20; - $pagenumber = mongodb_watchdog_pager_init(0, $limit, $total); - $result = mongodb_collection($dblog['_id'])->find()->skip($pagenumber * $total)->limit($limit); + + $result = mongodb_pager_query($dblog['_id'], array(), array(), $limit); $severity = watchdog_severity_levels(); $rows = array(); $header = array( @@ -183,11 +170,15 @@ function mongodb_watchdog_event($dblog) '#header' => $header, '#rows' => $rows, ); + $build['pager'] = array( + '#theme' => 'pager', + ); + return $build; } /** - * Initialize the global pager variables for use in a mongodb_watchdog list. + * Initialize the global pager variables for use in a mongodb_watchdog list. */ function mongodb_watchdog_pager_init($element, $limit, $total) { global $pager_page_array, $pager_total, $pager_total_items;