MailPoet Newsletters (New) - Version 3.2.4

Version Description

  • 2017-12-05 =
  • Improved: [mailpoet_manage_subscription] always renders for logged in WP users. Thx Jon, Sean, Steve & metaglyphics;
  • Fixed: migration from MailPoet 2 on hosts with missing "mbstring" PHP extension. Thanks Alvaro!
  • Fixed: updated existing libraries that previously contained security issues. Thanks Rhiannon (@goija) and Bits of Freedom!
Download this release

Release Info

Developer wysija
Plugin Icon 128x128 MailPoet Newsletters (New)
Version 3.2.4
Comparing to
See all releases

Code changes from version 3.3.0 to 3.2.4

assets/js/{admin.39fd28da.js → admin.dfed86f0.js} RENAMED
@@ -92,7 +92,7 @@ webpackJsonp([0],{
92
 
93
  var messages = {
94
  onTrash: function onTrash(response) {
95
- var count = Number(response.meta.count);
96
  var message = null;
97
 
98
  if (count === 1) {
@@ -103,7 +103,7 @@ webpackJsonp([0],{
103
  _mailpoet2['default'].Notice.success(message);
104
  },
105
  onDelete: function onDelete(response) {
106
- var count = Number(response.meta.count);
107
  var message = null;
108
 
109
  if (count === 1) {
@@ -114,7 +114,7 @@ webpackJsonp([0],{
114
  _mailpoet2['default'].Notice.success(message);
115
  },
116
  onRestore: function onRestore(response) {
117
- var count = Number(response.meta.count);
118
  var message = null;
119
 
120
  if (count === 1) {
@@ -150,7 +150,7 @@ webpackJsonp([0],{
150
  }
151
  };
152
 
153
- var bulkActions = [{
154
  name: 'moveToList',
155
  label: _mailpoet2['default'].I18n.t('moveToList'),
156
  onSelect: function onSelect() {
@@ -167,11 +167,11 @@ webpackJsonp([0],{
167
  },
168
  getData: function getData() {
169
  return {
170
- segment_id: Number((0, _jquery2['default'])('#move_to_segment').val())
171
  };
172
  },
173
  onSuccess: function onSuccess(response) {
174
- _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersMovedToList').replace('%$1d', Number(response.meta.count).toLocaleString()).replace('%$2s', response.meta.segment));
175
  }
176
  }, {
177
  name: 'addToList',
@@ -190,11 +190,11 @@ webpackJsonp([0],{
190
  },
191
  getData: function getData() {
192
  return {
193
- segment_id: Number((0, _jquery2['default'])('#add_to_segment').val())
194
  };
195
  },
196
  onSuccess: function onSuccess(response) {
197
- _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersAddedToList').replace('%$1d', Number(response.meta.count).toLocaleString()).replace('%$2s', response.meta.segment));
198
  }
199
  }, {
200
  name: 'removeFromList',
@@ -213,23 +213,23 @@ webpackJsonp([0],{
213
  },
214
  getData: function getData() {
215
  return {
216
- segment_id: Number((0, _jquery2['default'])('#remove_from_segment').val())
217
  };
218
  },
219
  onSuccess: function onSuccess(response) {
220
- _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersRemovedFromList').replace('%$1d', Number(response.meta.count).toLocaleString()).replace('%$2s', response.meta.segment));
221
  }
222
  }, {
223
  name: 'removeFromAllLists',
224
  label: _mailpoet2['default'].I18n.t('removeFromAllLists'),
225
  onSuccess: function onSuccess(response) {
226
- _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersRemovedFromAllLists').replace('%$1d', Number(response.meta.count).toLocaleString()));
227
  }
228
  }, {
229
  name: 'sendConfirmationEmail',
230
  label: _mailpoet2['default'].I18n.t('resendConfirmationEmail'),
231
  onSuccess: function onSuccess(response) {
232
- _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleConfirmationEmailsSent').replace('%$1d', Number(response.meta.count).toLocaleString()));
233
  }
234
  }, {
235
  name: 'trash',
@@ -237,7 +237,7 @@ webpackJsonp([0],{
237
  onSuccess: messages.onTrash
238
  }];
239
 
240
- var itemActions = [{
241
  name: 'edit',
242
  label: _mailpoet2['default'].I18n.t('edit'),
243
  link: function link(subscriber) {
@@ -250,17 +250,17 @@ webpackJsonp([0],{
250
  }, {
251
  name: 'trash',
252
  display: function display(subscriber) {
253
- return Number(subscriber.wp_user_id) === 0;
254
  }
255
  }];
256
 
257
  var SubscriberList = _react2['default'].createClass({
258
  displayName: 'SubscriberList',
259
 
260
- getSegmentFromId: function getSegmentFromId(segmentId) {
261
  var result = false;
262
- window.mailpoet_segments.forEach(function (segment) {
263
- if (segment.id === segmentId) {
264
  result = segment;
265
  }
266
  });
@@ -269,7 +269,7 @@ webpackJsonp([0],{
269
  renderItem: function renderItem(subscriber, actions) {
270
  var _this = this;
271
 
272
- var rowClasses = (0, _classnames2['default'])('manage-column', 'column-primary', 'has-row-actions', 'column-username');
273
 
274
  var status = '';
275
 
@@ -289,10 +289,6 @@ webpackJsonp([0],{
289
  case 'bounced':
290
  status = _mailpoet2['default'].I18n.t('bounced');
291
  break;
292
-
293
- default:
294
- status = 'Invalid';
295
- break;
296
  }
297
 
298
  var segments = false;
@@ -300,20 +296,20 @@ webpackJsonp([0],{
300
  // Subscriptions
301
  if (subscriber.subscriptions.length > 0) {
302
  (function () {
303
- var subscribedSegments = [];
304
 
305
- subscriber.subscriptions.forEach(function (subscription) {
306
  var segment = _this.getSegmentFromId(subscription.segment_id);
307
  if (segment === false) return;
308
  if (subscription.status === 'subscribed') {
309
- subscribedSegments.push(segment.name);
310
  }
311
  });
312
 
313
  segments = _react2['default'].createElement(
314
  'span',
315
  null,
316
- subscribedSegments.join(', ')
317
  );
318
  })();
319
  }
@@ -323,7 +319,7 @@ webpackJsonp([0],{
323
  null,
324
  _react2['default'].createElement(
325
  'td',
326
- { className: rowClasses },
327
  _react2['default'].createElement(
328
  'strong',
329
  null,
@@ -417,8 +413,8 @@ webpackJsonp([0],{
417
  endpoint: 'subscribers',
418
  onRenderItem: this.renderItem,
419
  columns: columns,
420
- bulk_actions: bulkActions,
421
- item_actions: itemActions,
422
  messages: messages,
423
  sort_by: 'created_at',
424
  sort_order: 'desc'
@@ -453,21 +449,21 @@ webpackJsonp([0],{
453
  label: MailPoet.I18n.t('email'),
454
  type: 'text',
455
  disabled: function disabled(subscriber) {
456
- return Number(subscriber.wp_user_id > 0);
457
  }
458
  }, {
459
  name: 'first_name',
460
  label: MailPoet.I18n.t('firstname'),
461
  type: 'text',
462
  disabled: function disabled(subscriber) {
463
- return Number(subscriber.wp_user_id > 0);
464
  }
465
  }, {
466
  name: 'last_name',
467
  label: MailPoet.I18n.t('lastname'),
468
  type: 'text',
469
  disabled: function disabled(subscriber) {
470
- return Number(subscriber.wp_user_id > 0);
471
  }
472
  }, {
473
  name: 'status',
@@ -480,7 +476,7 @@ webpackJsonp([0],{
480
  bounced: MailPoet.I18n.t('bounced')
481
  },
482
  filter: function filter(subscriber, value) {
483
- if (Number(subscriber.wp_user_id) > 0 && value === 'unconfirmed') {
484
  return false;
485
  }
486
  return true;
@@ -498,14 +494,14 @@ webpackJsonp([0],{
498
  return null;
499
  }
500
 
501
- return subscriber.subscriptions.filter(function (subscription) {
502
- return subscription.status === 'subscribed';
503
- }).map(function (subscription) {
504
- return subscription.segment_id;
505
  });
506
  },
507
  filter: function filter(segment) {
508
- return !segment.deleted_at && segment.type === 'default';
509
  },
510
  getLabel: function getLabel(segment) {
511
  return segment.name + ' (' + segment.subscribers + ')';
@@ -514,13 +510,13 @@ webpackJsonp([0],{
514
  var label = '';
515
 
516
  if (subscriber.subscriptions !== undefined) {
517
- subscriber.subscriptions.forEach(function (subscription) {
518
  if (segment.id === subscription.segment_id) {
519
  label = segment.name;
520
 
521
  if (subscription.status === 'unsubscribed') {
522
- var unsubscribedAt = MailPoet.Date.format(subscription.updated_at);
523
- label += ' (%$1s)'.replace('%$1s', MailPoet.I18n.t('unsubscribedOn').replace('%$1s', unsubscribedAt));
524
  }
525
  }
526
  });
@@ -529,23 +525,23 @@ webpackJsonp([0],{
529
  }
530
  }];
531
 
532
- var customFields = window.mailpoet_custom_fields || [];
533
- customFields.forEach(function (customField) {
534
  var field = {
535
- name: 'cf_' + customField.id,
536
- label: customField.name,
537
- type: customField.type
538
  };
539
- if (customField.params) {
540
- field.params = customField.params;
541
  }
542
 
543
- if (customField.params.values) {
544
- field.values = customField.params.values;
545
  }
546
 
547
  // add placeholders for selects (date, select)
548
- switch (customField.type) {
549
  case 'date':
550
  field.year_placeholder = MailPoet.I18n.t('year');
551
  field.month_placeholder = MailPoet.I18n.t('month');
@@ -555,10 +551,6 @@ webpackJsonp([0],{
555
  case 'select':
556
  field.placeholder = '-';
557
  break;
558
-
559
- default:
560
- field.placeholder = '';
561
- break;
562
  }
563
 
564
  fields.push(field);
@@ -577,7 +569,7 @@ webpackJsonp([0],{
577
  };
578
 
579
  var beforeFormContent = function beforeFormContent(subscriber) {
580
- if (Number(subscriber.wp_user_id) > 0) {
581
  return React.createElement(
582
  'p',
583
  { className: 'description' },
@@ -593,7 +585,6 @@ webpackJsonp([0],{
593
  })
594
  );
595
  }
596
- return undefined;
597
  };
598
 
599
  var afterFormContent = function afterFormContent() {
@@ -718,10 +709,10 @@ webpackJsonp([0],{
718
  var container = document.getElementById('newsletters_container');
719
 
720
  if (container) {
721
- var extraRoutes = [];
722
- extraRoutes = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_before_router', extraRoutes);
723
 
724
- var mailpoetListing = _reactDom2['default'].render(_react2['default'].createElement(
725
  _reactRouter.Router,
726
  { history: history },
727
  _react2['default'].createElement(
@@ -738,13 +729,13 @@ webpackJsonp([0],{
738
  _react2['default'].createElement(_reactRouter.Route, { path: 'new/notification', component: _newslettersTypesNotificationNotificationJsx2['default'] }),
739
  _react2['default'].createElement(_reactRouter.Route, { name: 'template', path: 'template/:id', component: _newslettersTemplatesJsx2['default'] }),
740
  _react2['default'].createElement(_reactRouter.Route, { path: 'send/:id', component: _newslettersSendJsx2['default'] }),
741
- extraRoutes.map(function (rt) {
742
  return _react2['default'].createElement(_reactRouter.Route, { key: rt.path, path: rt.path, component: rt.component });
743
  })
744
  )
745
  ), container);
746
 
747
- window.mailpoet_listing = mailpoetListing;
748
  }
749
  /* Listings */ /* Newsletter: type selection */ /* New newsletter: types */ /* Template selection */ /* Sending options */ /* Extra routes */
750
 
@@ -980,7 +971,6 @@ webpackJsonp([0],{
980
  };
981
 
982
  reader.readAsText(file);
983
- return true;
984
  },
985
  render: function render() {
986
  return _react2['default'].createElement(
@@ -10476,10 +10466,10 @@ webpackJsonp([0],{
10476
  return true;
10477
  },
10478
  render: function render() {
10479
- var isPaused = this.state.item.status === 'sending' && this.state.item.queue && this.state.item.queue.status === 'paused';
10480
  var fields = this.state.fields.map(function (field) {
10481
  var newField = field;
10482
- if (field.name === 'segments' || field.name === 'options') {
10483
  newField.disabled = isPaused;
10484
  }
10485
  return newField;
@@ -10584,10 +10574,10 @@ webpackJsonp([0],{
10584
  getLabel: function getLabel(segment) {
10585
  return segment.name + ' (' + parseInt(segment.subscribers, 10).toLocaleString() + ')';
10586
  },
10587
- transformChangedValue: function transformChangedValue(segmentIds) {
10588
- var allSegments = this.state.items;
10589
- return _.map(segmentIds, function (id) {
10590
- return _.find(allSegments, function (segment) {
10591
  return segment.id === id;
10592
  });
10593
  });
@@ -10956,7 +10946,7 @@ webpackJsonp([0],{
10956
  },
10957
  propagateChange: function propagateChange() {
10958
  if (this.props.onChange) {
10959
- this.props.onChange({
10960
  target: {
10961
  name: this.props.name || '',
10962
  value: this.getDateTime()
@@ -11093,10 +11083,10 @@ webpackJsonp([0],{
11093
  getLabel: function getLabel(segment) {
11094
  return segment.name + ' (' + parseInt(segment.subscribers, 10).toLocaleString() + ')';
11095
  },
11096
- transformChangedValue: function transformChangedValue(segmentIds) {
11097
- var allSegments = this.state.items;
11098
- return _.map(segmentIds, function (id) {
11099
- return _.find(allSegments, function (segment) {
11100
  return segment.id === id;
11101
  });
11102
  });
@@ -11430,11 +11420,11 @@ webpackJsonp([0],{
11430
 
11431
  var _newslettersListingsMixinsJsx = __webpack_require__(530);
11432
 
11433
- var mailpoetTrackingEnabled = !!window.mailpoetTrackingEnabled;
11434
 
11435
  var messages = {
11436
  onTrash: function onTrash(response) {
11437
- var count = Number(response.meta.count);
11438
  var message = null;
11439
 
11440
  if (count === 1) {
@@ -11445,7 +11435,7 @@ webpackJsonp([0],{
11445
  _mailpoet2['default'].Notice.success(message);
11446
  },
11447
  onDelete: function onDelete(response) {
11448
- var count = Number(response.meta.count);
11449
  var message = null;
11450
 
11451
  if (count === 1) {
@@ -11456,7 +11446,7 @@ webpackJsonp([0],{
11456
  _mailpoet2['default'].Notice.success(message);
11457
  },
11458
  onRestore: function onRestore(response) {
11459
- var count = Number(response.meta.count);
11460
  var message = null;
11461
 
11462
  if (count === 1) {
@@ -11481,14 +11471,14 @@ webpackJsonp([0],{
11481
  }, {
11482
  name: 'statistics',
11483
  label: _mailpoet2['default'].I18n.t('statistics'),
11484
- display: mailpoetTrackingEnabled
11485
  }, {
11486
  name: 'sent_at',
11487
  label: _mailpoet2['default'].I18n.t('sentOn'),
11488
  sortable: true
11489
  }];
11490
 
11491
- var bulkActions = [{
11492
  name: 'trash',
11493
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
11494
  onSuccess: messages.onTrash
@@ -11498,7 +11488,7 @@ webpackJsonp([0],{
11498
  var redirectToEditing = function redirectToEditing() {
11499
  window.location.href = '?page=mailpoet-newsletter-editor&id=' + newsletter.id;
11500
  };
11501
- if (!newsletter.queue || newsletter.status !== 'sending' || newsletter.queue.status !== null) {
11502
  redirectToEditing();
11503
  } else {
11504
  (0, _reactConfirmAlert.confirmAlert)({
@@ -11511,7 +11501,7 @@ webpackJsonp([0],{
11511
  }
11512
  };
11513
 
11514
- var newsletterActions = [{
11515
  name: 'view',
11516
  link: function link(newsletter) {
11517
  return _react2['default'].createElement(
@@ -11551,7 +11541,7 @@ webpackJsonp([0],{
11551
  }];
11552
 
11553
  _wpJsHooks2['default'].addFilter('mailpoet_newsletters_listings_standard_actions', _newslettersListingsMixinsJsx.StatisticsMixin.addStatsCTAAction);
11554
- newsletterActions = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listings_standard_actions', newsletterActions);
11555
 
11556
  var NewsletterListStandard = _react2['default'].createClass({
11557
  displayName: 'NewsletterListStandard',
@@ -11597,7 +11587,7 @@ webpackJsonp([0],{
11597
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('lists') },
11598
  segments
11599
  ),
11600
- mailpoetTrackingEnabled === true ? _react2['default'].createElement(
11601
  'td',
11602
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('statistics') },
11603
  this.renderStatistics(newsletter, undefined, meta.current_time)
@@ -11642,8 +11632,8 @@ webpackJsonp([0],{
11642
  base_url: 'standard',
11643
  onRenderItem: this.renderItem,
11644
  columns: columns,
11645
- bulk_actions: bulkActions,
11646
- item_actions: newsletterActions,
11647
  messages: messages,
11648
  auto_refresh: true,
11649
  sort_by: 'sent_at',
@@ -11820,14 +11810,14 @@ webpackJsonp([0],{
11820
  }
11821
  });
11822
  },
11823
- renderQueueStatus: function renderQueueStatus(newsletter, mailerLog) {
11824
  if (!newsletter.queue) {
11825
  return _react2['default'].createElement(
11826
  'span',
11827
  null,
11828
  _mailpoet2['default'].I18n.t('notSentYet')
11829
  );
11830
- } else if (mailerLog.status === 'paused' && newsletter.queue.status !== 'completed') {
11831
  return _react2['default'].createElement(
11832
  'span',
11833
  null,
@@ -11889,12 +11879,12 @@ webpackJsonp([0],{
11889
  );
11890
  }
11891
 
11892
- var progressBarWidth = 0;
11893
 
11894
  if (isNaN(percentage)) {
11895
  percentage = _mailpoet2['default'].I18n.t('noSubscribers');
11896
  } else {
11897
- progressBarWidth = percentage;
11898
  percentage += '%';
11899
  }
11900
 
@@ -11906,7 +11896,7 @@ webpackJsonp([0],{
11906
  { className: progressClasses },
11907
  _react2['default'].createElement('span', {
11908
  className: 'mailpoet_progress_bar',
11909
- style: { width: progressBarWidth + '%' }
11910
  }),
11911
  _react2['default'].createElement(
11912
  'span',
@@ -11928,8 +11918,8 @@ webpackJsonp([0],{
11928
  };
11929
 
11930
  var StatisticsMixin = {
11931
- renderStatistics: function renderStatistics(newsletter, isSent, currentTime) {
11932
- var sent = isSent;
11933
  if (sent === undefined) {
11934
  // condition for standard and post notification listings
11935
  sent = newsletter.statistics && newsletter.queue && newsletter.queue.status !== 'scheduled';
@@ -11947,50 +11937,50 @@ webpackJsonp([0],{
11947
  params = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listing_stats_before', params, newsletter);
11948
 
11949
  // welcome emails provide explicit total_sent value
11950
- var totalSent = Number(newsletter.total_sent || newsletter.queue.count_processed);
11951
 
11952
- var percentageClicked = 0;
11953
- var percentageOpened = 0;
11954
- var percentageUnsubscribed = 0;
11955
 
11956
- if (totalSent > 0) {
11957
- percentageClicked = newsletter.statistics.clicked * 100 / totalSent;
11958
- percentageOpened = newsletter.statistics.opened * 100 / totalSent;
11959
- percentageUnsubscribed = newsletter.statistics.unsubscribed * 100 / totalSent;
11960
  }
11961
 
11962
  // format to 1 decimal place
11963
- var percentageClickedDisplay = _mailpoet2['default'].Num.toLocaleFixed(percentageClicked, 1);
11964
- var percentageOpenedDisplay = _mailpoet2['default'].Num.toLocaleFixed(percentageOpened, 1);
11965
- var percentageUnsubscribedDisplay = _mailpoet2['default'].Num.toLocaleFixed(percentageUnsubscribed, 1);
11966
-
11967
- var showStatsTimeout = undefined;
11968
- var newsletterDate = undefined;
11969
- var sentHoursAgo = undefined;
11970
- var tooEarlyForStats = undefined;
11971
- var showKbLink = undefined;
11972
- if (currentTime !== undefined) {
11973
  // standard emails and post notifications:
11974
  // display green box for newsletters that were just sent
11975
- showStatsTimeout = 6; // in hours
11976
- newsletterDate = newsletter.queue.scheduled_at || newsletter.queue.created_at;
11977
- sentHoursAgo = (0, _moment2['default'])(currentTime).diff((0, _moment2['default'])(newsletterDate), 'hours');
11978
- tooEarlyForStats = sentHoursAgo < showStatsTimeout;
11979
- showKbLink = true;
11980
  } else {
11981
  // welcome emails: no green box and KB link
11982
- tooEarlyForStats = false;
11983
- showKbLink = false;
11984
  }
11985
 
11986
  var improveStatsKBLink = 'http://beta.docs.mailpoet.com/article/191-how-to-improve-my-open-and-click-rates';
11987
 
11988
  // thresholds to display badges
11989
- var minNewslettersSent = 20;
11990
- var minNewsletterOpens = 5;
11991
 
11992
  var content = undefined;
11993
- if (totalSent >= minNewslettersSent && newsletter.statistics.opened >= minNewsletterOpens && !tooEarlyForStats) {
11994
  // display stats with badges
11995
  content = _react2['default'].createElement(
11996
  'div',
@@ -12001,12 +11991,12 @@ webpackJsonp([0],{
12001
  _react2['default'].createElement(
12002
  'span',
12003
  null,
12004
- percentageOpenedDisplay,
12005
  '% '
12006
  ),
12007
  _react2['default'].createElement(_newslettersBadgesStatsJsx2['default'], {
12008
  stat: 'opened',
12009
- rate: percentageOpened,
12010
  tooltipId: 'opened-' + newsletter.id
12011
  })
12012
  ),
@@ -12016,12 +12006,12 @@ webpackJsonp([0],{
12016
  _react2['default'].createElement(
12017
  'span',
12018
  null,
12019
- percentageClickedDisplay,
12020
  '% '
12021
  ),
12022
  _react2['default'].createElement(_newslettersBadgesStatsJsx2['default'], {
12023
  stat: 'clicked',
12024
- rate: percentageClicked,
12025
  tooltipId: 'clicked-' + newsletter.id
12026
  })
12027
  ),
@@ -12031,7 +12021,7 @@ webpackJsonp([0],{
12031
  _react2['default'].createElement(
12032
  'span',
12033
  { className: 'mailpoet_stat_hidden' },
12034
- percentageUnsubscribedDisplay,
12035
  '%'
12036
  )
12037
  )
@@ -12044,36 +12034,36 @@ webpackJsonp([0],{
12044
  _react2['default'].createElement(
12045
  'span',
12046
  { className: 'mailpoet_stats_text' },
12047
- percentageOpenedDisplay,
12048
  '%,',
12049
  ' ',
12050
- percentageClickedDisplay,
12051
  '%',
12052
  _react2['default'].createElement(
12053
  'span',
12054
  { className: 'mailpoet_stat_hidden' },
12055
  ', ',
12056
- percentageUnsubscribedDisplay,
12057
  '%'
12058
  )
12059
  ),
12060
- tooEarlyForStats && _react2['default'].createElement(
12061
  'div',
12062
  { className: 'mailpoet_badge mailpoet_badge_green' },
12063
- _mailpoet2['default'].I18n.t('checkBackInHours').replace('%$1d', showStatsTimeout - sentHoursAgo)
12064
  )
12065
  );
12066
  }
12067
 
12068
  // thresholds to display bad open rate help
12069
- var maxPercentageOpened = 5;
12070
- var minSentHoursAgo = 24;
12071
- var minTotalSent = 10;
12072
 
12073
- var afterContent = undefined;
12074
- if (showKbLink && percentageOpened < maxPercentageOpened && sentHoursAgo >= minSentHoursAgo && totalSent >= minTotalSent) {
12075
  // help link for bad open rate
12076
- afterContent = _react2['default'].createElement(
12077
  'div',
12078
  null,
12079
  _react2['default'].createElement(
@@ -12088,7 +12078,7 @@ webpackJsonp([0],{
12088
  );
12089
  }
12090
 
12091
- if (totalSent > 0 && params.link) {
12092
  // wrap content in a link
12093
  if (params.externalLink) {
12094
  return _react2['default'].createElement(
@@ -12103,7 +12093,7 @@ webpackJsonp([0],{
12103
  },
12104
  content
12105
  ),
12106
- afterContent
12107
  );
12108
  }
12109
  return _react2['default'].createElement(
@@ -12118,7 +12108,7 @@ webpackJsonp([0],{
12118
  },
12119
  content
12120
  ),
12121
- afterContent
12122
  );
12123
  }
12124
 
@@ -12126,7 +12116,7 @@ webpackJsonp([0],{
12126
  'div',
12127
  null,
12128
  content,
12129
- afterContent
12130
  );
12131
  },
12132
  addStatsCTAAction: function addStatsCTAAction(actions) {
@@ -12144,8 +12134,8 @@ webpackJsonp([0],{
12144
  },
12145
  display: function display(newsletter) {
12146
  // welcome emails provide explicit total_sent value
12147
- var countProcessed = newsletter.queue && newsletter.queue.count_processed;
12148
- return Number(newsletter.total_sent || countProcessed) > 0;
12149
  }
12150
  });
12151
  return actions;
@@ -12173,8 +12163,8 @@ webpackJsonp([0],{
12173
  }
12174
  },
12175
  getMailerError: function getMailerError(state) {
12176
- var mailerErrorNotice = undefined;
12177
- var mailerCheckSettingsNotice = (0, _reactStringReplace2['default'])(_mailpoet2['default'].I18n.t('mailerCheckSettingsNotice'), /\[link\](.*?)\[\/link\]/g, function (match) {
12178
  return _react2['default'].createElement(
12179
  'a',
12180
  { href: '?page=mailpoet-settings#mta', key: 'check-sending' },
@@ -12182,12 +12172,12 @@ webpackJsonp([0],{
12182
  );
12183
  });
12184
  if (state.meta.mta_log.error.operation === 'send') {
12185
- mailerErrorNotice = _mailpoet2['default'].I18n.t('mailerSendErrorNotice').replace('%$1s', state.meta.mta_method).replace('%$2s', state.meta.mta_log.error.error_message);
12186
  } else {
12187
- mailerErrorNotice = _mailpoet2['default'].I18n.t('mailerConnectionErrorNotice').replace('%$1s', state.meta.mta_log.error.error_message);
12188
  }
12189
  if (state.meta.mta_log.error.error_code) {
12190
- mailerErrorNotice += ' ' + _mailpoet2['default'].I18n.t('mailerErrorCode').replace('%$1s', state.meta.mta_log.error.error_code);
12191
  }
12192
  return _react2['default'].createElement(
12193
  'div',
@@ -12195,12 +12185,12 @@ webpackJsonp([0],{
12195
  _react2['default'].createElement(
12196
  'p',
12197
  null,
12198
- mailerErrorNotice
12199
  ),
12200
  _react2['default'].createElement(
12201
  'p',
12202
  null,
12203
- mailerCheckSettingsNotice
12204
  ),
12205
  _react2['default'].createElement(
12206
  'p',
@@ -12280,13 +12270,13 @@ webpackJsonp([0],{
12280
 
12281
  var _wpJsHooks2 = _interopRequireDefault(_wpJsHooks);
12282
 
12283
- var mailpoetRoles = window.mailpoetRoles || {};
12284
- var mailpoetSegments = window.mailpoetSegments || {};
12285
- var mailpoetTrackingEnabled = !!window.mailpoetTrackingEnabled;
12286
 
12287
  var messages = {
12288
  onTrash: function onTrash(response) {
12289
- var count = Number(response.meta.count);
12290
  var message = null;
12291
 
12292
  if (count === 1) {
@@ -12297,7 +12287,7 @@ webpackJsonp([0],{
12297
  _mailpoet2['default'].Notice.success(message);
12298
  },
12299
  onDelete: function onDelete(response) {
12300
- var count = Number(response.meta.count);
12301
  var message = null;
12302
 
12303
  if (count === 1) {
@@ -12308,7 +12298,7 @@ webpackJsonp([0],{
12308
  _mailpoet2['default'].Notice.success(message);
12309
  },
12310
  onRestore: function onRestore(response) {
12311
- var count = Number(response.meta.count);
12312
  var message = null;
12313
 
12314
  if (count === 1) {
@@ -12334,20 +12324,20 @@ webpackJsonp([0],{
12334
  }, {
12335
  name: 'statistics',
12336
  label: _mailpoet2['default'].I18n.t('statistics'),
12337
- display: mailpoetTrackingEnabled
12338
  }, {
12339
  name: 'updated_at',
12340
  label: _mailpoet2['default'].I18n.t('lastModifiedOn'),
12341
  sortable: true
12342
  }];
12343
 
12344
- var bulkActions = [{
12345
  name: 'trash',
12346
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
12347
  onSuccess: messages.onTrash
12348
  }];
12349
 
12350
- var newsletterActions = [{
12351
  name: 'view',
12352
  link: function link(newsletter) {
12353
  return _react2['default'].createElement(
@@ -12370,7 +12360,7 @@ webpackJsonp([0],{
12370
  }];
12371
 
12372
  _wpJsHooks2['default'].addFilter('mailpoet_newsletters_listings_welcome_notification_actions', _newslettersListingsMixinsJsx.StatisticsMixin.addStatsCTAAction);
12373
- newsletterActions = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listings_welcome_notification_actions', newsletterActions);
12374
 
12375
  var NewsletterListWelcome = _react2['default'].createClass({
12376
  displayName: 'NewsletterListWelcome',
@@ -12388,7 +12378,7 @@ webpackJsonp([0],{
12388
  endpoint: 'newsletters',
12389
  action: 'setStatus',
12390
  data: {
12391
- id: Number(e.target.getAttribute('data-id')),
12392
  status: e.target.value
12393
  }
12394
  }).done(function (response) {
@@ -12405,7 +12395,7 @@ webpackJsonp([0],{
12405
  });
12406
  },
12407
  renderStatus: function renderStatus(newsletter) {
12408
- var totalSent = _mailpoet2['default'].I18n.t('sentToXSubscribers').replace('%$1d', newsletter.total_sent.toLocaleString());
12409
 
12410
  return _react2['default'].createElement(
12411
  'div',
@@ -12435,7 +12425,7 @@ webpackJsonp([0],{
12435
  _react2['default'].createElement(
12436
  'p',
12437
  null,
12438
- totalSent
12439
  )
12440
  );
12441
  },
@@ -12451,14 +12441,14 @@ webpackJsonp([0],{
12451
  if (newsletter.options.role === 'mailpoet_all') {
12452
  sendingEvent = _mailpoet2['default'].I18n.t('welcomeEventWPUserAnyRole');
12453
  } else {
12454
- sendingEvent = _mailpoet2['default'].I18n.t('welcomeEventWPUserWithRole').replace('%$1s', mailpoetRoles[newsletter.options.role]);
12455
  }
12456
  break;
12457
 
12458
- default:
12459
  // get segment
12460
- segment = _underscore2['default'].find(mailpoetSegments, function (seg) {
12461
- return Number(seg.id) === Number(newsletter.options.segment);
12462
  });
12463
 
12464
  if (segment === undefined) {
@@ -12488,10 +12478,6 @@ webpackJsonp([0],{
12488
  case 'weeks':
12489
  sendingDelay = _mailpoet2['default'].I18n.t('sendingDelayWeeks').replace('%$1d', newsletter.options.afterTimeNumber);
12490
  break;
12491
-
12492
- default:
12493
- sendingDelay = 'Invalid sending delay';
12494
- break;
12495
  }
12496
  sendingEvent += ' [' + sendingDelay + ']';
12497
  }
@@ -12538,7 +12524,7 @@ webpackJsonp([0],{
12538
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('settings') },
12539
  this.renderSettings(newsletter)
12540
  ),
12541
- mailpoetTrackingEnabled === true ? _react2['default'].createElement(
12542
  'td',
12543
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('statistics') },
12544
  this.renderStatistics(newsletter, newsletter.total_sent > 0 && newsletter.statistics)
@@ -12579,8 +12565,8 @@ webpackJsonp([0],{
12579
  base_url: 'welcome',
12580
  onRenderItem: this.renderItem,
12581
  columns: columns,
12582
- bulk_actions: bulkActions,
12583
- item_actions: newsletterActions,
12584
  messages: messages,
12585
  auto_refresh: true,
12586
  sort_by: 'updated_at',
@@ -12630,7 +12616,7 @@ webpackJsonp([0],{
12630
 
12631
  var messages = {
12632
  onTrash: function onTrash(response) {
12633
- var count = Number(response.meta.count);
12634
  var message = null;
12635
 
12636
  if (count === 1) {
@@ -12641,7 +12627,7 @@ webpackJsonp([0],{
12641
  _mailpoet2['default'].Notice.success(message);
12642
  },
12643
  onDelete: function onDelete(response) {
12644
- var count = Number(response.meta.count);
12645
  var message = null;
12646
 
12647
  if (count === 1) {
@@ -12652,7 +12638,7 @@ webpackJsonp([0],{
12652
  _mailpoet2['default'].Notice.success(message);
12653
  },
12654
  onRestore: function onRestore(response) {
12655
- var count = Number(response.meta.count);
12656
  var message = null;
12657
 
12658
  if (count === 1) {
@@ -12685,13 +12671,13 @@ webpackJsonp([0],{
12685
  sortable: true
12686
  }];
12687
 
12688
- var bulkActions = [{
12689
  name: 'trash',
12690
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
12691
  onSuccess: messages.onTrash
12692
  }];
12693
 
12694
- var newsletterActions = [{
12695
  name: 'view',
12696
  link: function link(newsletter) {
12697
  return _react2['default'].createElement(
@@ -12751,7 +12737,7 @@ webpackJsonp([0],{
12751
  endpoint: 'newsletters',
12752
  action: 'setStatus',
12753
  data: {
12754
- id: Number(e.target.getAttribute('data-id')),
12755
  status: e.target.value
12756
  }
12757
  }).done(function (response) {
@@ -12826,10 +12812,6 @@ webpackJsonp([0],{
12826
  case 'immediately':
12827
  sendingFrequency = _mailpoet2['default'].I18n.t('sendImmediately');
12828
  break;
12829
-
12830
- default:
12831
- sendingFrequency = 'Invalid sending frequency';
12832
- break;
12833
  }
12834
 
12835
  return _react2['default'].createElement(
@@ -12841,7 +12823,7 @@ webpackJsonp([0],{
12841
  );
12842
  },
12843
  renderHistoryLink: function renderHistoryLink(newsletter) {
12844
- var childrenCount = Number(newsletter.children_count);
12845
  if (childrenCount === 0) {
12846
  return _mailpoet2['default'].I18n.t('notSentYet');
12847
  }
@@ -12927,8 +12909,8 @@ webpackJsonp([0],{
12927
  base_url: 'notification',
12928
  onRenderItem: this.renderItem,
12929
  columns: columns,
12930
- bulk_actions: bulkActions,
12931
- item_actions: newsletterActions,
12932
  messages: messages,
12933
  auto_refresh: true,
12934
  sort_by: 'updated_at',
@@ -12978,7 +12960,7 @@ webpackJsonp([0],{
12978
 
12979
  var _newslettersListingsMixinsJsx = __webpack_require__(530);
12980
 
12981
- var mailpoetTrackingEnabled = !!window.mailpoetTrackingEnabled;
12982
 
12983
  var columns = [{
12984
  name: 'subject',
@@ -12992,13 +12974,13 @@ webpackJsonp([0],{
12992
  }, {
12993
  name: 'statistics',
12994
  label: _mailpoet2['default'].I18n.t('statistics'),
12995
- display: mailpoetTrackingEnabled
12996
  }, {
12997
  name: 'sent_at',
12998
  label: _mailpoet2['default'].I18n.t('sentOn')
12999
  }];
13000
 
13001
- var newsletterActions = [{
13002
  name: 'view',
13003
  link: function link(newsletter) {
13004
  return _react2['default'].createElement(
@@ -13010,7 +12992,7 @@ webpackJsonp([0],{
13010
  }];
13011
 
13012
  _wpJsHooks2['default'].addFilter('mailpoet_newsletters_listings_notification_history_actions', _newslettersListingsMixinsJsx.StatisticsMixin.addStatsCTAAction);
13013
- newsletterActions = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listings_notification_history_actions', newsletterActions);
13014
 
13015
  var NewsletterListNotificationHistory = _react2['default'].createClass({
13016
  displayName: 'NewsletterListNotificationHistory',
@@ -13053,7 +13035,7 @@ webpackJsonp([0],{
13053
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('lists') },
13054
  segments
13055
  ),
13056
- mailpoetTrackingEnabled === true ? _react2['default'].createElement(
13057
  'td',
13058
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('statistics') },
13059
  this.renderStatistics(newsletter, undefined, meta.current_time)
@@ -13098,7 +13080,7 @@ webpackJsonp([0],{
13098
  base_url: 'notification/history/:parent_id',
13099
  onRenderItem: this.renderItem,
13100
  columns: columns,
13101
- item_actions: newsletterActions,
13102
  auto_refresh: true,
13103
  sort_by: 'sent_at',
13104
  sort_order: 'desc',
@@ -13220,7 +13202,7 @@ webpackJsonp([0],{
13220
 
13221
  var messages = {
13222
  onTrash: function onTrash(response) {
13223
- var count = Number(response.meta.count);
13224
  var message = null;
13225
 
13226
  if (count === 1) {
@@ -13231,7 +13213,7 @@ webpackJsonp([0],{
13231
  _mailpoet2['default'].Notice.success(message);
13232
  },
13233
  onDelete: function onDelete(response) {
13234
- var count = Number(response.meta.count);
13235
  var message = null;
13236
 
13237
  if (count === 1) {
@@ -13242,7 +13224,7 @@ webpackJsonp([0],{
13242
  _mailpoet2['default'].Notice.success(message);
13243
  },
13244
  onRestore: function onRestore(response) {
13245
- var count = Number(response.meta.count);
13246
  var message = null;
13247
 
13248
  if (count === 1) {
@@ -13254,13 +13236,13 @@ webpackJsonp([0],{
13254
  }
13255
  };
13256
 
13257
- var bulkActions = [{
13258
  name: 'trash',
13259
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
13260
  onSuccess: messages.onTrash
13261
  }];
13262
 
13263
- var itemActions = [{
13264
  name: 'edit',
13265
  link: function link(item) {
13266
  return _react2['default'].createElement(
@@ -13357,22 +13339,22 @@ webpackJsonp([0],{
13357
  renderItem: function renderItem(segment, actions) {
13358
  var rowClasses = (0, _classnames2['default'])('manage-column', 'column-primary', 'has-row-actions');
13359
 
13360
- var subscribed = Number(segment.subscribers_count.subscribed || 0);
13361
- var unconfirmed = Number(segment.subscribers_count.unconfirmed || 0);
13362
- var unsubscribed = Number(segment.subscribers_count.unsubscribed || 0);
13363
- var bounced = Number(segment.subscribers_count.bounced || 0);
13364
 
13365
- var segmentName = undefined;
13366
 
13367
  if (segment.type === 'wp_users') {
13368
  // the WP users segment is not editable so just display its name
13369
- segmentName = _react2['default'].createElement(
13370
  'span',
13371
  { className: 'row-title' },
13372
  segment.name
13373
  );
13374
  } else {
13375
- segmentName = _react2['default'].createElement(
13376
  _reactRouter.Link,
13377
  {
13378
  className: 'row-title',
@@ -13391,7 +13373,7 @@ webpackJsonp([0],{
13391
  _react2['default'].createElement(
13392
  'strong',
13393
  null,
13394
- segmentName
13395
  ),
13396
  actions
13397
  ),
@@ -13475,8 +13457,8 @@ webpackJsonp([0],{
13475
  endpoint: 'segments',
13476
  onRenderItem: this.renderItem,
13477
  columns: columns,
13478
- bulk_actions: bulkActions,
13479
- item_actions: itemActions,
13480
  sort_by: 'name',
13481
  sort_order: 'asc'
13482
  })
@@ -13657,7 +13639,7 @@ webpackJsonp([0],{
13657
 
13658
  var messages = {
13659
  onTrash: function onTrash(response) {
13660
- var count = Number(response.meta.count);
13661
  var message = null;
13662
 
13663
  if (count === 1) {
@@ -13668,7 +13650,7 @@ webpackJsonp([0],{
13668
  _mailpoet2['default'].Notice.success(message);
13669
  },
13670
  onDelete: function onDelete(response) {
13671
- var count = Number(response.meta.count);
13672
  var message = null;
13673
 
13674
  if (count === 1) {
@@ -13679,7 +13661,7 @@ webpackJsonp([0],{
13679
  _mailpoet2['default'].Notice.success(message);
13680
  },
13681
  onRestore: function onRestore(response) {
13682
- var count = Number(response.meta.count);
13683
  var message = null;
13684
 
13685
  if (count === 1) {
@@ -13691,13 +13673,13 @@ webpackJsonp([0],{
13691
  }
13692
  };
13693
 
13694
- var bulkActions = [{
13695
  name: 'trash',
13696
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
13697
  onSuccess: messages.onTrash
13698
  }];
13699
 
13700
- var itemActions = [{
13701
  name: 'edit',
13702
  label: _mailpoet2['default'].I18n.t('edit'),
13703
  link: function link(item) {
@@ -13752,7 +13734,7 @@ webpackJsonp([0],{
13752
  });
13753
  },
13754
  renderItem: function renderItem(form, actions) {
13755
- var rowClasses = (0, _classnames2['default'])('manage-column', 'column-primary', 'has-row-actions');
13756
 
13757
  var segments = window.mailpoet_segments.filter(function (segment) {
13758
  return _jquery2['default'].inArray(segment.id, form.segments) !== -1;
@@ -13769,7 +13751,7 @@ webpackJsonp([0],{
13769
  null,
13770
  _react2['default'].createElement(
13771
  'td',
13772
- { className: rowClasses },
13773
  _react2['default'].createElement(
13774
  'strong',
13775
  null,
@@ -13833,8 +13815,8 @@ webpackJsonp([0],{
13833
  endpoint: 'forms',
13834
  onRenderItem: this.renderItem,
13835
  columns: columns,
13836
- bulk_actions: bulkActions,
13837
- item_actions: itemActions
13838
  })
13839
  );
13840
  }
@@ -16008,7 +15990,7 @@ webpackJsonp([0],{
16008
  }
16009
 
16010
  function renderMSSSection(data) {
16011
- if (!data.mss.enabled) return undefined;
16012
 
16013
  var status = data.mss.enabled.isReachable;
16014
 
92
 
93
  var messages = {
94
  onTrash: function onTrash(response) {
95
+ var count = ~ ~response.meta.count;
96
  var message = null;
97
 
98
  if (count === 1) {
103
  _mailpoet2['default'].Notice.success(message);
104
  },
105
  onDelete: function onDelete(response) {
106
+ var count = ~ ~response.meta.count;
107
  var message = null;
108
 
109
  if (count === 1) {
114
  _mailpoet2['default'].Notice.success(message);
115
  },
116
  onRestore: function onRestore(response) {
117
+ var count = ~ ~response.meta.count;
118
  var message = null;
119
 
120
  if (count === 1) {
150
  }
151
  };
152
 
153
+ var bulk_actions = [{
154
  name: 'moveToList',
155
  label: _mailpoet2['default'].I18n.t('moveToList'),
156
  onSelect: function onSelect() {
167
  },
168
  getData: function getData() {
169
  return {
170
+ segment_id: ~ ~(0, _jquery2['default'])('#move_to_segment').val()
171
  };
172
  },
173
  onSuccess: function onSuccess(response) {
174
+ _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersMovedToList').replace('%$1d', (~ ~response.meta.count).toLocaleString()).replace('%$2s', response.meta.segment));
175
  }
176
  }, {
177
  name: 'addToList',
190
  },
191
  getData: function getData() {
192
  return {
193
+ segment_id: ~ ~(0, _jquery2['default'])('#add_to_segment').val()
194
  };
195
  },
196
  onSuccess: function onSuccess(response) {
197
+ _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersAddedToList').replace('%$1d', (~ ~response.meta.count).toLocaleString()).replace('%$2s', response.meta.segment));
198
  }
199
  }, {
200
  name: 'removeFromList',
213
  },
214
  getData: function getData() {
215
  return {
216
+ segment_id: ~ ~(0, _jquery2['default'])('#remove_from_segment').val()
217
  };
218
  },
219
  onSuccess: function onSuccess(response) {
220
+ _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersRemovedFromList').replace('%$1d', (~ ~response.meta.count).toLocaleString()).replace('%$2s', response.meta.segment));
221
  }
222
  }, {
223
  name: 'removeFromAllLists',
224
  label: _mailpoet2['default'].I18n.t('removeFromAllLists'),
225
  onSuccess: function onSuccess(response) {
226
+ _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleSubscribersRemovedFromAllLists').replace('%$1d', (~ ~response.meta.count).toLocaleString()));
227
  }
228
  }, {
229
  name: 'sendConfirmationEmail',
230
  label: _mailpoet2['default'].I18n.t('resendConfirmationEmail'),
231
  onSuccess: function onSuccess(response) {
232
+ _mailpoet2['default'].Notice.success(_mailpoet2['default'].I18n.t('multipleConfirmationEmailsSent').replace('%$1d', (~ ~response.meta.count).toLocaleString()));
233
  }
234
  }, {
235
  name: 'trash',
237
  onSuccess: messages.onTrash
238
  }];
239
 
240
+ var item_actions = [{
241
  name: 'edit',
242
  label: _mailpoet2['default'].I18n.t('edit'),
243
  link: function link(subscriber) {
250
  }, {
251
  name: 'trash',
252
  display: function display(subscriber) {
253
+ return !!(~ ~subscriber.wp_user_id === 0);
254
  }
255
  }];
256
 
257
  var SubscriberList = _react2['default'].createClass({
258
  displayName: 'SubscriberList',
259
 
260
+ getSegmentFromId: function getSegmentFromId(segment_id) {
261
  var result = false;
262
+ window.mailpoet_segments.map(function (segment) {
263
+ if (segment.id === segment_id) {
264
  result = segment;
265
  }
266
  });
269
  renderItem: function renderItem(subscriber, actions) {
270
  var _this = this;
271
 
272
+ var row_classes = (0, _classnames2['default'])('manage-column', 'column-primary', 'has-row-actions', 'column-username');
273
 
274
  var status = '';
275
 
289
  case 'bounced':
290
  status = _mailpoet2['default'].I18n.t('bounced');
291
  break;
 
 
 
 
292
  }
293
 
294
  var segments = false;
296
  // Subscriptions
297
  if (subscriber.subscriptions.length > 0) {
298
  (function () {
299
+ var subscribed_segments = [];
300
 
301
+ subscriber.subscriptions.map(function (subscription) {
302
  var segment = _this.getSegmentFromId(subscription.segment_id);
303
  if (segment === false) return;
304
  if (subscription.status === 'subscribed') {
305
+ subscribed_segments.push(segment.name);
306
  }
307
  });
308
 
309
  segments = _react2['default'].createElement(
310
  'span',
311
  null,
312
+ subscribed_segments.join(', ')
313
  );
314
  })();
315
  }
319
  null,
320
  _react2['default'].createElement(
321
  'td',
322
+ { className: row_classes },
323
  _react2['default'].createElement(
324
  'strong',
325
  null,
413
  endpoint: 'subscribers',
414
  onRenderItem: this.renderItem,
415
  columns: columns,
416
+ bulk_actions: bulk_actions,
417
+ item_actions: item_actions,
418
  messages: messages,
419
  sort_by: 'created_at',
420
  sort_order: 'desc'
449
  label: MailPoet.I18n.t('email'),
450
  type: 'text',
451
  disabled: function disabled(subscriber) {
452
+ return ~ ~(subscriber.wp_user_id > 0);
453
  }
454
  }, {
455
  name: 'first_name',
456
  label: MailPoet.I18n.t('firstname'),
457
  type: 'text',
458
  disabled: function disabled(subscriber) {
459
+ return ~ ~(subscriber.wp_user_id > 0);
460
  }
461
  }, {
462
  name: 'last_name',
463
  label: MailPoet.I18n.t('lastname'),
464
  type: 'text',
465
  disabled: function disabled(subscriber) {
466
+ return ~ ~(subscriber.wp_user_id > 0);
467
  }
468
  }, {
469
  name: 'status',
476
  bounced: MailPoet.I18n.t('bounced')
477
  },
478
  filter: function filter(subscriber, value) {
479
+ if (~ ~subscriber.wp_user_id > 0 && value === 'unconfirmed') {
480
  return false;
481
  }
482
  return true;
494
  return null;
495
  }
496
 
497
+ return subscriber.subscriptions.map(function (subscription) {
498
+ if (subscription.status === 'subscribed') {
499
+ return subscription.segment_id;
500
+ }
501
  });
502
  },
503
  filter: function filter(segment) {
504
+ return !!(!segment.deleted_at && segment.type === 'default');
505
  },
506
  getLabel: function getLabel(segment) {
507
  return segment.name + ' (' + segment.subscribers + ')';
510
  var label = '';
511
 
512
  if (subscriber.subscriptions !== undefined) {
513
+ subscriber.subscriptions.map(function (subscription) {
514
  if (segment.id === subscription.segment_id) {
515
  label = segment.name;
516
 
517
  if (subscription.status === 'unsubscribed') {
518
+ var unsubscribed_at = MailPoet.Date.format(subscription.updated_at);
519
+ label += ' (%$1s)'.replace('%$1s', MailPoet.I18n.t('unsubscribedOn').replace('%$1s', unsubscribed_at));
520
  }
521
  }
522
  });
525
  }
526
  }];
527
 
528
+ var custom_fields = window.mailpoet_custom_fields || [];
529
+ custom_fields.map(function (custom_field) {
530
  var field = {
531
+ name: 'cf_' + custom_field.id,
532
+ label: custom_field.name,
533
+ type: custom_field.type
534
  };
535
+ if (custom_field.params) {
536
+ field.params = custom_field.params;
537
  }
538
 
539
+ if (custom_field.params.values) {
540
+ field.values = custom_field.params.values;
541
  }
542
 
543
  // add placeholders for selects (date, select)
544
+ switch (custom_field.type) {
545
  case 'date':
546
  field.year_placeholder = MailPoet.I18n.t('year');
547
  field.month_placeholder = MailPoet.I18n.t('month');
551
  case 'select':
552
  field.placeholder = '-';
553
  break;
 
 
 
 
554
  }
555
 
556
  fields.push(field);
569
  };
570
 
571
  var beforeFormContent = function beforeFormContent(subscriber) {
572
+ if (~ ~subscriber.wp_user_id > 0) {
573
  return React.createElement(
574
  'p',
575
  { className: 'description' },
585
  })
586
  );
587
  }
 
588
  };
589
 
590
  var afterFormContent = function afterFormContent() {
709
  var container = document.getElementById('newsletters_container');
710
 
711
  if (container) {
712
+ var extra_routes = [];
713
+ extra_routes = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_before_router', extra_routes);
714
 
715
+ var mailpoet_listing = _reactDom2['default'].render(_react2['default'].createElement(
716
  _reactRouter.Router,
717
  { history: history },
718
  _react2['default'].createElement(
729
  _react2['default'].createElement(_reactRouter.Route, { path: 'new/notification', component: _newslettersTypesNotificationNotificationJsx2['default'] }),
730
  _react2['default'].createElement(_reactRouter.Route, { name: 'template', path: 'template/:id', component: _newslettersTemplatesJsx2['default'] }),
731
  _react2['default'].createElement(_reactRouter.Route, { path: 'send/:id', component: _newslettersSendJsx2['default'] }),
732
+ extra_routes.map(function (rt) {
733
  return _react2['default'].createElement(_reactRouter.Route, { key: rt.path, path: rt.path, component: rt.component });
734
  })
735
  )
736
  ), container);
737
 
738
+ window.mailpoet_listing = mailpoet_listing;
739
  }
740
  /* Listings */ /* Newsletter: type selection */ /* New newsletter: types */ /* Template selection */ /* Sending options */ /* Extra routes */
741
 
971
  };
972
 
973
  reader.readAsText(file);
 
974
  },
975
  render: function render() {
976
  return _react2['default'].createElement(
10466
  return true;
10467
  },
10468
  render: function render() {
10469
+ var isPaused = this.state.item.status == 'sending' && this.state.item.queue && this.state.item.queue.status == 'paused';
10470
  var fields = this.state.fields.map(function (field) {
10471
  var newField = field;
10472
+ if (field.name == 'segments' || field.name == 'options') {
10473
  newField.disabled = isPaused;
10474
  }
10475
  return newField;
10574
  getLabel: function getLabel(segment) {
10575
  return segment.name + ' (' + parseInt(segment.subscribers, 10).toLocaleString() + ')';
10576
  },
10577
+ transformChangedValue: function transformChangedValue(segment_ids) {
10578
+ var all_segments = this.state.items;
10579
+ return _.map(segment_ids, function (id) {
10580
+ return _.find(all_segments, function (segment) {
10581
  return segment.id === id;
10582
  });
10583
  });
10946
  },
10947
  propagateChange: function propagateChange() {
10948
  if (this.props.onChange) {
10949
+ return this.props.onChange({
10950
  target: {
10951
  name: this.props.name || '',
10952
  value: this.getDateTime()
11083
  getLabel: function getLabel(segment) {
11084
  return segment.name + ' (' + parseInt(segment.subscribers, 10).toLocaleString() + ')';
11085
  },
11086
+ transformChangedValue: function transformChangedValue(segment_ids) {
11087
+ var all_segments = this.state.items;
11088
+ return _.map(segment_ids, function (id) {
11089
+ return _.find(all_segments, function (segment) {
11090
  return segment.id === id;
11091
  });
11092
  });
11420
 
11421
  var _newslettersListingsMixinsJsx = __webpack_require__(530);
11422
 
11423
+ var mailpoet_tracking_enabled = !!window.mailpoet_tracking_enabled;
11424
 
11425
  var messages = {
11426
  onTrash: function onTrash(response) {
11427
+ var count = ~ ~response.meta.count;
11428
  var message = null;
11429
 
11430
  if (count === 1) {
11435
  _mailpoet2['default'].Notice.success(message);
11436
  },
11437
  onDelete: function onDelete(response) {
11438
+ var count = ~ ~response.meta.count;
11439
  var message = null;
11440
 
11441
  if (count === 1) {
11446
  _mailpoet2['default'].Notice.success(message);
11447
  },
11448
  onRestore: function onRestore(response) {
11449
+ var count = ~ ~response.meta.count;
11450
  var message = null;
11451
 
11452
  if (count === 1) {
11471
  }, {
11472
  name: 'statistics',
11473
  label: _mailpoet2['default'].I18n.t('statistics'),
11474
+ display: mailpoet_tracking_enabled
11475
  }, {
11476
  name: 'sent_at',
11477
  label: _mailpoet2['default'].I18n.t('sentOn'),
11478
  sortable: true
11479
  }];
11480
 
11481
+ var bulk_actions = [{
11482
  name: 'trash',
11483
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
11484
  onSuccess: messages.onTrash
11488
  var redirectToEditing = function redirectToEditing() {
11489
  window.location.href = '?page=mailpoet-newsletter-editor&id=' + newsletter.id;
11490
  };
11491
+ if (!newsletter.queue || newsletter.status != 'sending' || newsletter.queue.status !== null) {
11492
  redirectToEditing();
11493
  } else {
11494
  (0, _reactConfirmAlert.confirmAlert)({
11501
  }
11502
  };
11503
 
11504
+ var newsletter_actions = [{
11505
  name: 'view',
11506
  link: function link(newsletter) {
11507
  return _react2['default'].createElement(
11541
  }];
11542
 
11543
  _wpJsHooks2['default'].addFilter('mailpoet_newsletters_listings_standard_actions', _newslettersListingsMixinsJsx.StatisticsMixin.addStatsCTAAction);
11544
+ newsletter_actions = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listings_standard_actions', newsletter_actions);
11545
 
11546
  var NewsletterListStandard = _react2['default'].createClass({
11547
  displayName: 'NewsletterListStandard',
11587
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('lists') },
11588
  segments
11589
  ),
11590
+ mailpoet_tracking_enabled === true ? _react2['default'].createElement(
11591
  'td',
11592
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('statistics') },
11593
  this.renderStatistics(newsletter, undefined, meta.current_time)
11632
  base_url: 'standard',
11633
  onRenderItem: this.renderItem,
11634
  columns: columns,
11635
+ bulk_actions: bulk_actions,
11636
+ item_actions: newsletter_actions,
11637
  messages: messages,
11638
  auto_refresh: true,
11639
  sort_by: 'sent_at',
11810
  }
11811
  });
11812
  },
11813
+ renderQueueStatus: function renderQueueStatus(newsletter, mailer_log) {
11814
  if (!newsletter.queue) {
11815
  return _react2['default'].createElement(
11816
  'span',
11817
  null,
11818
  _mailpoet2['default'].I18n.t('notSentYet')
11819
  );
11820
+ } else if (mailer_log.status === 'paused' && newsletter.queue.status !== 'completed') {
11821
  return _react2['default'].createElement(
11822
  'span',
11823
  null,
11879
  );
11880
  }
11881
 
11882
+ var progress_bar_width = 0;
11883
 
11884
  if (isNaN(percentage)) {
11885
  percentage = _mailpoet2['default'].I18n.t('noSubscribers');
11886
  } else {
11887
+ progress_bar_width = percentage;
11888
  percentage += '%';
11889
  }
11890
 
11896
  { className: progressClasses },
11897
  _react2['default'].createElement('span', {
11898
  className: 'mailpoet_progress_bar',
11899
+ style: { width: progress_bar_width + '%' }
11900
  }),
11901
  _react2['default'].createElement(
11902
  'span',
11918
  };
11919
 
11920
  var StatisticsMixin = {
11921
+ renderStatistics: function renderStatistics(newsletter, is_sent, current_time) {
11922
+ var sent = is_sent;
11923
  if (sent === undefined) {
11924
  // condition for standard and post notification listings
11925
  sent = newsletter.statistics && newsletter.queue && newsletter.queue.status !== 'scheduled';
11937
  params = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listing_stats_before', params, newsletter);
11938
 
11939
  // welcome emails provide explicit total_sent value
11940
+ var total_sent = ~ ~(newsletter.total_sent || newsletter.queue.count_processed);
11941
 
11942
+ var percentage_clicked = 0;
11943
+ var percentage_opened = 0;
11944
+ var percentage_unsubscribed = 0;
11945
 
11946
+ if (total_sent > 0) {
11947
+ percentage_clicked = newsletter.statistics.clicked * 100 / total_sent;
11948
+ percentage_opened = newsletter.statistics.opened * 100 / total_sent;
11949
+ percentage_unsubscribed = newsletter.statistics.unsubscribed * 100 / total_sent;
11950
  }
11951
 
11952
  // format to 1 decimal place
11953
+ var percentage_clicked_display = _mailpoet2['default'].Num.toLocaleFixed(percentage_clicked, 1);
11954
+ var percentage_opened_display = _mailpoet2['default'].Num.toLocaleFixed(percentage_opened, 1);
11955
+ var percentage_unsubscribed_display = _mailpoet2['default'].Num.toLocaleFixed(percentage_unsubscribed, 1);
11956
+
11957
+ var show_stats_timeout = undefined;
11958
+ var newsletter_date = undefined;
11959
+ var sent_hours_ago = undefined;
11960
+ var too_early_for_stats = undefined;
11961
+ var show_kb_link = undefined;
11962
+ if (current_time !== undefined) {
11963
  // standard emails and post notifications:
11964
  // display green box for newsletters that were just sent
11965
+ show_stats_timeout = 6; // in hours
11966
+ newsletter_date = newsletter.queue.scheduled_at || newsletter.queue.created_at;
11967
+ sent_hours_ago = (0, _moment2['default'])(current_time).diff((0, _moment2['default'])(newsletter_date), 'hours');
11968
+ too_early_for_stats = sent_hours_ago < show_stats_timeout;
11969
+ show_kb_link = true;
11970
  } else {
11971
  // welcome emails: no green box and KB link
11972
+ too_early_for_stats = false;
11973
+ show_kb_link = false;
11974
  }
11975
 
11976
  var improveStatsKBLink = 'http://beta.docs.mailpoet.com/article/191-how-to-improve-my-open-and-click-rates';
11977
 
11978
  // thresholds to display badges
11979
+ var min_newsletters_sent = 20;
11980
+ var min_newsletter_opens = 5;
11981
 
11982
  var content = undefined;
11983
+ if (total_sent >= min_newsletters_sent && newsletter.statistics.opened >= min_newsletter_opens && !too_early_for_stats) {
11984
  // display stats with badges
11985
  content = _react2['default'].createElement(
11986
  'div',
11991
  _react2['default'].createElement(
11992
  'span',
11993
  null,
11994
+ percentage_opened_display,
11995
  '% '
11996
  ),
11997
  _react2['default'].createElement(_newslettersBadgesStatsJsx2['default'], {
11998
  stat: 'opened',
11999
+ rate: percentage_opened,
12000
  tooltipId: 'opened-' + newsletter.id
12001
  })
12002
  ),
12006
  _react2['default'].createElement(
12007
  'span',
12008
  null,
12009
+ percentage_clicked_display,
12010
  '% '
12011
  ),
12012
  _react2['default'].createElement(_newslettersBadgesStatsJsx2['default'], {
12013
  stat: 'clicked',
12014
+ rate: percentage_clicked,
12015
  tooltipId: 'clicked-' + newsletter.id
12016
  })
12017
  ),
12021
  _react2['default'].createElement(
12022
  'span',
12023
  { className: 'mailpoet_stat_hidden' },
12024
+ percentage_unsubscribed_display,
12025
  '%'
12026
  )
12027
  )
12034
  _react2['default'].createElement(
12035
  'span',
12036
  { className: 'mailpoet_stats_text' },
12037
+ percentage_opened_display,
12038
  '%,',
12039
  ' ',
12040
+ percentage_clicked_display,
12041
  '%',
12042
  _react2['default'].createElement(
12043
  'span',
12044
  { className: 'mailpoet_stat_hidden' },
12045
  ', ',
12046
+ percentage_unsubscribed_display,
12047
  '%'
12048
  )
12049
  ),
12050
+ too_early_for_stats && _react2['default'].createElement(
12051
  'div',
12052
  { className: 'mailpoet_badge mailpoet_badge_green' },
12053
+ _mailpoet2['default'].I18n.t('checkBackInHours').replace('%$1d', show_stats_timeout - sent_hours_ago)
12054
  )
12055
  );
12056
  }
12057
 
12058
  // thresholds to display bad open rate help
12059
+ var max_percentage_opened = 5;
12060
+ var min_sent_hours_ago = 24;
12061
+ var min_total_sent = 10;
12062
 
12063
+ var after_content = undefined;
12064
+ if (show_kb_link && percentage_opened < max_percentage_opened && sent_hours_ago >= min_sent_hours_ago && total_sent >= min_total_sent) {
12065
  // help link for bad open rate
12066
+ after_content = _react2['default'].createElement(
12067
  'div',
12068
  null,
12069
  _react2['default'].createElement(
12078
  );
12079
  }
12080
 
12081
+ if (total_sent > 0 && params.link) {
12082
  // wrap content in a link
12083
  if (params.externalLink) {
12084
  return _react2['default'].createElement(
12093
  },
12094
  content
12095
  ),
12096
+ after_content
12097
  );
12098
  }
12099
  return _react2['default'].createElement(
12108
  },
12109
  content
12110
  ),
12111
+ after_content
12112
  );
12113
  }
12114
 
12116
  'div',
12117
  null,
12118
  content,
12119
+ after_content
12120
  );
12121
  },
12122
  addStatsCTAAction: function addStatsCTAAction(actions) {
12134
  },
12135
  display: function display(newsletter) {
12136
  // welcome emails provide explicit total_sent value
12137
+ var count_processed = newsletter.queue && newsletter.queue.count_processed;
12138
+ return ~ ~(newsletter.total_sent || count_processed) > 0;
12139
  }
12140
  });
12141
  return actions;
12163
  }
12164
  },
12165
  getMailerError: function getMailerError(state) {
12166
+ var mailer_error_notice = undefined;
12167
+ var mailer_check_settings_notice = (0, _reactStringReplace2['default'])(_mailpoet2['default'].I18n.t('mailerCheckSettingsNotice'), /\[link\](.*?)\[\/link\]/g, function (match) {
12168
  return _react2['default'].createElement(
12169
  'a',
12170
  { href: '?page=mailpoet-settings#mta', key: 'check-sending' },
12172
  );
12173
  });
12174
  if (state.meta.mta_log.error.operation === 'send') {
12175
+ mailer_error_notice = _mailpoet2['default'].I18n.t('mailerSendErrorNotice').replace('%$1s', state.meta.mta_method).replace('%$2s', state.meta.mta_log.error.error_message);
12176
  } else {
12177
+ mailer_error_notice = _mailpoet2['default'].I18n.t('mailerConnectionErrorNotice').replace('%$1s', state.meta.mta_log.error.error_message);
12178
  }
12179
  if (state.meta.mta_log.error.error_code) {
12180
+ mailer_error_notice += ' ' + _mailpoet2['default'].I18n.t('mailerErrorCode').replace('%$1s', state.meta.mta_log.error.error_code);
12181
  }
12182
  return _react2['default'].createElement(
12183
  'div',
12185
  _react2['default'].createElement(
12186
  'p',
12187
  null,
12188
+ mailer_error_notice
12189
  ),
12190
  _react2['default'].createElement(
12191
  'p',
12192
  null,
12193
+ mailer_check_settings_notice
12194
  ),
12195
  _react2['default'].createElement(
12196
  'p',
12270
 
12271
  var _wpJsHooks2 = _interopRequireDefault(_wpJsHooks);
12272
 
12273
+ var mailpoet_roles = window.mailpoet_roles || {};
12274
+ var mailpoet_segments = window.mailpoet_segments || {};
12275
+ var mailpoet_tracking_enabled = !!window.mailpoet_tracking_enabled;
12276
 
12277
  var messages = {
12278
  onTrash: function onTrash(response) {
12279
+ var count = ~ ~response.meta.count;
12280
  var message = null;
12281
 
12282
  if (count === 1) {
12287
  _mailpoet2['default'].Notice.success(message);
12288
  },
12289
  onDelete: function onDelete(response) {
12290
+ var count = ~ ~response.meta.count;
12291
  var message = null;
12292
 
12293
  if (count === 1) {
12298
  _mailpoet2['default'].Notice.success(message);
12299
  },
12300
  onRestore: function onRestore(response) {
12301
+ var count = ~ ~response.meta.count;
12302
  var message = null;
12303
 
12304
  if (count === 1) {
12324
  }, {
12325
  name: 'statistics',
12326
  label: _mailpoet2['default'].I18n.t('statistics'),
12327
+ display: mailpoet_tracking_enabled
12328
  }, {
12329
  name: 'updated_at',
12330
  label: _mailpoet2['default'].I18n.t('lastModifiedOn'),
12331
  sortable: true
12332
  }];
12333
 
12334
+ var bulk_actions = [{
12335
  name: 'trash',
12336
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
12337
  onSuccess: messages.onTrash
12338
  }];
12339
 
12340
+ var newsletter_actions = [{
12341
  name: 'view',
12342
  link: function link(newsletter) {
12343
  return _react2['default'].createElement(
12360
  }];
12361
 
12362
  _wpJsHooks2['default'].addFilter('mailpoet_newsletters_listings_welcome_notification_actions', _newslettersListingsMixinsJsx.StatisticsMixin.addStatsCTAAction);
12363
+ newsletter_actions = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listings_welcome_notification_actions', newsletter_actions);
12364
 
12365
  var NewsletterListWelcome = _react2['default'].createClass({
12366
  displayName: 'NewsletterListWelcome',
12378
  endpoint: 'newsletters',
12379
  action: 'setStatus',
12380
  data: {
12381
+ id: ~ ~e.target.getAttribute('data-id'),
12382
  status: e.target.value
12383
  }
12384
  }).done(function (response) {
12395
  });
12396
  },
12397
  renderStatus: function renderStatus(newsletter) {
12398
+ var total_sent = _mailpoet2['default'].I18n.t('sentToXSubscribers').replace('%$1d', newsletter.total_sent.toLocaleString());
12399
 
12400
  return _react2['default'].createElement(
12401
  'div',
12425
  _react2['default'].createElement(
12426
  'p',
12427
  null,
12428
+ total_sent
12429
  )
12430
  );
12431
  },
12441
  if (newsletter.options.role === 'mailpoet_all') {
12442
  sendingEvent = _mailpoet2['default'].I18n.t('welcomeEventWPUserAnyRole');
12443
  } else {
12444
+ sendingEvent = _mailpoet2['default'].I18n.t('welcomeEventWPUserWithRole').replace('%$1s', mailpoet_roles[newsletter.options.role]);
12445
  }
12446
  break;
12447
 
12448
+ case 'segment':
12449
  // get segment
12450
+ segment = _underscore2['default'].find(mailpoet_segments, function (seg) {
12451
+ return ~ ~seg.id === ~ ~newsletter.options.segment;
12452
  });
12453
 
12454
  if (segment === undefined) {
12478
  case 'weeks':
12479
  sendingDelay = _mailpoet2['default'].I18n.t('sendingDelayWeeks').replace('%$1d', newsletter.options.afterTimeNumber);
12480
  break;
 
 
 
 
12481
  }
12482
  sendingEvent += ' [' + sendingDelay + ']';
12483
  }
12524
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('settings') },
12525
  this.renderSettings(newsletter)
12526
  ),
12527
+ mailpoet_tracking_enabled === true ? _react2['default'].createElement(
12528
  'td',
12529
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('statistics') },
12530
  this.renderStatistics(newsletter, newsletter.total_sent > 0 && newsletter.statistics)
12565
  base_url: 'welcome',
12566
  onRenderItem: this.renderItem,
12567
  columns: columns,
12568
+ bulk_actions: bulk_actions,
12569
+ item_actions: newsletter_actions,
12570
  messages: messages,
12571
  auto_refresh: true,
12572
  sort_by: 'updated_at',
12616
 
12617
  var messages = {
12618
  onTrash: function onTrash(response) {
12619
+ var count = ~ ~response.meta.count;
12620
  var message = null;
12621
 
12622
  if (count === 1) {
12627
  _mailpoet2['default'].Notice.success(message);
12628
  },
12629
  onDelete: function onDelete(response) {
12630
+ var count = ~ ~response.meta.count;
12631
  var message = null;
12632
 
12633
  if (count === 1) {
12638
  _mailpoet2['default'].Notice.success(message);
12639
  },
12640
  onRestore: function onRestore(response) {
12641
+ var count = ~ ~response.meta.count;
12642
  var message = null;
12643
 
12644
  if (count === 1) {
12671
  sortable: true
12672
  }];
12673
 
12674
+ var bulk_actions = [{
12675
  name: 'trash',
12676
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
12677
  onSuccess: messages.onTrash
12678
  }];
12679
 
12680
+ var newsletter_actions = [{
12681
  name: 'view',
12682
  link: function link(newsletter) {
12683
  return _react2['default'].createElement(
12737
  endpoint: 'newsletters',
12738
  action: 'setStatus',
12739
  data: {
12740
+ id: ~ ~e.target.getAttribute('data-id'),
12741
  status: e.target.value
12742
  }
12743
  }).done(function (response) {
12812
  case 'immediately':
12813
  sendingFrequency = _mailpoet2['default'].I18n.t('sendImmediately');
12814
  break;
 
 
 
 
12815
  }
12816
 
12817
  return _react2['default'].createElement(
12823
  );
12824
  },
12825
  renderHistoryLink: function renderHistoryLink(newsletter) {
12826
+ var childrenCount = ~ ~newsletter.children_count;
12827
  if (childrenCount === 0) {
12828
  return _mailpoet2['default'].I18n.t('notSentYet');
12829
  }
12909
  base_url: 'notification',
12910
  onRenderItem: this.renderItem,
12911
  columns: columns,
12912
+ bulk_actions: bulk_actions,
12913
+ item_actions: newsletter_actions,
12914
  messages: messages,
12915
  auto_refresh: true,
12916
  sort_by: 'updated_at',
12960
 
12961
  var _newslettersListingsMixinsJsx = __webpack_require__(530);
12962
 
12963
+ var mailpoet_tracking_enabled = !!window.mailpoet_tracking_enabled;
12964
 
12965
  var columns = [{
12966
  name: 'subject',
12974
  }, {
12975
  name: 'statistics',
12976
  label: _mailpoet2['default'].I18n.t('statistics'),
12977
+ display: mailpoet_tracking_enabled
12978
  }, {
12979
  name: 'sent_at',
12980
  label: _mailpoet2['default'].I18n.t('sentOn')
12981
  }];
12982
 
12983
+ var newsletter_actions = [{
12984
  name: 'view',
12985
  link: function link(newsletter) {
12986
  return _react2['default'].createElement(
12992
  }];
12993
 
12994
  _wpJsHooks2['default'].addFilter('mailpoet_newsletters_listings_notification_history_actions', _newslettersListingsMixinsJsx.StatisticsMixin.addStatsCTAAction);
12995
+ newsletter_actions = _wpJsHooks2['default'].applyFilters('mailpoet_newsletters_listings_notification_history_actions', newsletter_actions);
12996
 
12997
  var NewsletterListNotificationHistory = _react2['default'].createClass({
12998
  displayName: 'NewsletterListNotificationHistory',
13035
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('lists') },
13036
  segments
13037
  ),
13038
+ mailpoet_tracking_enabled === true ? _react2['default'].createElement(
13039
  'td',
13040
  { className: 'column', 'data-colname': _mailpoet2['default'].I18n.t('statistics') },
13041
  this.renderStatistics(newsletter, undefined, meta.current_time)
13080
  base_url: 'notification/history/:parent_id',
13081
  onRenderItem: this.renderItem,
13082
  columns: columns,
13083
+ item_actions: newsletter_actions,
13084
  auto_refresh: true,
13085
  sort_by: 'sent_at',
13086
  sort_order: 'desc',
13202
 
13203
  var messages = {
13204
  onTrash: function onTrash(response) {
13205
+ var count = ~ ~response.meta.count;
13206
  var message = null;
13207
 
13208
  if (count === 1) {
13213
  _mailpoet2['default'].Notice.success(message);
13214
  },
13215
  onDelete: function onDelete(response) {
13216
+ var count = ~ ~response.meta.count;
13217
  var message = null;
13218
 
13219
  if (count === 1) {
13224
  _mailpoet2['default'].Notice.success(message);
13225
  },
13226
  onRestore: function onRestore(response) {
13227
+ var count = ~ ~response.meta.count;
13228
  var message = null;
13229
 
13230
  if (count === 1) {
13236
  }
13237
  };
13238
 
13239
+ var bulk_actions = [{
13240
  name: 'trash',
13241
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
13242
  onSuccess: messages.onTrash
13243
  }];
13244
 
13245
+ var item_actions = [{
13246
  name: 'edit',
13247
  link: function link(item) {
13248
  return _react2['default'].createElement(
13339
  renderItem: function renderItem(segment, actions) {
13340
  var rowClasses = (0, _classnames2['default'])('manage-column', 'column-primary', 'has-row-actions');
13341
 
13342
+ var subscribed = ~ ~(segment.subscribers_count.subscribed || 0);
13343
+ var unconfirmed = ~ ~(segment.subscribers_count.unconfirmed || 0);
13344
+ var unsubscribed = ~ ~(segment.subscribers_count.unsubscribed || 0);
13345
+ var bounced = ~ ~(segment.subscribers_count.bounced || 0);
13346
 
13347
+ var segment_name = undefined;
13348
 
13349
  if (segment.type === 'wp_users') {
13350
  // the WP users segment is not editable so just display its name
13351
+ segment_name = _react2['default'].createElement(
13352
  'span',
13353
  { className: 'row-title' },
13354
  segment.name
13355
  );
13356
  } else {
13357
+ segment_name = _react2['default'].createElement(
13358
  _reactRouter.Link,
13359
  {
13360
  className: 'row-title',
13373
  _react2['default'].createElement(
13374
  'strong',
13375
  null,
13376
+ segment_name
13377
  ),
13378
  actions
13379
  ),
13457
  endpoint: 'segments',
13458
  onRenderItem: this.renderItem,
13459
  columns: columns,
13460
+ bulk_actions: bulk_actions,
13461
+ item_actions: item_actions,
13462
  sort_by: 'name',
13463
  sort_order: 'asc'
13464
  })
13639
 
13640
  var messages = {
13641
  onTrash: function onTrash(response) {
13642
+ var count = ~ ~response.meta.count;
13643
  var message = null;
13644
 
13645
  if (count === 1) {
13650
  _mailpoet2['default'].Notice.success(message);
13651
  },
13652
  onDelete: function onDelete(response) {
13653
+ var count = ~ ~response.meta.count;
13654
  var message = null;
13655
 
13656
  if (count === 1) {
13661
  _mailpoet2['default'].Notice.success(message);
13662
  },
13663
  onRestore: function onRestore(response) {
13664
+ var count = ~ ~response.meta.count;
13665
  var message = null;
13666
 
13667
  if (count === 1) {
13673
  }
13674
  };
13675
 
13676
+ var bulk_actions = [{
13677
  name: 'trash',
13678
  label: _mailpoet2['default'].I18n.t('moveToTrash'),
13679
  onSuccess: messages.onTrash
13680
  }];
13681
 
13682
+ var item_actions = [{
13683
  name: 'edit',
13684
  label: _mailpoet2['default'].I18n.t('edit'),
13685
  link: function link(item) {
13734
  });
13735
  },
13736
  renderItem: function renderItem(form, actions) {
13737
+ var row_classes = (0, _classnames2['default'])('manage-column', 'column-primary', 'has-row-actions');
13738
 
13739
  var segments = window.mailpoet_segments.filter(function (segment) {
13740
  return _jquery2['default'].inArray(segment.id, form.segments) !== -1;
13751
  null,
13752
  _react2['default'].createElement(
13753
  'td',
13754
+ { className: row_classes },
13755
  _react2['default'].createElement(
13756
  'strong',
13757
  null,
13815
  endpoint: 'forms',
13816
  onRenderItem: this.renderItem,
13817
  columns: columns,
13818
+ bulk_actions: bulk_actions,
13819
+ item_actions: item_actions
13820
  })
13821
  );
13822
  }
15990
  }
15991
 
15992
  function renderMSSSection(data) {
15993
+ if (!data.mss.enabled) return;
15994
 
15995
  var status = data.mss.enabled.isReachable;
15996
 
assets/js/{admin_vendor.7914137d.js → admin_vendor.8b1d6679.js} RENAMED
@@ -30794,22 +30794,26 @@ webpackJsonp([1],[
30794
  );
30795
  }
30796
 
30797
- var customActions = this.props.item_actions;
30798
- var itemActions = false;
30799
 
30800
- if (customActions.length > 0) {
30801
  (function () {
30802
- var isFirst = true;
30803
- itemActions = customActions.filter(function (action) {
30804
- return action.display === undefined || action.display(_this.props.item);
30805
- }).map(function (action, index) {
30806
- var customAction = null;
 
 
 
 
30807
 
30808
  if (action.name === 'trash') {
30809
- customAction = _react2['default'].createElement(
30810
  'span',
30811
  { key: 'action-' + index, className: 'trash' },
30812
- !isFirst ? ' | ' : '',
30813
  _react2['default'].createElement(
30814
  'a',
30815
  {
@@ -30819,28 +30823,28 @@ webpackJsonp([1],[
30819
  )
30820
  );
30821
  } else if (action.refresh) {
30822
- customAction = _react2['default'].createElement(
30823
  'span',
30824
  {
30825
  onClick: _this.props.onRefreshItems,
30826
  key: 'action-' + index, className: action.name },
30827
- !isFirst ? ' | ' : '',
30828
  action.link(_this.props.item)
30829
  );
30830
  } else if (action.link) {
30831
- customAction = _react2['default'].createElement(
30832
  'span',
30833
  {
30834
  key: 'action-' + index, className: action.name },
30835
- !isFirst ? ' | ' : '',
30836
  action.link(_this.props.item)
30837
  );
30838
  } else {
30839
- customAction = _react2['default'].createElement(
30840
  'span',
30841
  {
30842
  key: 'action-' + index, className: action.name },
30843
- !isFirst ? ' | ' : '',
30844
  _react2['default'].createElement(
30845
  'a',
30846
  { href: 'javascript:;', onClick: action.onClick !== undefined ? action.onClick.bind(null, _this.props.item, _this.props.onRefreshItems) : false },
@@ -30849,15 +30853,15 @@ webpackJsonp([1],[
30849
  );
30850
  }
30851
 
30852
- if (customAction !== null && isFirst === true) {
30853
- isFirst = false;
30854
  }
30855
 
30856
- return customAction;
30857
  });
30858
  })();
30859
  } else {
30860
- itemActions = _react2['default'].createElement(
30861
  'span',
30862
  { className: 'edit' },
30863
  _react2['default'].createElement(
@@ -30923,7 +30927,7 @@ webpackJsonp([1],[
30923
  _react2['default'].createElement(
30924
  'div',
30925
  { className: 'row-actions' },
30926
- itemActions
30927
  ),
30928
  _react2['default'].createElement(
30929
  'button',
@@ -30939,11 +30943,11 @@ webpackJsonp([1],[
30939
  );
30940
  }
30941
 
30942
- var rowClasses = (0, _classnames2['default'])({ 'is-expanded': this.state.expanded });
30943
 
30944
  return _react2['default'].createElement(
30945
  'tr',
30946
- { className: rowClasses, 'data-automation-id': 'listing_item_' + this.props.item.id },
30947
  checkbox,
30948
  this.props.onRenderItem(this.props.item, actions)
30949
  );
@@ -30980,7 +30984,7 @@ webpackJsonp([1],[
30980
  )
30981
  );
30982
  }
30983
- var selectAllClasses = (0, _classnames2['default'])('mailpoet_select_all', { mailpoet_hidden: this.props.selection === false || this.props.count <= this.props.limit
30984
  });
30985
 
30986
  return _react2['default'].createElement(
@@ -30988,7 +30992,7 @@ webpackJsonp([1],[
30988
  null,
30989
  _react2['default'].createElement(
30990
  'tr',
30991
- { className: selectAllClasses },
30992
  _react2['default'].createElement(
30993
  'td',
30994
  { colSpan: this.props.columns.length + (this.props.is_selectable ? 1 : 0) },
@@ -31063,7 +31067,7 @@ webpackJsonp([1],[
31063
  var state = this.getInitialState();
31064
  // check for url params
31065
  if (params.splat) {
31066
- params.splat.split('/').forEach(function (param) {
31067
  var _getParam = _this3.getParam(param);
31068
 
31069
  var _getParam2 = _slicedToArray(_getParam, 2);
@@ -31074,7 +31078,7 @@ webpackJsonp([1],[
31074
  var filters = {};
31075
  switch (key) {
31076
  case 'filter':
31077
- value.split('&').forEach(function (pair) {
31078
  var _pair$split = pair.split('=');
31079
 
31080
  var _pair$split2 = _slicedToArray(_pair$split, 2);
@@ -31095,7 +31099,7 @@ webpackJsonp([1],[
31095
 
31096
  // limit per page
31097
  if (this.props.limit !== undefined) {
31098
- state.limit = Math.abs(Number(this.props.limit));
31099
  }
31100
 
31101
  // sort by
@@ -31136,17 +31140,12 @@ webpackJsonp([1],[
31136
  } else if (value === Boolean(value)) {
31137
  value = value.toString();
31138
  }
31139
- return {
31140
- key: key,
31141
- value: value
31142
- };
31143
- }).filter(function (_ref) {
31144
- var value = _ref.value;
31145
- return value !== '' && value !== null;
31146
- }).map(function (_ref2) {
31147
- var key = _ref2.key;
31148
- var value = _ref2.value;
31149
- return key + '[' + value + ']';
31150
  }).join('/');
31151
 
31152
  // set url
@@ -31158,22 +31157,22 @@ webpackJsonp([1],[
31158
  }
31159
  },
31160
  getUrlWithParams: function getUrlWithParams(params) {
31161
- var baseUrl = this.props.base_url !== undefined ? this.props.base_url : null;
31162
 
31163
- if (baseUrl !== null) {
31164
- baseUrl = this.setBaseUrlParams(baseUrl);
31165
- return '/' + baseUrl + '/' + params;
31166
  }
31167
  return '/' + params;
31168
  },
31169
- setBaseUrlParams: function setBaseUrlParams(baseUrl) {
31170
  var _this5 = this;
31171
 
31172
- var ret = baseUrl;
31173
  if (ret.indexOf(':') !== -1) {
31174
  (function () {
31175
  var params = _this5.getParams();
31176
- Object.keys(params).forEach(function (key) {
31177
  if (ret.indexOf(':' + key) !== -1) {
31178
  ret = ret.replace(':' + key, params[key]);
31179
  }
@@ -31347,10 +31346,10 @@ webpackJsonp([1],[
31347
  }), { scroll: true });
31348
  });
31349
  },
31350
- handleBulkAction: function handleBulkAction(selectedIds, params) {
31351
  var _this12 = this;
31352
 
31353
- if (this.state.selection === false && this.state.selected_ids.length === 0 && selectedIds !== 'all') {
31354
  return false;
31355
  }
31356
 
@@ -31365,8 +31364,8 @@ webpackJsonp([1],[
31365
  group: this.state.group,
31366
  search: this.state.search
31367
  };
31368
- if (selectedIds !== 'all') {
31369
- data.listing.selection = selectedIds;
31370
  }
31371
 
31372
  return _mailpoet2['default'].Ajax.post({
@@ -31396,47 +31395,47 @@ webpackJsonp([1],[
31396
  _this13.setParams();
31397
  });
31398
  },
31399
- handleSort: function handleSort(sortBy) {
31400
  var _this14 = this;
31401
 
31402
- var sortOrder = arguments.length <= 1 || arguments[1] === undefined ? 'asc' : arguments[1];
31403
 
31404
  this.setState({
31405
- sort_by: sortBy,
31406
- sort_order: sortOrder === 'asc' ? 'asc' : 'desc'
31407
  }, function () {
31408
  _this14.setParams();
31409
  });
31410
  },
31411
- handleSelectItem: function handleSelectItem(id, isChecked) {
31412
- var selectedIds = this.state.selected_ids;
31413
  var selection = false;
31414
 
31415
- if (isChecked) {
31416
- selectedIds = _jquery2['default'].merge(selectedIds, [id]);
31417
  // check whether all items on the page are selected
31418
  if ((0, _jquery2['default'])('tbody .check-column :checkbox:not(:checked)').length === 0) {
31419
  selection = 'page';
31420
  }
31421
  } else {
31422
- selectedIds.splice(selectedIds.indexOf(id), 1);
31423
  }
31424
 
31425
  this.setState({
31426
  selection: selection,
31427
- selected_ids: selectedIds
31428
  });
31429
  },
31430
- handleSelectItems: function handleSelectItems(isChecked) {
31431
- if (isChecked === false) {
31432
  this.clearSelection();
31433
  } else {
31434
- var selectedIds = this.state.items.map(function (item) {
31435
- return Number(item.id);
31436
  });
31437
 
31438
  this.setState({
31439
- selected_ids: selectedIds,
31440
  selection: 'page'
31441
  });
31442
  }
@@ -31502,8 +31501,8 @@ webpackJsonp([1],[
31502
  },
31503
  render: function render() {
31504
  var items = this.state.items;
31505
- var sortBy = this.state.sort_by;
31506
- var sortOrder = this.state.sort_order;
31507
 
31508
  // columns
31509
  var columns = this.props.columns || [];
@@ -31512,10 +31511,10 @@ webpackJsonp([1],[
31512
  });
31513
 
31514
  // bulk actions
31515
- var bulkActions = this.props.bulk_actions || [];
31516
 
31517
- if (this.state.group === 'trash' && bulkActions.length > 0) {
31518
- bulkActions = [{
31519
  name: 'restore',
31520
  label: _mailpoet2['default'].I18n.t('restore'),
31521
  onSuccess: this.props.messages.onRestore
@@ -31527,9 +31526,9 @@ webpackJsonp([1],[
31527
  }
31528
 
31529
  // item actions
31530
- var itemActions = this.props.item_actions || [];
31531
 
31532
- var tableClasses = (0, _classnames2['default'])('mailpoet_listing_table', 'wp-list-table', 'widefat', 'fixed', 'striped', { mailpoet_listing_loading: this.state.loading });
31533
 
31534
  // search
31535
  var search = _react2['default'].createElement(_listingSearchJsx2['default'], {
@@ -31566,7 +31565,7 @@ webpackJsonp([1],[
31566
  { className: 'tablenav top clearfix' },
31567
  _react2['default'].createElement(_listingBulk_actionsJsx2['default'], {
31568
  count: this.state.count,
31569
- bulk_actions: bulkActions,
31570
  selection: this.state.selection,
31571
  selected_ids: this.state.selected_ids,
31572
  onBulkAction: this.handleBulkAction }),
@@ -31586,7 +31585,7 @@ webpackJsonp([1],[
31586
  ),
31587
  _react2['default'].createElement(
31588
  'table',
31589
- { className: tableClasses },
31590
  _react2['default'].createElement(
31591
  'thead',
31592
  null,
@@ -31594,10 +31593,10 @@ webpackJsonp([1],[
31594
  onSort: this.handleSort,
31595
  onSelectItems: this.handleSelectItems,
31596
  selection: this.state.selection,
31597
- sort_by: sortBy,
31598
- sort_order: sortOrder,
31599
  columns: columns,
31600
- is_selectable: bulkActions.length > 0 })
31601
  ),
31602
  _react2['default'].createElement(ListingItems, {
31603
  onRenderItem: this.handleRenderItem,
@@ -31606,7 +31605,7 @@ webpackJsonp([1],[
31606
  onTrashItem: this.handleTrashItem,
31607
  onRefreshItems: this.handleRefreshItems,
31608
  columns: columns,
31609
- is_selectable: bulkActions.length > 0,
31610
  onSelectItem: this.handleSelectItem,
31611
  onSelectAll: this.handleSelectAll,
31612
  selection: this.state.selection,
@@ -31615,7 +31614,7 @@ webpackJsonp([1],[
31615
  group: this.state.group,
31616
  count: this.state.count,
31617
  limit: this.state.limit,
31618
- item_actions: itemActions,
31619
  messages: messages,
31620
  items: items }),
31621
  _react2['default'].createElement(
@@ -31625,10 +31624,10 @@ webpackJsonp([1],[
31625
  onSort: this.handleSort,
31626
  onSelectItems: this.handleSelectItems,
31627
  selection: this.state.selection,
31628
- sort_by: sortBy,
31629
- sort_order: sortOrder,
31630
  columns: columns,
31631
- is_selectable: bulkActions.length > 0 })
31632
  )
31633
  ),
31634
  _react2['default'].createElement(
@@ -31636,7 +31635,7 @@ webpackJsonp([1],[
31636
  { className: 'tablenav bottom' },
31637
  _react2['default'].createElement(_listingBulk_actionsJsx2['default'], {
31638
  count: this.state.count,
31639
- bulk_actions: bulkActions,
31640
  selection: this.state.selection,
31641
  selected_ids: this.state.selected_ids,
31642
  onBulkAction: this.handleBulkAction }),
@@ -33255,7 +33254,7 @@ webpackJsonp([1],[
33255
  return;
33256
  }
33257
 
33258
- var selectedIds = this.props.selection !== 'all' ? this.props.selected_ids : [];
33259
 
33260
  var data = action.getData !== undefined ? action.getData() : {};
33261
 
@@ -33267,7 +33266,7 @@ webpackJsonp([1],[
33267
  }
33268
 
33269
  if (data.action) {
33270
- var promise = this.props.onBulkAction(selectedIds, data);
33271
  if (promise !== false) {
33272
  promise.then(onSuccess);
33273
  }
@@ -33279,10 +33278,10 @@ webpackJsonp([1],[
33279
  });
33280
  },
33281
  getSelectedAction: function getSelectedAction() {
33282
- var selectedAction = this.refs.action.value;
33283
- if (selectedAction.length > 0) {
33284
  var action = this.props.bulk_actions.filter(function (act) {
33285
- return act.name === selectedAction;
33286
  });
33287
 
33288
  if (action.length > 0) {
@@ -33417,9 +33416,9 @@ webpackJsonp([1],[
33417
  displayName: 'ListingColumn',
33418
 
33419
  handleSort: function handleSort() {
33420
- var sortBy = this.props.column.name;
33421
- var sortOrder = this.props.column.sorted === 'asc' ? 'desc' : 'asc';
33422
- this.props.onSort(sortBy, sortOrder);
33423
  },
33424
  render: function render() {
33425
  var classes = (0, _classnames2['default'])('manage-column', { 'column-primary': this.props.column.is_primary }, { sortable: this.props.column.sortable }, this.props.column.sorted, { sorted: this.props.sort_by === this.props.column.name });
@@ -33491,7 +33490,7 @@ webpackJsonp([1],[
33491
  this.setPage(this.constrainPage(parseInt(this.props.page, 10) + 1));
33492
  },
33493
  constrainPage: function constrainPage(page) {
33494
- return Math.min(Math.max(1, Math.abs(Number(page))), this.getLastPage());
33495
  },
33496
  handleSetManualPage: function handleSetManualPage(e) {
33497
  if (e.which === 13) {
@@ -33664,7 +33663,7 @@ webpackJsonp([1],[
33664
  var classes = classNames('tablenav-pages', { 'one-page': this.props.count <= this.props.limit });
33665
 
33666
  var numberOfItemsLabel = undefined;
33667
- if (Number(this.props.count) === 1) {
33668
  numberOfItemsLabel = MailPoet.I18n.t('numberOfItemsSingular');
33669
  } else {
33670
  numberOfItemsLabel = MailPoet.I18n.t('numberOfItemsMultiple').replace('%$1d', this.props.count.toLocaleString());
@@ -33806,7 +33805,7 @@ webpackJsonp([1],[
33806
  var _this = this;
33807
 
33808
  var filters = {};
33809
- this.getAvailableFilters().forEach(function (filter, i) {
33810
  filters[_this.refs['filter-' + i].name] = _this.refs['filter-' + i].value;
33811
  });
33812
  if (this.props.onBeforeSelectFilter) {
@@ -33826,16 +33825,16 @@ webpackJsonp([1],[
33826
  componentDidUpdate: function componentDidUpdate() {
33827
  var _this2 = this;
33828
 
33829
- var selectedFilters = this.props.filter;
33830
- this.getAvailableFilters().forEach(function (filter, i) {
33831
- if (selectedFilters[filter] !== undefined && selectedFilters[filter]) {
33832
- jQuery(_this2.refs['filter-' + i]).val(selectedFilters[filter]).trigger('change');
33833
  }
33834
  });
33835
  },
33836
  render: function render() {
33837
  var filters = this.props.filters;
33838
- var availableFilters = this.getAvailableFilters().map(function (filter, i) {
33839
  return React.createElement(
33840
  'select',
33841
  {
@@ -33858,7 +33857,7 @@ webpackJsonp([1],[
33858
 
33859
  var button = undefined;
33860
 
33861
- if (availableFilters.length > 0) {
33862
  button = React.createElement('input', {
33863
  id: 'post-query-submit',
33864
  onClick: this.handleFilterAction,
@@ -33867,9 +33866,9 @@ webpackJsonp([1],[
33867
  className: 'button' });
33868
  }
33869
 
33870
- var emptyTrash = undefined;
33871
  if (this.props.group === 'trash') {
33872
- emptyTrash = React.createElement('input', {
33873
  onClick: this.handleEmptyTrash,
33874
  type: 'submit',
33875
  value: MailPoet.I18n.t('emptyTrash'),
@@ -33880,9 +33879,9 @@ webpackJsonp([1],[
33880
  return React.createElement(
33881
  'div',
33882
  { className: 'alignleft actions actions' },
33883
- availableFilters,
33884
  button,
33885
- emptyTrash
33886
  );
33887
  }
33888
  });
@@ -33918,7 +33917,7 @@ webpackJsonp([1],[
33918
  return this.state.select2 === true;
33919
  },
33920
  componentDidMount: function componentDidMount() {
33921
- if (this.allowMultipleValues() || this.props.field.forceSelect2) {
33922
  this.setupSelect2();
33923
  }
33924
  },
@@ -33928,7 +33927,7 @@ webpackJsonp([1],[
33928
  }
33929
  },
33930
  componentWillUnmount: function componentWillUnmount() {
33931
- if (this.allowMultipleValues() || this.props.field.forceSelect2) {
33932
  this.destroySelect2();
33933
  }
33934
  },
@@ -33986,14 +33985,9 @@ webpackJsonp([1],[
33986
  return null;
33987
  },
33988
  loadCachedItems: function loadCachedItems() {
33989
- var items = undefined;
33990
  if (typeof window['mailpoet_' + this.props.field.endpoint] !== 'undefined') {
33991
- items = window['mailpoet_' + this.props.field.endpoint];
33992
- } else if (this.props.field.values !== undefined) {
33993
- items = this.props.field.values;
33994
- }
33995
 
33996
- if (Array.isArray(items)) {
33997
  if (this.props.field.filter !== undefined) {
33998
  items = items.filter(this.props.field.filter);
33999
  }
@@ -34047,14 +34041,6 @@ webpackJsonp([1],[
34047
  }
34048
  return value;
34049
  },
34050
- insertEmptyOption: function insertEmptyOption() {
34051
- // https://select2.org/placeholders
34052
- // For single selects only, in order for the placeholder value to appear,
34053
- // we must have a blank <option> as the first option in the <select> control.
34054
- if (this.allowMultipleValues()) return undefined;
34055
- if (this.props.field.placeholder) return React.createElement('option', null);
34056
- return undefined;
34057
- },
34058
  render: function render() {
34059
  var _this = this;
34060
 
@@ -34084,7 +34070,6 @@ webpackJsonp([1],[
34084
  multiple: this.props.field.multiple,
34085
  defaultValue: this.getSelectedValues()
34086
  }, this.props.field.validation),
34087
- this.insertEmptyOption(),
34088
  options
34089
  );
34090
  }
@@ -39908,6 +39893,8 @@ webpackJsonp([1],[
39908
  if (props.item === undefined) {
39909
  this.refs.form.reset();
39910
  }
 
 
39911
  }
39912
  },
39913
  loadItem: function loadItem(id) {
@@ -39927,9 +39914,6 @@ webpackJsonp([1],[
39927
  loading: false,
39928
  item: response.data
39929
  });
39930
- if (typeof _this.props.onItemLoad === 'function') {
39931
- _this.props.onItemLoad(response.data);
39932
- }
39933
  }).fail(function () {
39934
  _this.setState({
39935
  loading: false,
@@ -39955,9 +39939,9 @@ webpackJsonp([1],[
39955
 
39956
  // only get values from displayed fields
39957
  var item = {};
39958
- this.props.fields.forEach(function (field) {
39959
  if (field.fields !== undefined) {
39960
- field.fields.forEach(function (subfield) {
39961
  item[subfield.name] = _this2.state.item[subfield.name];
39962
  });
39963
  } else {
@@ -40156,10 +40140,6 @@ webpackJsonp([1],[
40156
  case 'reactComponent':
40157
  field = React.createElement(data.field.component, data);
40158
  break;
40159
-
40160
- default:
40161
- field = 'invalid';
40162
- break;
40163
  }
40164
 
40165
  if (inline === true) {
@@ -40206,7 +40186,7 @@ webpackJsonp([1],[
40206
 
40207
  return React.createElement(
40208
  'tr',
40209
- { className: 'form-field-row-' + this.props.field.name },
40210
  React.createElement(
40211
  'th',
40212
  { scope: 'row' },
@@ -40287,7 +40267,7 @@ webpackJsonp([1],[
40287
  type: "text",
40288
  className: "regular-text",
40289
  name: this.props.field.name,
40290
- id: "field_" + this.props.field.name,
40291
  value: this.props.item[this.props.field.name],
40292
  placeholder: this.props.field.placeholder,
40293
  defaultValue: this.props.field.defaultValue,
@@ -40360,10 +40340,11 @@ webpackJsonp([1],[
40360
  keys = Object.keys(this.props.field.values);
40361
  }
40362
 
40363
- var options = keys.filter(function (value) {
40364
- if (filter === false) return true;
40365
- return filter(_this.props.item, value);
40366
- }).map(function (value, index) {
 
40367
  return _react2['default'].createElement(
40368
  'option',
40369
  {
@@ -40393,11 +40374,11 @@ webpackJsonp([1],[
40393
  /* 298 */
40394
  /***/ function(module, exports, __webpack_require__) {
40395
 
40396
- var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
40397
 
40398
  !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_RESULT__ = function (React) {
40399
  var FormFieldRadio = React.createClass({
40400
- displayName: "FormFieldRadio",
40401
 
40402
  render: function render() {
40403
  var _this = this;
@@ -40406,17 +40387,17 @@ webpackJsonp([1],[
40406
  return false;
40407
  }
40408
 
40409
- var selectedValue = this.props.item[this.props.field.name];
40410
  var options = Object.keys(this.props.field.values).map(function (value, index) {
40411
  return React.createElement(
40412
- "p",
40413
- { key: "radio-" + index },
40414
  React.createElement(
40415
- "label",
40416
  null,
40417
- React.createElement("input", {
40418
- type: "radio",
40419
- checked: selectedValue === value,
40420
  value: value,
40421
  onChange: _this.props.onValueChange,
40422
  name: _this.props.field.name }),
@@ -40426,7 +40407,7 @@ webpackJsonp([1],[
40426
  });
40427
 
40428
  return React.createElement(
40429
- "div",
40430
  null,
40431
  options
40432
  );
@@ -40459,7 +40440,7 @@ webpackJsonp([1],[
40459
 
40460
  // isChecked will be true only if the value is "1"
40461
  // it will be false in case value is "0" or empty
40462
- var isChecked = !!Number(this.props.item[this.props.field.name]);
40463
  var options = Object.keys(this.props.field.values).map(function (value, index) {
40464
  return React.createElement(
40465
  'p',
@@ -40729,11 +40710,6 @@ webpackJsonp([1],[
40729
  year: this.state.year
40730
  };
40731
  break;
40732
- default:
40733
- value = {
40734
- value: 'invalid type'
40735
- };
40736
- break;
40737
  }
40738
 
40739
  return value;
@@ -40752,7 +40728,7 @@ webpackJsonp([1],[
40752
  field = matches[1];
40753
  property = matches[2];
40754
 
40755
- var value = Number(e.target.value);
40756
 
40757
  this.setState(_defineProperty({}, '' + property, value), function () {
40758
  _this.props.onValueChange({
@@ -40806,13 +40782,6 @@ webpackJsonp([1],[
40806
  day: _this2.state.day,
40807
  placeholder: _this2.props.field.day_placeholder
40808
  });
40809
-
40810
- default:
40811
- return React.createElement(
40812
- 'div',
40813
- null,
40814
- 'Invalid date type'
40815
- );
40816
  }
40817
  });
40818
 
@@ -40835,7 +40804,7 @@ webpackJsonp([1],[
40835
  /***/ function(module, exports, __webpack_require__) {
40836
 
40837
  var require;/* WEBPACK VAR INJECTION */(function(module) {//! moment.js
40838
- //! version : 2.19.4
40839
  //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
40840
  //! license : MIT
40841
  //! momentjs.com
@@ -42865,7 +42834,7 @@ webpackJsonp([1],[
42865
  // note: all values past the year are optional and will default to the lowest possible value.
42866
  // [year, month, day , hour, minute, second, millisecond]
42867
  function configFromArray (config) {
42868
- var i, date, input = [], currentDate, expectedWeekday, yearToUse;
42869
 
42870
  if (config._d) {
42871
  return;
@@ -42915,8 +42884,6 @@ webpackJsonp([1],[
42915
  }
42916
 
42917
  config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
42918
- expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
42919
-
42920
  // Apply timezone offset from input. The actual utcOffset can be changed
42921
  // with parseZone.
42922
  if (config._tzm != null) {
@@ -42928,7 +42895,7 @@ webpackJsonp([1],[
42928
  }
42929
 
42930
  // check for mismatching day of week
42931
- if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
42932
  getParsingFlags(config).weekdayMismatch = true;
42933
  }
42934
  }
@@ -44504,7 +44471,7 @@ webpackJsonp([1],[
44504
 
44505
  addParseToken(['D', 'DD'], DATE);
44506
  addParseToken('Do', function (input, array) {
44507
- array[DATE] = toInt(input.match(match1to2)[0]);
44508
  });
44509
 
44510
  // MOMENTS
@@ -45316,7 +45283,7 @@ webpackJsonp([1],[
45316
  // Side effect imports
45317
 
45318
 
45319
- hooks.version = '2.19.4';
45320
 
45321
  setHookCallback(createLocal);
45322
 
30794
  );
30795
  }
30796
 
30797
+ var custom_actions = this.props.item_actions;
30798
+ var item_actions = false;
30799
 
30800
+ if (custom_actions.length > 0) {
30801
  (function () {
30802
+ var is_first = true;
30803
+ item_actions = custom_actions.map(function (action, index) {
30804
+ if (action.display !== undefined) {
30805
+ if (action.display(_this.props.item) === false) {
30806
+ return;
30807
+ }
30808
+ }
30809
+
30810
+ var custom_action = null;
30811
 
30812
  if (action.name === 'trash') {
30813
+ custom_action = _react2['default'].createElement(
30814
  'span',
30815
  { key: 'action-' + index, className: 'trash' },
30816
+ !is_first ? ' | ' : '',
30817
  _react2['default'].createElement(
30818
  'a',
30819
  {
30823
  )
30824
  );
30825
  } else if (action.refresh) {
30826
+ custom_action = _react2['default'].createElement(
30827
  'span',
30828
  {
30829
  onClick: _this.props.onRefreshItems,
30830
  key: 'action-' + index, className: action.name },
30831
+ !is_first ? ' | ' : '',
30832
  action.link(_this.props.item)
30833
  );
30834
  } else if (action.link) {
30835
+ custom_action = _react2['default'].createElement(
30836
  'span',
30837
  {
30838
  key: 'action-' + index, className: action.name },
30839
+ !is_first ? ' | ' : '',
30840
  action.link(_this.props.item)
30841
  );
30842
  } else {
30843
+ custom_action = _react2['default'].createElement(
30844
  'span',
30845
  {
30846
  key: 'action-' + index, className: action.name },
30847
+ !is_first ? ' | ' : '',
30848
  _react2['default'].createElement(
30849
  'a',
30850
  { href: 'javascript:;', onClick: action.onClick !== undefined ? action.onClick.bind(null, _this.props.item, _this.props.onRefreshItems) : false },
30853
  );
30854
  }
30855
 
30856
+ if (custom_action !== null && is_first === true) {
30857
+ is_first = false;
30858
  }
30859
 
30860
+ return custom_action;
30861
  });
30862
  })();
30863
  } else {
30864
+ item_actions = _react2['default'].createElement(
30865
  'span',
30866
  { className: 'edit' },
30867
  _react2['default'].createElement(
30927
  _react2['default'].createElement(
30928
  'div',
30929
  { className: 'row-actions' },
30930
+ item_actions
30931
  ),
30932
  _react2['default'].createElement(
30933
  'button',
30943
  );
30944
  }
30945
 
30946
+ var row_classes = (0, _classnames2['default'])({ 'is-expanded': this.state.expanded });
30947
 
30948
  return _react2['default'].createElement(
30949
  'tr',
30950
+ { className: row_classes, 'data-automation-id': 'listing_item_' + this.props.item.id },
30951
  checkbox,
30952
  this.props.onRenderItem(this.props.item, actions)
30953
  );
30984
  )
30985
  );
30986
  }
30987
+ var select_all_classes = (0, _classnames2['default'])('mailpoet_select_all', { mailpoet_hidden: this.props.selection === false || this.props.count <= this.props.limit
30988
  });
30989
 
30990
  return _react2['default'].createElement(
30992
  null,
30993
  _react2['default'].createElement(
30994
  'tr',
30995
+ { className: select_all_classes },
30996
  _react2['default'].createElement(
30997
  'td',
30998
  { colSpan: this.props.columns.length + (this.props.is_selectable ? 1 : 0) },
31067
  var state = this.getInitialState();
31068
  // check for url params
31069
  if (params.splat) {
31070
+ params.splat.split('/').map(function (param) {
31071
  var _getParam = _this3.getParam(param);
31072
 
31073
  var _getParam2 = _slicedToArray(_getParam, 2);
31078
  var filters = {};
31079
  switch (key) {
31080
  case 'filter':
31081
+ value.split('&').map(function (pair) {
31082
  var _pair$split = pair.split('=');
31083
 
31084
  var _pair$split2 = _slicedToArray(_pair$split, 2);
31099
 
31100
  // limit per page
31101
  if (this.props.limit !== undefined) {
31102
+ state.limit = Math.abs(~ ~this.props.limit);
31103
  }
31104
 
31105
  // sort by
31140
  } else if (value === Boolean(value)) {
31141
  value = value.toString();
31142
  }
31143
+
31144
+ if (value !== '' && value !== null) {
31145
+ return key + '[' + value + ']';
31146
+ }
31147
+ }).filter(function (key) {
31148
+ return key !== undefined;
 
 
 
 
 
31149
  }).join('/');
31150
 
31151
  // set url
31157
  }
31158
  },
31159
  getUrlWithParams: function getUrlWithParams(params) {
31160
+ var base_url = this.props.base_url !== undefined ? this.props.base_url : null;
31161
 
31162
+ if (base_url !== null) {
31163
+ base_url = this.setBaseUrlParams(base_url);
31164
+ return '/' + base_url + '/' + params;
31165
  }
31166
  return '/' + params;
31167
  },
31168
+ setBaseUrlParams: function setBaseUrlParams(base_url) {
31169
  var _this5 = this;
31170
 
31171
+ var ret = base_url;
31172
  if (ret.indexOf(':') !== -1) {
31173
  (function () {
31174
  var params = _this5.getParams();
31175
+ Object.keys(params).map(function (key) {
31176
  if (ret.indexOf(':' + key) !== -1) {
31177
  ret = ret.replace(':' + key, params[key]);
31178
  }
31346
  }), { scroll: true });
31347
  });
31348
  },
31349
+ handleBulkAction: function handleBulkAction(selected_ids, params) {
31350
  var _this12 = this;
31351
 
31352
+ if (this.state.selection === false && this.state.selected_ids.length === 0 && selected_ids !== 'all') {
31353
  return false;
31354
  }
31355
 
31364
  group: this.state.group,
31365
  search: this.state.search
31366
  };
31367
+ if (selected_ids !== 'all') {
31368
+ data.listing.selection = selected_ids;
31369
  }
31370
 
31371
  return _mailpoet2['default'].Ajax.post({
31395
  _this13.setParams();
31396
  });
31397
  },
31398
+ handleSort: function handleSort(sort_by) {
31399
  var _this14 = this;
31400
 
31401
+ var sort_order = arguments.length <= 1 || arguments[1] === undefined ? 'asc' : arguments[1];
31402
 
31403
  this.setState({
31404
+ sort_by: sort_by,
31405
+ sort_order: sort_order === 'asc' ? 'asc' : 'desc'
31406
  }, function () {
31407
  _this14.setParams();
31408
  });
31409
  },
31410
+ handleSelectItem: function handleSelectItem(id, is_checked) {
31411
+ var selected_ids = this.state.selected_ids;
31412
  var selection = false;
31413
 
31414
+ if (is_checked) {
31415
+ selected_ids = _jquery2['default'].merge(selected_ids, [id]);
31416
  // check whether all items on the page are selected
31417
  if ((0, _jquery2['default'])('tbody .check-column :checkbox:not(:checked)').length === 0) {
31418
  selection = 'page';
31419
  }
31420
  } else {
31421
+ selected_ids.splice(selected_ids.indexOf(id), 1);
31422
  }
31423
 
31424
  this.setState({
31425
  selection: selection,
31426
+ selected_ids: selected_ids
31427
  });
31428
  },
31429
+ handleSelectItems: function handleSelectItems(is_checked) {
31430
+ if (is_checked === false) {
31431
  this.clearSelection();
31432
  } else {
31433
+ var selected_ids = this.state.items.map(function (item) {
31434
+ return ~ ~item.id;
31435
  });
31436
 
31437
  this.setState({
31438
+ selected_ids: selected_ids,
31439
  selection: 'page'
31440
  });
31441
  }
31501
  },
31502
  render: function render() {
31503
  var items = this.state.items;
31504
+ var sort_by = this.state.sort_by;
31505
+ var sort_order = this.state.sort_order;
31506
 
31507
  // columns
31508
  var columns = this.props.columns || [];
31511
  });
31512
 
31513
  // bulk actions
31514
+ var bulk_actions = this.props.bulk_actions || [];
31515
 
31516
+ if (this.state.group === 'trash' && bulk_actions.length > 0) {
31517
+ bulk_actions = [{
31518
  name: 'restore',
31519
  label: _mailpoet2['default'].I18n.t('restore'),
31520
  onSuccess: this.props.messages.onRestore
31526
  }
31527
 
31528
  // item actions
31529
+ var item_actions = this.props.item_actions || [];
31530
 
31531
+ var table_classes = (0, _classnames2['default'])('mailpoet_listing_table', 'wp-list-table', 'widefat', 'fixed', 'striped', { mailpoet_listing_loading: this.state.loading });
31532
 
31533
  // search
31534
  var search = _react2['default'].createElement(_listingSearchJsx2['default'], {
31565
  { className: 'tablenav top clearfix' },
31566
  _react2['default'].createElement(_listingBulk_actionsJsx2['default'], {
31567
  count: this.state.count,
31568
+ bulk_actions: bulk_actions,
31569
  selection: this.state.selection,
31570
  selected_ids: this.state.selected_ids,
31571
  onBulkAction: this.handleBulkAction }),
31585
  ),
31586
  _react2['default'].createElement(
31587
  'table',
31588
+ { className: table_classes },
31589
  _react2['default'].createElement(
31590
  'thead',
31591
  null,
31593
  onSort: this.handleSort,
31594
  onSelectItems: this.handleSelectItems,
31595
  selection: this.state.selection,
31596
+ sort_by: sort_by,
31597
+ sort_order: sort_order,
31598
  columns: columns,
31599
+ is_selectable: bulk_actions.length > 0 })
31600
  ),
31601
  _react2['default'].createElement(ListingItems, {
31602
  onRenderItem: this.handleRenderItem,
31605
  onTrashItem: this.handleTrashItem,
31606
  onRefreshItems: this.handleRefreshItems,
31607
  columns: columns,
31608
+ is_selectable: bulk_actions.length > 0,
31609
  onSelectItem: this.handleSelectItem,
31610
  onSelectAll: this.handleSelectAll,
31611
  selection: this.state.selection,
31614
  group: this.state.group,
31615
  count: this.state.count,
31616
  limit: this.state.limit,
31617
+ item_actions: item_actions,
31618
  messages: messages,
31619
  items: items }),
31620
  _react2['default'].createElement(
31624
  onSort: this.handleSort,
31625
  onSelectItems: this.handleSelectItems,
31626
  selection: this.state.selection,
31627
+ sort_by: sort_by,
31628
+ sort_order: sort_order,
31629
  columns: columns,
31630
+ is_selectable: bulk_actions.length > 0 })
31631
  )
31632
  ),
31633
  _react2['default'].createElement(
31635
  { className: 'tablenav bottom' },
31636
  _react2['default'].createElement(_listingBulk_actionsJsx2['default'], {
31637
  count: this.state.count,
31638
+ bulk_actions: bulk_actions,
31639
  selection: this.state.selection,
31640
  selected_ids: this.state.selected_ids,
31641
  onBulkAction: this.handleBulkAction }),
33254
  return;
33255
  }
33256
 
33257
+ var selected_ids = this.props.selection !== 'all' ? this.props.selected_ids : [];
33258
 
33259
  var data = action.getData !== undefined ? action.getData() : {};
33260
 
33266
  }
33267
 
33268
  if (data.action) {
33269
+ var promise = this.props.onBulkAction(selected_ids, data);
33270
  if (promise !== false) {
33271
  promise.then(onSuccess);
33272
  }
33278
  });
33279
  },
33280
  getSelectedAction: function getSelectedAction() {
33281
+ var selected_action = this.refs.action.value;
33282
+ if (selected_action.length > 0) {
33283
  var action = this.props.bulk_actions.filter(function (act) {
33284
+ return act.name === selected_action;
33285
  });
33286
 
33287
  if (action.length > 0) {
33416
  displayName: 'ListingColumn',
33417
 
33418
  handleSort: function handleSort() {
33419
+ var sort_by = this.props.column.name;
33420
+ var sort_order = this.props.column.sorted === 'asc' ? 'desc' : 'asc';
33421
+ this.props.onSort(sort_by, sort_order);
33422
  },
33423
  render: function render() {
33424
  var classes = (0, _classnames2['default'])('manage-column', { 'column-primary': this.props.column.is_primary }, { sortable: this.props.column.sortable }, this.props.column.sorted, { sorted: this.props.sort_by === this.props.column.name });
33490
  this.setPage(this.constrainPage(parseInt(this.props.page, 10) + 1));
33491
  },
33492
  constrainPage: function constrainPage(page) {
33493
+ return Math.min(Math.max(1, Math.abs(~ ~page)), this.getLastPage());
33494
  },
33495
  handleSetManualPage: function handleSetManualPage(e) {
33496
  if (e.which === 13) {
33663
  var classes = classNames('tablenav-pages', { 'one-page': this.props.count <= this.props.limit });
33664
 
33665
  var numberOfItemsLabel = undefined;
33666
+ if (this.props.count == 1) {
33667
  numberOfItemsLabel = MailPoet.I18n.t('numberOfItemsSingular');
33668
  } else {
33669
  numberOfItemsLabel = MailPoet.I18n.t('numberOfItemsMultiple').replace('%$1d', this.props.count.toLocaleString());
33805
  var _this = this;
33806
 
33807
  var filters = {};
33808
+ this.getAvailableFilters().map(function (filter, i) {
33809
  filters[_this.refs['filter-' + i].name] = _this.refs['filter-' + i].value;
33810
  });
33811
  if (this.props.onBeforeSelectFilter) {
33825
  componentDidUpdate: function componentDidUpdate() {
33826
  var _this2 = this;
33827
 
33828
+ var selected_filters = this.props.filter;
33829
+ this.getAvailableFilters().map(function (filter, i) {
33830
+ if (selected_filters[filter] !== undefined && selected_filters[filter]) {
33831
+ jQuery(_this2.refs['filter-' + i]).val(selected_filters[filter]).trigger('change');
33832
  }
33833
  });
33834
  },
33835
  render: function render() {
33836
  var filters = this.props.filters;
33837
+ var available_filters = this.getAvailableFilters().map(function (filter, i) {
33838
  return React.createElement(
33839
  'select',
33840
  {
33857
 
33858
  var button = undefined;
33859
 
33860
+ if (available_filters.length > 0) {
33861
  button = React.createElement('input', {
33862
  id: 'post-query-submit',
33863
  onClick: this.handleFilterAction,
33866
  className: 'button' });
33867
  }
33868
 
33869
+ var empty_trash = undefined;
33870
  if (this.props.group === 'trash') {
33871
+ empty_trash = React.createElement('input', {
33872
  onClick: this.handleEmptyTrash,
33873
  type: 'submit',
33874
  value: MailPoet.I18n.t('emptyTrash'),
33879
  return React.createElement(
33880
  'div',
33881
  { className: 'alignleft actions actions' },
33882
+ available_filters,
33883
  button,
33884
+ empty_trash
33885
  );
33886
  }
33887
  });
33917
  return this.state.select2 === true;
33918
  },
33919
  componentDidMount: function componentDidMount() {
33920
+ if (this.allowMultipleValues()) {
33921
  this.setupSelect2();
33922
  }
33923
  },
33927
  }
33928
  },
33929
  componentWillUnmount: function componentWillUnmount() {
33930
+ if (this.allowMultipleValues()) {
33931
  this.destroySelect2();
33932
  }
33933
  },
33985
  return null;
33986
  },
33987
  loadCachedItems: function loadCachedItems() {
 
33988
  if (typeof window['mailpoet_' + this.props.field.endpoint] !== 'undefined') {
33989
+ var items = window['mailpoet_' + this.props.field.endpoint];
 
 
 
33990
 
 
33991
  if (this.props.field.filter !== undefined) {
33992
  items = items.filter(this.props.field.filter);
33993
  }
34041
  }
34042
  return value;
34043
  },
 
 
 
 
 
 
 
 
34044
  render: function render() {
34045
  var _this = this;
34046
 
34070
  multiple: this.props.field.multiple,
34071
  defaultValue: this.getSelectedValues()
34072
  }, this.props.field.validation),
 
34073
  options
34074
  );
34075
  }
39893
  if (props.item === undefined) {
39894
  this.refs.form.reset();
39895
  }
39896
+ } else {
39897
+ this.loadItem(props.params.id);
39898
  }
39899
  },
39900
  loadItem: function loadItem(id) {
39914
  loading: false,
39915
  item: response.data
39916
  });
 
 
 
39917
  }).fail(function () {
39918
  _this.setState({
39919
  loading: false,
39939
 
39940
  // only get values from displayed fields
39941
  var item = {};
39942
+ this.props.fields.map(function (field) {
39943
  if (field.fields !== undefined) {
39944
+ field.fields.map(function (subfield) {
39945
  item[subfield.name] = _this2.state.item[subfield.name];
39946
  });
39947
  } else {
40140
  case 'reactComponent':
40141
  field = React.createElement(data.field.component, data);
40142
  break;
 
 
 
 
40143
  }
40144
 
40145
  if (inline === true) {
40186
 
40187
  return React.createElement(
40188
  'tr',
40189
+ null,
40190
  React.createElement(
40191
  'th',
40192
  { scope: 'row' },
40267
  type: "text",
40268
  className: "regular-text",
40269
  name: this.props.field.name,
40270
+ id: 'field_' + this.props.field.name,
40271
  value: this.props.item[this.props.field.name],
40272
  placeholder: this.props.field.placeholder,
40273
  defaultValue: this.props.field.defaultValue,
40340
  keys = Object.keys(this.props.field.values);
40341
  }
40342
 
40343
+ var options = keys.map(function (value, index) {
40344
+ if (filter !== false && filter(_this.props.item, value) === false) {
40345
+ return;
40346
+ }
40347
+
40348
  return _react2['default'].createElement(
40349
  'option',
40350
  {
40374
  /* 298 */
40375
  /***/ function(module, exports, __webpack_require__) {
40376
 
40377
+ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict';
40378
 
40379
  !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_RESULT__ = function (React) {
40380
  var FormFieldRadio = React.createClass({
40381
+ displayName: 'FormFieldRadio',
40382
 
40383
  render: function render() {
40384
  var _this = this;
40387
  return false;
40388
  }
40389
 
40390
+ var selected_value = this.props.item[this.props.field.name];
40391
  var options = Object.keys(this.props.field.values).map(function (value, index) {
40392
  return React.createElement(
40393
+ 'p',
40394
+ { key: 'radio-' + index },
40395
  React.createElement(
40396
+ 'label',
40397
  null,
40398
+ React.createElement('input', {
40399
+ type: 'radio',
40400
+ checked: selected_value === value,
40401
  value: value,
40402
  onChange: _this.props.onValueChange,
40403
  name: _this.props.field.name }),
40407
  });
40408
 
40409
  return React.createElement(
40410
+ 'div',
40411
  null,
40412
  options
40413
  );
40440
 
40441
  // isChecked will be true only if the value is "1"
40442
  // it will be false in case value is "0" or empty
40443
+ var isChecked = !! ~ ~this.props.item[this.props.field.name];
40444
  var options = Object.keys(this.props.field.values).map(function (value, index) {
40445
  return React.createElement(
40446
  'p',
40710
  year: this.state.year
40711
  };
40712
  break;
 
 
 
 
 
40713
  }
40714
 
40715
  return value;
40728
  field = matches[1];
40729
  property = matches[2];
40730
 
40731
+ var value = ~ ~e.target.value;
40732
 
40733
  this.setState(_defineProperty({}, '' + property, value), function () {
40734
  _this.props.onValueChange({
40782
  day: _this2.state.day,
40783
  placeholder: _this2.props.field.day_placeholder
40784
  });
 
 
 
 
 
 
 
40785
  }
40786
  });
40787
 
40804
  /***/ function(module, exports, __webpack_require__) {
40805
 
40806
  var require;/* WEBPACK VAR INJECTION */(function(module) {//! moment.js
40807
+ //! version : 2.19.3
40808
  //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
40809
  //! license : MIT
40810
  //! momentjs.com
42834
  // note: all values past the year are optional and will default to the lowest possible value.
42835
  // [year, month, day , hour, minute, second, millisecond]
42836
  function configFromArray (config) {
42837
+ var i, date, input = [], currentDate, yearToUse;
42838
 
42839
  if (config._d) {
42840
  return;
42884
  }
42885
 
42886
  config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
 
 
42887
  // Apply timezone offset from input. The actual utcOffset can be changed
42888
  // with parseZone.
42889
  if (config._tzm != null) {
42895
  }
42896
 
42897
  // check for mismatching day of week
42898
+ if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== config._d.getDay()) {
42899
  getParsingFlags(config).weekdayMismatch = true;
42900
  }
42901
  }
44471
 
44472
  addParseToken(['D', 'DD'], DATE);
44473
  addParseToken('Do', function (input, array) {
44474
+ array[DATE] = toInt(input.match(match1to2)[0], 10);
44475
  });
44476
 
44477
  // MOMENTS
45283
  // Side effect imports
45284
 
45285
 
45286
+ hooks.version = '2.19.3';
45287
 
45288
  setHookCallback(createLocal);
45289
 
assets/js/{mailpoet.a5fa72ae.js → mailpoet.0a2f113c.js} RENAMED
@@ -23905,7 +23905,7 @@ webpackJsonp([3],[
23905
  /***/ function(module, exports, __webpack_require__) {
23906
 
23907
  var require;/* WEBPACK VAR INJECTION */(function(module) {//! moment.js
23908
- //! version : 2.19.4
23909
  //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
23910
  //! license : MIT
23911
  //! momentjs.com
@@ -25935,7 +25935,7 @@ webpackJsonp([3],[
25935
  // note: all values past the year are optional and will default to the lowest possible value.
25936
  // [year, month, day , hour, minute, second, millisecond]
25937
  function configFromArray (config) {
25938
- var i, date, input = [], currentDate, expectedWeekday, yearToUse;
25939
 
25940
  if (config._d) {
25941
  return;
@@ -25985,8 +25985,6 @@ webpackJsonp([3],[
25985
  }
25986
 
25987
  config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
25988
- expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
25989
-
25990
  // Apply timezone offset from input. The actual utcOffset can be changed
25991
  // with parseZone.
25992
  if (config._tzm != null) {
@@ -25998,7 +25996,7 @@ webpackJsonp([3],[
25998
  }
25999
 
26000
  // check for mismatching day of week
26001
- if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
26002
  getParsingFlags(config).weekdayMismatch = true;
26003
  }
26004
  }
@@ -27574,7 +27572,7 @@ webpackJsonp([3],[
27574
 
27575
  addParseToken(['D', 'DD'], DATE);
27576
  addParseToken('Do', function (input, array) {
27577
- array[DATE] = toInt(input.match(match1to2)[0]);
27578
  });
27579
 
27580
  // MOMENTS
@@ -28386,7 +28384,7 @@ webpackJsonp([3],[
28386
  // Side effect imports
28387
 
28388
 
28389
- hooks.version = '2.19.4';
28390
 
28391
  setHookCallback(createLocal);
28392
 
23905
  /***/ function(module, exports, __webpack_require__) {
23906
 
23907
  var require;/* WEBPACK VAR INJECTION */(function(module) {//! moment.js
23908
+ //! version : 2.19.3
23909
  //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
23910
  //! license : MIT
23911
  //! momentjs.com
25935
  // note: all values past the year are optional and will default to the lowest possible value.
25936
  // [year, month, day , hour, minute, second, millisecond]
25937
  function configFromArray (config) {
25938
+ var i, date, input = [], currentDate, yearToUse;
25939
 
25940
  if (config._d) {
25941
  return;
25985
  }
25986
 
25987
  config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
 
 
25988
  // Apply timezone offset from input. The actual utcOffset can be changed
25989
  // with parseZone.
25990
  if (config._tzm != null) {
25996
  }
25997
 
25998
  // check for mismatching day of week
25999
+ if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== config._d.getDay()) {
26000
  getParsingFlags(config).weekdayMismatch = true;
26001
  }
26002
  }
27572
 
27573
  addParseToken(['D', 'DD'], DATE);
27574
  addParseToken('Do', function (input, array) {
27575
+ array[DATE] = toInt(input.match(match1to2)[0], 10);
27576
  });
27577
 
27578
  // MOMENTS
28384
  // Side effect imports
28385
 
28386
 
28387
+ hooks.version = '2.19.3';
28388
 
28389
  setHookCallback(createLocal);
28390
 
assets/js/manifest.json CHANGED
@@ -1,10 +1,10 @@
1
  {
2
  "mp2migrator.js": "mp2migrator.81060f18.js",
3
  "public.js": "public.3d1d91ad.js",
4
- "admin.js": "admin.39fd28da.js",
5
- "admin_vendor.js": "admin_vendor.7914137d.js",
6
  "form_editor.js": "form_editor.cc7529b3.js",
7
- "mailpoet.js": "mailpoet.a5fa72ae.js",
8
  "newsletter_editor.js": "newsletter_editor.e7b87b92.js",
9
- "vendor.js": "vendor.3c206dd6.js"
10
  }
1
  {
2
  "mp2migrator.js": "mp2migrator.81060f18.js",
3
  "public.js": "public.3d1d91ad.js",
4
+ "admin.js": "admin.dfed86f0.js",
5
+ "admin_vendor.js": "admin_vendor.8b1d6679.js",
6
  "form_editor.js": "form_editor.cc7529b3.js",
7
+ "mailpoet.js": "mailpoet.0a2f113c.js",
8
  "newsletter_editor.js": "newsletter_editor.e7b87b92.js",
9
+ "vendor.js": "vendor.16d46c95.js"
10
  }
assets/js/{vendor.3c206dd6.js → vendor.16d46c95.js} RENAMED
@@ -76,7 +76,7 @@
76
  /******/ script.charset = 'utf-8';
77
  /******/ script.async = true;
78
 
79
- /******/ script.src = __webpack_require__.p + "" + ({"0":"admin","1":"admin_vendor","2":"form_editor","3":"mailpoet","4":"newsletter_editor"}[chunkId]||chunkId) + "." + {"0":"39fd28da","1":"7914137d","2":"cc7529b3","3":"a5fa72ae","4":"e7b87b92"}[chunkId] + ".chunk.js";
80
  /******/ head.appendChild(script);
81
  /******/ }
82
  /******/ };
76
  /******/ script.charset = 'utf-8';
77
  /******/ script.async = true;
78
 
79
+ /******/ script.src = __webpack_require__.p + "" + ({"0":"admin","1":"admin_vendor","2":"form_editor","3":"mailpoet","4":"newsletter_editor"}[chunkId]||chunkId) + "." + {"0":"dfed86f0","1":"8b1d6679","2":"cc7529b3","3":"0a2f113c","4":"e7b87b92"}[chunkId] + ".chunk.js";
80
  /******/ head.appendChild(script);
81
  /******/ }
82
  /******/ };
lang/mailpoet-ca.mo CHANGED
Binary file
lang/mailpoet-da_DK.mo CHANGED
Binary file
lang/mailpoet-de_DE.mo CHANGED
Binary file
lang/mailpoet-en_GB.mo CHANGED
Binary file
lang/mailpoet-es_ES.mo CHANGED
Binary file
lang/mailpoet-fa_IR.mo CHANGED
Binary file
lang/mailpoet-fr_CA.mo CHANGED
Binary file
lang/mailpoet-fr_FR.mo CHANGED
Binary file
lang/mailpoet-it_IT.mo CHANGED
Binary file
lang/mailpoet-ja.mo CHANGED
Binary file
lang/mailpoet-nl_NL.mo CHANGED
Binary file
lang/mailpoet-pl_PL.mo CHANGED
Binary file
lang/mailpoet-pt_BR.mo CHANGED
Binary file
lang/mailpoet-pt_PT.mo CHANGED
Binary file
lang/mailpoet-ru_RU.mo CHANGED
Binary file
lang/mailpoet-sq.mo CHANGED
Binary file
lang/mailpoet-sv_SE.mo CHANGED
Binary file
lang/mailpoet-tr_TR.mo CHANGED
Binary file
lang/mailpoet.pot CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
7
- "POT-Creation-Date: 2017-12-12 16:58:16+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -475,11 +475,11 @@ msgid ""
475
  "might work within a MultiSite environment, we don’t support it."
476
  msgstr ""
477
 
478
- #: lib/Config/Populator.php:158
479
  msgid "My First List"
480
  msgstr ""
481
 
482
- #: lib/Config/Populator.php:160
483
  msgid "This list is automatically created when you install MailPoet."
484
  msgstr ""
485
 
@@ -5353,7 +5353,7 @@ msgstr ""
5353
  msgid "Care to Give Your Opinion?"
5354
  msgstr ""
5355
 
5356
- #: views/update.html:116 views/welcome.html:60
5357
  msgid "Awesome! Now, take me to MailPoet"
5358
  msgstr ""
5359
 
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: http://support.mailpoet.com/\n"
7
+ "POT-Creation-Date: 2017-12-05 16:47:51+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
475
  "might work within a MultiSite environment, we don’t support it."
476
  msgstr ""
477
 
478
+ #: lib/Config/Populator.php:156
479
  msgid "My First List"
480
  msgstr ""
481
 
482
+ #: lib/Config/Populator.php:158
483
  msgid "This list is automatically created when you install MailPoet."
484
  msgstr ""
485
 
5353
  msgid "Care to Give Your Opinion?"
5354
  msgstr ""
5355
 
5356
+ #: views/update.html:109 views/welcome.html:60
5357
  msgid "Awesome! Now, take me to MailPoet"
5358
  msgstr ""
5359
 
lib/Config/Localizer.php CHANGED
@@ -35,15 +35,4 @@ class Localizer {
35
  );
36
  return $locale;
37
  }
38
-
39
- function forceLoadWebsiteLocaleText() {
40
- $language_path = sprintf(
41
- '%s/%s-%s.mo',
42
- Env::$languages_path,
43
- Env::$plugin_name,
44
- get_locale()
45
- );
46
- unload_textdomain(Env::$plugin_name);
47
- load_textdomain(Env::$plugin_name, $language_path);
48
- }
49
  }
35
  );
36
  return $locale;
37
  }
 
 
 
 
 
 
 
 
 
 
 
38
  }
lib/Config/Populator.php CHANGED
@@ -57,8 +57,6 @@ class Populator {
57
  }
58
 
59
  function up() {
60
- $localizer = new Localizer();
61
- $localizer->forceLoadWebsiteLocaleText();
62
  $this->convertExistingDataToUTF8();
63
  $this->migrateSimpleScheduledTasks();
64
  $this->populateNewsletterSentAtField();
57
  }
58
 
59
  function up() {
 
 
60
  $this->convertExistingDataToUTF8();
61
  $this->migrateSimpleScheduledTasks();
62
  $this->populateNewsletterSentAtField();
mailpoet.php CHANGED
@@ -4,12 +4,12 @@ if(!defined('ABSPATH')) exit;
4
 
5
  /*
6
  * Plugin Name: MailPoet 3 (New)
7
- * Version: 3.3.0
8
  * Plugin URI: http://www.mailpoet.com
9
  * Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
10
  * Author: MailPoet
11
  * Author URI: http://www.mailpoet.com
12
- * Requires at least: 4.7
13
  * Tested up to: 4.9
14
  *
15
  * Domain Path: /lang/
@@ -20,7 +20,7 @@ if(!defined('ABSPATH')) exit;
20
  */
21
 
22
  $mailpoet_plugin = array(
23
- 'version' => '3.3.0',
24
  'filename' => __FILE__,
25
  'path' => dirname(__FILE__),
26
  'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
4
 
5
  /*
6
  * Plugin Name: MailPoet 3 (New)
7
+ * Version: 3.2.4
8
  * Plugin URI: http://www.mailpoet.com
9
  * Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
10
  * Author: MailPoet
11
  * Author URI: http://www.mailpoet.com
12
+ * Requires at least: 4.6
13
  * Tested up to: 4.9
14
  *
15
  * Domain Path: /lang/
20
  */
21
 
22
  $mailpoet_plugin = array(
23
+ 'version' => '3.2.4',
24
  'filename' => __FILE__,
25
  'path' => dirname(__FILE__),
26
  'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === MailPoet 3 (New) ===
2
  Contributors: mailpoet, wysija
3
  Tags: newsletter, email, welcome email, post notification, autoresponder, signup, subscription, SMTP
4
- Requires at least: 4.7
5
  Tested up to: 4.9
6
  Requires PHP: 5.3
7
- Stable tag: 3.3.0
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -116,10 +116,6 @@ Stop by our [support site](https://www.mailpoet.com/support).
116
 
117
  == Changelog ==
118
 
119
- = 3.3.0 - 2017-12-12 =
120
- * Premium: you can now segment your subscribers by email opens or clicks;
121
- * Fixed: default newsletter templates will not be duplicated when user switches profile language to one that's different from the system's.
122
-
123
  = 3.2.4 - 2017-12-05 =
124
  * Improved: [mailpoet_manage_subscription] always renders for logged in WP users. Thx Jon, Sean, Steve & metaglyphics;
125
  * Fixed: migration from MailPoet 2 on hosts with missing "mbstring" PHP extension. Thanks Alvaro!
1
  === MailPoet 3 (New) ===
2
  Contributors: mailpoet, wysija
3
  Tags: newsletter, email, welcome email, post notification, autoresponder, signup, subscription, SMTP
4
+ Requires at least: 4.6
5
  Tested up to: 4.9
6
  Requires PHP: 5.3
7
+ Stable tag: 3.2.4
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
 
116
 
117
  == Changelog ==
118
 
 
 
 
 
119
  = 3.2.4 - 2017-12-05 =
120
  * Improved: [mailpoet_manage_subscription] always renders for logged in WP users. Thx Jon, Sean, Steve & metaglyphics;
121
  * Fixed: migration from MailPoet 2 on hosts with missing "mbstring" PHP extension. Thanks Alvaro!
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit76870e8a6a5056b793a5abea5bcd85d9::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit46dc1bc911be5f4f030ee9cfb1b2a6de::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit76870e8a6a5056b793a5abea5bcd85d9
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit76870e8a6a5056b793a5abea5bcd85d9
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit76870e8a6a5056b793a5abea5bcd85d9', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit76870e8a6a5056b793a5abea5bcd85d9', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit76870e8a6a5056b793a5abea5bcd85d9
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
- $includeFiles = Composer\Autoload\ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
- composerRequire76870e8a6a5056b793a5abea5bcd85d9($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
- function composerRequire76870e8a6a5056b793a5abea5bcd85d9($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit46dc1bc911be5f4f030ee9cfb1b2a6de
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit46dc1bc911be5f4f030ee9cfb1b2a6de', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit46dc1bc911be5f4f030ee9cfb1b2a6de', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit46dc1bc911be5f4f030ee9cfb1b2a6de::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInit46dc1bc911be5f4f030ee9cfb1b2a6de::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequire46dc1bc911be5f4f030ee9cfb1b2a6de($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
+ function composerRequire46dc1bc911be5f4f030ee9cfb1b2a6de($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9
8
  {
9
  public static $files = array (
10
  '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@@ -841,10 +841,10 @@ class ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9
841
  public static function getInitializer(ClassLoader $loader)
842
  {
843
  return \Closure::bind(function () use ($loader) {
844
- $loader->prefixLengthsPsr4 = ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9::$prefixLengthsPsr4;
845
- $loader->prefixDirsPsr4 = ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9::$prefixDirsPsr4;
846
- $loader->prefixesPsr0 = ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9::$prefixesPsr0;
847
- $loader->classMap = ComposerStaticInit76870e8a6a5056b793a5abea5bcd85d9::$classMap;
848
 
849
  }, null, ClassLoader::class);
850
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit46dc1bc911be5f4f030ee9cfb1b2a6de
8
  {
9
  public static $files = array (
10
  '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
841
  public static function getInitializer(ClassLoader $loader)
842
  {
843
  return \Closure::bind(function () use ($loader) {
844
+ $loader->prefixLengthsPsr4 = ComposerStaticInit46dc1bc911be5f4f030ee9cfb1b2a6de::$prefixLengthsPsr4;
845
+ $loader->prefixDirsPsr4 = ComposerStaticInit46dc1bc911be5f4f030ee9cfb1b2a6de::$prefixDirsPsr4;
846
+ $loader->prefixesPsr0 = ComposerStaticInit46dc1bc911be5f4f030ee9cfb1b2a6de::$prefixesPsr0;
847
+ $loader->classMap = ComposerStaticInit46dc1bc911be5f4f030ee9cfb1b2a6de::$classMap;
848
 
849
  }, null, ClassLoader::class);
850
  }
views/update.html CHANGED
@@ -94,20 +94,13 @@
94
  <div class="feature-section one-col mailpoet_centered">
95
  <h2><%= __('Care to Give Your Opinion?') %></h2>
96
 
97
- <div class="pd-embed" id="pd_1505214143"></div>
98
- <script type="text/javascript">
99
- var _polldaddy = [] || _polldaddy;
100
-
101
- _polldaddy.push( {
102
- type: "iframe",
103
- auto: "1",
104
- domain: "mailpoet.polldaddy.com/s/",
105
- id: "what-s-one-feature-that-s-missing-in-mailpoet",
106
- placeholder: "pd_1505214143"
107
- } );
108
-
109
- (function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/survey.js':'http://i0.poll.fm/survey.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-embed'));
110
- </script>
111
  </div>
112
 
113
  <hr>
94
  <div class="feature-section one-col mailpoet_centered">
95
  <h2><%= __('Care to Give Your Opinion?') %></h2>
96
 
97
+ <% if settings['mta']['method'] == 'MailPoet' %>
98
+ <script type="text/javascript" charset="utf-8" src="https://secure.polldaddy.com/p/9884019.js"></script>
99
+ <noscript><a href="https://polldaddy.com/poll/9884019/">You're confident your emails arrive in your subscribers' inboxes</a></noscript>
100
+ <% else %>
101
+ <script type="text/javascript" charset="utf-8" src="https://secure.polldaddy.com/p/9884021.js"></script>
102
+ <noscript><a href="https://polldaddy.com/poll/9884021/">You're confident your emails arrive in your subscribers' inboxes</a></noscript>
103
+ <% endif %>
 
 
 
 
 
 
 
104
  </div>
105
 
106
  <hr>