* $Author:: $ *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
- * Copyright (c) 2009 - 2012 by Mailer Developer Team *
+ * Copyright (c) 2009 - 2013 by Mailer Developer Team *
* For more information visit: http://mxchange.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
// Add a fatal error message to the queue array
-function addFatalMessage ($F, $L, $message, $extra = '') {
+function addFatalMessage ($file, $line, $message, $extra = '') {
if (is_array($extra)) {
// Multiple extras for a message with masks
$message = call_user_func_array('sprintf', $extra);
array_push($GLOBALS['fatal_messages'], $message);
// Log fatal messages away
- logDebugMessage($F, $L, 'Fatal error message: ' . compileCode($message));
+ logDebugMessage($file, $line, 'Fatal error message: ' . compileCode($message));
}
// Getter for total fatal message count
function generatePassword ($length = '0', $exclude = array()) {
// Auto-fix invalid length of zero
if ($length == '0') {
- $length = getPassLen();
+ $length = getMinPasswordLength();
} // END - if
// Exclude some entries
$server = $_SERVER['PHP_SELF'] . getEncryptSeparator() . detectUserAgent() . getEncryptSeparator() . getenv('SERVER_SOFTWARE') . getEncryptSeparator() . detectRealIpAddress() . getEncryptSeparator() . detectRemoteAddr();
// Build key string
- $keys = getSiteKey() . getEncryptSeparator() . getDateKey() . getEncryptSeparator() . getSecretKey() . getEncryptSeparator() . getFileHash() . getEncryptSeparator() . getDateFromRepository() . getEncryptSeparator() . getMasterSalt();
+ $keys = getSiteKey() . getEncryptSeparator() . getDateKey() . getEncryptSeparator() . getFileHash() . getEncryptSeparator() . getDateFromRepository() . getEncryptSeparator() . getMasterSalt();
+
+ // Is the secret_key config entry set?
+ if (isConfigEntrySet('secret_key')) {
+ // Add it
+ $keys .= getEncryptSeparator() . getSecretKey();
+ } // END - if
// Additional data
$data = $plainText . getEncryptSeparator() . uniqid(mt_rand(), TRUE) . getEncryptSeparator() . time();
// Fix "deleted" cookies
function fixDeletedCookies ($cookies) {
// Is this an array with entries?
- if ((is_array($cookies)) && (count($cookies) > 0)) {
+ if (isFilledArray($cookies)) {
// Then check all cookies if they are marked as deleted!
foreach ($cookies as $cookieName) {
// Is the cookie set to "deleted"?
break;
case getCode('URL_TIME_LOCK'):
- // @TODO Move this SQL code into a function, let's say 'getTimestampFromPoolId($id) ?
- $result = SQL_QUERY_ESC("SELECT `timestamp` FROM `{?_MYSQL_PREFIX?}_pool` WHERE `id`=%s LIMIT 1",
- array(bigintval(getRequestElement('id'))), __FUNCTION__, __LINE__);
-
// Load timestamp from last order
- $content = SQL_FETCHARRAY($result);
-
- // Free memory
- SQL_FREERESULT($result);
+ $content = getPoolDataFromId(getRequestElement('id'));
// Translate it for templates
$content['timestamp'] = generateDateTime($content['timestamp'], 1);
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("cache=%s, inc=%s, force=%s", $cache, $inc, intval($force)));
// Shall I remove the cache file?
- if ((isExtensionInstalled('cache')) && (isCacheInstanceValid()) && (isHtmlOutputMode())) {
+ if ((isExtensionInstalled('cache')) && (isValidCacheInstance()) && (isHtmlOutputMode())) {
// Rebuild cache only in HTML output-mode
+ // @TODO This should be rewritten not to load the cache file for just checking if it is there for save removal.
if ($GLOBALS['cache_instance']->loadCacheFile($cache)) {
// Destroy it
$GLOBALS['cache_instance']->removeCacheFile($force);
// Include file given?
if (!empty($inc)) {
// Construct FQFN
- $inc = sprintf("inc/loader/load-%s.php", $inc);
+ $inc = sprintf('inc/loader/load-%s.php', $inc);
// Is the include there?
if (isIncludeReadable($inc)) {
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'inc=' . $inc . ' - LOADED!');
loadInclude($inc);
} else {
- // Include not found
- logDebugMessage(__FUNCTION__, __LINE__, 'Include ' . $inc . ' not found. cache=' . $cache);
+ // Include not found, which needs now tracing
+ reportBug(__FUNCTION__, __LINE__, 'Include ' . $inc . ' not found. cache=' . $cache);
}
} // END - if
} // END - if
}
}
-// Enables the reset mode and runs it
-function doReset () {
- // Enable the reset mode
- $GLOBALS['reset_enabled'] = TRUE;
-
- // Run filters
- runFilterChain('reset');
-}
-
-// Enables the reset mode (hourly, weekly and monthly) and runs it
+// Enables the hourly reset mode and runs it
function doHourly () {
// Enable the hourly reset mode
$GLOBALS['hourly_enabled'] = TRUE;
// Run filters (one always!)
runFilterChain('hourly');
+
+ // Do not update in hourly debug mode
+ if ((!isConfigEntrySet('DEBUG_HOURLY')) || (!isDebugHourlyEnabled())) {
+ // Update database
+ updateConfiguration('last_hourly', getHour());
+ } // END - if
+}
+
+// Enables the daily reset mode and runs it
+function doDaily () {
+ // Enable the reset mode
+ $GLOBALS['daily_enabled'] = TRUE;
+
+ // Run filters
+ runFilterChain('daily');
+
+ // Do not update in daily debug mode
+ if ((!isConfigEntrySet('DEBUG_DAILY')) || (!isDebugDailyEnabled())) {
+ // Update database
+ updateConfiguration('last_daily', getDay());
+ } // END - if
+}
+
+// Enables the weekly reset mode and runs it
+function doWeekly () {
+ // Enable the reset mode
+ $GLOBALS['weekly_enabled'] = TRUE;
+
+ // Run filters
+ runFilterChain('weekly');
+
+ // Do not update in weekly debug mode
+ if ((!isConfigEntrySet('DEBUG_WEEKLY')) || (!isDebugWeeklyEnabled())) {
+ // Update database
+ updateConfiguration('last_weekly', getWeek());
+ } // END - if
+}
+
+// Enables the monthly reset mode and runs it
+function doMonthly () {
+ // Enable the reset mode
+ $GLOBALS['monthly_enabled'] = TRUE;
+
+ // Run filters
+ runFilterChain('monthly');
+
+ // Do not update in monthly debug mode
+ if ((!isConfigEntrySet('DEBUG_MONTHLY')) || (!isDebugMonthlyEnabled())) {
+ // Update database
+ updateConfiguration('last_monthly', getMonth());
+ } // END - if
+}
+
+// Enables the yearly reset mode and runs it
+function doYearly () {
+ // Enable the reset mode
+ $GLOBALS['yearly_enabled'] = TRUE;
+
+ // Run filters
+ runFilterChain('yearly');
+
+ // Do not update in yearly debug mode
+ if ((!isConfigEntrySet('DEBUG_YEARLY')) || (!isDebugYearlyEnabled())) {
+ // Update database
+ updateConfiguration('last_yearly', getYear());
+ } // END - if
}
// Shuts down the mailer (e.g. closing database link, flushing output/filters, etc.)
runFilterChain('shutdown', NULL);
// Check if link is up
- if (SQL_IS_LINK_UP()) {
+ if (isSqlLinkUp()) {
// Close link
- SQL_CLOSE(__FUNCTION__, __LINE__);
- } elseif (!isInstallationPhase()) {
+ sqlCloseLink(__FUNCTION__, __LINE__);
+ } elseif (!isInstaller()) {
// No database link
reportBug(__FUNCTION__, __LINE__, 'Database link is already down, while shutdown is running.');
}
* @param $excludePattern Regular expression to exclude more files (preg_match())
* @param $recursive whether to scan recursively
* @param $suffix Suffix for positive matches ($extension will be appended, too)
+ * @param $withPrefixSuffix Whether to include prefix/suffix in found entries
* @return $foundMatches All found positive matches for above criteria
*/
-function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = FALSE, $addBaseDir = TRUE, $excludeArray = array(), $extension = '.php', $excludePattern = '@(\.|\.\.)$@', $recursive = TRUE, $suffix = '') {
+function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = FALSE, $addBaseDir = TRUE, $excludeArray = array(), $extension = '.php', $excludePattern = '@(\.|\.\.)$@', $recursive = TRUE, $suffix = '', $withPrefixSuffix = TRUE) {
// Add default entries we should always exclude
array_unshift($excludeArray, '.', '..', '.svn', '.htaccess');
if ($addBaseDir === TRUE) {
// With base path
array_push($foundMatches, $fileName);
+ } elseif (($withPrefixSuffix === FALSE) && (!empty($extension))) {
+ // No prefix/suffix
+ array_push($foundMatches, substr($baseFile, strlen($prefix), -strlen($suffix . $extension)));
} else {
// No base path
array_push($foundMatches, $baseFile);
// We found .php file but should not search for them, why?
reportBug(__FUNCTION__, __LINE__, 'We should find files with extension=' . $extension . ', but we found a PHP script. (baseFile=' . $baseFile . ')');
}
- } elseif ($fileExtension == $extension) {
+ } elseif ((($fileExtension == $extension) || (empty($extension))) && (isFileReadable($FQFN))) {
// Other, generic file found
- array_push($foundMatches, $fileName);
+ if ($addBaseDir === TRUE) {
+ // With base path
+ array_push($foundMatches, $fileName);
+ } elseif (($withPrefixSuffix === FALSE) && (!empty($extension))) {
+ // No prefix/suffix
+ array_push($foundMatches, substr($baseFile, strlen($prefix), -strlen($suffix . $extension)));
+ } else {
+ // No base path
+ array_push($foundMatches, $baseFile);
+ }
}
} // END - while
// Map only these, still lame code...
switch ($moduleName) {
case 'index': // 'index' is the guest's menu
- $moduleName = 'guest';
+ $moduleName = 'guest';
break;
case 'login': // ... and 'login' the member's menu
}
// Add SQL debug data to array for later output
-function addSqlToDebug ($result, $sqlString, $timing, $F, $L) {
+function addSqlToDebug ($result, $sqlString, $timing, $file, $line) {
// Is there cache?
if (!isset($GLOBALS['debug_sql_available'])) {
// Check it and cache it in $GLOBALS
$GLOBALS['debug_sql_available'] = ((isConfigurationLoaded()) && (isDisplayDebugSqlEnabled()));
} // END - if
-
+
// Don't execute anything here if we don't need or ext-other is missing
if ($GLOBALS['debug_sql_available'] === FALSE) {
return;
} // END - if
// Already executed?
- if (isset($GLOBALS['debug_sqls'][$F][$L][$sqlString])) {
+ if (isset($GLOBALS['debug_sqls'][$file][$line][$sqlString])) {
// Then abort here, we don't need to profile a query twice
return;
} // END - if
// Remeber this as profiled (or not, but we don't care here)
- $GLOBALS['debug_sqls'][$F][$L][$sqlString] = TRUE;
+ $GLOBALS['debug_sqls'][$file][$line][$sqlString] = TRUE;
// Generate record
$record = array(
- 'num_rows' => SQL_NUMROWS($result),
- 'affected' => SQL_AFFECTEDROWS(),
+ 'num_rows' => sqlNumRows($result),
+ 'affected' => sqlAffectedRows(),
'sql_str' => $sqlString,
'timing' => $timing,
- 'file' => basename($F),
- 'line' => $L
+ 'file' => basename($file),
+ 'line' => $line
);
// Add it
} // END - if
// Is there a valid session?
- if ((!isSessionValid()) && (!isSpider())) {
+ if ((!isValidSession()) && (!isSpider())) {
// Determine right separator
$separator = '&';
if (!isInString('?', $url)) {
// Converts a zero or NULL to word 'NULL'
function convertZeroToNull ($number) {
// Is it a valid username?
- if ((!is_null($number)) && (!empty($number)) && ($number > 0)) {
+ if (isValidNumber($number)) {
// Always secure it
$number = bigintval($number);
} else {
// Converts a NULL|empty string|< 1 to zero
function convertNullToZero ($number) {
// Is it a valid username?
- if ((is_null($number)) || (empty($number)) || ($number < 1)) {
+ if (!isValidNumber($number)) {
// Is not valid or zero
$number = '0';
} // END - if
// Is the mail type supported?
if (!empty($table)) {
// Query for the mail
- $result = SQL_QUERY_ESC("SELECT `id`, `%s` AS `mail_status` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `id`=%s LIMIT 1",
+ $result = sqlQueryEscaped("SELECT `id`, `%s` AS `mail_status` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `id`=%s LIMIT 1",
array(
$statusColumn,
$table,
), __FILE__, __LINE__);
// Is there one entry there?
- if (SQL_NUMROWS($result) == 1) {
+ if (sqlNumRows($result) == 1) {
// Load the entry
- $content = SQL_FETCHARRAY($result);
+ $content = sqlFetchArray($result);
// Add output and type
$content['type'] = $mailType;
} // END - if
// Free result
- SQL_FREERESULT($result);
+ sqlFreeResult($result);
} // END - if
// Return generated HTML code
doGenericAddEntries($tableName, $columns, $filterFunctions, $extraValues, $timeColumns, $columnIndex);
// Entry has been added?
- if ((!SQL_HASZEROAFFECTED()) && ($GLOBALS['__XML_PARSE_RESULT'] === TRUE)) {
+ if ((!ifSqlHasZeroAffectedRows()) && ($GLOBALS['__XML_PARSE_RESULT'] === TRUE)) {
// Display success message
displayMessage('{--MEMBER_ENTRY_ADDED--}');
} else {
displayMessage('{--MEMBER_ALL_ENTRIES_REMOVED--}');
} else {
// Some are still there :(
- displayMessage(sprintf(getMessage('MEMBER_SOME_ENTRIES_NOT_DELETED'), SQL_AFFECTEDROWS(), countPostSelection($idColumn[0])));
+ displayMessage(sprintf(getMessage('MEMBER_SOME_ENTRIES_NOT_DELETED'), sqlAffectedRows(), countPostSelection($idColumn[0])));
}
} else {
// List for deletion confirmation
/**
* Compress given data and encodes it into BASE64 to be stored in database with
- * SQL_QUERY_ESC()
+ * sqlQueryEscaped()
*
* @param $data Data to be compressed and encoded
* @return $data Compressed+encoded data
return $str;
}
+// Hash string with SHA256 and encode it to hex
+function hashSha256 ($str) {
+ /// Hash string
+ $hash = mhash(MHASH_SHA256, $str);
+
+ // Encode it to hexadecimal
+ $hex = '';
+ for ($i = 0; $i < strlen($hash); $i++) {
+ // Encode char to decimal, pad it with zero, add it
+ $hex .= padLeftZero(dechex(ord(substr($hash, $i, 1))));
+ } // END - if
+
+ // Return it
+ return $hex;
+}
+
// ----------------------------------------------------------------------------
// "Translatation" functions for points_data table
// ----------------------------------------------------------------------------
}
} // END - if
+// "Calculates" password strength
+function calculatePasswordStrength ($password, $configEntry = 'min_password_length') {
+ // Default score
+ $score = 1;
+
+ if ((strlen($password) < 1) || (strlen($password) < getConfig($configEntry))) {
+ // Is to weak
+ return 0;
+ } // END - if
+
+ // At least 8 chars long?
+ if (strlen($password) >= 8) {
+ // Add score
+ $score++;
+ } // END - if
+
+ // At least 10 chars long?
+ if (strlen($password) >= 10) {
+ // Add score
+ $score++;
+ } // END - if
+
+ // Lower and upper cases?
+ if ((preg_match('/[a-z]/', $password)) && (preg_match('/[A-Z]/', $password))) {
+ // Add score
+ $score++;
+ } // END - if
+
+ // Also numbers?
+ if (preg_match('/[0-9]/', $password)) {
+ // Add score
+ $score++;
+ } // END - if
+
+ // Special characters?
+ if (preg_match('/.[!,@,#,$,%,^,&,*,?,\/,_,~,+,-,(,)]/', $password)) {
+ // Add score
+ $score++;
+ } // END - if
+
+ // Return password score
+ return $score;
+}
+
+// "Translates" password strength/score
+function translatePasswordStrength ($strength) {
+ // Return it translated
+ return '{--PASSWORD_SCORE_' . bigintval($strength) . '--}';
+}
+
+// Checks whether given password is strong enough
+function isStrongPassword ($password) {
+ // Determine it
+ return (calculatePasswordStrength($password) >= getConfig('min_password_score'));
+}
+
+// "Getter" for base path from theme
+function getBasePathFromTheme ($theme) {
+ return sprintf('%stheme/%s/css/', getPath(), $theme);
+}
+
// [EOF]
?>