From 0075b0cb75e5422660366acf280538167369d8ba Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Wed, 18 Jul 2018 23:45:46 +0530 Subject: [PATCH] dev/mail#20 : Preview screen don't open until recipients list is built on mail compose screen --- ang/crmMailing/services.js | 19 +++++-------------- api/v3/Mailing.php | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/ang/crmMailing/services.js b/ang/crmMailing/services.js index bc8783e5af..45c2063732 100644 --- a/ang/crmMailing/services.js +++ b/ang/crmMailing/services.js @@ -262,7 +262,7 @@ // @param mailing Object (per APIv3) // @return Promise an object with "subject", "body_text", "body_html" preview: function preview(mailing) { - return this.getPreviewContent(qApi, mailing) + return this.getPreviewContent(qApi, mailing); }, // @param backend @@ -275,20 +275,11 @@ }); } else { - // Protect against races in saving and previewing by chaining create+preview. - var params = angular.extend({}, mailing, mailing.recipients, { - id: mailing.id, - 'api.Mailing.preview': { - id: '$value.id' - } - }); - delete params.scheduled_date; - delete params.recipients; // the content was merged in - params._skip_evil_bao_auto_recipients_ = 1; // skip recipient rebuild on mail preview - return backend('Mailing', 'create', params).then(function(result) { - mailing.modified_date = result.values[result.id].modified_date; + var params = angular.extend({}, mailing); + delete params.id; + return backend('Mailing', 'preview', params).then(function(result) { // changes rolled back, so we don't care about updating mailing - return result.values[result.id]['api.Mailing.preview'].values; + return result.values; }); } }, diff --git a/api/v3/Mailing.php b/api/v3/Mailing.php index 39df78ef10..b369101591 100644 --- a/api/v3/Mailing.php +++ b/api/v3/Mailing.php @@ -547,21 +547,22 @@ function civicrm_api3_mailing_event_open($params) { * @throws \API_Exception */ function civicrm_api3_mailing_preview($params) { - civicrm_api3_verify_mandatory($params, - 'CRM_Mailing_DAO_Mailing', - array('id'), - FALSE - ); - $fromEmail = NULL; if (!empty($params['from_email'])) { $fromEmail = $params['from_email']; } - $session = CRM_Core_Session::singleton(); $mailing = new CRM_Mailing_BAO_Mailing(); - $mailing->id = $params['id']; - $mailing->find(TRUE); + $mailingID = CRM_Utils_Array::value('id', $params); + if ($mailingID) { + $mailing->id = $mailingID; + $mailing->find(TRUE); + } + else { + $mailing->copyValues($params); + } + + $session = CRM_Core_Session::singleton(); CRM_Mailing_BAO_Mailing::tokenReplace($mailing); -- 2.25.1