X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ffilters.php;h=627a4007b89bc12e39c14db67edfe2de6421aae4;hb=01c4a1aa0914ebb2ab1d5df3d592246fb86e50cb;hp=5cda96ebf2c825db507989015475aecf07c9bdd0;hpb=52f1b0f588b492a7668204a74da47d5732791331;p=mailer.git
diff --git a/inc/filters.php b/inc/filters.php
index 5cda96ebf2..627a4007b8 100644
--- a/inc/filters.php
+++ b/inc/filters.php
@@ -1,7 +1,7 @@
0) || ($removed > 0)) {
// Destroy cache
- rebuildCacheFile('filter', 'filter');
+ rebuildCache('filter', 'filter');
} // END - if
}
@@ -137,10 +137,10 @@ function FILTER_CALL_HANDLER_LOGIN_FAILTURES ($data) {
$content = $data;
// Handle failed logins here if not in guest
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__."):type={$data['type']},action={getAction()},what={getWhat()},level={$data['access_level']}
");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "type=".$data['type'].",action=".getAction().",what=".getWhat().",level=".$data['access_level']."
");
if ((($data['type'] == 'what') || ($data['type'] == 'action') && ((!isWhatSet()) || (getWhat() == 'overview') || (getWhat() == getConfig('index_home')))) && ($data['access_level'] != 'guest') && ((isExtensionInstalledAndNewer('sql_patches', '0.4.7')) || (isExtensionInstalledAndNewer('admins', '0.7.0')))) {
// Handle failure
- $content['content'] .= handleLoginFailtures($data['access_level']);
+ $content['content'] .= handleLoginFailures($data['access_level']);
} // END - if
// Return the content
@@ -167,7 +167,7 @@ function FILTER_AUTO_ACTIVATE_EXTENSION ($data) {
// Is this extension always activated?
if (getExtensionAlwaysActive() == 'Y') {
// Then activate the extension
- //* DEBUG: */ outputHtml(__FUNCTION__."(".__LINE__."): ext_name={$data['ext_name']}
");
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "ext_name={$data['ext_name']}
");
doActivateExtension($data['ext_name']);
} // END - if
@@ -282,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?
@@ -310,19 +307,11 @@ 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 initializing randomizer
@@ -354,7 +343,7 @@ function FILTER_REMOVE_UPDATES ($data) {
// Do we need to remove update depency?
if (countExtensionUpdateDependencies() > 0) {
// Then find all updates we shall no longer execute
- foreach (getExtensionUpdateDependencies() as $id=>$ext_name) {
+ foreach (getExtensionUpdateDependencies() as $id => $ext_name) {
// Shall we remove this update?
if (in_array($ext_name, getExtensionRemovalList())) {
// Then remove this extension!
@@ -372,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']);
@@ -391,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--}');
@@ -409,65 +390,113 @@ 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]);
- } 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
+ // 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] . "\";"; + //* DEBUG: */ print('
' . str_replace('$', '$', htmlentities($eval)) . ''); + eval($eval); } // END - if // Return compiled code - return $code; + return $GLOBALS['compiled_config'][$uncompiled]; } -// Filter for compiling extension data -function FILTER_COMPILE_EXTENSION ($code) { - // Compile {%cmd=some_value%} to get extension data - // Support cmd is: - // - version -> getExtensionVersion() call - preg_match_all('/\{%((([a-zA-Z0-9-_]+)=([a-zA-Z0-9-_]+))*)\%\}/', $code, $matches); +// Filter for compiling expression code +function FILTER_COMPILE_EXPRESSION_CODE ($code) { + // Compile {%cmd,callback,extraFunction=some_value%} to get expression code snippets + // See switch() command below for supported commands + preg_match_all('/\{%(([a-zA-Z0-9-_,]+)(=([^\}]+)){0,1})*%\}/', $code, $matches); + //* DEBUG: */ print('
'.print_r($matches, true).''); + + // Default is from OUTPUT_HTML + $outputMode = getOutputMode(); // Some entries found? 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]); - - // 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); + foreach ($matches[2] as $key => $cmd) { + // Init replacer/call-back variable + $replacer = ''; + $callback = ''; + $extraFunction = ''; + + // Extract command and call-back + $cmdArray = explode(',', $cmd); + $cmd = $cmdArray[0]; + if (isset($cmdArray[1])) $callback = $cmdArray[1]; + if (isset($cmdArray[2])) $extraFunction = $cmdArray[2]; + + // Construct call-back function name for the command + $commandFunction = 'doExpression' . ucfirst(strtolower($cmd)); + + // Is this function there? + if (function_exists($commandFunction)) { + // Prepare $matches, $key, $outputMode, etc. + $data = array( + 'matches' => $matches, + 'key' => $key, + 'mode' => $outputMode, + 'code' => $code, + 'callback' => $callback, + 'extra_func' => $extraFunction + ); + + // Call it + $code = call_user_func($commandFunction, $data); + } else { + // Unsupported command detected + debug_report_bug('Command=' . $cmd . ', callback=' . $callback . ', extra=' . $extraFunction . ' is unsupported.'); + } } // END - foreach } // END - if + // Do we have non-HTML mode? + if ((getOutputMode() != '0') || ($outputMode != '0')) $code = decodeEntities($code); + // Return compiled code + //* DEBUG: */ die('
'.htmlentities($code).''); return $code; } @@ -488,16 +517,16 @@ 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'))) && (getOutputMode() == 0)) { + if (((!isResetModeEnabled()) || (!isExtensionInstalled('sql_patches'))) && (getOutputMode() == '0')) { // Then abort here - logDebugMessage(__FUNCTION__, __LINE__, 'Cannot run reset! Please report this bug. Thanks'); + debug_report_bug('Cannot run reset! enabled='.intval(isResetModeEnabled()).',ext='.intval(isExtensionInstalled('sql_patches')).' Please report this bug. Thanks'); } // END - if // Get more daily reset scripts setIncludePool('reset', getArrayFromDirectory('inc/reset/', 'reset_')); // Update database - if ((!isConfigEntrySet('DEBUG_RESET')) || (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')) { @@ -536,11 +565,11 @@ function FILTER_REMOVE_EXTENSION () { SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_extensions` WHERE `ext_name`='%s' LIMIT 1", array(getCurrentExtensionName()), __FUNCTION__, __LINE__); - // Remove the extension from global cache array as well + // Remove the extension from cache array as well removeExtensionFromArray(); // Remove the cache - rebuildCacheFile('extension', 'extension'); + rebuildCache('extension', 'extension'); } // Filter for flushing the output @@ -582,12 +611,15 @@ function FILTER_DETERMINE_WHAT_ACTION () { // Fix module if (!isModuleSet()) { // Is the request element set? - if (isGetRequestElementSet('module')) { + if (isGetRequestParameterSet('module')) { // Set module from request - setModule(getRequestElement('module')); - } else { + setModule(getRequestParameter('module')); + } elseif (getOutputMode() == '0') { // Set default module 'index' setModule('index'); + } else { + // Unknown module + setModule('unknown'); } } // END - if @@ -595,7 +627,7 @@ function FILTER_DETERMINE_WHAT_ACTION () { if (!isWhatSet()) setWhat(getWhatFromModule(getModule())); // Fix 'action' if not yet set - if (!isActionSet()) setAction(getModeAction(getModule(), getWhat())); + if (!isActionSet()) setAction(getActionFromModuleWhat(getModule(), getWhat())); } else { // Set action/what to empty setAction(''); @@ -607,7 +639,7 @@ function FILTER_DETERMINE_WHAT_ACTION () { if ((!isWhatSet()) && (!isActionSet()) && (getOutputMode() != 1) && (getOutputMode() != -1)) { if (getModule() == 'admin') { // Set 'action' value to 'login' in admin menu - setAction(getModeAction(getModule(), getWhat())); + setAction(getActionFromModuleWhat(getModule(), getWhat())); } elseif ((getModule() == 'index') || (getModule() == 'login')) { // Set 'what' value to 'welcome' in guest and member menu setWhatFromConfig('index_home'); @@ -626,7 +658,7 @@ function FILTER_TRIGGER_SENDING_POOL () { } // END - if // Init counter - $GLOBALS['pool_cnt'] = 0; + $GLOBALS['pool_cnt'] = '0'; // Init & set the include pool initIncludePool('pool'); @@ -656,11 +688,10 @@ 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; + if ((isInstallationPhase()) || (!isInstalled()) || (!isAdminRegistered()) || (!isExtensionInstalled('sql_patches'))) 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())) || ((isConfigEntrySet('DEBUG_RESET')) && (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()) && (!isGetRequestParameterSet('register')) && (getOutputMode() != 1)) { // Tell every module we are in reset-mode! doReset(); } // END - if @@ -673,14 +704,6 @@ function FILTER_LOAD_RUNTIME_INCLUDES () { // Load the include loadIncludeOnce($inc); } // END - foreach - - // Load admin include file if he is admin - if (isAdmin()) { - // Administrative functions - loadIncludeOnce('inc/modules/admin/admin-inc.php'); - } // END - if - //* DEBUG: */ addPointsThroughReferalSystem('test', 36, 1000); - //* DEBUG: */ die(); } // Filter for checking admin ACL @@ -694,7 +717,7 @@ function FILTER_CHECK_ADMIN_ACL () { $action = getAction(); if (isWhatSet()) { // Get action value by what-value - $action = getModeAction('admin', getWhat()); + $action = getActionFromModuleWhat('admin', getWhat()); } // END - if // Check for access control line of current menu entry @@ -710,7 +733,7 @@ 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), getUserId(), '')); + setConfigEntry('RAND_NUMBER', generateRandomCode(10, mt_rand(10000, 32766), getMemberId(), '')); } else { // Generate weak (!!!) code setConfigEntry('RAND_NUMBER', mt_rand(1000000, 9999999)); @@ -730,7 +753,7 @@ function FILTER_COUNT_MODULE () { // Handles fatal errors function FILTER_HANDLE_FATAL_ERRORS () { // Do we have errors to handle and right output mode? - if ((getTotalFatalErrors() == 0) || (getOutputMode() != 0)) { + if ((getTotalFatalErrors() == '0') || (getOutputMode() != 0)) { // Abort executing here return false; } // END - if @@ -815,14 +838,14 @@ function FILTER_HANDLE_FATAL_ERRORS () { // 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)) { + if ((!isGetRequestParameterSet('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'); + $GLOBALS['page_footer'] .= loadTemplate('copyright_backlink', true); } else { // No backlink in Copyright note - loadTemplate('copyright'); + $GLOBALS['page_footer'] .= loadTemplate('copyright', true); } } // END - if } @@ -831,11 +854,83 @@ function FILTER_DISPLAY_COPYRIGHT () { 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)) { + if ((((isExtensionInstalledAndNewer('sql_patches', '0.4.1')) && (getConfig('show_timings') == 'Y') && (!isGetRequestParameterSet('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 +} + +// Filter for loading user data +function FILTER_FETCH_USER_DATA ($userid = 0) { + // Is the userid not set? Then use member id + if (($userid == '0') || (is_null($userid))) $userid = getMemberId(); + + // Get user data + if (!fetchUserData($userid)) { + // Userid is not valid + debug_report_bug('User id '.$userid . ' is invalid.'); + } // END - if + + // Set member id + setMemberId($userid); +} + +// Filter for reseting users' last login failure, only available with latest ext-sql_patches +function FILTER_RESET_USER_LOGIN_FAILURE () { + // Is the user data valid? + if (!isMember()) { + // Do only run for logged in members + debug_report_bug('Please only run this filter for logged in users.'); + } // END - if + + // Remmeber login failures if available + if (isExtensionInstalledAndNewer('sql_patches', '0.6.1')) { + // Reset login failures + SQL_QUERY_ESC("UPDATE + `{?_MYSQL_PREFIX?}_user_data` +SET + `login_failures`=0, + `last_failure`='0000-00-00 00:00:00' +WHERE + `userid`=%s +LIMIT 1", + array(getMemberId()), __FILE__, __LINE__); + + // Store it in session + setSession('mxchange_member_failures' , getUserData('login_failures')); + setSession('mxchange_member_last_failure', getUserData('last_failure')); + } // END - if +} + +// Try to login the admin by setting some session/cookie variables +function FILTER_DO_LOGIN_ADMIN ($data) { + // Now set all session variables and store the result for later processing + $GLOBALS['admin_login_success'] = (( + setSession('admin_md5', encodeHashForCookie($data['pass_hash'])) + ) && ( + setSession('admin_login', $data['login']) + ) && ( + setSession('admin_last', time()) + )); + + // Return the data for further processing + return $data; +} + // [EOF] ?>