X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffunctions.php;h=e65600e13e36994bee1d1796de5e7cea09bad849;hp=e89e002839a54f77ac04fb0550b511aaa2f3d334;hb=0f3a135204757cc8750262871c8e62c42300acb4;hpb=4b93525eb57c07b89c127494a45ec3d5666fa71a diff --git a/inc/functions.php b/inc/functions.php index e89e002839..e65600e13e 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -105,7 +105,7 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = ' // Is the webmaster! $toEmail = getWebmaster(); } - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail}
"); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'TO=' . $toEmail); // Check for PHPMailer or debug-mode if ((!checkPhpMailerUsage()) || (isDebugModeEnabled())) { @@ -594,26 +594,26 @@ function redirectToUrl ($url, $allowSpider = true) { * * ************************************************************************/ function array_pk_sort (&$array, $a_sort, $primary_key = '0', $order = -1, $nums = false) { - $dummy = $array; + $temporaryArray = $array; while ($primary_key < count($a_sort)) { - foreach ($dummy[$a_sort[$primary_key]] as $key => $value) { - foreach ($dummy[$a_sort[$primary_key]] as $key2 => $value2) { + foreach ($temporaryArray[$a_sort[$primary_key]] as $key => $value) { + foreach ($temporaryArray[$a_sort[$primary_key]] as $key2 => $value2) { $match = false; if ($nums === false) { // Sort byte-by-byte (also numbers will be interpreted as chars! E.g.: "9" > "10") - if (($key != $key2) && (strcmp(strtolower($dummy[$a_sort[$primary_key]][$key]), strtolower($dummy[$a_sort[$primary_key]][$key2])) == $order)) $match = true; + if (($key != $key2) && (strcmp(strtolower($temporaryArray[$a_sort[$primary_key]][$key]), strtolower($temporaryArray[$a_sort[$primary_key]][$key2])) == $order)) $match = true; } elseif ($key != $key2) { // Sort numbers (E.g.: 9 < 10) - if (($dummy[$a_sort[$primary_key]][$key] < $dummy[$a_sort[$primary_key]][$key2]) && ($order == -1)) $match = true; - if (($dummy[$a_sort[$primary_key]][$key] > $dummy[$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) { // We have found two different values, so let's sort whole array - foreach ($dummy as $sort_key => $sort_val) { - $t = $dummy[$sort_key][$key]; - $dummy[$sort_key][$key] = $dummy[$sort_key][$key2]; - $dummy[$sort_key][$key2] = $t; + foreach ($temporaryArray as $sort_key => $sort_val) { + $t = $temporaryArray[$sort_key][$key]; + $temporaryArray[$sort_key][$key] = $temporaryArray[$sort_key][$key2]; + $temporaryArray[$sort_key][$key2] = $t; unset($t); } // END - foreach } // END - if @@ -625,7 +625,7 @@ function array_pk_sort (&$array, $a_sort, $primary_key = '0', $order = -1, $nums } // END - while // Write back sorted array - $array = $dummy; + $array = $temporaryArray; } @@ -640,14 +640,14 @@ function generateRandomCode ($length, $code, $userid, $extraData = '') { // Build key string $keys = getSiteKey() . getEncryptSeperator() . getDateKey(); if (isConfigEntrySet('secret_key')) { - $keys .= getEncryptSeperator().getSecretKey(); + $keys .= getEncryptSeperator() . getSecretKey(); } // END - if if (isConfigEntrySet('file_hash')) { - $keys .= getEncryptSeperator().getFileHash(); + $keys .= getEncryptSeperator() . getFileHash(); } // END - if - $keys .= getEncryptSeperator() . getDateFromPatchTime(); + $keys .= getEncryptSeperator() . getDateFromRepository(); if (isConfigEntrySet('master_salt')) { - $keys .= getEncryptSeperator().getMasterSalt(); + $keys .= getEncryptSeperator() . getMasterSalt(); } // END - if // Build string from misc data @@ -676,7 +676,7 @@ function generateRandomCode ($length, $code, $userid, $extraData = '') { } // Create number from hash - $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(getRandNo() - $a + sqrt(getConfig('_ADD'))) / pi(); + $rcode = hexdec(substr($saltedHash, getSaltLength(), 9)) / abs(getRandNo() - $a + sqrt(getConfig('_ADD'))) / pi(); // At least 10 numbers shall be secure enought! if (isExtensionActive('other')) { @@ -689,8 +689,8 @@ function generateRandomCode ($length, $code, $userid, $extraData = '') { $len = 10; } // END - if - // Cut off requested counts of number - $return = substr(str_replace('.', '', $rcode), 0, $len); + // Cut off requested counts of number, but skip first digit (which is mostly a zero) + $return = substr($rcode, (strpos($rcode, '.') + 1), $len); // Done building code return $return; @@ -868,7 +868,7 @@ function generateHash ($plainText, $salt = '', $hash = true) { // Is the required extension 'sql_patches' there and a salt is not given? // 123 4 43 3 4 432 2 3 32 2 3 32 2 3 3 21 if (((isExtensionInstalledAndOlder('sql_patches', '0.3.6')) && (empty($salt))) || (!isExtensionActive('sql_patches')) || (!isExtensionInstalledAndNewer('other', '0.2.5')) || (strlen($salt) == 32)) { - // Extension sql_patches is missing/outdated so we hash the plain text with MD5 + // Extension ext-sql_patches is missing/outdated so we hash the plain text with MD5 if ($hash === true) { // Is plain password return md5($plainText); @@ -890,7 +890,7 @@ function generateHash ($plainText, $salt = '', $hash = true) { $server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRealIpAddress() . getEncryptSeperator() . detectRemoteAddr(); // Build key string - $keys = getSiteKey() . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromPatchTime() . getEncryptSeperator() . getMasterSalt(); + $keys = getSiteKey() . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromRepository() . getEncryptSeperator() . getMasterSalt(); // Additional data $data = $plainText . getEncryptSeperator() . uniqid(mt_rand(), true) . getEncryptSeperator() . time(); @@ -1104,10 +1104,10 @@ function generateErrorCodeFromUserStatus ($status = '') { } // END - if // Default error code if unknown account status - $errorCode = getCode('ACCOUNT_STATUS_UNKNOWN'); + $errorCode = getCode('ACCOUNT_UNKNOWN'); // Generate constant name - $codeName = sprintf("ACCOUNT_STATUS_%s", strtoupper($status)); + $codeName = sprintf("ACCOUNT_%s", strtoupper($status)); // Is the constant there? if (isCodeSet($codeName)) { @@ -1317,8 +1317,10 @@ function isUrlValidSimple ($url) { $reg = ($reg || preg_match(('^' . $pat . '^'), $url)); // Does it match? - if ($reg === true) break; - } + if ($reg === true) { + break; + } // END - if + } // END - foreach // Return true/false return $reg; @@ -1326,7 +1328,7 @@ function isUrlValidSimple ($url) { // Wtites data to a config.php-style file // @TODO Rewrite this function to use readFromFile() and writeToFile() -function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) { +function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $inserted, $seek=0) { // Initialize some variables $done = false; $seek++; @@ -1356,7 +1358,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) { // Read from source file $line = fgets ($fp, 1024); - if (strpos($line, $search) > -1) { + if (strpos($line, $search) > -1) { $next = '0'; $found = true; } // END - if @@ -1364,7 +1366,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) { if ($next > -1) { if ($next === $seek) { $next = -1; - $line = $prefix . $DATA . $suffix . "\n"; + $line = $prefix . $inserted . $suffix . "\n"; } else { $next++; } @@ -1404,7 +1406,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) { } // Send notification to admin -function sendAdminNotification ($subject, $templateName, $content = array(), $userid = '0') { +function sendAdminNotification ($subject, $templateName, $content = array(), $userid = NULL) { if ((isExtensionInstalledAndNewer('admins', '0.4.1')) && (function_exists('sendAdminsEmails'))) { // Send new way /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'admins=Y,subject=' . $subject . ',templateName=' . $templateName); @@ -1451,6 +1453,7 @@ function handleExtraValues ($filterFunction, $value, $extraValue) { // Call the multi-parameter call-back $ret = call_user_func_array($filterFunction, $args); + die('filterFunction='.$filterFunction.',args=
'.print_r($args,true).',ret=
'.print_r($ret,true).'
'); } else { // One parameter call $ret = call_user_func($filterFunction, $value); @@ -1569,7 +1572,7 @@ function rebuildCache ($cache, $inc = '', $force = false) { // Is the include there? if (isIncludeReadable($inc)) { // And rebuild it from scratch - //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "inc={$inc} - LOADED!
"); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'inc=' . $inc . ' - LOADED!'); loadInclude($inc); } else { // Include not found @@ -1652,30 +1655,39 @@ function determineReferalId () { // Check if refid is set if (isReferalIdValid()) { // This is fine... + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using refid from GLOBALS (' . getReferalId() . ')'); } elseif (isPostRequestParameterSet('refid')) { // Get referal id from POST element refid + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using refid from POST data (' . postRequestParameter('refid') . ')'); setReferalId(secureString(postRequestParameter('refid'))); } elseif (isGetRequestParameterSet('refid')) { // Get referal id from GET parameter refid + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using refid from GET data (' . getRequestParameter('refid') . ')'); setReferalId(secureString(getRequestParameter('refid'))); } elseif (isGetRequestParameterSet('ref')) { // Set refid=ref (the referal link uses such variable) + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using ref from GET data (' . getRequestParameter('refid') . ')'); setReferalId(secureString(getRequestParameter('ref'))); } elseif ((isGetRequestParameterSet('user')) && (basename($_SERVER['PHP_SELF']) == 'click.php')) { // The variable user comes from click.php + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using user from GET data (' . getRequestParameter('user') . ')'); setReferalId(bigintval(getRequestParameter('user'))); } elseif ((isSessionVariableSet('refid')) && (isValidUserId(getSession('refid')))) { - // Set session refid als global + // Set session refid as global + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using refid from SESSION data (' . getSession('refid') . ')'); setReferalId(bigintval(getSession('refid'))); } elseif (isRandomReferalIdEnabled()) { // Select a random user which has confirmed enougth mails + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Checking random referal id'); setReferalId(determineRandomReferalId()); } elseif ((isExtensionInstalledAndNewer('sql_patches', '0.1.2')) && (isValidUserId(getDefRefid()))) { // Set default refid as refid in URL + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using default refid (' . getDefRefid() . ')'); setReferalId(getDefRefid()); } else { // No default id when sql_patches is not installed or none set - setReferalId(null); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using NULL as refid'); + setReferalId(NULL); } // Set cookie when default refid > 0 @@ -1691,24 +1703,33 @@ function determineReferalId () { // If we found it, use the userid as referal id if ($found === true) { // Set the userid as 'refid' + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using refid from user account by nickname (' . getUserData('userid') . ')'); setReferalId(getUserData('userid')); } // END - if } elseif (isValidUserId(getReferalId())) { // Direct userid entered + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using direct userid (' . getReferalId() . ')'); $found = fetchUserData(getReferalId()); } // Is the record valid? if ((($found === false) || (!isUserDataValid())) && (isExtensionInstalledAndNewer('sql_patches', '0.1.2'))) { // No, then reset referal id + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Using default refid (' . getDefRefid() . ')'); setReferalId(getDefRefid()); } // END - if // Set cookie + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Saving refid to session (' . getReferalId() . ') #1'); setSession('refid', getReferalId()); } elseif (!isReferalIdValid()) { // Not valid! - setSession('refid', 0); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Not valid referal id (' . getReferalId() . '), setting NULL in session'); + setSession('refid', NULL); + } elseif ((!isSessionVariableSet('refid')) && (isValidUserId(getReferalId()))) { + // Set it from GLOBALS array in session + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Saving refid to session (' . getReferalId() . ') #2'); + setSession('refid', getReferalId()); } // Return determined refid @@ -1744,7 +1765,7 @@ function shutdown () { SQL_CLOSE(__FUNCTION__, __LINE__); } elseif (!isInstallationPhase()) { // No database link - addFatalMessage(__FUNCTION__, __LINE__, '{--NO_DB_LINK_SHUTDOWN--}'); + debug_report_bug(__FUNCTION__, __LINE__, 'Database link is already down, while shutdown is running.'); } // Stop executing here @@ -1988,7 +2009,7 @@ function initCacheInstance () { // Did it work? if ($GLOBALS['cache_instance']->getStatusCode() != 'done') { // Failed to initialize cache sustem - addFatalMessage(__FUNCTION__, __LINE__, '(' . __LINE__ . '): {--CACHE_CANNOT_INITIALIZE--}'); + debug_report_bug(__FUNCTION__, __LINE__, 'Cache system returned with unexpected error. getStatusCode()=' . $GLOBALS['cache_instance']->getStatusCode()); } // END - if } @@ -2149,7 +2170,7 @@ function handleFieldWithBraces ($field) { return $field; } -// Converts a userid so it can be used in SQL queries +// Converts a zero or NULL to word 'NULL' function makeZeroToNull ($number) { // Is it a valid username? if ((!is_null($number)) && ($number > 0)) { @@ -2164,6 +2185,18 @@ function makeZeroToNull ($number) { 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) { @@ -2219,14 +2252,27 @@ function generateAdminMailLinks ($mailType, $mailId) { // 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__); + $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('Unfinished area:
'.__FUNCTION__.':
content=
'.print_r($content, true).'
'); + + // 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 @@ -2239,7 +2285,7 @@ function generateAdminMailLinks ($mailType, $mailId) { /** - * determine if a string can represent a number in hexadecimal + * 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 @@ -2259,9 +2305,14 @@ function isHexadecimal ($hex) { 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. +/** + * 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)); @@ -2319,6 +2370,7 @@ function getArrayKeysFromSubStrArray ($heystack, $needles, $offset = 0) { // 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'; @@ -2341,6 +2393,7 @@ function determinePointsColumnFromSubjectLocked ($subject, $locked) { $pointsColumn = $filterData['column']; // Return it + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'subject=' . $subject . ',locked=' . intval($locked) . ',pointsColumn=' . $pointsColumn . ' - EXIT!'); return $pointsColumn; } @@ -2390,6 +2443,24 @@ function translateTaskType ($taskType) { 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 @@ -2405,6 +2476,30 @@ function convertStringToBoolean ($str) { 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]; +} + //----------------------------------------------------------------------------- // Automatically re-created functions, all taken from user comments on www.php.net //-----------------------------------------------------------------------------