X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffilters.php;h=aeb90d935130489d4aa31d547df3baf99c6c7267;hp=1b26cddabb587c8d6bdbb2372242e0cbc950aad2;hb=aa3fab7d645750a51c98f9545b5228c8e724d02e;hpb=06d97fddd5c72e2b1c14ddb855b7eddc53f169a7 diff --git a/inc/filters.php b/inc/filters.php index 1b26cddabb..aeb90d9351 100644 --- a/inc/filters.php +++ b/inc/filters.php @@ -66,8 +66,8 @@ function FILTER_FLUSH_FILTERS () { } // END - if // Nothing is added/remove by default - $inserted = 0; - $removed = 0; + $inserted = '0'; + $removed = '0'; // Prepare SQL queries $insertSQL = "INSERT INTO `{?_MYSQL_PREFIX?}_filters` (`filter_name`,`filter_function`,`filter_active`) VALUES"; @@ -95,20 +95,14 @@ function FILTER_FLUSH_FILTERS () { // Something has been added? if ($inserted > 0) { - // Finish SQL command - $insertSQL = substr($insertSQL, 0, -1); - - // And run it - addSql($insertSQL); + // Finish SQL command and add it + addSql(substr($insertSQL, 0, -1)); } // END - if // Something has been removed? if ($removed > 0) { - // Finish SQL command - $removeSQL = substr($removeSQL, 0, -2) . 'LIMIT '.$removed; - - // And run it - addSql($removeSQL); + // Finish SQL command and add it + addSql(substr($removeSQL, 0, -2) . 'LIMIT ' . $removed); } // END - if // Shall we update usage counters (ONLY FOR DEBUGGING!) @@ -288,24 +282,21 @@ function FILTER_UPDATE_LOGIN_DATA () { // Recheck if logged in if (!isMember()) return false; - // Secure user ID - setUserId(getSession('userid')); + // Secure user id + setMemberId(getSession('userid')); - // Load last module and last online time - $result = SQL_QUERY_ESC("SELECT `last_module`, `last_online` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid`=%s LIMIT 1", - array(getUserId()), __FUNCTION__, __LINE__); - - // Entry found? - if (SQL_NUMROWS($result) == 1) { + // Found a userid? + if (fetchUserData(getMemberId())) { // Load last module and online time - $content = SQL_FETCHARRAY($result); + $content = getUserDataArray(); // Maybe first login time? if (empty($content['last_module'])) $content['last_module'] = 'login'; // This will be displayed on welcome page! :-) if (empty($GLOBALS['last_online']['module'])) { - $GLOBALS['last_online']['module'] = $content['last_module']; $GLOBALS['last_online']['online'] = $content['last_online']; + $GLOBALS['last_online']['module'] = $content['last_module']; + $GLOBALS['last_online']['online'] = $content['last_online']; } // END - if // 'what' not set? @@ -316,45 +307,24 @@ function FILTER_UPDATE_LOGIN_DATA () { } // END - if // Update last module / online time - SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_user_data` SET `last_module`='%s', `last_online`=UNIX_TIMESTAMP(), `REMOTE_ADDR`='%s' WHERE `userid`=%s LIMIT 1", - array( - getWhat(), - detectRemoteAddr(), - getUserId() - ), __FUNCTION__, __LINE__); + updateLastActivity(getMemberId()); } else { // Destroy session, we cannot update! - destroyUserSession(); + destroyMemberSession(); } - - // Free the result - SQL_FREERESULT($result); } -// Filter for checking admin ACL -function FILTER_CHECK_ADMIN_ACL () { - // Extension not installed so it's always allowed to access everywhere! - $ret = true; - - // Ok, Cookie-Update done - if ((isExtensionInstalledAndNewer('admins', '0.3.0')) && (isExtensionActive('admins'))) { - // Check if action GET variable was set - $action = getAction(); - if (isWhatSet()) { - // Get action value by what-value - $action = getModeAction('admin', getWhat()); - } // END - if +// Filter for initializing randomizer +function FILTER_INIT_RANDOMIZER () { + // Only execute this filter if installed + if ((!isInstalled()) || (!isExtensionInstalledAndNewer('other', '0.2.5'))) return; - // Check for access control line of current menu entry - $ret = adminsCheckAdminAcl($action, getWhat()); - } // END - if + // Take a prime number which is long (if you know a longer one please try it out!) + setConfigEntry('_PRIME', 591623); - // Return result - return $ret; -} + // Calculate "entropy" with the prime number (for code generation) + setConfigEntry('_ADD', (getConfig('_PRIME') * getConfig('_PRIME') / (pi() * getConfig('code_length') + 1))); -// Filter for initializing randomizer -function FILTER_INIT_RANDOMIZER () { // Simply init the randomizer with seed and _ADD value mt_srand(generateSeed() + getConfig('_ADD')); } @@ -391,11 +361,9 @@ function FILTER_DETERMINE_USERNAME () { // Check if logged in if (isMember()) { // Is still logged in so we welcome him with his name - $result = SQL_QUERY_ESC("SELECT `surname`, `family` FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `userid`=%s LIMIT 1", - array(getUserId()), __FILE__, __LINE__); - if (SQL_NUMROWS($result) == 1) { + if (fetchUserData(getMemberId())) { // Load surname and family's name and build the username - $content = SQL_FETCHARRAY($result); + $content = getUserDataArray(); // Prepare username setUsername($content['surname'] . ' ' . $content['family']); @@ -410,14 +378,8 @@ function FILTER_DETERMINE_USERNAME () { setUsername('{--USERNAME_UNKNOWN--}'); // Destroy session - destroyUserSession(); - - // Kill userid - setUserId(0); + destroyMemberSession(); } - - // Free memory - SQL_FREERESULT($result); } elseif (isAdmin()) { // Admin is there setUsername('{--USERNAME_ADMIN--}'); @@ -428,34 +390,55 @@ function FILTER_DETERMINE_USERNAME () { } // Filter for compiling config entries -function FILTER_COMPILE_CONFIG ($code) { - // Compile {?some_var?} to getConfig('some_var') - preg_match_all('/\{\?(([a-zA-Z0-9-_]+)*)\?\}/', $code, $matches); +function FILTER_COMPILE_CONFIG ($code, $compiled = false) { + // Save the uncompiled code + $uncompiled = $code; + + // Do we have cache? + if (!isset($GLOBALS['compiled_config'][$code])) { + // Compile {?some_var?} to getConfig('some_var') + preg_match_all('/\{\?(([a-zA-Z0-9-_]+)*)\?\}/', $code, $matches); + + // Some entries found? + if ((count($matches) > 0) && (count($matches[0]) > 0)) { + // Replace all matches + foreach ($matches[0] as $key => $match) { + // Do we have cache? + if (!isset($GLOBALS['compile_config'][$matches[1][$key]])) { + // Is the config valid? + if (isConfigEntrySet($matches[1][$key])) { + // Set it for caching + $GLOBALS['compile_config'][$matches[1][$key]] = "\".getConfig('" . $matches[1][$key] . "').\""; + } elseif (isConfigEntrySet('default_' . strtoupper($matches[1][$key]))) { + // Use default value + $GLOBALS['compile_config'][$matches[1][$key]] = "\".getConfig('" . 'DEFAULT_' . strtoupper($matches[1][$key]) . "').\""; + } elseif (isMessageIdValid('DEFAULT_' . strtoupper($matches[1][$key]))) { + // No config, try the language system + $GLOBALS['compile_config'][$matches[1][$key]] = "\".getMessage('". 'DEFAULT_' . strtoupper($matches[1][$key]) . "').\""; + } else { + // Unhandled! + $GLOBALS['compile_config'][$matches[1][$key]] = '!' . $matches[1][$key] . '!'; + } + } // END - if - // Some entries found? - if ((count($matches) > 0) && (count($matches[0]) > 0)) { - // Replace all matches - foreach ($matches[0] as $key => $match) { - // Do we have cache? - if (!isset($GLOBALS['compile_config'][$matches[1][$key]])) { - // Is the config valid? - if (isConfigEntrySet($matches[1][$key])) { - // Set it for caching - $GLOBALS['compile_config'][$matches[1][$key]] = getConfig($matches[1][$key]); - } else { - // No config, try the language system - $GLOBALS['compile_config'][$matches[1][$key]] = getMessage('DEFAULT_' . strtoupper($matches[1][$key])); - } - } // END - if + // Use this for replacing + $code = str_replace($match, $GLOBALS['compile_config'][$matches[1][$key]], $code); + //* DEBUG: */ if (($match == '{?URL?}') && (strlen($code) > 10000)) die('
'.secureString($code).'
'); + } // END - foreach + } // END - if - // Use this for replacing - $code = str_replace($match, $GLOBALS['compile_config'][$matches[1][$key]], $code); - //* DEBUG: */ if (($match == '{?URL?}') && (strlen($code) > 10000)) die('
'.htmlentities($code).'
'); - } // END - foreach + // Add it to cache + $GLOBALS['compiled_config'][$uncompiled] = $code; + } // END - if + + // Should we compile it? + if ($compiled === true) { + // Run the code + eval("\$GLOBALS['compiled_config'][\$uncompiled] = \"" . $GLOBALS['compiled_config'][$uncompiled] . "\";"); } // END - if // Return compiled code - return $code; + return $GLOBALS['compiled_config'][$uncompiled]; } // Filter for compiling extension data @@ -469,18 +452,28 @@ function FILTER_COMPILE_EXTENSION ($code) { if ((count($matches) > 0) && (count($matches[3]) > 0)) { // Replace all matches foreach ($matches[3] as $key => $cmd) { - // Construct call-back function name - $functionName = 'getExtension' . ucfirst(strtolower($cmd)); - - // Call the function - $replacer = call_user_func_array($functionName, $matches[4][$key]); + // Init replacer variable + $replacer = ''; + + // Is the extension installed or code provided? + if ($cmd == 'code') { + // Code asked for + $replacer = "\".getCode(\"" . $matches[4][$key] . "\").\""; + } else { + // Construct call-back function name + $functionName = 'getExtension' . ucfirst(strtolower($cmd)); + + // Construct call of the function + $replacer = "\".call_user_func_array('" . $functionName . "', array('" . $matches[4][$key] . "', true)).\""; + } // Replace it and insert parameter for GET request - $code = str_replace($matches[0][$key], sprintf("&%s=%s&rev=%s", $cmd, $replacer, getConfig('CURR_SVN_REVISION')), $code); + $code = str_replace($matches[0][$key], sprintf("&%s=%s&rev=\".getConfig('CURR_SVN_REVISION').\"", $cmd, $replacer), $code); } // END - foreach } // END - if // Return compiled code + //* DEBUG: */ die('
'.secureString($code).'
'); return $code; } @@ -501,7 +494,7 @@ function FILTER_UPDATE_EXTENSION_DATA ($ext_name) { // Load more reset scripts function FILTER_RUN_RESET_INCLUDES () { // Is the reset set or old sql_patches? - if ((!isResetModeEnabled()) || (!isExtensionInstalledAndOlder('sql_patches', '0.4.5'))) { + if (((!isResetModeEnabled()) || (!isExtensionInstalled('sql_patches'))) && (getOutputMode() == '0')) { // Then abort here logDebugMessage(__FUNCTION__, __LINE__, 'Cannot run reset! Please report this bug. Thanks'); } // END - if @@ -510,7 +503,7 @@ function FILTER_RUN_RESET_INCLUDES () { setIncludePool('reset', getArrayFromDirectory('inc/reset/', 'reset_')); // Update database - if (getConfig('DEBUG_RESET') != 'Y') updateConfiguration('last_update', time()); + if ((!isConfigEntrySet('DEBUG_RESET')) || (getConfig('DEBUG_RESET') != 'Y')) updateConfiguration('last_update', 'UNIX_TIMESTAMP()'); // Is the config entry set? if (isExtensionInstalledAndNewer('sql_patches', '0.4.2')) { @@ -523,7 +516,7 @@ function FILTER_RUN_RESET_INCLUDES () { mergeIncludePool('reset', getArrayFromDirectory('inc/weekly/', 'weekly_')); // Update config - if (getConfig('DEBUG_WEEKLY') != 'Y') updateConfiguration('last_week', $currWeek); + if ((isConfigEntrySet('DEBUG_WEEKLY')) && (getConfig('DEBUG_WEEKLY') != 'Y')) updateConfiguration('last_week', $currWeek); } // END - if // Create current month mark @@ -535,7 +528,7 @@ function FILTER_RUN_RESET_INCLUDES () { mergeIncludePool('reset', getArrayFromDirectory('inc/monthly/', 'monthly_')); // Update config - if (getConfig('DEBUG_MONTHLY') != 'Y') updateConfiguration('last_month', $currMonth); + if ((isConfigEntrySet('DEBUG_MONTHLY')) && (getConfig('DEBUG_MONTHLY') != 'Y')) updateConfiguration('last_month', $currMonth); } // END - if } // END - if @@ -593,7 +586,19 @@ function FILTER_DETERMINE_WHAT_ACTION () { // Get all values if ((getOutputMode() != 1) && (getOutputMode() != -1)) { // Fix module - if (!isModuleSet()) setModule('index'); + if (!isModuleSet()) { + // Is the request element set? + if (isGetRequestElementSet('module')) { + // Set module from request + setModule(getRequestElement('module')); + } elseif (getOutputMode() == '0') { + // Set default module 'index' + setModule('index'); + } else { + // Unknown module + setModule('unknown'); + } + } // END - if // Fix 'what' if not yet set if (!isWhatSet()) setWhat(getWhatFromModule(getModule())); @@ -625,12 +630,12 @@ function FILTER_DETERMINE_WHAT_ACTION () { // Sends out pooled mails function FILTER_TRIGGER_SENDING_POOL () { // Are we in normal output mode? - if (getOutputMode() != '0') { + if (getOutputMode() != 0) { // Only in normal output mode to prevent race-conditons! } // END - if // Init counter - $GLOBALS['pool_cnt'] = 0; + $GLOBALS['pool_cnt'] = '0'; // Init & set the include pool initIncludePool('pool'); @@ -645,6 +650,9 @@ function FILTER_TRIGGER_SENDING_POOL () { // Filter for checking and updating SVN revision function FILTER_CHECK_SVN_REVISION () { + // Only execute this filter if installed and all config entries are there + if ((!isInstalled()) || (!isConfigEntrySet('patch_level'))) return; + // Check for patch level differences between databases and current hard-coded if ((getConfig('CURR_SVN_REVISION') > getConfig('patch_level')) || (getConfig('patch_level') == 'CURR_SVN_REVISION') || (getConfig('patch_ctime') == 'UNIX_TIMES')) { // Update database and CONFIG array @@ -656,9 +664,12 @@ function FILTER_CHECK_SVN_REVISION () { // Filter for running daily reset function FILTER_RUN_DAILY_RESET () { + // Only execute this filter if installed + if ((!isInstalled()) || (!isAdminRegistered())) return; + // Shall we run the reset scripts? If a day has changed, maybe also a week/month has changed... Simple! :D // 012 3 4 43 3 4432 2 3 3 21 1 221 1 221 1 2 21 1 22 10 - if (((date('d', getConfig('last_update')) != date('d', time())) || (getConfig('DEBUG_RESET') == 'Y')) && (!isInstallationPhase()) && (isAdminRegistered()) && (!isGetRequestElementSet('register')) && (getOutputMode() != 1)) { + if (((date('d', getConfig('last_update')) != date('d', time())) || ((isConfigEntrySet('DEBUG_RESET')) && (getConfig('DEBUG_RESET') == 'Y'))) && (!isInstallationPhase()) && (isAdminRegistered()) && (!isGetRequestElementSet('register')) && (getOutputMode() != 1)) { // Tell every module we are in reset-mode! doReset(); } // END - if @@ -667,7 +678,7 @@ function FILTER_RUN_DAILY_RESET () { // Filter for loading more runtime includes (not for installation) function FILTER_LOAD_RUNTIME_INCLUDES () { // Load more includes - foreach (array('inc/session.php','inc/versions.php') as $inc) { + foreach (array('inc/databases.php','inc/session.php','inc/versions.php') as $inc) { // Load the include loadIncludeOnce($inc); } // END - foreach @@ -681,5 +692,174 @@ function FILTER_LOAD_RUNTIME_INCLUDES () { //* DEBUG: */ die(); } +// Filter for checking admin ACL +function FILTER_CHECK_ADMIN_ACL () { + // Extension not installed so it's always allowed to access everywhere! + $ret = true; + + // Ok, Cookie-Update done + if ((isExtensionInstalledAndNewer('admins', '0.3.0')) && (isExtensionActive('admins'))) { + // Check if action GET variable was set + $action = getAction(); + if (isWhatSet()) { + // Get action value by what-value + $action = getModeAction('admin', getWhat()); + } // END - if + + // Check for access control line of current menu entry + $ret = adminsCheckAdminAcl($action, getWhat()); + } // END - if + + // Set it here + $GLOBALS['acl_allow'] = $ret; +} + +// Init random number/cache buster +function FILTER_INIT_RANDOM_NUMBER () { + // Is the extension sql_patches installed and at least 0.3.6? + if ((isExtensionInstalledAndNewer('sql_patches', '0.3.6')) && (isExtensionInstalledAndNewer('other', '0.2.5'))) { + // Generate random number + setConfigEntry('RAND_NUMBER', generateRandomCode(10, mt_rand(10000, 32766), getMemberId(), '')); + } else { + // Generate weak (!!!) code + setConfigEntry('RAND_NUMBER', mt_rand(1000000, 9999999)); + } + + // Copy it to CACHE_BUSTER + setConfigEntry('CACHE_BUSTER', getConfig('RAND_NUMBER')); +} + +// Update module counter +function FILTER_COUNT_MODULE () { + // Do count all other modules but not accesses on CSS file css.php! + SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_mod_reg` SET `clicks`=`clicks`+1 WHERE `module`='%s' LIMIT 1", + array(getModule()), __FUNCTION__, __LINE__); +} + +// Handles fatal errors +function FILTER_HANDLE_FATAL_ERRORS () { + // Do we have errors to handle and right output mode? + if ((getTotalFatalErrors() == '0') || (getOutputMode() != 0)) { + // Abort executing here + return false; + } // END - if + + // Set content type + setContentType('text/html'); + + // Load config here + loadIncludeOnce('inc/load_config.php'); + + // Set unset variable + if (empty($check)) $check = ''; + + // Default is none + $content = ''; + + // Installation phase or regular mode? + if ((isInstallationPhase())) { + // While we are installing ouput other header than while it is installed... :-) + $OUT = ''; + foreach (getFatalArray() as $key => $value) { + // Prepare content for the template + $content = array( + 'key' => ($key + 1), + 'value' => $value + ); + + // Load row template + $OUT .= loadTemplate('install_fatal_row', true, $content); + } + + // Load main template + $content = loadTemplate('install_fatal_table', true, $OUT); + } elseif (isInstalled()) { + // Display all runtime fatal errors + $OUT = ''; + foreach (getFatalArray() as $key => $value) { + // Prepare content for the template + $content = array( + 'key' => ($key + 1), + 'value' => $value + ); + + // Load row template + $OUT .= loadTemplate('runtime_fatal_row', true, $content); + } + + // Load main template + $content = loadTemplate('runtime_fatal_table', true, $OUT); + } + + // Message to regular users (non-admin) + $CORR = getMessage('FATAL_REPORT_ERRORS'); + + // PHP warnings fixed + if ($check == 'done') { + if (isAdmin()) $CORR = getMessage('FATAL_CORRECT_ERRORS'); + } // END - if + + // Remember all in array + $content = array( + 'rows' => $content, + 'corr' => $CORR + ); + + // Load footer + loadIncludeOnce('inc/header.php'); + + // Load main template + loadTemplate('fatal_errors', false, $content); + + // Delete all to prevent double-display + initFatalMessages(); + + // Load footer + loadIncludeOnce('inc/footer.php'); + + // Abort here + shutdown(); +} + +// Filter for displaying copyright line +function FILTER_DISPLAY_COPYRIGHT () { + // Shall we display the copyright notice? + if ((!isGetRequestElementSet('frame')) && (basename($_SERVER['PHP_SELF']) != 'mailid_top.php') && ((getConfig('WRITE_FOOTER') == 'Y') || (isInstalling())) && ($GLOBALS['header_sent'] == 2)) { + // Backlink enabled? + if (((isConfigEntrySet('ENABLE_BACKLINK')) && (getConfig('ENABLE_BACKLINK') == 'Y')) || (isInstalling())) { + // Copyright with backlink, thanks! :-) + loadTemplate('copyright_backlink'); + } else { + // No backlink in Copyright note + loadTemplate('copyright'); + } + } // END - if +} + +// Filter for displaying parsing time +function FILTER_DISPLAY_PARSING_TIME () { + // Shall we display the parsing time and number of queries? + // 1234 5 54 4 5 5 4 4 5 543 3 4432 2 33 2 2 21 + if ((((isExtensionInstalledAndNewer('sql_patches', '0.4.1')) && (getConfig('show_timings') == 'Y') && (!isGetRequestElementSet('frame'))) || (isInstallationPhase())) && (getOutputMode() == '0') && ($GLOBALS['header_sent'] == 2)) { + // Then display it here + displayParsingTime(); + } // END - if +} + +// Filter for flushing template cache +function FILTER_FLUSH_TEMPLATE_CACHE () { + // Do not flush when debugging the template cache + if (isDebuggingTemplateCache()) return; + + // Do we have cached eval() data? + if ((isset($GLOBALS['template_eval'])) && (count($GLOBALS['template_eval']) > 0)) { + // Now flush all + foreach ($GLOBALS['template_eval'] as $template=>$eval) { + // Flush the cache (if not yet found) + flushTemplateCache($template, $eval); + } // END - if + } // END - if +} + // [EOF] ?>