X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffilter-functions.php;h=8d78bb5d638e077855dea74129de6994c99476df;hp=7bc55f018c67f9880e6e7227a525e1321f526d93;hb=1ecddafcb3c6ee030251d8c7ad28ac4b9d250133;hpb=e45e218c4f629ec63f0788cab231bfc88b3fa46e diff --git a/inc/filter-functions.php b/inc/filter-functions.php index 7bc55f018c..8d78bb5d63 100644 --- a/inc/filter-functions.php +++ b/inc/filter-functions.php @@ -14,12 +14,10 @@ * $Date:: $ * * $Tag:: 0.2.1-FINAL $ * * $Author:: $ * - * Needs to be in all Files and every File needs "svn propset * - * svn:keywords Date Revision" (autoprobset!) at least!!!!!! * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009, 2010 by Mailer Developer Team * - * For more information visit: http://www.mxchange.org * + * Copyright (c) 2009 - 2011 by Mailer Developer Team * + * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -47,7 +45,7 @@ function initFilterSystem () { // Is the filter already initialized? if (isset($GLOBALS['filter_init'])) { // Then abort here - debug_report_bug('Filter system already initialized.'); + debug_report_bug(__FUNCTION__, __LINE__, 'Filter system already initialized.'); } // END - if // Load all saved filers if sql_patches is updated @@ -60,18 +58,20 @@ function initFilterSystem () { } elseif ((!isInstallationPhase()) && (isExtensionInstalledAndNewer('sql_patches', '0.5.9'))) { // Init add $add = ''; - if (isExtensionINstalledAndNewer('sql_patches', '0.6.0')) $add = ", `filter_counter`"; + if (isExtensionINstalledAndNewer('sql_patches', '0.6.0')) { + $add = ", `filter_counter`"; + } // END - if - // Load all active filers - $result = SQL_QUERY("SELECT - `filter_name`,`filter_function`,`filter_active`".$add." + // Load all filters + $result = SQL_QUERY('SELECT + `filter_name`,`filter_function`,`filter_active`' . $add . ' FROM `{?_MYSQL_PREFIX?}_filters` ORDER BY - `filter_id` ASC", __FUNCTION__, __LINE__); + `filter_id` ASC', __FUNCTION__, __LINE__); // Are there entries? - if (SQL_NUMROWS($result) > 0) { + if (!SQL_HASZERONUMS($result)) { // Load all filters while ($filterArray = SQL_FETCHARRAY($result)) { // Get filter name and function @@ -104,8 +104,10 @@ ORDER BY registerFilter('init', 'INIT_RANDOMIZER'); registerFilter('init', 'LOAD_RUNTIME_INCLUDES'); registerFilter('init', 'INIT_EXTENSIONS'); + registerFilter('init', 'SET_CURRENT_DATE'); registerFilter('init', 'INIT_RANDOM_NUMBER'); - registerFilter('init', 'CHECK_SVN_REVISION'); + registerFilter('init', 'CHECK_REPOSITORY_REVISION'); + registerFilter('init', 'RUN_HOURLY_RESET'); registerFilter('init', 'RUN_DAILY_RESET'); registerFilter('init', 'TRIGGER_SENDING_POOL'); registerFilter('init', 'DETERMINE_USERNAME'); @@ -118,12 +120,13 @@ ORDER BY registerFilter('pre_page_header', 'LOAD_PAGE_HEADER'); // Page headers - post-filter (normally, you don't want to register here) - // ------------------- LAST FILTER FOR THIS CHAIN! ------------------------ + //-------------------- LAST FILTER FOR THIS CHAIN! ------------------------ registerFilter('post_page_header', 'FINISH_PAGE_HEADER'); - // ------------------- LAST FILTER FOR THIS CHAIN! ------------------------ + //-------------------- LAST FILTER FOR THIS CHAIN! ------------------------ - // Login failures handler + // 'You are here' navigation - post filter registerFilter('post_youhere_line', 'CALL_HANDLER_LOGIN_FAILTURES'); + registerFilter('post_youhere_line', 'HANDLE_HOME_IN_INDEX_SETTING'); // Filters for pre-extension-registration registerFilter('pre_extension_installed', 'RUN_SQLS'); @@ -133,6 +136,7 @@ ORDER BY registerFilter('post_extension_installed', 'SOLVE_TASK'); registerFilter('post_extension_installed', 'LOAD_INCLUDES'); registerFilter('post_extension_installed', 'REMOVE_UPDATES'); + registerFilter('post_extension_installed', 'EXTENSION_MARK_INSTALLED'); // Solving tasks registerFilter('solve_task', 'SOLVE_TASK'); @@ -159,6 +163,9 @@ ORDER BY // Generic extension update filters registerFilter('extension_update', 'UPDATE_EXTENSION_DATA'); + // Do hourly reset stuff, keep this entry first in this chain: + registerFilter('hourly', 'RUN_HOURLY_INCLUDES'); + // Do reset stuff, keep this entry first in this chain: registerFilter('reset', 'RUN_RESET_INCLUDES'); @@ -181,21 +188,24 @@ ORDER BY // Admin login registerFilter('do_admin_login_done', 'DO_LOGIN_ADMIN'); + + // Admin mail links + registerFilter('generate_admin_mail_links', 'GENERATE_POOL_MAIL_LINKS'); } // "Registers" a new filter function function registerFilter ($filterName, $filterFunction, $silentAbort = true, $force = false, $dry_run = false) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ' - ENTERED!'); // Extend the filter function name $filterFunction = sprintf("FILTER_%s", strtoupper($filterFunction)); // Is that filter already there? if ((isset($GLOBALS['cache_array']['filter']['chains'][$filterName][$filterFunction])) && ($force === false)) { - // Then abort here - if ($silentAbort === false) { + // In installation phase we always want to abort + if (($silentAbort === false) || (isInstallationPhase())) { // Add fatal message - addFatalMessage(__FUNCTION__, __LINE__, sprintf("Filter chain %s has already filter function %s registered!", $filterName, $filterFunction)); + debug_report_bug(__FUNCTION__, __LINE__, sprintf("Filter chain %s has already filter function %s registered!", $filterName, $filterFunction)); } // END - if // Abort here @@ -216,11 +226,13 @@ function registerFilter ($filterName, $filterFunction, $silentAbort = true, $for $GLOBALS['cache_array']['filter']['chains'][$filterName][$filterFunction] = 'A'; $GLOBALS['cache_array']['filter']['counter'][$filterName][$filterFunction] = '0'; } // END - if + + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ' - EXIT!'); } // "Unregisters" a filter from the given chain -function unregisterFilter ($filterName, $filterFunction, $force = false, $dry_run = false) { - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ENTRY: filterName=' . $filterName . ',filterFunction=' . $filterFunction . ',force=' . intval($force) . ',dry=' . intval($dry_run)); +function unregisterFilter ($F, $L, $filterName, $filterFunction, $force = false, $dry_run = false) { + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'F=' . $F . ',L=' . $L . ',filterName=' . $filterName . ',filterFunction=' . $filterFunction . ',force=' . intval($force) . ',dry_run=' . intval($dry_run) . ' - ENTERED!'); // Extend the filter function name only if not loaded from database if (!isset($GLOBALS['cache_array']['filter']['loaded'][$filterName][$filterFunction])) { @@ -237,57 +249,60 @@ function unregisterFilter ($filterName, $filterFunction, $force = false, $dry_ru // Shall we remove? (default, not while just showing an extension removal) if ($dry_run === false) { // Mark for filter removal - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'REMOVE: filterName=' . $filterName . ',filterFunction=' . $filterFunction); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'F=' . $F . ',L=' . $L . ',filterName=' . $filterName . ',filterFunction=' . $filterFunction . ' - REMOVE!'); $GLOBALS['cache_array']['filter']['chains'][$filterName][$filterFunction] = 'R'; } // END - if + + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'F=' . $F . ',L=' . $L . ',filterName=' . $filterName . ',filterFunction=' . $filterFunction . ',force=' . intval($force) . ',dry_run=' . intval($dry_run) . ' - EXIT!'); } -// "Runs" the given filters, data is optional and can be any type of data -function runFilterChain ($filterName, $data = null) { +// "Runs" the given filters, filterData is optional and can be any type of data +function runFilterChain ($filterName, $filterData = NULL) { + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'filterName=' . $filterName . ',filterData[]=' . gettype($filterData) . ' - ENTERED!'); + // Is that filter chain there? if (!isset($GLOBALS['cache_array']['filter']['chains'][$filterName])) { // Log not found filters in debug-mode if (isDebugModeEnabled()) { // Log it away... - logDebugMessage(__FUNCTION__, __LINE__, 'Filter chain ' . $filterName . ' not found!'); + logDebugMessage(__FUNCTION__, __LINE__, 'Filter chain ' . $filterName . ' not found.'); } // END - if // Abort here and return content - return $data; + return $filterData; } // END - if // Default return value - $returnValue = $data; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'filterName=' . $filterName . ',count()=' . count($GLOBALS['cache_array']['filter']['chains'][$filterName])); + $returnValue = $filterData; // Then run all filters foreach ($GLOBALS['cache_array']['filter']['chains'][$filterName] as $filterFunction => $active) { // Debug message - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "Running: name={$filterName},func={$filterFunction},active={$active}"); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Running: name=' . $filterName . ',func=' . $filterFunction . ',active=' . $active); - // Is the filter active? - if (($active == 'Y') || ($active == 'A') || ((in_array($filterName, array('shutdown','extension_remove','post_extension_run_sql'))) && ($active == 'R'))) { + // Is the filter active or newly added?? + if (($active == 'Y') || ($active == 'A') || ((in_array($filterName, array('shutdown', 'extension_remove', 'post_extension_run_sql'))) && ($active == 'R'))) { // Is this filter there? if (!function_exists($filterFunction)) { - // Unregister it - unregisterFilter($filterName, $filterFunction); - - // Skip this entry - continue; + // Should be fixed + debug_report_bug(__FUNCTION__, __LINE__, 'filterName=' . $filterName . ',filterFunction=' . $filterFunction . ' - AUTO-UNREGISTERED!'); } // END - if // Call the filter chain - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $filterName.'/'.$filterFunction.',[]='.gettype($returnValue)); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $filterName . '/' . $filterFunction . ',[]=' . gettype($returnValue)); $returnValue = call_user_func_array($filterFunction, array($returnValue)); // Update usage counter countFilterUsage($filterName, $filterFunction); } elseif (isDebugModeEnabled()) { // Debug message - logDebugMessage(__FUNCTION__, __LINE__, "Skipped: name={$filterName},func={$filterFunction},active={$active}"); + logDebugMessage(__FUNCTION__, __LINE__, 'Skipped: name=' . $filterName . ',func=' . $filterFunction . ',active=' . $active); } } // END - foreach // Return the filtered content + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'filterName=' . $filterName . ',filterData[]=' . gettype($filterData) . ',returnValue[]=' . gettype($returnValue) . ' - EXIT!'); return $returnValue; } @@ -333,5 +348,30 @@ function prepareFilterArray () { $GLOBALS['cache_array']['filter'] = $filterArray; } +// Loads filter for given extension if present. This function will silently +// ignore absent filter files. +function loadExtensionFilters ($ext_name) { + // Do we have cache entry? + if (!isset($GLOBALS[__FUNCTION__][$ext_name])) { + // Default is not found + $GLOBALS[__FUNCTION__][$ext_name] = false; + + // Construct include file name + $incFileName = sprintf("inc/filter/%s_filter.php", $ext_name); + + // Is the include file readable? + if (isIncludeReadable($incFileName)) { + // Load the include file + loadIncludeOnce($incFileName); + + // Mark the file as loaded + $GLOBALS[__FUNCTION__][$ext_name] = true; + } elseif (isDebugModeEnabled()) { + // Log missing file + logDebugMessage(__FUNCTION__, __LINE__, 'Filter include file ' . $incFileName . ' for extension ' . $ext_name . ' is missing.'); + } + } // END - if +} + // [EOF] ?>