diff --git a/assets/js/src/newsletters/send.jsx b/assets/js/src/newsletters/send.jsx index 0f58a0f84e..84e0e80e15 100644 --- a/assets/js/src/newsletters/send.jsx +++ b/assets/js/src/newsletters/send.jsx @@ -11,6 +11,7 @@ define( 'newsletters/breadcrumb.jsx', 'help-tooltip.jsx', 'jquery', + 'html2canvas' ], ( React, @@ -23,7 +24,8 @@ define( WelcomeNewsletterFields, Breadcrumb, HelpTooltip, - jQuery + jQuery, + html2canvas ) => { const NewsletterSend = React.createClass({ contextTypes: { @@ -88,6 +90,30 @@ define( }); }); }, + saveTemplate: function(data, done) { + var iframe = document.createElement('iframe'); + iframe.src = data.preview_url; + iframe.onload = () => { + html2canvas(iframe.contentDocument.documentElement).then(function(thumbnail){ + document.body.removeChild(iframe); + MailPoet.Ajax.post({ + api_version: window.mailpoet_api_version, + endpoint: 'newsletterTemplates', + action: 'save', + data: { + name: data.subject, + description: data.preheader, + thumbnail: thumbnail.toDataURL('image/jpeg'), + body: JSON.stringify(data.body), + categories: '["recent"]' + } + }).then(done).fail(this.showError); + }); + } + // just to hide the iframe + iframe.style.cssText ='position: absolute; opacity:0; z-index: -9999'; + document.body.appendChild(iframe); + }, handleSend: function (e) { e.preventDefault(); @@ -141,26 +167,29 @@ define( newsletter_id: this.props.params.id, }, }).done((response2) => { - // redirect to listing based on newsletter type - this.context.router.push(`/${this.state.item.type || ''}`); + // save template in recently sent category + this.saveTemplate(response.data, () => { + // redirect to listing based on newsletter type + this.context.router.push(`/${this.state.item.type || ''}`); - if (response2.data.status === 'scheduled') { - MailPoet.Notice.success( - MailPoet.I18n.t('newsletterHasBeenScheduled') - ); - MailPoet.trackEvent('Emails > Newsletter sent', { - scheduled: true, - 'MailPoet Free version': window.mailpoet_version, - }); - } else { - MailPoet.Notice.success( - MailPoet.I18n.t('newsletterBeingSent') - ); - MailPoet.trackEvent('Emails > Newsletter sent', { - scheduled: false, - 'MailPoet Free version': window.mailpoet_version, - }); - } + if (response2.data.status === 'scheduled') { + MailPoet.Notice.success( + MailPoet.I18n.t('newsletterHasBeenScheduled') + ); + MailPoet.trackEvent('Emails > Newsletter sent', { + scheduled: true, + 'MailPoet Free version': window.mailpoet_version, + }); + } else { + MailPoet.Notice.success( + MailPoet.I18n.t('newsletterBeingSent') + ); + MailPoet.trackEvent('Emails > Newsletter sent', { + scheduled: false, + 'MailPoet Free version': window.mailpoet_version, + }); + } + }); }).fail(this.showError); } }) diff --git a/lib/API/JSON/v1/Newsletters.php b/lib/API/JSON/v1/Newsletters.php index 72f6047b04..2e9132affb 100644 --- a/lib/API/JSON/v1/Newsletters.php +++ b/lib/API/JSON/v1/Newsletters.php @@ -129,7 +129,16 @@ class Newsletters extends APIEndpoint { Hooks::doAction('mailpoet_api_newsletters_save_after', $newsletter); - return $this->successResponse($newsletter->asArray()); + $preview_url = NewsletterUrl::getViewInBrowserUrl( + NewsletterUrl::TYPE_LISTING_EDITOR, + $newsletter, + Subscriber::getCurrentWPUser() + ); + + $newsletter = $newsletter->asArray(); + $newsletter['preview_url'] = $preview_url; + + return $this->successResponse($newsletter); } function setStatus($data = array()) {