A lot has been rewritten, ext-teams added, ext-forced continued:
[mailer.git] / inc / functions.php
index 7c6659502ff130f52560fa3d59769a59db561a59..e65600e13e36994bee1d1796de5e7cea09bad849 100644 (file)
@@ -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;
 }
 
 
@@ -645,7 +645,7 @@ function generateRandomCode ($length, $code, $userid, $extraData = '') {
        if (isConfigEntrySet('file_hash')) {
                $keys .= getEncryptSeperator() . getFileHash();
        } // END - if
-       $keys .= getEncryptSeperator() . getDateFromPatchTime();
+       $keys .= getEncryptSeperator() . getDateFromRepository();
        if (isConfigEntrySet('master_salt')) {
                $keys .= getEncryptSeperator() . getMasterSalt();
        } // END - if
@@ -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;
@@ -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();
@@ -1406,7 +1406,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $inserted, $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);
@@ -1453,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=<pre>'.print_r($args,true).',ret=<pre>'.print_r($ret,true).'</pre>');
                        } else {
                                // One parameter call
                                $ret = call_user_func($filterFunction, $value);
@@ -1654,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
@@ -1693,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
@@ -2233,7 +2252,7 @@ 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",
+               $result = SQL_QUERY_ESC("SELECT `id`,`%s` AS `mail_status` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `id`=%s LIMIT 1",
                        array(
                                $statusColumn,
                                $table,