Rewrites to use filters instead of mass if() blocks
[mailer.git] / inc / mails / doubler_mails.php
index f9837feb9970da3a06890e71aef62bc59efe6f71..1dc41a242a00b75fc56110ee52dc1258dce7d89d 100644 (file)
@@ -56,8 +56,8 @@ if (isExtensionActive('jackpot')) {
 } // END - if
 
 // Get total points of the doubler itself
-$DOUBLER_POINTS = getDoublerTotalPointsLeft();
-if ($DOUBLER_POINTS == '0') {
+$totalPoints = getDoublerTotalPointsLeft();
+if ($totalPoints == '0') {
        // Exit here to prevent some SQL errors (SQL_QUERY_ESC doen't insert zeros! We need to fix this...)
        return;
 } // END - if
@@ -68,67 +68,83 @@ unsetPostRequestElement('DOUBLER_USERID');
 setSession('DOUBLER_USERID', '');
 if (empty($GLOBALS['local_doubler_userid'])) $GLOBALS['local_doubler_userid'] = '0';
 
+// Init additional WHERE statement
+$whereStatement = ' ';
+
+// Is ext-holiday installed?
+// @TODO Rewrite these if() blocks to a filter
+if (isExtensionActive('holiday')) {
+       // Exclude those as well
+       $whereStatement .= " AND `d`.`holiday_active`='N'";
+} // END - if
+
 // Check for doubles which we can pay out
 $result_total = SQL_QUERY_ESC("SELECT
-       d.id, d.userid, d.points, d.remote_ip, d.timemark
+       COUNT(`do`.`id`) AS `cnt`,
 FROM
-       `{?_MYSQL_PREFIX?}_doubler` AS `d`
-LEFT JOIN
-       `{?_MYSQL_PREFIX?}_user_data` AS `u`
+       `{?_MYSQL_PREFIX?}_doubler` AS `do`
+INNER JOIN
+       `{?_MYSQL_PREFIX?}_user_data` AS `d`
 ON
-       `d`.`userid`=`u`.`userid`
+       `do`.`userid`=`d`.`userid`
 WHERE
-       `u`.`status`='CONFIRMED'
-       " . runFilterChain('user_exclusion_sql', ' ') . " AND
-       `d`.`points` <= %s AND
-       `d`.`points` >= ({?doubler_min?} * 2) AND
-       `d`.`completed`='N' AND
-       `d`.`is_ref`='N'
+       `d`.`status`='CONFIRMED'
+       " . runFilterChain('user_exclusion_sql', $whereStatement) . " AND
+       `do`.`points` <= %s AND
+       `do`.`points` >= ({?doubler_min?} * 2) AND
+       `do`.`completed`='N' AND
+       `do`.`is_ref`='N'
 ORDER BY
-       `d`.`timemark` ASC",
+       `do`.`timemark` ASC",
        array(
-               $DOUBLER_POINTS
+               $totalPoints
        ), __FILE__, __LINE__);
 
+// Get total count
+list($totalCount) = SQL_FETCHROW($result_total);
+
+// Free memory
+SQL_FREERESULT($result_total);
+
 // Check for accounts with limitation
 $result_main = SQL_QUERY_ESC("SELECT
-       `d`.`id`,
-       `d`.`userid`,
-       `d`.`points`,
-       `d`.`remote_ip`,
-       `d`.`timemark`
+       `do`.`id`,
+       `do`.`userid`,
+       `do`.`points`,
+       `do`.`remote_ip`,
+       `do`.`timemark`
 FROM
-       `{?_MYSQL_PREFIX?}_doubler` AS `d`
-LEFT JOIN
-       `{?_MYSQL_PREFIX?}_user_data` AS `u`
+       `{?_MYSQL_PREFIX?}_doubler` AS `do`
+INNER JOIN
+       `{?_MYSQL_PREFIX?}_user_data` AS `d`
 ON
-       `d`.`userid`=`u`.`userid`
+       `do`.`userid`=`d`.`userid`
 WHERE
-       `u`.`status`='CONFIRMED'
-       " . runFilterChain('user_exclusion_sql', ' ') . " AND
-       `d`.`points` <= %s AND
-       `d`.`points` >= ({?doubler_min?} * 2) AND
-       `d`.`completed`='N' AND
-       `d`.`is_ref`='N'
+       `d`.`status`='CONFIRMED'
+       " . runFilterChain('user_exclusion_sql', $whereStatement) . " AND
+       `do`.`points` <= %s AND
+       `do`.`points` >= ({?doubler_min?} * 2) AND
+       `do`.`completed`='N' AND
+       `do`.`is_ref`='N'
 ORDER BY
-       `d`.`timemark` ASC
+       `do`.`timemark` ASC
 LIMIT {?doubler_max_sent?}",
        array(
-               $DOUBLER_POINTS
+               $totalPoints
        ), __FILE__, __LINE__);
 
 // Are there entries found?
-if (((!SQL_HASZERONUMS($result_total)) && (getConfig('doubler_sent_all') == 'Y')) || ((SQL_NUMROWS($result_main) == getConfig('doubler_group_sent')) && (getConfig('doubler_sent_all') != 'Y'))) {
+if ((($totalCount > 0) && (getConfig('doubler_sent_all') == 'Y')) || ((SQL_NUMROWS($result_main) == getConfig('doubler_group_sent')) && (getConfig('doubler_sent_all') != 'Y'))) {
        // Switch to matching SQL resource
        $result_load = $result_main;
-       if ((!SQL_HASZERONUMS($result_total)) && (getConfig('doubler_sent_all') == 'Y')) {
+       if (($totalCount > 0) && (getConfig('doubler_sent_all') == 'Y')) {
                $result_load = $result_total;
        } // END - if
 
        // At least one account was found
        while ($content = SQL_FETCHARRAY($result_load)) {
                // Only double when points are enougth!
-               if ($DOUBLER_POINTS >= $content['points']) {
+               if ($totalPoints >= $content['points']) {
                        // Check for his ref points
                        $refPoints = countSumTotalData($content['userid'], 'doubler', 'points', 'refid', FALSE, " AND `completed`='N' AND `is_ref`='Y'");
 
@@ -181,7 +197,7 @@ if (((!SQL_HASZERONUMS($result_total)) && (getConfig('doubler_sent_all') == 'Y')
 
                        // Update variables to prevent errors
                        incrementConfigEntry('doubler_used', $content['points']);
-                       $DOUBLER_POINTS -= $content['points'];
+                       $totalPoints -= $content['points'];
 
                        // Prepare array
                        $content['timemark'] = generateDateTime($content['timemark'], 2);