Caching of filters added (should work now)
[mailer.git] / inc / filters.php
index 433f4958099751fac2a590f2c0131458aee57208..39d86d19f17108a74c9bdc95e78671105882019b 100644 (file)
@@ -47,8 +47,7 @@ function initFilterSystem () {
        // Is the filter already initialized?
        if ((isset($GLOBALS['filters']['chains'])) && (is_array($GLOBALS['filters']['chains']))) {
                // Then abort here
-               addFatalMessage(__FUNCTION__, __LINE__, getMessage('FILTER_FAILED_ALREADY_INIT'));
-               return false;
+               debug_report_bug(getMessage('FILTER_FAILED_ALREADY_INIT'));
        } // END - if
 
        // Init the filter system (just some ideas)
@@ -63,7 +62,26 @@ function initFilterSystem () {
        $GLOBALS['filters']['counter'] = array();
 
        // Load all saved filers if sql_patches is updated
-       if (GET_EXT_VERSION('sql_patches') >= '0.5.9') {
+       if (isset($GLOBALS['cache_array']['filter'])) {
+               // Found in cache so rewrite the array
+               $filterArray = array();
+               foreach ($GLOBALS['cache_array']['filter']['filter_name'] as $idx => $filterName) {
+                       // Get filter function
+                       $filterFunction = $GLOBALS['cache_array']['filter']['filter_function'][$idx];
+
+                       // Add the element with mapped index
+                       $filterArray['counter'][$filterName][$filterFunction] = $GLOBALS['cache_array']['filter']['filter_counter'][$idx];
+                       $filterArray['loaded'][$filterName][$filterFunction]  = true;
+                       $filterArray['chains'][$filterName][$filterFunction]  = $GLOBALS['cache_array']['filter']['filter_active'][$idx];
+               } // END - foreach
+
+               // Set the array
+               //die('<pre>'.print_r($filterArray, true).'</pre>');
+               $GLOBALS['filters'] = $filterArray;
+
+               // Remove the cache
+               unset($GLOBALS['cache_array']['filter']);
+       } elseif (GET_EXT_VERSION('sql_patches') >= '0.5.9') {
                // Init add
                $add = '';
                if (GET_EXT_VERSION('sql_patches') >= '0.6.0') $add = ", `filter_counter`";
@@ -100,38 +118,38 @@ ORDER BY `filter_id` ASC", __FUNCTION__, __LINE__);
 
                // Free result
                SQL_FREERESULT($result);
-       } // END - if
 
-       // Init filters
-       registerFilter('init', 'UPDATE_LOGIN_DATA');
-       registerFilter('init', 'INIT_RANDOMIZER');
+               // Init filters
+               registerFilter('init', 'UPDATE_LOGIN_DATA');
+               registerFilter('init', 'INIT_RANDOMIZER');
 
-       // Login failures handler
-       registerFilter('post_youhere_line', 'CALL_HANDLER_LOGIN_FAILTURES');
+               // Login failures handler
+               registerFilter('post_youhere_line', 'CALL_HANDLER_LOGIN_FAILTURES');
 
-       // Filters for pre-extension-registration
-       registerFilter('pre_extension_installed', 'RUN_SQLS');
+               // Filters for pre-extension-registration
+               registerFilter('pre_extension_installed', 'RUN_SQLS');
 
-       // Filters for post-extension-registration
-       registerFilter('post_extension_installed', 'AUTO_ACTIVATE_EXTENSION');
-       registerFilter('post_extension_installed', 'SOLVE_TASK');
-       registerFilter('post_extension_installed', 'LOAD_INCLUDES');
-       registerFilter('post_extension_installed', 'REMOVE_UPDATES');
+               // Filters for post-extension-registration
+               registerFilter('post_extension_installed', 'AUTO_ACTIVATE_EXTENSION');
+               registerFilter('post_extension_installed', 'SOLVE_TASK');
+               registerFilter('post_extension_installed', 'LOAD_INCLUDES');
+               registerFilter('post_extension_installed', 'REMOVE_UPDATES');
 
-       // Solving tasks
-       registerFilter('solve_task', 'SOLVE_TASK');
+               // Solving tasks
+               registerFilter('solve_task', 'SOLVE_TASK');
 
-       // Loading includes in general
-       registerFilter('load_includes', 'LOAD_INCLUDES');
+               // Loading includes in general
+               registerFilter('load_includes', 'LOAD_INCLUDES');
 
-       // Run SQLs
-       registerFilter('run_sqls', 'RUN_SQLS');
+               // Run SQLs
+               registerFilter('run_sqls', 'RUN_SQLS');
 
-       // Admin ACL check
-       registerFilter('check_admin_acl', 'CHECK_ADMIN_ACL');
+               // Admin ACL check
+               registerFilter('check_admin_acl', 'CHECK_ADMIN_ACL');
 
-       // Register shutdown filters
-       registerFilter('shutdown', 'FLUSH_FILTERS');
+               // Register shutdown filters
+               registerFilter('shutdown', 'FLUSH_FILTERS');
+       } // END - if
 }
 
 // "Registers" a new filter function
@@ -319,9 +337,9 @@ function FILTER_FLUSH_FILTERS () {
                        foreach ($filterArray as $filterFunction => $cnt) {
                                // Construct and add the query
                                ADD_SQL(sprintf("UPDATE `{!_MYSQL_PREFIX!}_filters` SET `filter_counter`=%s WHERE `filter_name`='%s' AND `filter_function`='%s' LIMIT 1",
-                               bigintval($cnt),
-                               $filterName,
-                               $filterFunction
+                                       bigintval($cnt),
+                                       $filterName,
+                                       $filterFunction
                                ));
                        } // END - foreach
                } // END - foreach