Show poll about success delivery after sending preview or campaign

This commit is contained in:
Ján Mikláš
2019-01-03 11:28:33 +01:00
parent 321af0f366
commit cd60d1af81
10 changed files with 134 additions and 0 deletions

View File

@ -21,3 +21,9 @@
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
display: block; display: block;
.typeform-widget
height: 350px
margin: 0 auto 30px
max-width: 100%
width: 500px

View File

@ -323,6 +323,7 @@ define([
CommunicationComponent.previewNewsletter(data).always(function () { CommunicationComponent.previewNewsletter(data).always(function () {
MailPoet.Modal.loading(false); MailPoet.Modal.loading(false);
}).done(function () { }).done(function () {
var showSuccessDeliveryPoll;
MailPoet.Notice.success( MailPoet.Notice.success(
MailPoet.I18n.t('newsletterPreviewSent'), MailPoet.I18n.t('newsletterPreviewSent'),
{ scroll: true } { scroll: true }
@ -331,6 +332,11 @@ define([
'MailPoet Free version': window.mailpoet_version, 'MailPoet Free version': window.mailpoet_version,
'Domain name': data.subscriber.substring(data.subscriber.indexOf('@') + 1) 'Domain name': data.subscriber.substring(data.subscriber.indexOf('@') + 1)
}); });
showSuccessDeliveryPoll = MailPoet.Poll.successDelivery.canShow('preview');
if (showSuccessDeliveryPoll) {
MailPoet.Poll.successDelivery.showModal('preview', 'IHedf1');
MailPoet.Poll.successDelivery.setPollShown('preview');
}
}).fail(function (response) { }).fail(function (response) {
if (response.errors.length > 0) { if (response.errors.length > 0) {
MailPoet.Notice.error( MailPoet.Notice.error(

View File

@ -16,10 +16,26 @@ function renderHeader(newsletter) {
} }
function Success(props) { function Success(props) {
const showSuccessDeliveryPoll = (
props.newsletter.type === 'standard' &&
props.newsletter.status !== 'scheduled'
);
if (showSuccessDeliveryPoll) {
MailPoet.Poll.successDelivery.initTypeformScript();
}
return ( return (
<div className="mailpoet_congratulate_success"> <div className="mailpoet_congratulate_success">
<h1>{renderHeader(props.newsletter)}</h1> <h1>{renderHeader(props.newsletter)}</h1>
<img src={props.illustrationImageUrl} alt="" width="750" height="250" /> <img src={props.illustrationImageUrl} alt="" width="750" height="250" />
{showSuccessDeliveryPoll &&
<div
className="typeform-widget"
data-url="https://mailpoet.typeform.com/to/ciWID6"
data-transparency="100"
data-hide-headers="true"
data-hide-footer="true"
/>
}
<button className="button" onClick={props.successClicked}>{MailPoet.I18n.t('close')}</button> <button className="button" onClick={props.successClicked}>{MailPoet.I18n.t('close')}</button>
</div> </div>
); );

55
assets/js/src/poll.jsx Normal file
View File

@ -0,0 +1,55 @@
import MailPoet from 'mailpoet';
const getSettingsKey = pollType => `show_poll_success_delivery_${pollType}`;
const initTypeformScript = () => {
if (!document.getElementById('typef_orm')) {
const js = document.createElement('script');
js.id = 'typef_orm';
js.src = 'https://embed.typeform.com/embed.js';
const q = document.getElementsByTagName('script')[0];
q.parentNode.insertBefore(js, q);
}
};
const setPollShown = (pollType) => {
const data = {};
data[getSettingsKey(pollType)] = '0';
MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
endpoint: 'settings',
action: 'set',
data,
});
// since poll trigger can be called multiple times on single page load
// it must be also locally changed in settings
window.mailpoet_polls_visibility[getSettingsKey(pollType)] = '0';
};
const Poll = {
successDelivery: {
canShow: (pollType, skipMtaMethod) => (
window.mailpoet_locale === 'en' &&
window.mailpoet_polls_visibility[getSettingsKey(pollType)] === '1' &&
(skipMtaMethod || window.mailpoet_polls_data.mta_method === 'PHPMail')
),
initTypeformScript,
setPollShown,
showModal: (pollType, typeformId) => {
MailPoet.Modal.popup({
onInit: initTypeformScript,
template: `
<div class="typeform-widget"
data-url="https://mailpoet.typeform.com/to/${typeformId}"
data-transparency="100"
data-hide-headers="true"
data-hide-footer="true"
style="width: 500px; height: 500px; max-width: 100%; max-height: 100%;"
></div>
`,
});
},
},
};
MailPoet.Poll = Poll;

View File

@ -11,6 +11,7 @@ import 'forms/forms.jsx'; // side effect - renders ReactDOM to document
import 'settings/tabs.js'; // side effect - assigns to MailPoet.Router, executes code on doc ready import 'settings/tabs.js'; // side effect - assigns to MailPoet.Router, executes code on doc ready
import 'help/help.jsx'; // side effect - renders ReactDOM to document import 'help/help.jsx'; // side effect - renders ReactDOM to document
import 'intro.jsx'; // side effect - assigns to MailPoet.showIntro import 'intro.jsx'; // side effect - assigns to MailPoet.showIntro
import 'poll.jsx'; // side effect - assigns to MailPoet.Poll
import 'settings/reinstall_from_scratch.js'; // side effect - adds event handler to document import 'settings/reinstall_from_scratch.js'; // side effect - adds event handler to document
import 'subscribers/importExport/import.js'; // side effect - executes on doc ready, adds events import 'subscribers/importExport/import.js'; // side effect - executes on doc ready, adds events
import 'subscribers/importExport/export.js'; // side effect - executes on doc ready import 'subscribers/importExport/export.js'; // side effect - executes on doc ready

View File

@ -54,6 +54,7 @@ class Changelog {
} }
} }
Setting::setValue('show_congratulate_after_first_newsletter', true); Setting::setValue('show_congratulate_after_first_newsletter', true);
Setting::setValue('show_poll_success_delivery_preview', true);
} }
} }

View File

@ -41,6 +41,7 @@ class Renderer {
$this->setupHandlebars(); $this->setupHandlebars();
$this->setupHelpscout(); $this->setupHelpscout();
$this->setupAnalytics(); $this->setupAnalytics();
$this->setupPolls();
$this->setupGlobalVariables(); $this->setupGlobalVariables();
$this->setupSyntax(); $this->setupSyntax();
} }
@ -69,6 +70,10 @@ class Renderer {
$this->renderer->addExtension(new Twig\Analytics()); $this->renderer->addExtension(new Twig\Analytics());
} }
function setupPolls() {
$this->renderer->addExtension(new Twig\Polls());
}
function setupGlobalVariables() { function setupGlobalVariables() {
$this->renderer->addExtension(new Twig\Assets(array( $this->renderer->addExtension(new Twig\Assets(array(
'version' => Env::$version, 'version' => Env::$version,

36
lib/Twig/Polls.php Normal file
View File

@ -0,0 +1,36 @@
<?php
namespace MailPoet\Twig;
use MailPoet\Models\Setting;
if(!defined('ABSPATH')) exit;
class Polls extends \Twig_Extension {
public function getFunctions() {
return array(
new \Twig_SimpleFunction(
'get_polls_data',
array($this, 'getPollsData'),
array('is_safe' => array('all'))
),
new \Twig_SimpleFunction(
'get_polls_visiblity',
array($this, 'getPollsVisibility'),
array('is_safe' => array('all'))
),
);
}
function getPollsData() {
return [
'mta_method' => Setting::getValue('mta.method'),
];
}
function getPollsVisibility() {
return [
'show_poll_success_delivery_preview' => Setting::getValue('show_poll_success_delivery_preview'),
];
}
}

View File

@ -47,6 +47,8 @@ jQuery('.toplevel_page_mailpoet-newsletters.menu-top-last')
var mailpoet_time_format = "<%= wp_time_format()|escape('js') %>"; var mailpoet_time_format = "<%= wp_time_format()|escape('js') %>";
var mailpoet_version = "<%= mailpoet_version() %>"; var mailpoet_version = "<%= mailpoet_version() %>";
var mailpoet_locale = "<%= mailpoet_locale() %>"; var mailpoet_locale = "<%= mailpoet_locale() %>";
var mailpoet_polls_data = <%= json_encode(get_polls_data()) %>;
var mailpoet_polls_visibility = <%= json_encode(get_polls_visiblity()) %>;
var mailpoet_premium_version = <%= json_encode(mailpoet_premium_version()) %>; var mailpoet_premium_version = <%= json_encode(mailpoet_premium_version()) %>;
var mailpoet_analytics_enabled = <%= is_analytics_enabled() | json_encode %>; var mailpoet_analytics_enabled = <%= is_analytics_enabled() | json_encode %>;
var mailpoet_analytics_data = <%= json_encode(get_analytics_data()) %>; var mailpoet_analytics_data = <%= json_encode(get_analytics_data()) %>;

View File

@ -730,6 +730,12 @@
{ scroll: true } { scroll: true }
); );
trackTestEmailSent(mailer, true); trackTestEmailSent(mailer, true);
const showSuccessDeliveryPoll = MailPoet.Poll.successDelivery.canShow('preview', true) && $('#mailpoet_smtp_method').val() === 'server';
if (showSuccessDeliveryPoll) {
MailPoet.Poll.successDelivery.showModal('preview', 'IHedf1');
MailPoet.Poll.successDelivery.setPollShown('preview');
}
}).fail(function(response) { }).fail(function(response) {
if (response.errors.length > 0) { if (response.errors.length > 0) {
MailPoet.Notice.error( MailPoet.Notice.error(