2 namespace Civi\FlexMailer\API
;
4 use Civi\FlexMailer\FlexMailer
;
5 use Civi\FlexMailer\FlexMailerTask
;
6 use Civi\FlexMailer\Listener\Abdicator
;
11 * Generate a preview of how a mailing would look.
13 * @param array $apiRequest
20 * @throws \CRM_Core_Exception
22 public static function preview($apiRequest) {
23 $params = $apiRequest['params'];
25 /** @var \CRM_Mailing_BAO_Mailing $mailing */
26 $mailing = new \
CRM_Mailing_BAO_Mailing();
27 $mailingID = \CRM_Utils_Array
::value('id', $params);
29 $mailing->id
= $mailingID;
33 $mailing->copyValues($params);
36 if (!Abdicator
::isFlexmailPreferred($mailing) && empty($mailing->sms_provider_id
)) {
37 require_once 'api/v3/Mailing.php';
38 return civicrm_api3_mailing_preview($params);
41 $contactID = \CRM_Utils_Array
::value('contact_id', $params,
42 \CRM_Core_Session
::singleton()->get('userID'));
44 $job = new class extends \CRM_Mailing_BAO_MailingJob
{
46 public function insert() {
47 throw new \
RuntimeException('MailingJob is just a preview. It cannot be saved.');
50 public function update($dataObject = FALSE) {
51 throw new \
RuntimeException('MailingJob is just a preview. It cannot be saved.');
54 public function save($hook = TRUE) {
55 throw new \
RuntimeException('MailingJob is just a preview. It cannot be saved.');
59 $job->mailing_id
= $mailing->id ?
: NULL;
60 $job->status
= 'Complete';
62 $flexMailer = new FlexMailer(array(
64 'mailing' => $mailing,
66 'attachments' => \CRM_Core_BAO_File
::getEntityFile('civicrm_mailing',
70 if (count($flexMailer->validate()) > 0) {
71 throw new \
CRM_Core_Exception("FlexMailer cannot execute: invalid context");
74 $task = new FlexMailerTask($job->id
, $contactID, 'fakehash',
75 'placeholder@example.com');
77 $flexMailer->fireComposeBatch(array($task));
79 return civicrm_api3_create_success(array(
80 'id' => isset($params['id']) ?
$params['id'] : NULL,
81 'contact_id' => $contactID,
82 'subject' => $task->getMailParam('Subject'),
83 'body_html' => $task->getMailParam('html'),
84 'body_text' => $task->getMailParam('text'),
85 // Flag our role in processing this - to support tests.
86 '_rendered_by_' => 'flexmailer',