Index: popups.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/popups/popups.module,v retrieving revision 1.11.2.19 diff -u -r1.11.2.19 popups.module --- popups.module 20 Nov 2008 21:18:57 -0000 1.11.2.19 +++ popups.module 13 Feb 2009 02:10:48 -0000 @@ -56,10 +56,10 @@ foreach ($popups as $path => $popup_config) { if ($path == $_GET['q']) { - popups_add_popups($popups[$path]); + popups_add_popups($popup_config); } elseif (strpos($path, '*') !== FALSE && drupal_match_path($_GET['q'], $path)) { - popups_add_popups($popups[$path]); + popups_add_popups($popup_config); } } @@ -168,14 +168,22 @@ /** * Define hook_popups(). - * Build the list of popup rules from all modules that implement hook_popups. - * - * @todo - Add some caching so we don't rebuild everytime? + * + * Retrieves the list of popup rules from all modules that implement hook_popups. + * + * @param $reset + * (optional) If set to TRUE, forces the popup rule cache to reset. */ -function popups_get_popups() { +function popups_get_popups($reset = FALSE) { static $popups = NULL; - if (!isset($popups)) { - $popups = module_invoke_all('popups'); + if (!isset($popups) || $reset) { + if (!$reset && ($cache = cache_get('popups:popups')) && !empty($cache->data)) { + $popups = $cache->data; + } + else { + $popups = module_invoke_all('popups'); + cache_set('popups:popups', $popups); + } } return $popups; }