Add statistics to template

[MAILPOET-1571]
This commit is contained in:
Pavel Dohnal
2019-01-14 14:05:56 +01:00
parent 3bd80aecd3
commit 1db75f40fb
3 changed files with 159 additions and 123 deletions

View File

@@ -42,9 +42,9 @@ class Worker {
try {
$this->mailer->send($this->constructNewsletter($task), $settings['address']);
} catch(\Exception $e) {
//if(WP_DEBUG) {
if(WP_DEBUG) {
throw $e;
//}
}
} finally {
$this->markTaskAsFinished($task);
}
@@ -99,19 +99,24 @@ class Worker {
}
private function prepareContext(Newsletter $newsletter, NewsletterLink $link) {
$clicked = ($newsletter->statistics['clicked'] * 100) / $newsletter->total_sent;
$opened = ($newsletter->statistics['opened'] * 100) / $newsletter->total_sent;
$unsubscribed = ($newsletter->statistics['unsubscribed'] * 100) / $newsletter->total_sent;
return [
'subject' => $newsletter->subject,
'preheader' => sprintf(_x(
'%1$s%% opens, %2$s%% clicks, %3$s%% unsubscribes in a nutshell.', 'newsletter open rate, click rate and unsubscribe rate', 'mailpoet'),
number_format(($newsletter->statistics['clicked'] * 100) / $newsletter->total_sent, 2),
number_format(($newsletter->statistics['opened'] * 100) / $newsletter->total_sent,2),
number_format(($newsletter->statistics['unsubscribed'] * 100) / $newsletter->total_sent,2)
number_format($clicked, 2),
number_format($opened, 2),
number_format($unsubscribed, 2)
),
'topLinkClicks' => $link->clicksCount,
'topLinkClicks' => (int)$link->clicksCount,
'topLink' => $link->url,
'linkSettings' => get_site_url(null, '/wp-admin/admin.php?page=mailpoet-settings#basics'),
'linkStats' => get_site_url(null, '/wp-admin/admin.php?page=mailpoet-newsletters#/stats/' . $newsletter->id()),
'premiumPluginActive' => is_plugin_active('mailpoet-premium/mailpoet-premium.php'),
'clicked' => $clicked,
'opened' => $opened,
];
}

View File

@@ -170,7 +170,7 @@ class WorkerTest extends \MailPoetTest {
$this->stringContains('statsNotification.html'),
$this->callback(function($context){
return ($context['topLink'] === 'Link url2')
&& ($context['topLinkClicks'] === '2');
&& ($context['topLinkClicks'] === 2);
}));
$this->stats_notifications->process();

View File

@@ -24,6 +24,20 @@
</style>
</head>
<% if opened > 30 %>
<% set openedColor = '2993ab' %>
<% elseif opened > 10 %>
<% set openedColor = 'f0b849' %>
<% else %>
<% set openedColor = 'd54e21' %>
<% endif %>
<% if clicked > 3 %>
<% set clickedColor = '2993ab' %>
<% elseif clicked > 1 %>
<% set clickedColor = 'f0b849' %>
<% else %>
<% set clickedColor = 'd54e21' %>
<% endif %>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" style="margin:0;padding:0;background-color:#f0f0f0">
<table class="mailpoet_template" border="0" width="100%" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tbody>
@@ -106,8 +120,14 @@
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tr>
<td class="mailpoet_button-container" style="text-align:center;border-collapse:collapse">
<a class="mailpoet_button" href="" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#f0b849 ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:100px ;line-height:20px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:10px ;font-weight:normal ">
GOOD
<a class="mailpoet_button" href="" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#<%= openedColor %> ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:100px ;line-height:20px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:10px ;font-weight:normal ">
<% if opened > 30 %>
<%= __('EXCELENT') %>
<% elseif opened > 10 %>
<%= __('GOOD') %>
<% else %>
<%= __('BAD') %>
<% endif %>
</a></td>
</tr>
</table>
@@ -117,8 +137,8 @@
<tr>
<td class="mailpoet_text mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="word-break:break-word;word-wrap:break-word;padding-top:0;border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<h2 style="text-align:center;padding:0;font-style:normal;font-weight:normal;margin:0 0 12px;color:#222222;font-family:'Courier New',Courier,'Lucida Sans Typewriter','Lucida Typewriter',monospace;font-size:40px;line-height:64px">
<span style="color: #f0b849;">
<strong>29.8%</strong>
<span style="color: #<%= openedColor %>;">
<strong><%= number_format_i18n(opened) %>%</strong>
</span>
</h2>
</td>
@@ -128,7 +148,7 @@
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:center;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<span style="color: #f0b849;">
<span style="color: #<%= openedColor %>;">
<%= __('open rate') %>
</span>
</td>
@@ -151,8 +171,14 @@
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tr>
<td class="mailpoet_button-container" style="text-align:center;border-collapse:collapse">
<a class="mailpoet_button" href="" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#2993ab ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:100px ;line-height:20px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:10px ;font-weight:normal ">
EXCELLENT
<a class="mailpoet_button" href="" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#<%= clickedColor %> ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:100px ;line-height:20px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:10px ;font-weight:normal ">
<% if clicked > 3 %>
<%= __('EXCELENT') %>
<% elseif clicked > 1 %>
<%= __('GOOD') %>
<% else %>
<%= __('BAD') %>
<% endif %>
</a></td>
</tr>
</table>
@@ -162,8 +188,8 @@
<tr>
<td class="mailpoet_text mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="word-break:break-word;word-wrap:break-word;padding-top:0;border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<h2 style="text-align:center;padding:0;font-style:normal;font-weight:normal;margin:0 0 12px;color:#222222;font-family:'Courier New',Courier,'Lucida Sans Typewriter','Lucida Typewriter',monospace;font-size:40px;line-height:64px">
<span style="color: #2993ab;">
3.1%
<span style="color: #<%= clickedColor %>;">
<%= number_format_i18n(clicked) %>%
</span>
</h2>
</td>
@@ -173,7 +199,7 @@
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:center;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<span style="color: #2993ab;">
<span style="color: #<%= clickedColor %>;">
<%= __('click rate') %>
</span>
</td>
@@ -193,75 +219,77 @@
</table>
</td>
</tr>
<tr>
<td class="mailpoet_content" align="center" style="border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tbody>
<tr>
<td style="padding-left:0;padding-right:0;border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="mailpoet_cols-one" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;table-layout:fixed;margin-left:auto;margin-right:auto;padding-left:0;padding-right:0;border-collapse:collapse">
<tbody>
<tr>
<td class="mailpoet_divider" valign="top" style="padding:26.5px 20px 26.5px 20px;border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tr>
<td class="mailpoet_divider-cell" style="border-top-width:1px;border-top-style:solid;border-top-color:#e8e8e8;border-collapse:collapse">
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="mailpoet_content" align="center" style="border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tbody>
<tr>
<td style="padding-left:0;padding-right:0;border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="mailpoet_cols-one" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;table-layout:fixed;margin-left:auto;margin-right:auto;padding-left:0;padding-right:0;border-collapse:collapse">
<tbody>
<tr>
<td class="mailpoet_header_footer_padded mailpoet_header" style="line-height:38.4px;text-align:center ;color:#222222 ;font-family:'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif ;font-size:24px ;border-collapse:collapse;padding:10px 20px">
<span style="font-weight: 600;">
<%= __('Most clicked link') %>
</span>
</td>
</tr>
<tr>
<td class="mailpoet_text mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="word-break:break-word;word-wrap:break-word;padding-top:0;border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:center;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<a href="<%= topLink %>" target="_blank" rel="noopener noreferrer" style="color:#008282;text-decoration:underline">
<%= topLink %>
</a>
</td>
</tr></table>
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:center;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<span style="color: #000000;">
<%= __('%s unique clicks')|replace({'%s': topLinkClicks}) %>
</span>
</td>
</tr></table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<% if topLinkClicks > 0 %>
<tr>
<td class="mailpoet_content" align="center" style="border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tbody>
<tr>
<td style="padding-left:0;padding-right:0;border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="mailpoet_cols-one" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;table-layout:fixed;margin-left:auto;margin-right:auto;padding-left:0;padding-right:0;border-collapse:collapse">
<tbody>
<tr>
<td class="mailpoet_divider" valign="top" style="padding:26.5px 20px 26.5px 20px;border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tr>
<td class="mailpoet_divider-cell" style="border-top-width:1px;border-top-style:solid;border-top-color:#e8e8e8;border-collapse:collapse">
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="mailpoet_content" align="center" style="border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tbody>
<tr>
<td style="padding-left:0;padding-right:0;border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="mailpoet_cols-one" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;table-layout:fixed;margin-left:auto;margin-right:auto;padding-left:0;padding-right:0;border-collapse:collapse">
<tbody>
<tr>
<td class="mailpoet_header_footer_padded mailpoet_header" style="line-height:38.4px;text-align:center ;color:#222222 ;font-family:'Trebuchet MS', 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Tahoma, sans-serif ;font-size:24px ;border-collapse:collapse;padding:10px 20px">
<span style="font-weight: 600;">
<%= __('Most clicked link') %>
</span>
</td>
</tr>
<tr>
<td class="mailpoet_text mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="word-break:break-word;word-wrap:break-word;padding-top:0;border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:center;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<a href="<%= topLink %>" target="_blank" rel="noopener noreferrer" style="color:#008282;text-decoration:underline">
<%= topLink %>
</a>
</td>
</tr></table>
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:center;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<span style="color: #000000;">
<%= __('%s unique clicks')|replace({'%s': topLinkClicks}) %>
</span>
</td>
</tr></table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<% endif %>
<tr>
<td class="mailpoet_content" align="center" style="border-collapse:collapse">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
@@ -283,44 +311,47 @@
<tr>
<td class="mailpoet_spacer" height="30" valign="top" style="border-collapse:collapse"></td>
</tr>
<tr>
<td class="mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<div>
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<% if premiumPluginActive %>
<tr>
<td class="mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<div>
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tr>
<td class="mailpoet_button-container" style="text-align:center;border-collapse:collapse">
<a class="mailpoet_button" href="https://account.mailpoet.com/premium" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#fe5301 ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:288px ;line-height:50px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:20px ;font-weight:normal ">
<%= __('View all stats') %>
</a></td>
</tr>
</table>
</div>
</td>
</tr>
<% else %>
<tr>
<td class="mailpoet_text mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="word-break:break-word;word-wrap:break-word;padding-top:0;border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_button-container" style="text-align:center;border-collapse:collapse">
<a class="mailpoet_button" href="https://account.mailpoet.com/premium" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#fe5301 ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:288px ;line-height:50px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:20px ;font-weight:normal ">
<%= __('View all stats') %>
</a></td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td class="mailpoet_text mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="word-break:break-word;word-wrap:break-word;padding-top:0;border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<table style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse" width="100%" cellpadding="0">
<tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:left;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<%= __('See more stats in the Premium version, like all the links that were clicked or which subscribers opened your emails. You can also create segments of subscribers by clicks and opens.') %>
</td>
</tr></table>
</td>
</tr>
<tr>
<td class="mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<div>
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tr>
<td class="mailpoet_button-container" style="text-align:center;border-collapse:collapse">
<a class="mailpoet_button" href="#" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#fe5301 ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:288px ;line-height:50px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:20px ;font-weight:normal ">
<%= __('See Premium features') %>
</a></td>
</tr>
</table>
</div>
</td>
</tr>
<td class="mailpoet_paragraph" style="word-break:break-word;word-wrap:break-word;text-align:left;border-collapse:collapse;color:#000000;font-family:Arial,'Helvetica Neue',Helvetica,sans-serif;font-size:16px;line-height:25.6px">
<%= __('See more stats in the Premium version, like all the links that were clicked or which subscribers opened your emails. You can also create segments of subscribers by clicks and opens.') %>
</td>
</tr></table>
</td>
</tr>
<tr>
<td class="mailpoet_padded_bottom mailpoet_padded_side" valign="top" style="border-collapse:collapse;padding-bottom:20px;padding-left:20px;padding-right:20px">
<div>
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0;border-collapse:collapse">
<tr>
<td class="mailpoet_button-container" style="text-align:center;border-collapse:collapse">
<a class="mailpoet_button" href="#" style="display:inline-block;-webkit-text-size-adjust:none;mso-hide:all;text-decoration:none;text-align:center;background-color:#fe5301 ;border-color:#0074a2 ;border-width:0px ;border-radius:3px ;border-style:solid ;width:288px ;line-height:50px ;color:#ffffff ;font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif ;font-size:20px ;font-weight:normal ">
<%= __('See Premium features') %>
</a></td>
</tr>
</table>
</div>
</td>
</tr>
<% endif %>
<tr>
<td class="mailpoet_spacer" height="20" valign="top" style="border-collapse:collapse"></td>
</tr>