* Kurzbeschreibung : Viele Nicht-Datenbank-Funktionen *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
- * Copyright (c) 2009 - 2013 by Mailer Developer Team *
+ * Copyright (c) 2009 - 2015 by Mailer Developer Team *
* For more information visit: http://mxchange.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
// Redirects to an URL and if neccessarry extends it with own base URL
-function redirectToUrl ($url, $allowSpider = TRUE) {
+function redirectToUrl ($url, $allowSpider = TRUE, $compileCode = TRUE) {
// Is the output mode -2?
if (isAjaxOutputMode()) {
// This is always (!) an AJAX request and shall not be redirected
$url = substr($url, 6, -2);
} // END - if
- // Compile out codes
- eval('$url = "' . compileRawCode(encodeUrl($url)) . '";');
+ // Compile codes out?
+ if ($compileCode === TRUE) {
+ // Compile out codes
+ eval('$url = "' . compileRawCode(encodeUrl($url)) . '";');
+ } // END - if
// Default 'rel' value is external, nofollow is evil from Google and hurts the Internet
$rel = ' rel="external"';
// Three different ways to debug...
//* DEBUG: */ reportBug(__FUNCTION__, __LINE__, 'URL=' . $url);
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'URL=' . $url);
- //* DEBUG: */ die($url);
+ //* DEBUG-DIE: */ die(__METHOD__ . ':url=' . $url . '<br />compileCode=' . intval($compileCode));
// We should not sent a redirect if headers are already sent
if (!headers_sent()) {
+ // Compile again?
+ if ($compileCode === TRUE) {
+ // Do final compilation
+ $url = doFinalCompilation(str_replace('&', '&', $url), FALSE);
+ } // END - if
+
// Load URL when headers are not sent
- sendRawRedirect(doFinalCompilation(str_replace('&', '&', $url), FALSE));
+ sendRawRedirect($url);
} else {
// Output error message
loadPageHeader();
//
function generateRandomCode ($length, $code, $userid, $extraData = '') {
// Build server string
- $server = $_SERVER['PHP_SELF'] . getEncryptSeparator() . detectUserAgent() . getEncryptSeparator() . getenv('SERVER_SOFTWARE') . getEncryptSeparator() . detectRealIpAddress() . getEncryptSeparator() . detectRemoteAddr();
+ $server = $_SERVER['REQUEST_URI'] . getEncryptSeparator() . detectUserAgent() . getEncryptSeparator() . getenv('SERVER_SOFTWARE') . getEncryptSeparator() . detectRealIpAddress() . getEncryptSeparator() . detectRemoteAddr();
// Build key string
$keys = getSiteKey() . getEncryptSeparator() . getDateKey();
// When the salt is empty build a new one, else use the first x configured characters as the salt
if (empty($salt)) {
// Build server string for more entropy
- $server = $_SERVER['PHP_SELF'] . getEncryptSeparator() . detectUserAgent() . getEncryptSeparator() . getenv('SERVER_SOFTWARE') . getEncryptSeparator() . detectRealIpAddress() . getEncryptSeparator() . detectRemoteAddr();
+ $server = $_SERVER['REQUEST_URI'] . getEncryptSeparator() . detectUserAgent() . getEncryptSeparator() . getenv('SERVER_SOFTWARE') . getEncryptSeparator() . detectRealIpAddress() . getEncryptSeparator() . detectRemoteAddr();
// Build key string
$keys = getSiteKey() . getEncryptSeparator() . getDateKey() . getEncryptSeparator() . getFileHash() . getEncryptSeparator() . getMasterSalt();
if (strlen($str) > 40) {
// The string is to long
return $str;
- } elseif (strlen($str) == 40) {
+ } elseif ((strlen($str) == 40) && (getPassScramble() != '')) {
// From database
- $scrambleNums = explode(':', getPassScramble());
+ $scramble = getPassScramble();
} else {
// Generate new numbers
- $scrambleNums = explode(':', genScrambleString(strlen($str)));
+ $scramble = genScrambleString(strlen($str));
}
+ // Convert it into an array
+ $scrambleNums = explode(':', $scramble);
+
// Assert on both lengths
assert(strlen($str) == count($scrambleNums));
} // END - if
// Add {?URL?} ?
- if ((substr($url, 0, strlen(getUrl())) != getUrl()) && (substr($url, 0, 7) != '{?URL?}') && (substr($url, 0, 7) != 'http://') && (substr($url, 0, 8) != 'https://')) {
+ if ((substr($url, 0, strlen(getUrl())) != getUrl()) && (substr($url, 0, 7) != '{?URL?}') && (!isFullQualifiedUrl($url))) {
// Add it
$url = '{?URL?}/' . $url;
} // END - if
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))), 2);
- } // END - if
-
- // Make sure 'length modulo 2' = 0
- assert((strlen($hex) % 2) == 0);
-
- // 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);
}
// Loads given library (aka. PHP extension)
-// Credits: shaunspiller at spammenot-gmail dot com ( http://de.php.net/dl#88566 )
function loadLibrary ($n, $f = NULL) {
- return extension_loaded($n) or dl(((PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '') . ($f ? $f : $n) . '.' . PHP_SHLIB_SUFFIX);
+ // Is the actual function dl() available? (Not on all SAPIs since 5.3)
+ if (!is_callable('dl')) {
+ // Not callable
+ /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'dl() is not callable for n=' . $n . ',f[' . gettype($f) . ']=' . $f);
+ return FALSE;
+ } // END - if
+
+ // Try to load PHP library
+ return dl(((PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '') . ($f ? $f : $n) . '.' . PHP_SHLIB_SUFFIX);
}
// "Translates" given PHP extension name into a readable version