/** * Fetch the template text/html messages */ public static function template() { $templateId = CRM_Utils_Type::escape($_POST['tid'], 'Integer'); $messageTemplate = new CRM_Core_DAO_MessageTemplate(); $messageTemplate->id = $templateId; $messageTemplate->selectAdd(); $messageTemplate->selectAdd('msg_text, msg_html, msg_subject, pdf_format_id'); $messageTemplate->find(TRUE); $messages = array('subject' => $messageTemplate->msg_subject, 'msg_text' => $messageTemplate->msg_text, 'msg_html' => $messageTemplate->msg_html, 'pdf_format_id' => $messageTemplate->pdf_format_id); CRM_Utils_JSON::output($messages); }
/** * This function sets the default values for the form. * the default values are retrieved from the database * * @access public * * @return void */ function setDefaultValues() { $mailingID = CRM_Utils_Request::retrieve('mid', 'Integer', $this, FALSE, NULL); //need to differentiate new/reuse mailing, CRM-2873 $reuseMailing = FALSE; if ($mailingID) { $reuseMailing = TRUE; } else { $mailingID = $this->_mailingID; } $count = $this->get('count'); $this->assign('count', $count); $this->set('skipTextFile', FALSE); $defaults = array(); if ($mailingID) { $dao = new CRM_Mailing_DAO_Mailing(); $dao->id = $mailingID; $dao->find(TRUE); $dao->storeValues($dao, $defaults); //we don't want to retrieve template details once it is //set in session $templateId = $this->get('template'); $this->assign('templateSelected', $templateId ? $templateId : 0); if (isset($defaults['msg_template_id']) && !$templateId) { $defaults['template'] = $defaults['msg_template_id']; $messageTemplate = new CRM_Core_DAO_MessageTemplate(); $messageTemplate->id = $defaults['msg_template_id']; $messageTemplate->selectAdd(); $messageTemplate->selectAdd('msg_text'); $messageTemplate->find(TRUE); $defaults['text_message'] = $messageTemplate->msg_text; } if (isset($defaults['body_text'])) { $defaults['text_message'] = $defaults['body_text']; $this->set('textFile', $defaults['body_text']); $this->set('skipTextFile', TRUE); } } //fix for CRM-2873 if (!$reuseMailing) { $textFilePath = $this->get('textFilePath'); if ($textFilePath && file_exists($textFilePath)) { $defaults['text_message'] = file_get_contents($textFilePath); if (strlen($defaults['text_message']) > 0) { $this->set('skipTextFile', TRUE); } } } $defaults['upload_type'] = 1; return $defaults; }
/** * Fetch the template text/html messages */ public static function template() { $templateId = CRM_Utils_Type::escape($_POST['tid'], 'Integer'); $messageTemplate = new CRM_Core_DAO_MessageTemplate(); $messageTemplate->id = $templateId; $messageTemplate->selectAdd(); $messageTemplate->selectAdd('msg_text, msg_html, msg_subject, pdf_format_id'); $messageTemplate->find(TRUE); $messages = array('subject' => $messageTemplate->msg_subject, 'msg_text' => $messageTemplate->msg_text, 'msg_html' => $messageTemplate->msg_html, 'pdf_format_id' => $messageTemplate->pdf_format_id); $documentInfo = CRM_Core_BAO_File::getEntityFile('civicrm_msg_template', $templateId); foreach ((array) $documentInfo as $info) { list($messages['document_body']) = CRM_Utils_PDF_Document::docReader($info['fullPath'], $info['mime_type']); } CRM_Utils_JSON::output($messages); }
/** * Set default values for the form. * the default values are retrieved from the database * * * @return void */ public function setDefaultValues() { $mailingID = CRM_Utils_Request::retrieve('mid', 'Integer', $this, FALSE, NULL); //need to differentiate new/reuse mailing, CRM-2873 $reuseMailing = FALSE; if ($mailingID) { $reuseMailing = TRUE; } else { $mailingID = $this->_mailingID; } $count = $this->get('count'); $this->assign('count', $count); $this->set('skipTextFile', FALSE); $this->set('skipHtmlFile', FALSE); $defaults = array(); $htmlMessage = NULL; if ($mailingID) { $dao = new CRM_Mailing_DAO_Mailing(); $dao->id = $mailingID; $dao->find(TRUE); $dao->storeValues($dao, $defaults); //we don't want to retrieve template details once it is //set in session $templateId = $this->get('template'); $this->assign('templateSelected', $templateId ? $templateId : 0); if (isset($defaults['msg_template_id']) && !$templateId) { $defaults['template'] = $defaults['msg_template_id']; $messageTemplate = new CRM_Core_DAO_MessageTemplate(); $messageTemplate->id = $defaults['msg_template_id']; $messageTemplate->selectAdd(); $messageTemplate->selectAdd('msg_text, msg_html'); $messageTemplate->find(TRUE); $defaults['text_message'] = $messageTemplate->msg_text; $htmlMessage = $messageTemplate->msg_html; } if (isset($defaults['body_text'])) { $defaults['text_message'] = $defaults['body_text']; $this->set('textFile', $defaults['body_text']); $this->set('skipTextFile', TRUE); } if (isset($defaults['body_html'])) { $htmlMessage = $defaults['body_html']; $this->set('htmlFile', $defaults['body_html']); $this->set('skipHtmlFile', TRUE); } //set default from email address. if (!empty($defaults['from_name']) && !empty($defaults['from_email'])) { $defaults['from_email_address'] = array_search('"' . $defaults['from_name'] . '" <' . $defaults['from_email'] . '>', CRM_Core_OptionGroup::values('from_email_address')); } else { //get the default from email address. $defaultAddress = CRM_Core_OptionGroup::values('from_email_address', NULL, NULL, NULL, ' AND is_default = 1'); foreach ($defaultAddress as $id => $value) { $defaults['from_email_address'] = $id; } } if (!empty($defaults['replyto_email'])) { $replyToEmail = CRM_Core_OptionGroup::values('from_email_address'); foreach ($replyToEmail as $value) { if (strstr($value, $defaults['replyto_email'])) { $replyToEmailAddress = $value; break; } } $replyToEmailAddress = explode('<', $replyToEmailAddress); if (count($replyToEmailAddress) > 1) { $replyToEmailAddress = $replyToEmailAddress[0] . '<' . $replyToEmailAddress[1]; } $defaults['reply_to_address'] = array_search($replyToEmailAddress, $replyToEmail); } } //fix for CRM-2873 if (!$reuseMailing) { $textFilePath = $this->get('textFilePath'); if ($textFilePath && file_exists($textFilePath)) { $defaults['text_message'] = file_get_contents($textFilePath); if (strlen($defaults['text_message']) > 0) { $this->set('skipTextFile', TRUE); } } $htmlFilePath = $this->get('htmlFilePath'); if ($htmlFilePath && file_exists($htmlFilePath)) { $defaults['html_message'] = file_get_contents($htmlFilePath); if (strlen($defaults['html_message']) > 0) { $htmlMessage = $defaults['html_message']; $this->set('skipHtmlFile', TRUE); } } } if ($this->get('html_message')) { $htmlMessage = $this->get('html_message'); } $htmlMessage = str_replace(array("\n", "\r"), ' ', $htmlMessage); $htmlMessage = str_replace("'", "\\'", $htmlMessage); $this->assign('message_html', $htmlMessage); $defaults['upload_type'] = 1; if (isset($defaults['body_html'])) { $defaults['html_message'] = $defaults['body_html']; } //CRM-4678 setdefault to default component when composing new mailing. if (!$reuseMailing) { $componentFields = array('header_id' => 'Header', 'footer_id' => 'Footer'); foreach ($componentFields as $componentVar => $componentType) { $defaults[$componentVar] = CRM_Mailing_PseudoConstant::defaultComponent($componentType, ''); } } return $defaults; }
/** * Returns the list of fields that can be exported * * @param bool $prefix * * @return array */ static function &export($prefix = false) { if (!self::$_export) { self::$_export = array(); $fields = self::fields(); foreach ($fields as $name => $field) { if (CRM_Utils_Array::value('export', $field)) { if ($prefix) { self::$_export['msg_template'] =& $fields[$name]; } else { self::$_export[$name] =& $fields[$name]; } } } } return self::$_export; }
/** * @param int $contactId * @param $email * @param int $messageTemplateID * @param $from * * @return bool|NULL */ public static function sendReminder($contactId, $email, $messageTemplateID, $from) { $messageTemplates = new CRM_Core_DAO_MessageTemplate(); $messageTemplates->id = $messageTemplateID; $domain = CRM_Core_BAO_Domain::getDomain(); $result = NULL; $hookTokens = array(); if ($messageTemplates->find(TRUE)) { $body_text = $messageTemplates->msg_text; $body_html = $messageTemplates->msg_html; $body_subject = $messageTemplates->msg_subject; if (!$body_text) { $body_text = CRM_Utils_String::htmlToText($body_html); } $params = array(array('contact_id', '=', $contactId, 0, 0)); list($contact, $_) = CRM_Contact_BAO_Query::apiQuery($params); //CRM-4524 $contact = reset($contact); if (!$contact || is_a($contact, 'CRM_Core_Error')) { return NULL; } //CRM-5734 // get tokens to be replaced $tokens = array_merge(CRM_Utils_Token::getTokens($body_text), CRM_Utils_Token::getTokens($body_html), CRM_Utils_Token::getTokens($body_subject)); // get replacement text for these tokens $returnProperties = array("preferred_mail_format" => 1); if (isset($tokens['contact'])) { foreach ($tokens['contact'] as $key => $value) { $returnProperties[$value] = 1; } } list($details) = CRM_Utils_Token::getTokenDetails(array($contactId), $returnProperties, NULL, NULL, FALSE, $tokens, 'CRM_Core_BAO_MessageTemplate'); $contact = reset($details); // call token hook $hookTokens = array(); CRM_Utils_Hook::tokens($hookTokens); $categories = array_keys($hookTokens); // do replacements in text and html body $type = array('html', 'text'); foreach ($type as $key => $value) { $bodyType = "body_{$value}"; if (${$bodyType}) { CRM_Utils_Token::replaceGreetingTokens(${$bodyType}, NULL, $contact['contact_id']); ${$bodyType} = CRM_Utils_Token::replaceDomainTokens(${$bodyType}, $domain, TRUE, $tokens, TRUE); ${$bodyType} = CRM_Utils_Token::replaceContactTokens(${$bodyType}, $contact, FALSE, $tokens, FALSE, TRUE); ${$bodyType} = CRM_Utils_Token::replaceComponentTokens(${$bodyType}, $contact, $tokens, TRUE); ${$bodyType} = CRM_Utils_Token::replaceHookTokens(${$bodyType}, $contact, $categories, TRUE); } } $html = $body_html; $text = $body_text; $smarty = CRM_Core_Smarty::singleton(); foreach (array('text', 'html') as $elem) { ${$elem} = $smarty->fetch("string:{${$elem}}"); } // do replacements in message subject $messageSubject = CRM_Utils_Token::replaceContactTokens($body_subject, $contact, FALSE, $tokens); $messageSubject = CRM_Utils_Token::replaceDomainTokens($messageSubject, $domain, TRUE, $tokens); $messageSubject = CRM_Utils_Token::replaceComponentTokens($messageSubject, $contact, $tokens, TRUE); $messageSubject = CRM_Utils_Token::replaceHookTokens($messageSubject, $contact, $categories, TRUE); $messageSubject = $smarty->fetch("string:{$messageSubject}"); // set up the parameters for CRM_Utils_Mail::send $mailParams = array('groupName' => 'Scheduled Reminder Sender', 'from' => $from, 'toName' => $contact['display_name'], 'toEmail' => $email, 'subject' => $messageSubject); if (!$html || $contact['preferred_mail_format'] == 'Text' || $contact['preferred_mail_format'] == 'Both') { // render the & entities in text mode, so that the links work $mailParams['text'] = str_replace('&', '&', $text); } if ($html && ($contact['preferred_mail_format'] == 'HTML' || $contact['preferred_mail_format'] == 'Both')) { $mailParams['html'] = $html; } $result = CRM_Utils_Mail::send($mailParams); } $messageTemplates->free(); return $result; }
/** * This function sets the default values for the form. * the default values are retrieved from the database * * @access public * * @return None */ function setDefaultValues() { // to continue the unscheduled or draft mailing $continue = $this->_continue = CRM_Utils_Request::retrieve('continue', 'String', $this, FALSE, NULL); $mailingID = CRM_Utils_Request::retrieve('mid', 'Integer', $this, FALSE, NULL); $defaults = array(); if ($this->_mailingID) { // check that the user has permission to access mailing id CRM_Mailing_BAO_Mailing::checkPermission($this->_mailingID); $mailing = new CRM_Mailing_DAO_Mailing(); $mailing->id = $this->_mailingID; $mailing->addSelect('name', 'campaign_id'); $mailing->find(TRUE); $defaults['name'] = $mailing->name; if (!$continue) { $defaults['name'] = ts('Copy of %1', array(1 => $mailing->name)); } else { // CRM-7590, reuse same mailing ID if we are continuing $this->set('mailing_id', $this->_mailingID); } $defaults['campaign_id'] = $mailing->campaign_id; $defaults['dedupe_email'] = $mailing->dedupe_email; $dao = new CRM_Mailing_DAO_MailingGroup(); $mailingGroups = array('civicrm_group' => array(), 'civicrm_mailing' => array()); $dao->mailing_id = $this->_mailingID; $dao->find(); while ($dao->fetch()) { // account for multi-lingual // CRM-11431 $entityTable = 'civicrm_group'; if (substr($dao->entity_table, 0, 15) == 'civicrm_mailing') { $entityTable = 'civicrm_mailing'; } $mailingGroups[$entityTable][$dao->group_type][] = $dao->entity_id; } $defaults['includeGroups'] = $mailingGroups['civicrm_group']['include']; $defaults['excludeGroups'] = CRM_Utils_Array::value('exclude', $mailingGroups['civicrm_group']); if (!empty($mailingGroups['civicrm_mailing'])) { $defaults['includeMailings'] = CRM_Utils_Array::value('include', $mailingGroups['civicrm_mailing']); $defaults['excludeMailings'] = CRM_Utils_Array::value('exclude', $mailingGroups['civicrm_mailing']); } } else { $defaults['url_tracking'] = TRUE; $defaults['open_tracking'] = TRUE; } //set default message body $reuseMailing = FALSE; if ($mailingID) { $reuseMailing = TRUE; } else { $mailingID = $this->_mailingID; } $count = $this->get('count'); $this->assign('count', $count); $this->set('skipTextFile', FALSE); $this->set('skipHtmlFile', FALSE); $htmlMessage = NULL; if ($mailingID) { $dao = new CRM_Mailing_DAO_Mailing(); $dao->id = $mailingID; $dao->find(TRUE); $dao->storeValues($dao, $defaults); //we don't want to retrieve template details once it is //set in session $templateId = $this->get('template'); $this->assign('templateSelected', $templateId ? $templateId : 0); if (isset($defaults['msg_template_id']) && !$templateId) { $defaults['template'] = $defaults['msg_template_id']; $messageTemplate = new CRM_Core_DAO_MessageTemplate(); $messageTemplate->id = $defaults['msg_template_id']; $messageTemplate->selectAdd(); $messageTemplate->selectAdd('msg_text, msg_html'); $messageTemplate->find(TRUE); $defaults['text_message'] = $messageTemplate->msg_text; $htmlMessage = $messageTemplate->msg_html; } if (isset($defaults['body_text'])) { $defaults['text_message'] = $defaults['body_text']; $this->set('textFile', $defaults['body_text']); $this->set('skipTextFile', TRUE); } if (isset($defaults['body_html'])) { $htmlMessage = $defaults['body_html']; $this->set('htmlFile', $defaults['body_html']); $this->set('skipHtmlFile', TRUE); } //set default from email address. if (CRM_Utils_Array::value('from_name', $defaults) && CRM_Utils_Array::value('from_email', $defaults)) { $defaults['from_email_address'] = array_search('"' . $defaults['from_name'] . '" <' . $defaults['from_email'] . '>', CRM_Core_OptionGroup::values('from_email_address')); } else { //get the default from email address. $defaultAddress = CRM_Core_OptionGroup::values('from_email_address', NULL, NULL, NULL, ' AND is_default = 1'); foreach ($defaultAddress as $id => $value) { $defaults['from_email_address'] = $id; } } if (CRM_Utils_Array::value('replyto_email', $defaults)) { $replyToEmail = CRM_Core_OptionGroup::values('from_email_address'); foreach ($replyToEmail as $value) { if (strstr($value, $defaults['replyto_email'])) { $replyToEmailAddress = $value; break; } } $replyToEmailAddress = explode('<', $replyToEmailAddress); $replyToEmailAddress = $replyToEmailAddress[0] . '<' . $replyToEmailAddress[1]; $this->replytoAddress = $defaults['reply_to_address'] = array_search($replyToEmailAddress, $replyToEmail); } } /* //set default from email address. if (CRM_Utils_Array::value('from_name', $defaults) && CRM_Utils_Array::value('from_email', $defaults)) { $defaults['from_email_address'] = array_search('"' . $defaults['from_name'] . '" <' . $defaults['from_email'] . '>', CRM_Core_OptionGroup::values('from_email_address') ); } else { //get the default from email address. $defaultAddress = CRM_Core_OptionGroup::values('from_email_address', NULL, NULL, NULL, ' AND is_default = 1'); foreach ($defaultAddress as $id => $value) { $defaults['from_email_address'] = $id; } } if (CRM_Utils_Array::value('replyto_email', $defaults)) { $replyToEmail = CRM_Core_OptionGroup::values('from_email_address'); foreach ($replyToEmail as $value) { if (strstr($value, $defaults['replyto_email'])) { $replyToEmailAddress = $value; break; } } $replyToEmailAddress = explode('<', $replyToEmailAddress); $replyToEmailAddress = $replyToEmailAddress[0] . '<' . $replyToEmailAddress[1]; $this->replytoAddress = $defaults['reply_to_address'] = array_search($replyToEmailAddress, $replyToEmail); } */ //fix for CRM-2873 if (!$reuseMailing) { $textFilePath = $this->get('textFilePath'); if ($textFilePath && file_exists($textFilePath)) { $defaults['text_message'] = file_get_contents($textFilePath); if (strlen($defaults['text_message']) > 0) { $this->set('skipTextFile', TRUE); } } $htmlFilePath = $this->get('htmlFilePath'); if ($htmlFilePath && file_exists($htmlFilePath)) { $defaults['html_message'] = file_get_contents($htmlFilePath); if (strlen($defaults['html_message']) > 0) { $htmlMessage = $defaults['html_message']; $this->set('skipHtmlFile', TRUE); } } } if ($this->get('html_message')) { $htmlMessage = $this->get('html_message'); } $htmlMessage = str_replace(array("\n", "\r"), ' ', $htmlMessage); $htmlMessage = str_replace("'", "\\'", $htmlMessage); $this->assign('message_html', $htmlMessage); $defaults['upload_type'] = 1; if (isset($defaults['body_html'])) { $defaults['html_message'] = $defaults['body_html']; } if (!empty($defaults['html_message'])) { $this->assign('reuse_message_template', $defaults['html_message']); } //CRM-4678 setdefault to default component when composing new mailing. if (!$reuseMailing) { $componentFields = array('header_id' => 'Header', 'footer_id' => 'Footer'); foreach ($componentFields as $componentVar => $componentType) { $defaults[$componentVar] = CRM_Mailing_PseudoConstant::defaultComponent($componentType, ''); } } //end return $defaults; }
static function copyTemplate() { $msgTplId = CRM_Utils_Request::retrieve('id', 'Positive', CRM_Core_DAO::$_nullObject, TRUE); $mosaicoMsgTplId = CRM_Mosaico_Utils::getMosaicoMsgTplIdFromMsgTplId($msgTplId); // get the message template which is going to be copied. $messageTemplate = new CRM_Core_DAO_MessageTemplate(); $messageTemplate->id = $msgTplId; if ($messageTemplate->find(TRUE)) { $buildNewMsgTemplate = array(); $buildNewMsgTemplate['msg_title'] = 'Copy of ' . $messageTemplate->msg_title; $buildNewMsgTemplate['msg_subject'] = 'Copy of ' . $messageTemplate->msg_subject; $buildNewMsgTemplate['msg_html'] = $messageTemplate->msg_html; $newMessageTemplate = new CRM_Core_DAO_MessageTemplate(); $newMessageTemplate->copyValues($buildNewMsgTemplate); $newMessageTemplate->save(); $copiedMsgTplId = $newMessageTemplate->id; $copiedMsgTplName = $newMessageTemplate->msg_title; // Build mosaico message template params to create new mosaico msg template $mosaicoTemplate = CRM_Mosaico_Utils::getMosaicoMsgTemplate($mosaicoMsgTplId); $mosaicoTemplate['msg_tpl_id'] = $copiedMsgTplId; $mosaicoTemplate['name'] = $copiedMsgTplName; $mosTpl = new CRM_Mosaico_DAO_MessageTemplate(); $mosTpl->copyValues($mosaicoTemplate); $mosTpl->save(); $result = array('newMosaicoTplId' => $mosTpl->id, 'from_hash_key' => $mosTpl->hash_key, 'name' => $mosTpl->name); CRM_Utils_JSON::output($result); } }