/**
* Returns the regex patterns that are used for preparing the text and html templates.
+ *
+ * @param bool $onlyHrefs
+ *
+ * @return array|string
*/
private function getPatterns($onlyHrefs = FALSE) {
if (!$this->templates) {
$this->getHeaderFooter();
$this->templates = array();
-
- if ($this->body_text) {
+ if ($this->body_text || $this->header->body_text || $this->footer->body_text) {
$template = array();
- if ($this->header) {
+ if ($this->header->body_text) {
$template[] = $this->header->body_text;
+ } else {
+ $template[] = CRM_Utils_String::htmlToText($this->header->body_html);
}
- $template[] = $this->body_text;
+ if ($this->body_text) {
+ $template[] = $this->body_text;
+ } else {
+ $template[] = CRM_Utils_String::htmlToText($this->body_html);
+ }
- if ($this->footer) {
+ if ($this->footer->body_text) {
$template[] = $this->footer->body_text;
+ } else {
+ $template[] = CRM_Utils_String::htmlToText($this->footer->body_html);
}
$this->templates['text'] = implode("\n", $template);
// this is where we create a text template from the html template if the text template did not exist
// this way we ensure that every recipient will receive an email even if the pref is set to text and the
// user uploads an html email only
- if (!$this->body_text) {
+ if (empty($this->templates['text'])) {
$this->templates['text'] = CRM_Utils_String::htmlToText($this->templates['html']);
}
}
$template[] = $this->subject;
$this->templates['subject'] = implode("\n", $template);
}
+
+ CRM_Utils_Hook::alterMailContent($this->templates);
}
return $this->templates;
}
}
/**
+ * Replace tokens.
+ *
+ * Get mailing object and replaces subscribeInvite, domain and mailing tokens.
*
- * get mailing object and replaces subscribeInvite,
- * domain and mailing tokens
+ * @param CRM_Mailing_BAO_Mailing $mailing
*/
public static function tokenReplace(&$mailing) {
$domain = CRM_Core_BAO_Domain::getDomain();
}
/**
+ * Get data to resolve tokens.
*
- * getTokenData receives a token from an email
- * and returns the appropriate data for the token
+ * @param array $token_a
+ * @param bool $html
+ * @param array $contact
+ * @param string $verp
+ * @param array $urls
+ * @param int $event_queue_id
+ *
+ * @return bool|mixed|null|string
*/
private function getTokenData(&$token_a, $html = FALSE, &$contact, &$verp, &$urls, $event_queue_id) {
$type = $token_a['type'];
// Populate the recipients.
if (empty($params['_skip_evil_bao_auto_recipients_'])) {
- self::getRecipients($job->id, $mailing->id, TRUE, $mailing->dedupe_email);
+ // check if it's sms
+ $mode = $mailing->sms_provider_id ? 'sms' : NULL;
+ self::getRecipients($job->id, $mailing->id, TRUE, $mailing->dedupe_email, $mode);
}
}
$errors['body'] = ts('Field "body_html" or "body_text" is required.');
}
- if (!CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::MAILING_PREFERENCES_NAME, 'disable_mandatory_tokens_check')) {
+ if (!Civi::settings()->get('disable_mandatory_tokens_check')) {
$header = $mailing->header_id && $mailing->header_id != 'null' ? CRM_Mailing_BAO_Component::findById($mailing->header_id) : NULL;
$footer = $mailing->footer_id && $mailing->footer_id != 'null' ? CRM_Mailing_BAO_Component::findById($mailing->footer_id) : NULL;
foreach (array('body_html', 'body_text') as $field) {
*/
public static function getMailingHash($id) {
$hash = NULL;
- if (CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::MAILING_PREFERENCES_NAME, 'hash_mailing_url')) {
+ if (Civi::settings()->get('hash_mailing_url')) {
$hash = CRM_Core_DAO::getFieldValue('CRM_Mailing_BAO_Mailing', $id, 'hash', 'id');
}
return $hash;
$mailerJobsMax = Civi::settings()->get('mailerJobsMax');
if (is_numeric($mailerJobsMax) && $mailerJobsMax > 0) {
$lockArray = range(1, $mailerJobsMax);
+
+ // Shuffle the array to improve chances of quickly finding an open thread
shuffle($lockArray);
- // check if we are using global locks
+ // Check if we are using global locks
foreach ($lockArray as $lockID) {
$cronLock = Civi::lockManager()->acquire("worker.mailing.send.{$lockID}");
if ($cronLock->isAcquired()) {
}
}
- // exit here since we have enuf cronjobs running
+ // Exit here since we have enough mailing processes running
if (!$gotCronLock) {
- CRM_Core_Error::debug_log_message('Returning early, since max number of cronjobs running');
+ CRM_Core_Error::debug_log_message('Returning early, since the maximum number of mailing processes are running');
return TRUE;
}
}
}
- // load bootstrap to call hooks
-
// Split up the parent jobs into multiple child jobs
$mailerJobSize = Civi::settings()->get('mailerJobSize');
CRM_Mailing_BAO_MailingJob::runJobs_pre($mailerJobSize, $mode);
CRM_Mailing_BAO_MailingJob::runJobs(NULL, $mode);
CRM_Mailing_BAO_MailingJob::runJobs_post($mode);
- // lets release the global cron lock if we do have one
+ // Release the global lock if we do have one
if ($gotCronLock) {
$cronLock->release();
}
return $fieldPerms;
}
+ /**
+ * Whitelist of possible values for the entity_table field
+ * @return array
+ */
+ public static function mailingGroupEntityTables() {
+ $tables = array(
+ CRM_Contact_BAO_Group::getTableName(),
+ CRM_Mailing_BAO_Mailing::getTableName(),
+ );
+ // Identical keys & values
+ return array_combine($tables, $tables);
+ }
+
}