if ($groupType == 'Include') {
$includeSmartGroupIDs[] = $groupDAO->id;
}
- else if ($groupType == 'Exclude') {
+ elseif ($groupType == 'Exclude') {
$excludeSmartGroupIDs[] = $groupDAO->id;
}
//NOTE: Do nothing for base
);
if ($isSMSmode) {
- $includeFilters = array(
- "mg.group_type = 'Include'",
- 'mg.search_id IS NULL',
- "$contact.is_opt_out = 0",
- "$contact.is_deceased <> 1",
- "$entityTable.phone_type_id = " . CRM_Core_PseudoConstant::getKey('CRM_Core_DAO_Phone', 'phone_type_id', 'Mobile'),
- "$entityTable.phone IS NOT NULL",
- "$entityTable.phone != ''",
- "$entityTable.is_primary = 1",
- "mg.mailing_id = #mailingID",
- 'temp.contact_id IS null',
+ $criteria = array(
+ 'is_opt_out' => CRM_Utils_SQL_Select::fragment()->where("$contact.is_opt_out = 0"),
+ 'is_deceased' => CRM_Utils_SQL_Select::fragment()->where("$contact.is_deceased <> 1"),
+ 'location_filter' => CRM_Utils_SQL_Select::fragment()->where("$entityTable.phone_type_id = " . CRM_Core_PseudoConstant::getKey('CRM_Core_DAO_Phone', 'phone_type_id', 'Mobile')),
+ 'phone_not_null' => CRM_Utils_SQL_Select::fragment()->where("$entityTable.phone IS NOT NULL"),
+ 'phone_not_empty' => CRM_Utils_SQL_Select::fragment()->where("$entityTable.phone != ''"),
+ 'is_primary' => CRM_Utils_SQL_Select::fragment()->where("$entityTable.is_primary = 1"),
+ 'mailing_id' => CRM_Utils_SQL_Select::fragment()->where("mg.mailing_id = #mailingID"),
+ 'temp_contact_null' => CRM_Utils_SQL_Select::fragment()->where('temp.contact_id IS null'),
+ 'order_by' => CRM_Utils_SQL_Select::fragment()->orderBy("$entityTable.is_primary = 1"),
);
- $order_by = array("$entityTable.is_primary = 1");
}
else {
// Criterias to filter recipients that need to be included
- $includeFilters = array(
- "$contact.do_not_email = 0",
- "$contact.is_opt_out = 0",
- "$contact.is_deceased <> 1",
- $location_filter,
- "$entityTable.email IS NOT NULL",
- "$entityTable.email != ''",
- "$entityTable.on_hold = 0",
- "mg.mailing_id = #mailingID",
- 'temp.contact_id IS NULL',
+ $criteria = array(
+ 'do_not_email' => CRM_Utils_SQL_Select::fragment()->where("$contact.do_not_email = 0"),
+ 'is_opt_out' => CRM_Utils_SQL_Select::fragment()->where("$contact.is_opt_out = 0"),
+ 'is_deceased' => CRM_Utils_SQL_Select::fragment()->where("$contact.is_deceased <> 1"),
+ 'location_filter' => CRM_Utils_SQL_Select::fragment()->where($location_filter),
+ 'email_not_null' => CRM_Utils_SQL_Select::fragment()->where("$entityTable.email IS NOT NULL"),
+ 'email_not_empty' => CRM_Utils_SQL_Select::fragment()->where("$entityTable.email != ''"),
+ 'email_not_on_hold' => CRM_Utils_SQL_Select::fragment()->where("$entityTable.on_hold = 0"),
+ 'mailing_id' => CRM_Utils_SQL_Select::fragment()->where("mg.mailing_id = #mailingID"),
+ 'temp_contact_null' => CRM_Utils_SQL_Select::fragment()->where('temp.contact_id IS NULL'),
+ 'order_by' => CRM_Utils_SQL_Select::fragment()->orderBy($order_by),
);
}
+ // Allow user to alter query responsible to fetch mailing recipients before build,
+ // by changing the mail filters identified $params
+ CRM_Utils_Hook::alterMailingRecipients($mailingObj, $criteria, 'pre');
+
// Get the group contacts, but only those which are not in the
// exclusion temp table.
if (!empty($recipientsGroup['Include'])) {
->join('mg', " INNER JOIN civicrm_mailing_group mg ON gc.group_id = mg.entity_id AND mg.search_id IS NULL ")
->join('temp', " LEFT JOIN $excludeTempTablename temp ON $contact.id = temp.contact_id ")
->where('gc.group_id IN (#groups) AND gc.status = "Added"')
- ->where($includeFilters)
+ ->merge($criteria)
->groupBy(array("$contact.id", "$entityTable.id"))
->replaceInto($includedTempTablename, array('contact_id', $entityColumn))
->param('#groups', $recipientsGroup['Include'])
->join('mg', " INNER JOIN civicrm_mailing_group mg ON gc.group_id = mg.entity_id AND mg.search_id IS NULL ")
->join('temp', " LEFT JOIN $excludeTempTablename temp ON $contact.id = temp.contact_id ")
->where('gc.group_id IN (#groups)')
- ->where($includeFilters)
- ->orderBy($order_by)
+ ->merge($criteria)
->replaceInto($includedTempTablename, array('contact_id', $entityColumn))
->param('#groups', $includeSmartGroupIDs)
->param('#mailingID', $mailingID)
$mailingGroup->reset();
$mailingGroup->query(" DROP TEMPORARY TABLE $excludeTempTablename ");
$mailingGroup->query(" DROP TEMPORARY TABLE $includedTempTablename ");
+
+ CRM_Utils_Hook::alterMailingRecipients($mailingObj, $criteria, 'post');
}
/**
}
// add trailing quote since we've gobbled it up in a previous regex
// function getPatterns, line 431
- if (preg_match('/^href[ ]*=[ ]*\'/', $url)) {
+ if (preg_match("/^href[ ]*=[ ]*'.*[^']$/", $url)) {
$url .= "'";
}
- elseif (preg_match('/^href[ ]*=[ ]*\"/', $url)) {
+ elseif (preg_match('/^href[ ]*=[ ]*".*[^"]$/', $url)) {
$url .= '"';
}
$data = $url;
}
$mailing->domain_id = CRM_Utils_Array::value('domain_id', $params, CRM_Core_Config::domainID());
- if (!isset($params['replyto_email']) &&
+ if (((!$id && empty($params['replyto_email'])) || !isset($params['replyto_email'])) &&
isset($params['from_email'])
) {
$params['replyto_email'] = $params['from_email'];
// get all the groups that this user can access
// if they dont have universal access
$groupNames = civicrm_api3('Group', 'get', array(
- 'is_active' => 1,
'check_permissions' => TRUE,
'return' => array('title', 'id'),
'options' => array('limit' => 0),
}
/**
- * Delete Jobss and all its associated records
- * related to test Mailings
+ * @deprecated
+ * Use CRM_Mailing_BAO_MailingJob::del($id)
*
* @param int $id
* Id of the Job to delete.
CRM_Core_Error::fatal();
}
- $dao = new CRM_Mailing_BAO_MailingJob();
- $dao->id = $id;
- $dao->delete();
+ \Civi::log('This function is deprecated, use CRM_Mailing_BAO_MailingJob::del instead', ['civi.tag' => 'deprecated']);
+
+ CRM_Mailing_BAO_MailingJob::del($id);
}
/**