// Getter for total fatal message count
function getTotalFatalErrors () {
// Init count
- $count = '0';
+ $count = 0;
// Is there at least the first entry?
if (!empty($GLOBALS['fatal_messages'][0])) {
// Get total count
$count = count($GLOBALS['fatal_messages']);
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'count=' . $count . ' - FROM ARRAY');
} // END - if
// Return value
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'count=' . $count . ' - EXIT!');
return $count;
}
// Generate a password in a specified length or use default password length
-function generatePassword ($length = '0', $exclude = array()) {
+function generatePassword ($length = '0', $exclude = array()) {
// Auto-fix invalid length of zero
if ($length == '0') {
$length = getPassLen();
return $GLOBALS[__FUNCTION__][$yn];
}
+// "Translates" Y/N into "de-/active"
+function translateActivationStatus ($status) {
+ // Is it cached?
+ if (!isset($GLOBALS[__FUNCTION__][$status])) {
+ // Default
+ $GLOBALS[__FUNCTION__][$status] = '??? (' . $status . ')';
+ switch ($status) {
+ case 'Y': $GLOBALS[__FUNCTION__][$status] = '{--ACTIVATED--}'; break;
+ case 'N': $GLOBALS[__FUNCTION__][$status] = '{--DEACTIVATED--}'; break;
+ default:
+ // Log unknown value
+ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected: Y/N", $status));
+ break;
+ } // END - switch
+ } // END - if
+
+ // Return it
+ return $GLOBALS[__FUNCTION__][$status];
+}
+
// Translates the american decimal dot into a german comma
// OPPOMENT: convertCommaToDot()
function translateComma ($dotted, $cut = TRUE, $max = '0') {
} elseif ($key != $key2) {
// Sort numbers (E.g.: 9 < 10)
if (($temporaryArray[$a_sort[$primary_key]][$key] < $temporaryArray[$a_sort[$primary_key]][$key2]) && ($order == -1)) $match = TRUE;
- if (($temporaryArray[$a_sort[$primary_key]][$key] > $temporaryArray[$a_sort[$primary_key]][$key2]) && ($order == 1)) $match = TRUE;
+ if (($temporaryArray[$a_sort[$primary_key]][$key] > $temporaryArray[$a_sort[$primary_key]][$key2]) && ($order == 1)) $match = TRUE;
}
if ($match) {
$M1 = getMonth();
// If so and if current time is before 02/29 and estimated time is after 02/29 then add 86400 seconds (one day)
- if ((floor($TEST) == $TEST) && ($M1 == '02') && ($postData[$prefix . '_mo'] > '02')) {
+ // 01 2 2 1 1 1 123 4 43 3 32 233 4 43 3 3210
+ if ((floor($TEST) == $TEST) && ($M1 == '02') && (((isset($postData[$prefix . '_mo'])) && ($postData[$prefix . '_mo'] > '02')) || ((isset($postData[$prefix . '_mn'])) && ($postData[$prefix . '_mn'] > '02')))) {
$SWITCH = getOneDay();
} // END - if
$ret += $postData[$prefix . '_ye'] * (31536000 + $SWITCH);
// Next months...
- $ret += $postData[$prefix . '_mo'] * 2628000;
+ if (isset($postData[$prefix . '_mo'])) {
+ $ret += $postData[$prefix . '_mo'] * 2628000;
+ } elseif (isset($postData[$prefix . '_mn'])) {
+ $ret += $postData[$prefix . '_mn'] * 2628000;
+ }
// Next weeks
$ret += $postData[$prefix . '_we'] * 604800;
} // END - foreach
// Is something there?
- if (strlen($ret) > 0) {
+ if (!empty($ret)) {
// Remove leading commata and space
$ret = substr($ret, 2);
} else {
}
// Compare both lengths and abort if different
- if (strlen($str) != count($scrambleNums)) return $str;
+ if (strlen($str) != count($scrambleNums)) {
+ return $str;
+ } // END - if
// Scramble string here
//* DEBUG: */ debugOutput('***Original=' . $str.'***<br />');
$mod = substr($mod, 0, 2);
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'idx=' . $idx . ',part1=' . $part1 . '/part2=' . $part2 . '/mod=' . $mod . '(' . strlen($mod) . ')');
- $mod = str_repeat('0', (2 - strlen($mod))) . $mod;
+ $mod = padLeftZero($mod);
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'mod(' . ($idx * 2) . ')=' . $mod . '*');
$start += 2;
$newHash .= $mod;
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);
// Wtites data to a config.php-style file
// @TODO Rewrite this function to use readFromFile() and writeToFile()
-function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $inserted, $seek=0) {
+function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $inserted, $seek = 0) {
// Initialize some variables
$done = FALSE;
$seek++;
// Start reading
while (!feof($fp)) {
// Read from source file
- $line = fgets ($fp, 1024);
+ $line = fgets($fp, 1024);
if (isInString($search, $line)) {
$next = '0';
fclose($fp);
if (($done === TRUE) && ($found === TRUE)) {
- // Copy back tmp file and delete tmp :-)
+ // Copy back temporary->FQFN file and ...
copyFileVerified($tmp, $FQFN, 0644);
+
+ // ... delete temporay file :-)
return removeFile($tmp);
} elseif ($found === FALSE) {
- outputHtml('<strong>CHANGE:</strong> 404!');
+ // Entry not found
+ logDebugMessage(__FUNCTION__, __LINE__, 'File ' . basename($FQFN) . ' cannot be changed: comment=' . $comment . ',prefix=' . $prefix . ',inserted=' . $inserted . ',seek=' . $seek . ' - 404!');
} else {
- outputHtml('<strong>TMP:</strong> UNDONE!');
+ // Temporary file not fully written
+ logDebugMessage(__FUNCTION__, __LINE__, 'File ' . basename($FQFN) . ' cannot be changed: comment=' . $comment . ',prefix=' . $prefix . ',inserted=' . $inserted . ',seek=' . $seek . ' - Temporary file unfinished!');
}
}
} else {
// File not found, not readable or writeable
- reportBug(__FUNCTION__, __LINE__, 'File not readable/writeable. file=' . basename($FQFN));
+ reportBug(__FUNCTION__, __LINE__, 'File not readable/writeable. file=' . basename($FQFN) . ',comment=' . $comment . ',prefix=' . $prefix . ',inserted=' . $inserted . ',seek=' . $seek);
}
// An error was detected!
$message = str_replace(array(chr(13), PHP_EOL), array('', ''), $message);
// Log this message away
- appendLineToFile(getPath() . getCachePath() . 'debug.log', generateDateTime(time(), '4') . '|' . getModule(FALSE) . '|' . basename($funcFile) . '|' . $line . '|' . $message);
+ appendLineToFile(getPath() . getCachePath() . 'debug.log', generateDateTime(time(), '4') . '|' . getModule(FALSE) . ':' . getExtraModule() . '|' . basename($funcFile) . '|' . $line . '|' . $message);
} // END - if
}
}
// Tries to determine if call-back functions and/or extra values shall be parsed
-function doHandleExtraValues ($filterFunctions, $extraValues, $key, $entries, $userIdColumn, $search) {
+function doHandleExtraValues ($filterFunctions, $extraValues, $key, $entries, $userIdColumn, $search, $id = NULL) {
// Debug mode enabled?
if (isDebugModeEnabled()) {
// Debug message
} // END - if
// Send data through the filter function if found
- if ($key == $userIdColumn[0]) {
+ if ($key === $userIdColumn[0]) {
// Is the userid, we have to process it with convertZeroToNull()
$entries = convertZeroToNull($entries);
} elseif ((!empty($filterFunctions[$key])) && (isset($extraValues[$key]))) {
// Debug mode enabled?
if (isDebugModeEnabled()) {
// Then log it
- /* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'search=' . $search . ',filterFunctions=' . $filterFunctions[$search] . ',extraValues=' . $extraValues[$key] . ',key=' . $key . ',id=' . $id . ',entries[' . gettype($entries) . ']=' . $entries . ' - BEFORE!');
+ /* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'search=' . $search . ',filterFunctions=' . $filterFunctions[$key] . ',extraValues=' . $extraValues[$key] . ',key=' . $key . ',id=' . $id . ',entries[' . gettype($entries) . ']=' . $entries . ' - BEFORE!');
} // END - if
// Filter function + extra value set
// Debug mode enabled?
if (isDebugModeEnabled()) {
// Then log it
- /* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'search=' . $search . ',filterFunctions=' . $filterFunctions[$search] . ',extraValues=' . $extraValues[$key] . ',key=' . $key . ',id=' . $id . ',entries[' . gettype($entries) . ']=' . $entries . ' - AFTER!');
+ /* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'search=' . $search . ',filterFunctions=' . $filterFunctions[$key] . ',extraValues=' . $extraValues[$key] . ',key=' . $key . ',id=' . $id . ',entries[' . gettype($entries) . ']=' . $entries . ' - AFTER!');
} // END - if
} elseif ((!empty($filterFunctions[$search])) && (!empty($extraValues[$search]))) {
// Debug mode enabled?
$test = substr($id, -3);
// Improved way of checking! :-)
- if (in_array($test, array('_ye', '_mo', '_we', '_da', '_ho', '_mi', '_se'))) {
+ if (in_array($test, array('_ye', '_mo', '_mn', '_we', '_da', '_ho', '_mi', '_se'))) {
// Found a multi-selection for timings?
$test = substr($id, 0, -3);
- if ((isset($postData[$test . '_ye'])) && (isset($postData[$test . '_mo'])) && (isset($postData[$test . '_we'])) && (isset($postData[$test . '_da'])) && (isset($postData[$test . '_ho'])) && (isset($postData[$test . '_mi'])) && (isset($postData[$test . '_se'])) && ($test != $test2)) {
+ if ((isset($postData[$test . '_ye'])) && ((isset($postData[$test . '_mo'])) || (isset($postData[$test . '_mn']))) && (isset($postData[$test . '_we'])) && (isset($postData[$test . '_da'])) && (isset($postData[$test . '_ho'])) && (isset($postData[$test . '_mi'])) && (isset($postData[$test . '_se'])) && ($test != $test2)) {
// Generate timestamp
$postData[$test] = createEpocheTimeFromSelections($test, $postData);
array_push($content, sprintf("`%s`='%s'", $test, $postData[$test]));
$GLOBALS['skip_config'][$test] = TRUE;
// Remove data from array
- foreach (array('ye', 'mo', 'we', 'da', 'ho', 'mi', 'se') as $rem) {
+ foreach (array('ye', 'mo', 'mn', 'we', 'da', 'ho', 'mi', 'se') as $rem) {
unset($postData[$test . '_' . $rem]);
} // END - foreach
$str = str_replace('.', '', $str);
// Replace german commata with decimal dot and cast it
- $float = (float) str_replace(',', '.', $str);
+ $float = sprintf(getConfig('FLOAT_MASK'), str_replace(',', '.', $str));
break;
default: // US and so on
// Remove thousand commatas first and cast
- $float = (float) str_replace(',', '', $str);
+ $float = sprintf(getConfig('FLOAT_MASK'), str_replace(',', '', $str));
break;
} // END - switch
// Shall I remove the cache file?
if ((isExtensionInstalled('cache')) && (isCacheInstanceValid()) && (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);
}
}
-// 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;
runFilterChain('hourly');
}
+// Enables the daily reset mode and runs it
+function doDaily () {
+ // Enable the reset mode
+ $GLOBALS['daily_enabled'] = TRUE;
+
+ // Run filters
+ runFilterChain('daily');
+}
+
+// Enables the weekly reset mode and runs it
+function doWeekly () {
+ // Enable the reset mode
+ $GLOBALS['weekly_enabled'] = TRUE;
+
+ // Run filters
+ runFilterChain('weekly');
+}
+
+// Enables the monthly reset mode and runs it
+function doMonthly () {
+ // Enable the reset mode
+ $GLOBALS['monthly_enabled'] = TRUE;
+
+ // Run filters
+ runFilterChain('monthly');
+}
+
// Shuts down the mailer (e.g. closing database link, flushing output/filters, etc.)
function doShutdown () {
// Call the filter chain 'shutdown'
runFilterChain('shutdown', NULL);
- // Check if not in installation phase and the link is up
- if ((!isInstallationPhase()) && (SQL_IS_LINK_UP())) {
+ // Check if link is up
+ if (SQL_IS_LINK_UP()) {
// Close link
SQL_CLOSE(__FUNCTION__, __LINE__);
} elseif (!isInstallationPhase()) {
}
// Setter for member id
-function setMemberId ($memberid) {
+function setMemberId ($memberId) {
// We should not set member id to zero
- if ($memberid == '0') {
+ if (!isValidId($memberId)) {
reportBug(__FUNCTION__, __LINE__, 'Userid should not be set zero.');
} // END - if
// Set it secured
- $GLOBALS['member_id'] = bigintval($memberid);
+ $GLOBALS['member_id'] = bigintval($memberId);
}
// Getter for member id or returns zero
function getMemberId () {
// Default member id
- $memberid = '0';
+ $memberId = '0';
// Is the member id set?
if (isMemberIdSet()) {
// Then use it
- $memberid = $GLOBALS['member_id'];
+ $memberId = $GLOBALS['member_id'];
} // END - if
// Return it
- return $memberid;
+ return $memberId;
}
// Checks ether the member id is set
case 'login': // ... and 'login' the member's menu
$moduleName = 'member';
break;
-
// Anything else will not be mapped, silently.
} // END - switch
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'url=' . $url . ',isHtmlOutputMode()=' . intval(isHtmlOutputMode()) . ',outputMode=' . $outputMode);
// Is there to decode entities?
- if ((!isHtmlOutputMode()) || ($outputMode != '0')) {
+ if (!isHtmlOutputMode()) {
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'url=' . $url . ' - BEFORE DECODING');
// Decode them for e.g. JavaScript parts
$url = decodeEntities($url);
return $number;
}
-// Converts a NULL to zero
+// Converts a NULL|empty string|< 1 to zero
function convertNullToZero ($number) {
// Is it a valid username?
- if ((!is_null($number)) && (!empty($number)) && ($number > 0)) {
- // Always secure it
- $number = bigintval($number);
- } else {
+ if ((is_null($number)) || (empty($number)) || ($number < 1)) {
// Is not valid or zero
$number = '0';
- }
+ } // END - if
// Return it
return $number;
}
// Generate admin links for mail order
-// mailType can be: 'mid' or 'bid'
+// mailType can be: 'normal' or 'bonus'
function generateAdminMailLinks ($mailType, $mailId) {
// Init variables
$OUT = '';
// Which mail do we have?
switch ($mailType) {
- case 'bid': // Bonus mail
+ case 'bonus': // Bonus mail
$table = 'bonus';
break;
- case 'mid': // Member mail
+ case 'normal': // Member mail
$table = 'pool';
break;
* @return $str Overworked string
*/
function replaceReturnNewLine ($str) {
- return str_replace(array(chr(13), PHP_EOL), array('[r]', '[n]'), $str);
+ return str_replace(array(chr(13), chr(10)), array('[r]', '[n]'), $str);
}
// Converts a given string by splitting it up with given delimiter similar to
} // END - if
// Determine it
- $GLOBALS[__FUNCTION__][$str] = (($strTrimmed == 'true') ? true : false);
+ $GLOBALS[__FUNCTION__][$str] = ($strTrimmed == 'true');
} // END - if
// Return cache
return $str;
}
+// "Getter" for seconds from given time unit
+function getSecondsFromTimeUnit ($timeUnit) {
+ // Default is not found
+ $seconds = NULL;
+
+ // "Detect" it
+ switch ($timeUnit) {
+ case 's': // Seconds = 1
+ $seconds = 1;
+ break;
+
+ case 'm': // Minutes
+ $seconds = 60;
+ break;
+
+ case 'h': // Hours
+ $seconds = 60*60;
+ break;
+
+ case 'D': // Days
+ $seconds = 60*60*24;
+ break;
+
+ case 'W': // Weeks
+ $seconds = 60*60*24*7;
+ break;
+
+ default: // Unsupported
+ reportBug(__FUNCTION__, __LINE__, 'Unsupported time unit ' . $timeUnit . ' detected.');
+ break;
+ } // END - switch
+
+ // Return value
+ return $seconds;
+}
+
+// Calulates value for given seconds and time unit
+function caluculateTimeUnitValue ($seconds, $timeUnit) {
+ // Calculate it
+ return ($seconds / getSecondsFromTimeUnit($timeUnit));
+}
+
+// "Getter" for an array from given one but only one index of it
+function getArrayFromArrayIndex ($array, $key) {
+ // Some simple validation
+ assert(isset($array[0][$key]));
+
+ // Init new array
+ $newArray = array();
+
+ // "Walk" through all elements
+ foreach ($array as $element) {
+ $newArray[] = $element[$key];
+ } // END - if
+
+ // Return it
+ return $newArray;
+}
+
+/**
+ * Compress given data and encodes it into BASE64 to be stored in database with
+ * SQL_QUERY_ESC()
+ *
+ * @param $data Data to be compressed and encoded
+ * @return $data Compressed+encoded data
+ */
+function compress ($data) {
+ // Compress it
+ return base64_encode(gzcompress($data));
+}
+
+/**
+ * Decompress given data previously compressed with compress().
+ *
+ * @param $data Data compressed with compress()
+ * @reurn $data Uncompressed data
+ */
+function decompress ($data) {
+ // Decompress it
+ return gzuncompress(base64_decode($data));
+}
+
+/**
+ * Converts given charset in given string to UTF-8 if not UTF-8. This function
+ * is currently limited to iconv().
+ *
+ * @param $str String to convert charset in
+ * @param $charset Charset to convert from
+ * @return $str Converted string
+ */
+function convertCharsetToUtf8 ($str, $charset) {
+ // Is iconv() available?
+ if (!function_exists('iconv')) {
+ // Please make it sure
+ reportBug(__FUNCTION__, __LINE__, 'PHP function iconv() is currently required to do charset convertion.');
+ } // END - if
+
+ // Is the charset not UTF-8?
+ if (strtoupper($charset) != 'UTF-8') {
+ // Convert it to UTF-8
+ $str = iconv(strtoupper($charset), 'UTF-8//TRANSLIT', $str);
+ } // END - if
+
+ // Return converted string
+ return $str;
+}
+
// ----------------------------------------------------------------------------
// "Translatation" functions for points_data table
// ----------------------------------------------------------------------------
// Translates generically some data into a target string
-function translateGeneric ($messagePrefix, $data) {
+function translateGeneric ($messagePrefix, $data, $messageSuffix = '') {
// Is the method null or empty?
if (is_null($data)) {
// Is NULL
} // END - if
// Default column name is unknown
- $return = '{%message,' . $messagePrefix . '_UNKNOWN=' . strtoupper($data) . '%}';
+ $return = '{%message,' . $messagePrefix . '_UNKNOWN' . $messageSuffix . '=' . strtoupper($data) . '%}';
// Construct message id
- $messageId = $messagePrefix . '_' . strtoupper($data);
+ $messageId = $messagePrefix . '_' . strtoupper($data) . $messageSuffix;
// Is it there?
if (isMessageIdValid($messageId)) {
return translateGeneric('ADMIN_TASK_TYPE', $taskType);
}
-//-----------------------------------------------------------------------------
-// Automatically re-created functions, all taken from user comments on www.php.net
-//-----------------------------------------------------------------------------
+// "Translates" task status to a human-readable version
+function translateTaskStatus ($taskStatus) {
+ // Return it
+ return translateGeneric('ADMIN_TASK_STATUS', $taskStatus);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * 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) {