Show poll about success delivery after sending preview or campaign
This commit is contained in:
@ -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
|
||||||
|
@ -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(
|
||||||
|
@ -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
55
assets/js/src/poll.jsx
Normal 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;
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
36
lib/Twig/Polls.php
Normal 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'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -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()) %>;
|
||||||
|
@ -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(
|
||||||
|
Reference in New Issue
Block a user