+ return $number;
+}
+
+// Converts NULL into number zero
+function makeNullToZero ($number) {
+ // Is this a NULL?
+ if ((is_null($number)) || (empty($number))) {
+ // Simply set it
+ $number = '0';
+ } // END - if
+
+ // Return it
+ return $number;
+}
+
+// Capitalizes a string with underscores, e.g.: some_foo_string will become SomeFooString
+// Note: This function is cached
+function capitalizeUnderscoreString ($str) {
+ // Do we have cache?
+ if (!isset($GLOBALS[__FUNCTION__][$str])) {
+ // Init target string
+ $capitalized = '';
+
+ // Explode it with the underscore, but rewrite dashes to underscore before
+ $strArray = explode('_', str_replace('-', '_', $str));
+
+ // "Walk" through all elements and make them lower-case but first upper-case
+ foreach ($strArray as $part) {
+ // Capitalize the string part
+ $capitalized .= firstCharUpperCase($part);
+ } // END - foreach
+
+ // Store the converted string in cache array
+ $GLOBALS[__FUNCTION__][$str] = $capitalized;
+ } // END - if
+
+ // Return cache
+ 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);
+
+ // Add output and type
+ $content['type'] = $mailType;
+ $content['__output'] = '';
+
+ // Filter all data
+ $content = runFilterChain('generate_admin_mail_links', $content);
+
+ // Get output back
+ $OUT = $content['__output'];
+ } // 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.
+ *
+ * @param $str String to overwork
+ * @return $str Overworked string
+ */
+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;
+}
+
+// Searches the given array for a sub-string match and returns all found keys in an array
+function getArrayKeysFromSubStrArray ($heystack, $needles, $offset = 0) {
+ // Init array for all found keys
+ $keys = array();
+
+ // Now check all entries
+ foreach ($needles as $key => $needle) {
+ // Do we have found a partial string?
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'heystack='.$heystack.',key='.$key.',needle='.$needle.',offset='.$offset);
+ if (strpos($heystack, $needle, $offset) !== false) {
+ // Add the found key
+ $keys[] = $key;
+ } // END - if
+ } // END - foreach
+
+ // Return the array
+ return $keys;
+}
+
+// Determines database column name from given subject and locked
+function determinePointsColumnFromSubjectLocked ($subject, $locked) {
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'subject=' . $subject . ',locked=' . intval($locked) . ' - ENTERED!');
+ // Default is 'normal' points
+ $pointsColumn = 'points';
+
+ // Which points, locked or normal?
+ if ($locked === true) {
+ $pointsColumn = 'locked_points';
+ } // END - if
+
+ // Prepare array for filter
+ $filterData = array(
+ 'subject' => $subject,
+ 'locked' => $locked,
+ 'column' => $pointsColumn
+ );
+
+ // Run the filter
+ $filterData = runFilterChain('determine_points_column_name', $filterData);
+
+ // Extract column name from array
+ $pointsColumn = $filterData['column'];
+
+ // Return it
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'subject=' . $subject . ',locked=' . intval($locked) . ',pointsColumn=' . $pointsColumn . ' - EXIT!');
+ return $pointsColumn;
+}
+
+// Setter for referal id (no bigintval, or nicknames will fail!)
+function setReferalId ($refid) {
+ $GLOBALS['refid'] = $refid;
+}
+
+// Checks if 'refid' is valid
+function isReferalIdValid () {
+ return ((isset($GLOBALS['refid'])) && (getReferalId() !== NULL) && (getReferalId() > 0));
+}
+
+// Getter for referal id
+function getReferalId () {
+ return $GLOBALS['refid'];
+}
+
+// Converts a boolean variable into 'Y' for true and 'N' for false
+function convertBooleanToYesNo ($boolean) {
+ // Default is 'N'
+ $converted = 'N';
+ if ($boolean === true) {
+ // Set 'Y'
+ $converted = 'Y';
+ } // END - if
+
+ // Return it
+ return $converted;
+}
+
+// Translates task type to a human-readable version
+function translateTaskType ($taskType) {
+ // Construct message id
+ $messageId = 'ADMIN_TASK_TYPE_' . strtoupper($taskType) . '';
+
+ // Is the message id there?
+ if (isMessageIdValid($messageId)) {
+ // Then construct message
+ $message = '{--' . $messageId . '--}';
+ } else {
+ // Else it is an unknown task type
+ $message = '{%message,ADMIN_TASK_TYPE_UNKNOWN=' . $taskType . '%}';
+ } // END - if
+
+ // Return message
+ return $message;
+}
+
+// Translates points subject to human-readable
+function translatePointsSubject ($subject) {
+ // Construct message id
+ $messageId = 'POINTS_SUBJECT_' . strtoupper($subject) . '';
+
+ // Is the message id there?
+ if (isMessageIdValid($messageId)) {
+ // Then construct message
+ $message = '{--' . $messageId . '--}';
+ } else {
+ // Else it is an unknown task type
+ $message = '{%message,POINTS_SUBJECT_UNKNOWN=' . $subject . '%}';
+ } // END - if
+
+ // Return message
+ return $message;
+}
+
+// "Translates" 'true' to true and 'false' to false
+function convertStringToBoolean ($str) {
+ // Trim it lower-case for validation
+ $str = trim(strtolower($str));
+
+ // Is it valid?
+ if (!in_array($str, array('true', 'false'))) {
+ // Not valid!
+ debug_report_bug(__FUNCTION__, __LINE__, 'str=' . $str . ' is not true/false');
+ } // END - if
+
+ // Return it
+ return (($str == 'true') ? true : false);
+}
+
+/**
+ * "Makes" a variable in given string parseable, this function will throw an
+ * error if the first character is not a dollar sign.
+ *
+ * @param $varString String which contains a variable
+ * @return $return String with added single quotes for better parsing
+ */
+function makeParseableVariable ($varString) {
+ // The first character must be a dollar sign
+ if (substr($varString, 0, 1) != '$') {
+ // Please report this
+ debug_report_bug(__FUNCTION__, __LINE__, 'varString=' . $varString . ' - No dollar sign detected, will not parse it.');
+ } // END - if
+
+ // Do we have cache?
+ if (!isset($GLOBALS[__FUNCTION__][$varString])) {
+ // Snap them in, if [,] are there
+ $GLOBALS[__FUNCTION__][$varString] = str_replace('[', "['", str_replace(']', "']", $varString));
+ } // END - if
+
+ // Return cache
+ return $GLOBALS[__FUNCTION__][$varString];