* $Author:: $ *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
- * Copyright (c) 2009, 2010 by Mailer Developer Team *
+ * Copyright (c) 2009 - 2011 by Mailer Developer Team *
* For more information visit: http://www.mxchange.org *
* *
* This program is free software; you can redistribute it and/or modify *
die();
} // END - if
-// Sends out all headers required for HTTP/1.1 reply
-function sendHttpHeaders () {
- // Used later
- $now = gmdate('D, d M Y H:i:s') . ' GMT';
-
- // Send HTTP header
- sendHeader('HTTP/1.1 ' . getHttpStatus());
-
- // General headers for no caching
- sendHeader('Expires: ' . $now); // RFC2616 - Section 14.21
- sendHeader('Last-Modified: ' . $now);
- sendHeader('Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
- sendHeader('Pragma: no-cache'); // HTTP/1.0
- sendHeader('Connection: Close');
- sendHeader('Content-Type: ' . getContentType() . '; charset=UTF-8');
- sendHeader('Content-Language: ' . getLanguage());
-}
-
// Init fatal message array
function initFatalMessages () {
$GLOBALS['fatal_messages'] = array();
$toEmail = getUserData('email');
} else {
// Set webmaster
- $toEmail = getConfig('WEBMASTER');
+ $toEmail = getWebmaster();
}
}
} elseif ($toEmail == '0') {
// Is the webmaster!
- $toEmail = getConfig('WEBMASTER');
+ $toEmail = getWebmaster();
}
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail}<br />");
// Send Mail away
return sendRawEmail($toEmail, $subject, $message, $mailHeader);
} elseif ($isHtml != 'Y') {
- // Problem found!
- return sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader);
+ // Problem detected while sending a mail, forward it to admin
+ return sendRawEmail(getWebmaster(), '[PROBLEM:]' . $subject, $message, $mailHeader);
}
// Why did we end up here? This should not happen
$mail->Username = getConfig('SMTP_USER');
$mail->Password = getConfig('SMTP_PASSWORD');
if (empty($headers)) {
- $mail->From = getConfig('WEBMASTER');
+ $mail->From = getWebmaster();
} else {
$mail->From = $headers;
}
}
$mail->AddAddress($toEmail, '');
- $mail->AddReplyTo(getConfig('WEBMASTER'), getMainTitle());
- $mail->AddCustomHeader('Errors-To:' . getConfig('WEBMASTER'));
- $mail->AddCustomHeader('X-Loop:' . getConfig('WEBMASTER'));
- $mail->AddCustomHeader('Bounces-To:' . getConfig('WEBMASTER'));
+ $mail->AddReplyTo(getWebmaster(), getMainTitle());
+ $mail->AddCustomHeader('Errors-To:' . getWebmaster());
+ $mail->AddCustomHeader('X-Loop:' . getWebmaster());
+ $mail->AddCustomHeader('Bounces-To:' . getWebmaster());
$mail->Send();
// Has an error occured?
// "Translates" the user status
function translateUserStatus ($status) {
+ // Default status is unknown if something goes through
+ $ret = '{--ACCOUNT_STATUS_UNKNOWN--}';
+
// Generate message depending on status
switch ($status) {
case 'UNCONFIRMED':
//
function generateRandomCode ($length, $code, $userid, $DATA = '') {
// Build server string
- $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRemoteAddr();
+ $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRealIpAddress() . getEncryptSeperator() . detectRemoteAddr();
// Build key string
- $keys = getConfig('SITE_KEY') . getEncryptSeperator() . getConfig('DATE_KEY');
+ $keys = getSiteKey() . getEncryptSeperator() . getDateKey();
if (isConfigEntrySet('secret_key')) {
$keys .= getEncryptSeperator().getSecretKey();
} // END - if
if (isConfigEntrySet('master_salt')) {
// Generate hash with master salt from modula of number with the prime number and other data
- $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a, getMasterSalt());
+ $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a, getMasterSalt());
// Create number from hash
- $rcode = hexdec(substr($saltedHash, strlen(getMasterSalt()), 9)) / abs(getConfig('rand_no') - $a + sqrt(getConfig('_ADD'))) / pi();
+ $rcode = hexdec(substr($saltedHash, strlen(getMasterSalt()), 9)) / abs(getRandNo() - $a + sqrt(getConfig('_ADD'))) / pi();
} else {
// Generate hash with "hash of site key" from modula of number with the prime number and other data
- $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a, substr(sha1(getConfig('SITE_KEY')), 0, getSaltLength()));
+ $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a, substr(sha1(getSiteKey()), 0, getSaltLength()));
// Create number from hash
- $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(getConfig('rand_no') - $a + sqrt(getConfig('_ADD'))) / pi();
+ $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(getRandNo() - $a + sqrt(getConfig('_ADD'))) / pi();
}
// At least 10 numbers shall be secure enought!
$len = getCodeLength();
- if ($len == '0') $len = $length;
- if ($len == '0') $len = 10;
+ if ($len == '0') {
+ $len = $length;
+ } // END - if
+ if ($len == '0') {
+ $len = 10;
+ } // END - if
// Cut off requested counts of number
$return = substr(str_replace('.', '', $rcode), 0, $len);
// Extract host name
$host = str_replace('http://', '', $url);
- if (isInString('/', $host)) $host = substr($host, 0, strpos($host, '/'));
+ if (isInString('/', $host)) {
+ $host = substr($host, 0, strpos($host, '/'));
+ } // END - if
// Generate relative URL
//* DEBUG: */ debugOutput('SCRIPT=' . $script);
}
//* DEBUG: */ debugOutput('SCRIPT=' . $script);
- if (substr($script, 0, 1) == '/') $script = substr($script, 1);
+ if (substr($script, 0, 1) == '/') {
+ $script = substr($script, 1);
+ } // END - if
// Return host name
return $host;
}
-// Send a GET request
-function sendGetRequest ($script, $data = array()) {
- // Extract host name from script
- $host = extractHostnameFromUrl($script);
-
- // Add data
- $body = http_build_query($data, '', '&');
-
- // There should be data, else we don't need to extend $script with $body
- if (empty($body)) {
- // Do we have a question-mark in the script?
- if (strpos($script, '?') === false) {
- // No, so first char must be question mark
- $body = '?' . $body;
- } else {
- // Ok, add &
- $body = '&' . $body;
- }
-
- // Add script data
- $script .= $body;
-
- // Remove trailed & to make it more conform
- if (substr($script, -1, 1) == '&') $script = substr($script, 0, -1);
- } // END - if
-
- // Generate GET request header
- $request = 'GET /' . trim($script) . ' HTTP/1.1' . getConfig('HTTP_EOL');
- $request .= 'Host: ' . $host . getConfig('HTTP_EOL');
- $request .= 'Referer: ' . getUrl() . '/admin.php' . getConfig('HTTP_EOL');
- if (isConfigEntrySet('FULL_VERSION')) {
- $request .= 'User-Agent: ' . getTitle() . '/' . getFullVersion() . getConfig('HTTP_EOL');
- } else {
- $request .= 'User-Agent: ' . getTitle() . '/' . getConfig('VERSION') . getConfig('HTTP_EOL');
- }
- $request .= 'Accept: image/png,image/*;q=0.8,text/plain,text/html,*/*;q=0.5' . getConfig('HTTP_EOL');
- $request .= 'Accept-Charset: UTF-8,*' . getConfig('HTTP_EOL');
- $request .= 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0' . getConfig('HTTP_EOL');
- $request .= 'Connection: close' . getConfig('HTTP_EOL');
- $request .= getConfig('HTTP_EOL');
-
- // Send the raw request
- $response = sendRawRequest($host, $request);
-
- // Return the result to the caller function
- return $response;
-}
-
-// Send a POST request
-function sendPostRequest ($script, $postData) {
- // Is postData an array?
- if (!is_array($postData)) {
- // Abort here
- logDebugMessage(__FUNCTION__, __LINE__, sprintf("postData is not an array. Type: %s", gettype($postData)));
- return array('', '', '');
- } // END - if
-
- // Extract host name from script
- $host = extractHostnameFromUrl($script);
-
- // Construct request body
- $body = http_build_query($postData, '', '&');
-
- // Generate POST request header
- $request = 'POST /' . trim($script) . ' HTTP/1.0' . getConfig('HTTP_EOL');
- $request .= 'Host: ' . $host . getConfig('HTTP_EOL');
- $request .= 'Referer: ' . getUrl() . '/admin.php' . getConfig('HTTP_EOL');
- $request .= 'User-Agent: ' . getTitle() . '/' . getFullVersion() . getConfig('HTTP_EOL');
- $request .= 'Accept: text/plain;q=0.8' . getConfig('HTTP_EOL');
- $request .= 'Accept-Charset: UTF-8,*' . getConfig('HTTP_EOL');
- $request .= 'Cache-Control: no-cache' . getConfig('HTTP_EOL');
- $request .= 'Content-Type: application/x-www-form-urlencoded' . getConfig('HTTP_EOL');
- $request .= 'Content-Length: ' . strlen($body) . getConfig('HTTP_EOL');
- $request .= 'Connection: close' . getConfig('HTTP_EOL');
- $request .= getConfig('HTTP_EOL');
-
- // Add body
- $request .= $body;
-
- // Send the raw request
- $response = sendRawRequest($host, $request);
-
- // Return the result to the caller function
- return $response;
-}
-
-// Sends a raw request to another host
-function sendRawRequest ($host, $request) {
- // Init errno and errdesc with 'all fine' values
- $errno = '0'; $errdesc = '';
-
- // Initialize array
- $response = array('', '', '');
-
- // Default is not to use proxy
- $useProxy = false;
-
- // Are proxy settins set?
- if (isProxyUsed()) {
- // Then use it
- $useProxy = true;
- } // END - if
-
- // Load include
- loadIncludeOnce('inc/classes/resolver.class.php');
-
- // Get resolver instance
- $resolver = new HostnameResolver();
-
- // Open connection
- //* DEBUG: */ die('SCRIPT=' . $script);
- if ($useProxy === true) {
- // Resolve hostname into IP address
- $ip = $resolver->resolveHostname(compileRawCode(getConfig('proxy_host')));
-
- // Connect to host through proxy connection
- $fp = fsockopen($ip, bigintval(getConfig('proxy_port')), $errno, $errdesc, 30);
- } else {
- // Resolve hostname into IP address
- $ip = $resolver->resolveHostname($host);
-
- // Connect to host directly
- $fp = fsockopen($ip, 80, $errno, $errdesc, 30);
- }
-
- // Is there a link?
- if (!is_resource($fp)) {
- // Failed!
- logDebugMessage(__FUNCTION__, __LINE__, $errdesc . ' (' . $errno . ')');
- return $response;
- } elseif ((!stream_set_blocking($fp, 0)) || (!stream_set_timeout($fp, 1))) {
- // Cannot set non-blocking mode or timeout
- logDebugMessage(__FUNCTION__, __LINE__, socket_strerror(socket_last_error()));
- return $response;
- }
-
- // Do we use proxy?
- if ($useProxy === true) {
- // Setup proxy tunnel
- $response = setupProxyTunnel($host, $fp);
-
- // If the response is invalid, abort
- if ((count($response) == 3) && (empty($response[0])) && (empty($response[1])) && (empty($response[2]))) {
- // Invalid response!
- logDebugMessage(__FUNCTION__, __LINE__, 'Proxy tunnel not working?');
- return $response;
- } // END - if
- } // END - if
-
- // Write request
- fwrite($fp, $request);
-
- // Start counting
- $start = microtime(true);
-
- // Read response
- while (!feof($fp)) {
- // Get info from stream
- $info = stream_get_meta_data($fp);
-
- // Is it timed out? 15 seconds is a really patient...
- if (($info['timed_out'] == true) || (microtime(true) - $start) > 15) {
- // Timeout
- logDebugMessage(__FUNCTION__, __LINE__, 'Timed out to get data from host ' . $host);
-
- // Abort here
- break;
- } // END - if
-
- // Get line from stream
- $line = fgets($fp, 128);
-
- // Ignore empty lines because of non-blocking mode
- if (empty($line)) {
- // uslepp a little to avoid 100% CPU load
- usleep(10);
-
- // Skip this
- continue;
- } // END - if
-
- // Add it to response
- $response[] = trim($line);
- } // END - while
-
- // Close socket
- fclose($fp);
-
- // Time request if debug-mode is enabled
- if (isDebugModeEnabled()) {
- // Add debug message...
- logDebugMessage(__FUNCTION__, __LINE__, 'Request took ' . (microtime(true) - $start) . ' seconds and returned ' . count($response) . ' line(s).');
- } // END - if
-
- // Skip first empty lines
- $resp = $response;
- foreach ($resp as $idx => $line) {
- // Trim space away
- $line = trim($line);
-
- // Is this line empty?
- if (empty($line)) {
- // Then remove it
- array_shift($response);
- } else {
- // Abort on first non-empty line
- break;
- }
- } // END - foreach
-
- //* DEBUG: */ debugOutput('<strong>Request:</strong><pre>'.print_r($request, true).'</pre>');
- //* DEBUG: */ debugOutput('<strong>Response:</strong><pre>'.print_r($response, true).'</pre>');
-
- // Proxy agent found or something went wrong?
- if (!isset($response[0])) {
- // No response, maybe timeout
- $response = array('', '', '');
- logDebugMessage(__FUNCTION__, __LINE__, 'Invalid empty response array, maybe timed out?');
- } elseif ((substr(strtolower($response[0]), 0, 11) == 'proxy-agent') && ($useProxy === true)) {
- // Proxy header detected, so remove two lines
- array_shift($response);
- array_shift($response);
- } // END - if
-
- // Was the request successfull?
- if ((!isInStringIgnoreCase('200 OK', $response[0])) || (empty($response[0]))) {
- // Not found / access forbidden
- logDebugMessage(__FUNCTION__, __LINE__, 'Unexpected status code ' . $response[0] . ' detected. "200 OK" was expected.');
- $response = array('', '', '');
- } // END - if
-
- // Return response
- return $response;
-}
-
-// Sets up a proxy tunnel for given hostname and through resource
-function setupProxyTunnel ($host, $resource) {
- // Initialize array
- $response = array('', '', '');
-
- // Generate CONNECT request header
- $proxyTunnel = 'CONNECT ' . $host . ':80 HTTP/1.0' . getConfig('HTTP_EOL');
- $proxyTunnel .= 'Host: ' . $host . getConfig('HTTP_EOL');
-
- // Use login data to proxy? (username at least!)
- if (getConfig('proxy_username') != '') {
- // Add it as well
- $encodedAuth = base64_encode(compileRawCode(getConfig('proxy_username')) . ':' . compileRawCode(getConfig('proxy_password')));
- $proxyTunnel .= 'Proxy-Authorization: Basic ' . $encodedAuth . getConfig('HTTP_EOL');
- } // END - if
-
- // Add last new-line
- $proxyTunnel .= getConfig('HTTP_EOL');
- //* DEBUG: */ debugOutput('<strong>proxyTunnel=</strong><pre>' . $proxyTunnel.'</pre>');
-
- // Write request
- fwrite($fp, $proxyTunnel);
-
- // Got response?
- if (feof($fp)) {
- // No response received
- return $response;
- } // END - if
-
- // Read the first line
- $resp = trim(fgets($fp, 10240));
- $respArray = explode(' ', $resp);
- if ((strtolower($respArray[0]) !== 'http/1.0') || ($respArray[1] != '200')) {
- // Invalid response!
- return $response;
- } // END - if
-
- // All fine!
- return $respArray;
-}
-
// Taken from www.php.net isInStringIgnoreCase() user comments
function isEmailValid ($email) {
// Check first part of email address
// 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'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRemoteAddr();
+ $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRealIpAddress() . getEncryptSeperator() . detectRemoteAddr();
// Build key string
- $keys = getConfig('SITE_KEY') . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromPatchTime() . getEncryptSeperator() . getMasterSalt();
+ $keys = getSiteKey() . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromPatchTime() . getEncryptSeperator() . getMasterSalt();
// Additional data
$data = $plainText . getEncryptSeperator() . uniqid(mt_rand(), true) . getEncryptSeperator() . time();
$a = time() + getConfig('_ADD') - 1;
// Generate SHA1 sum from modula of number and the prime number
- $sha1 = sha1(($a % getPrime()) . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a);
+ $sha1 = sha1(($a % getPrime()) . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a);
//* DEBUG: */ debugOutput('SHA1=' . $sha1.' ('.strlen($sha1).')<br />');
$sha1 = scrambleString($sha1);
//* DEBUG: */ debugOutput('Scrambled=' . $sha1.' ('.strlen($sha1).')<br />');
$content['timestamp'] = generateDateTime($content['timestamp'], 1);
// Calculate hours...
- $content['hours'] = round(getConfig('url_tlock') / 60 / 60);
+ $content['hours'] = round(getUrlTlock() / 60 / 60);
// Minutes...
- $content['minutes'] = round((getConfig('url_tlock') - $content['hours'] * 60 * 60) / 60);
+ $content['minutes'] = round((getUrlTlock() - $content['hours'] * 60 * 60) / 60);
// And seconds
- $content['seconds'] = round(getConfig('url_tlock') - $content['hours'] * 60 * 60 - $content['minutes'] * 60);
+ $content['seconds'] = round(getUrlTlock() - $content['hours'] * 60 * 60 - $content['minutes'] * 60);
// Finally contruct the message
$message = loadTemplate('tlock_message', true, $content);
// Include file given?
if (!empty($inc)) {
// Construct FQFN
- $inc = sprintf("inc/loader/load_cache-%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!<br />");
loadInclude($inc);
} else {
- // Include not found!
+ // Include not found
logDebugMessage(__FUNCTION__, __LINE__, 'Include ' . $inc . ' not found. cache=' . $cache);
}
} // END - if
}
// Determines the real remote address
-function determineRealRemoteAddress () {
+function determineRealRemoteAddress ($remoteAddr = false) {
// Is a proxy in use?
- if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
+ if ((isset($_SERVER['HTTP_X_FORWARDED_FOR'])) && (!$remoteAddr)) {
// Proxy was used
$address = $_SERVER['HTTP_X_FORWARDED_FOR'];
- } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
+ } elseif ((isset($_SERVER['HTTP_CLIENT_IP'])) && (!$remoteAddr)) {
// Yet, another proxy
$address = $_SERVER['HTTP_CLIENT_IP'];
} else {
// Adds a bonus mail to the queue
// This is a high-level function!
-function addNewBonusMail ($data, $mode = '', $output=true) {
+function addNewBonusMail ($data, $mode = '', $output = true) {
// Use mode from data if not set and availble ;-)
- if ((empty($mode)) && (isset($data['mode']))) $mode = $data['mode'];
+ if ((empty($mode)) && (isset($data['mode']))) {
+ $mode = $data['mode'];
+ } // END - if
// Generate receiver list
$receiver = generateReceiverList($data['cat'], $data['receiver'], $mode);
// Mail inserted into bonus pool
if ($output === true) {
- loadTemplate('admin_settings_saved', false, '{--ADMIN_BONUS_SEND--}');
+ displayMessage('{--ADMIN_BONUS_SEND--}');
} // END - if
} elseif ($output === true) {
// More entered than can be reached!
- loadTemplate('admin_settings_saved', false, '{--ADMIN_MORE_SELECTED--}');
+ displayMessage('{--ADMIN_MORE_SELECTED--}');
} else {
// Debug log
logDebugMessage(__FUNCTION__, __LINE__, 'cat=' . $data['cat'] . ',receiver=' . $data['receiver'] . ',data=' . base64_encode(serialize($data)) . ' More selected, than available!');
// Determines referal id and sets it
function determineReferalId () {
// Skip this in non-html-mode and outside ref.php
- if ((!isHtmlOutputMode()) && (basename($_SERVER['PHP_SELF']) != 'ref.php')) return false;
+ if ((!isHtmlOutputMode()) && (basename($_SERVER['PHP_SELF']) != 'ref.php')) {
+ return false;
+ } // END - if
// Check if refid is set
if ((isset($GLOBALS['refid'])) && ($GLOBALS['refid'] > 0)) {
runFilterChain('reset');
}
+// Enables the reset mode (hourly, weekly and monthly) and runs it
+function doHourly () {
+ // Enable the hourly reset mode
+ $GLOBALS['hourly_enabled'] = true;
+
+ // Run filters (one always!)
+ runFilterChain('hourly');
+}
+
// Our shutdown-function
function shutdown () {
// Call the filter chain 'shutdown'
// And skip further processing
continue;
- } elseif (substr($baseFile, 0, strlen($prefix)) != $prefix) {
+ } elseif (!isFilePrefixFound($baseFile, $prefix)) {
// Skip this file
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Invalid prefix in file ' . $baseFile . ', prefix=' . $prefix);
continue;
continue;
}
+ // Get file' extension (last 4 chars)
+ $fileExtension = substr($baseFile, -4, 4);
+
// Is the file a PHP script or other?
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'baseDir=' . $baseDir . ',prefix=' . $prefix . ',baseFile=' . $baseFile);
- if ((substr($baseFile, -4, 4) == '.php') || (($fileIncludeDirs === true) && (isDirectory($FQFN)))) {
+ if (($fileExtension == '.php') || (($fileIncludeDirs === true) && (isDirectory($FQFN)))) {
// Is this a valid include file?
if ($extension == '.php') {
// Remove both for extension name
}
} else {
// We found .php file but should not search for them, why?
- debug_report_bug(__FUNCTION__, __LINE__, 'We should find files with extension=' . $extension . ', but we found a PHP script.');
+ debug_report_bug(__FUNCTION__, __LINE__, 'We should find files with extension=' . $extension . ', but we found a PHP script. (baseFile=' . $baseFile . ')');
}
- } elseif (substr($baseFile, -4, 4) == $extension) {
+ } elseif ($fileExtension == $extension) {
// Other, generic file found
$files[] = $fileName;
}
return $files;
}
+// Checks wether $prefix is found in $fileName
+function isFilePrefixFound ($fileName, $prefix) {
+ // @TODO Find a way to cache this
+ return (substr($fileName, 0, strlen($prefix)) == $prefix);
+}
+
// Maps a module name into a database table name
function mapModuleToTable ($moduleName) {
// Map only these, still lame code...
// Encodes an URL for adding session id, etc.
function encodeUrl ($url, $outputMode = '0') {
// Do we have already have a PHPSESSID inside or view.php is called? Then abort here
- if ((strpos($url, session_name()) !== false) || (isRawOutputMode())) return $url;
+ if ((strpos($url, session_name()) !== false) || (isRawOutputMode())) {
+ // Raw output mode detected or session_name() found in URL
+ return $url;
+ } // END - if
// Do we have a valid session?
if (((!isset($GLOBALS['valid_session'])) || ($GLOBALS['valid_session'] === false) || (!isset($_COOKIE[session_name()]))) && (isSpider() === false)) {
// No question mark
$seperator = '?';
} elseif ((!isHtmlOutputMode()) || ($outputMode != '0')) {
- // Non-HTML mode
+ // Non-HTML mode (or forced non-HTML mode
$seperator = '&';
}
$userAgent = trim(strtolower(detectUserAgent(true)));
// It should not be empty, if so it is better a spider/bot
- if (empty($userAgent)) return true;
+ if (empty($userAgent)) {
+ // It is a spider/bot
+ return true;
+ } // END - if
// Is it a spider?
return ((strpos($userAgent, 'spider') !== false) || (strpos($userAgent, 'slurp') !== false) || (strpos($userAgent, 'bot') !== false) || (strpos($userAgent, 'archiver') !== false));
// "Walk" through all elements and make them lower-case but first upper-case
foreach ($strArray as $part) {
// Capitalize the string part
- $capitalized .= ucfirst(strtolower($part));
+ $capitalized .= firstCharUpperCase($part);
} // END - foreach
// Store the converted string in cache array
return $GLOBALS[__FUNCTION__][$str];
}
+// Generate admin links for mail order
+// mailType can be: 'mid' or 'bid'
+function generateAdminMailLinks ($mailType, $mailId) {
+ // Init variables
+ $OUT = '';
+ $table = '';
+
+ // Default column for mail status is 'data_type'
+ // @TODO Rename column data_type to e.g. mail_status
+ $statusColumn = 'data_type';
+
+ // Which mail do we have?
+ switch ($mailType) {
+ case 'bid': // Bonus mail
+ $table = 'bonus';
+ break;
+
+ case 'mid': // Member mail
+ $table = 'pool';
+ break;
+
+ default: // Handle unsupported types
+ logDebugMessage(__FUNCTION__, __LINE__, 'Unsupported mail type ' . $mailType . ' for mailId=' . $mailId . ' detected.');
+ $OUT = '<div align="center">{%message,ADMIN_UNSUPPORTED_MAIL_TYPE_DETECTED=' . $mailType . '%}</div>';
+ break;
+ } // END - switch
+
+ // 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",
+ array($statusColumn, $table, bigintval($mailId)), __FILE__, __LINE__);
+
+ // Do we have one entry there?
+ if (SQL_NUMROWS($result) == 1) {
+ // Load the entry
+ $content = SQL_FETCHARRAY($result);
+ die(__FUNCTION__.':<br />content=<pre>'.print_r($content, true).'</pre>');
+ } // END - if
+
+ // Free result
+ SQL_FREERESULT($result);
+ } // END - if
+
+ // Return generated HTML code
+ return $OUT;
+}
+
+
+/**
+ * determine if a string can represent a number in hexadecimal
+ *
+ * @param $hex A string to check if it is hex-encoded
+ * @return $foo True if the string is a hex, otherwise false
+ * @author Marques Johansson
+ * @link http://php.net/manual/en/function.http-chunked-decode.php#89786
+ */
+function isHexadecimal ($hex) {
+ // Make it lowercase
+ $hex = strtolower(trim(ltrim($hex, '0')));
+
+ // Fix empty strings to zero
+ if (empty($hex)) {
+ $hex = 0;
+ } // END - if
+
+ // Simply compare decode->encode result with original
+ return ($hex == dechex(hexdec($hex)));
+}
+
+// Replace "\r" with "[r]" and "\n" with "[n]" and add a final new-line to make
+// them visible to the developer. Use this function to debug e.g. buggy HTTP
+// response handler functions.
+function replaceReturnNewLine ($str) {
+ return str_replace("\r", '[r]', str_replace("\n", '[n]
+', $str));
+}
+
+// Converts a given string by splitting it up with given delimiter similar to
+// explode(), but appending the delimiter again
+function stringToArray ($delimiter, $string) {
+ // Init array
+ $strArray = array();
+
+ // "Walk" through all entries
+ foreach (explode($delimiter, $string) as $split) {
+ // Append the delimiter and add it to the array
+ $strArray[] = $split . $delimiter;
+ } // END - foreach
+
+ // Return array
+ return $strArray;
+}
+
+// Detects the prefix 'mb_' if a multi-byte string is given
+function detectMultiBytePrefix ($str) {
+ // Default is without multi-byte
+ $mbPrefix = '';
+
+ // Detect multi-byte (strictly)
+ if (mb_detect_encoding($str, 'auto', true) !== false) {
+ // With multi-byte encoded string
+ $mbPrefix = 'mb_';
+ } // END - if
+
+ // Return the prefix
+ return $mbPrefix;
+}
+
//-----------------------------------------------------------------------------
// Automatically re-created functions, all taken from user comments on www.php.net
//-----------------------------------------------------------------------------
-//
if (!function_exists('html_entity_decode')) {
// Taken from documentation on www.php.net
function html_entity_decode ($string) {
}
} // END - if
-if (!function_exists('http_build_query')) {
- // Taken from documentation on www.php.net, credits to Marco K. (Germany) and some light mods by R.Haeder
- function http_build_query($data, $prefix = '', $sep = '', $key = '') {
- $ret = array();
- foreach ((array) $data as $k => $v) {
- if (is_int($k) && $prefix != null) {
- $k = urlencode($prefix . $k);
- } // END - if
-
- if ((!empty($key)) || ($key === 0)) $k = $key . '[' . urlencode($k) . ']';
-
- if (is_array($v) || is_object($v)) {
- array_push($ret, http_build_query($v, '', $sep, $k));
- } else {
- array_push($ret, $k.'='.urlencode($v));
- }
- } // END - foreach
-
- if (empty($sep)) $sep = ini_get('arg_separator.output');
-
- return implode($sep, $ret);
- }
-} // END - if
-
// [EOF]
?>