}
// Create a temp table for contact exclusion.
- $excludeTempTablename = "excluded_recipients_temp" . substr(sha1(rand()), 0, 4);
- $includedTempTablename = "included_recipients_temp" . substr(sha1(rand()), 0, 4);
- $mailingGroup->query(
- "CREATE TEMPORARY TABLE $excludeTempTablename
- (contact_id int primary key)
- ENGINE=HEAP"
- );
+ $excludeTempTable = CRM_Utils_SQL_TempTable::build()->setCategory('exrecipient')->setMemory()->createWithColumns('contact_id int primary key');
+ $excludeTempTablename = $excludeTempTable->getName();
// populate exclude temp-table with recipients to be excluded from the list
// on basis of selected recipients groups and/or previous mailing
if (!empty($recipientsGroup['Exclude'])) {
$entityColumn = $isSMSmode ? 'phone_id' : 'email_id';
$entityTable = $isSMSmode ? CRM_Core_DAO_Phone::getTableName() : CRM_Core_DAO_Email::getTableName();
// Get all the group contacts we want to include.
- $mailingGroup->query(
- "CREATE TEMPORARY TABLE $includedTempTablename
- (contact_id int primary key, $entityColumn int)
- ENGINE=HEAP"
- );
+ $includedTempTable = CRM_Utils_SQL_TempTable::build()->setCategory('inrecipient')->setMemory()->createWithColumns('contact_id int primary key, ' . $entityColumn . ' int');
+ $includedTempTablename = $includedTempTable->getName();
if ($isSMSmode) {
$criteria = [
// Delete the temp table.
$mailingGroup->reset();
- $mailingGroup->query(" DROP TEMPORARY TABLE $excludeTempTablename ");
- $mailingGroup->query(" DROP TEMPORARY TABLE $includedTempTablename ");
+ $excludeTempTable->drop();
+ $includedTempTable->drop();
CRM_Utils_Hook::alterMailingRecipients($mailingObj, $criteria, 'post');
}
if ($totalLimit) {
$limitString = "LIMIT 0, $totalLimit";
}
- CRM_Core_DAO::executeQuery("DROP TEMPORARY TABLE IF EXISTS srcMailing_$sourceMailingId");
+ $temporaryTable = CRM_Utils_SQL_TempTable::build()
+ ->setCategory('srcmailing' . $sourceMailingId)
+ ->setMemory()
+ ->createWithColumns("mailing_recipient_id int unsigned, id int PRIMARY KEY AUTO_INCREMENT, INDEX(mailing_recipient_id)");
+ $temporaryTableName = $temporaryTable->getName();
$sql = "
-CREATE TEMPORARY TABLE srcMailing_$sourceMailingId
- (mailing_recipient_id int unsigned, id int PRIMARY KEY AUTO_INCREMENT, INDEX(mailing_recipient_id))
- ENGINE=HEAP";
- CRM_Core_DAO::executeQuery($sql);
- $sql = "
-INSERT INTO srcMailing_$sourceMailingId (mailing_recipient_id)
+INSERT INTO {$temporaryTableName} (mailing_recipient_id)
SELECT mr.id
FROM civicrm_mailing_recipients mr
WHERE mr.mailing_id = $sourceMailingId
CRM_Core_DAO::executeQuery($sql);
$sql = "
UPDATE civicrm_mailing_recipients mr
-INNER JOIN srcMailing_$sourceMailingId temp_mr ON temp_mr.mailing_recipient_id = mr.id
+INNER JOIN {$temporaryTableName} temp_mr ON temp_mr.mailing_recipient_id = mr.id
SET mr.mailing_id = $newMailingID
";
CRM_Core_DAO::executeQuery($sql);
+ $temporaryTable->drop();
}
/**
public static function updateEmailResetDate($minDays = 3, $maxDays = 7) {
$dao = new CRM_Core_DAO();
- $query = "
-CREATE TEMPORARY TABLE civicrm_email_temp_values (
- id int primary key,
- reset_date datetime
-) ENGINE = HEAP;
-";
- CRM_Core_DAO::executeQuery($query);
+ $temporaryTable = CRM_Utils_SQL_TempTable::build()
+ ->setCategory('mailingemail')
+ ->setMemory()
+ ->createWithColumns('id int primary key, reset_date datetime');
+ $temporaryTableName = $temporaryTable->getName();
$query = "
- INSERT INTO civicrm_email_temp_values (id, reset_date)
+ INSERT INTO {$temporaryTableName} (id, reset_date)
SELECT civicrm_email.id as email_id,
max(civicrm_mailing_event_delivered.time_stamp) as reset_date
FROM civicrm_mailing_event_queue
$query = "
UPDATE civicrm_email e
-INNER JOIN civicrm_email_temp_values et ON e.id = et.id
+INNER JOIN {$temporaryTableName} et ON e.id = et.id
SET e.on_hold = 0,
e.hold_date = NULL,
e.reset_date = et.reset_date
";
CRM_Core_DAO::executeQuery($query);
+ $temporaryTable->drop();
}
}