Fix WP Sync
- added missing translations in listings (responsive view)
This commit is contained in:
@@ -119,7 +119,6 @@ define([
|
||||
}
|
||||
extractTimeStamp() {
|
||||
const timeStamp = parseInt(this.props.item[this.props.field.name], 10);
|
||||
|
||||
this.setState({
|
||||
year: Moment.unix(timeStamp).year(),
|
||||
// Moment returns the month as [0..11]
|
||||
|
@@ -106,7 +106,6 @@ define(
|
||||
item[field.name] = this.state.item[field.name];
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
// set id if specified
|
||||
if(this.props.params.id !== undefined) {
|
||||
item.id = this.props.params.id;
|
||||
|
@@ -253,7 +253,7 @@ define(
|
||||
var statistics_column =
|
||||
(!mailpoet_settings.tracking || !mailpoet_settings.tracking.enabled) ?
|
||||
false :
|
||||
<td className="column {statistics_class}" data-colname="Statistics">
|
||||
<td className="column {statistics_class}" data-colname={ MailPoet.I18n.t('statistics') }>
|
||||
{ this.renderStatistics(newsletter) }
|
||||
</td>;
|
||||
|
||||
@@ -265,17 +265,17 @@ define(
|
||||
</strong>
|
||||
{ actions }
|
||||
</td>
|
||||
<td className="column" data-colname="Status">
|
||||
<td className="column" data-colname={ MailPoet.I18n.t('status') }>
|
||||
{ this.renderStatus(newsletter) }
|
||||
</td>
|
||||
<td className="column" data-colname="Lists">
|
||||
<td className="column" data-colname={ MailPoet.I18n.t('lists') }>
|
||||
{ segments }
|
||||
</td>
|
||||
{ statistics_column }
|
||||
<td className="column-date" data-colname="Subscribed on">
|
||||
<td className="column-date" data-colname={ MailPoet.I18n.t('createdOn') }>
|
||||
<abbr>{ MailPoet.Date.format(newsletter.created_at) }</abbr>
|
||||
</td>
|
||||
<td className="column-date" data-colname="Last modified on">
|
||||
<td className="column-date" data-colname={ MailPoet.I18n.t('lastModifiedOn') }>
|
||||
<abbr>{ MailPoet.Date.format(newsletter.updated_at) }</abbr>
|
||||
</td>
|
||||
</div>
|
||||
|
@@ -99,7 +99,6 @@ const bulk_actions = [
|
||||
const item_actions = [
|
||||
{
|
||||
name: 'edit',
|
||||
label: MailPoet.I18n.t('edit'),
|
||||
link: function(item) {
|
||||
return (
|
||||
<Link to={ `/edit/${item.id}` }>{MailPoet.I18n.t('edit')}</Link>
|
||||
@@ -111,7 +110,7 @@ const item_actions = [
|
||||
},
|
||||
{
|
||||
name: 'duplicate_segment',
|
||||
label: 'Duplicate',
|
||||
label: MailPoet.I18n.t('duplicate'),
|
||||
onClick: function(item, refresh) {
|
||||
return MailPoet.Ajax.post({
|
||||
endpoint: 'segments',
|
||||
@@ -130,13 +129,13 @@ const item_actions = [
|
||||
},
|
||||
{
|
||||
name: 'read_more',
|
||||
label: MailPoet.I18n.t('readMore'),
|
||||
className: 'read_more',
|
||||
onClick: function(item, refresh) {
|
||||
// TODO: add URL with KB article
|
||||
var url = 'http://example.com',
|
||||
link = window.open(url, '_blank');
|
||||
win.focus();
|
||||
link: function(item) {
|
||||
return (
|
||||
<a
|
||||
href="https://www.mailpoet.com/#TODO"
|
||||
target="_blank"
|
||||
>{MailPoet.I18n.t('readMore')}</a>
|
||||
);
|
||||
},
|
||||
display: function(segment) {
|
||||
return (segment.type === 'wp_users');
|
||||
@@ -145,7 +144,6 @@ const item_actions = [
|
||||
{
|
||||
name: 'synchronize_segment',
|
||||
label: MailPoet.I18n.t('forceSync'),
|
||||
className: 'update',
|
||||
onClick: function(item, refresh) {
|
||||
MailPoet.Modal.loading(true);
|
||||
MailPoet.Ajax.post({
|
||||
@@ -187,32 +185,42 @@ const SegmentList = React.createClass({
|
||||
'manage-column',
|
||||
'column-primary',
|
||||
'has-row-actions'
|
||||
),
|
||||
subscribed = segment.subscribers_count.subscribed || 0,
|
||||
unconfirmed = segment.subscribers_count.unconfirmed || 0,
|
||||
unsubscribed = segment.subscribers_count.unsubscribed || 0;
|
||||
);
|
||||
|
||||
const subscribed = ~~(segment.subscribers_count.subscribed || 0);
|
||||
const unconfirmed = ~~(segment.subscribers_count.unconfirmed || 0);
|
||||
const unsubscribed = ~~(segment.subscribers_count.unsubscribed || 0);
|
||||
|
||||
let segment_name = (
|
||||
<Link to={ `/edit/${segment.id}` }>{ segment.name }</Link>
|
||||
);
|
||||
|
||||
// the WP users segment is not editable so just display its name
|
||||
if (segment.type === 'wp_users') {
|
||||
segment_name = segment.name;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<td className={ rowClasses }>
|
||||
<strong>
|
||||
<a>{ segment.name }</a>
|
||||
{ segment_name }
|
||||
</strong>
|
||||
{ actions }
|
||||
</td>
|
||||
<td className="column-date" data-colname="Description">
|
||||
<td className="column-date" data-colname={ MailPoet.I18n.t('description') }>
|
||||
<abbr>{ segment.description }</abbr>
|
||||
</td>
|
||||
<td className="column-date" data-colname="Subscribed">
|
||||
<abbr>{ parseInt(subscribed).toLocaleString() }</abbr>
|
||||
<td className="column-date" data-colname={ MailPoet.I18n.t('subscribed') }>
|
||||
<abbr>{ subscribed }</abbr>
|
||||
</td>
|
||||
<td className="column-date" data-colname="Unconfirmed">
|
||||
<abbr>{ parseInt(unconfirmed).toLocaleString() }</abbr>
|
||||
<td className="column-date" data-colname={ MailPoet.I18n.t('unconfirmed') }>
|
||||
<abbr>{ unconfirmed }</abbr>
|
||||
</td>
|
||||
<td className="column-date" data-colname="Unsubscribed">
|
||||
<abbr>{ parseInt(unsubscribed).toLocaleString() }</abbr>
|
||||
<td className="column-date" data-colname={ MailPoet.I18n.t('unsubscribed') }>
|
||||
<abbr>{ unsubscribed }</abbr>
|
||||
</td>
|
||||
<td className="column-date" data-colname="Created on">
|
||||
<td className="column-date" data-colname={ MailPoet.I18n.t('createdOn') }>
|
||||
<abbr>{ MailPoet.Date.format(segment.created_at) }</abbr>
|
||||
</td>
|
||||
</div>
|
||||
|
@@ -2,15 +2,20 @@
|
||||
namespace MailPoet\Segments;
|
||||
use \MailPoet\Models\Subscriber;
|
||||
use \MailPoet\Models\Segment;
|
||||
use \MailPoet\Models\SubscriberSegment;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
|
||||
class WP {
|
||||
static function synchronizeUser($wp_user_id, $old_wp_user_data = false) {
|
||||
$wp_user = \get_userdata($wp_user_id);
|
||||
$segment = Segment::getWPUsers();
|
||||
if($wp_user === false or $segment === false) return;
|
||||
$wp_users_segment = Segment::getWPUsers();
|
||||
|
||||
if($wp_user === false or $wp_users_segment === false) return;
|
||||
|
||||
$subscriber = Subscriber::where('wp_user_id', $wp_user->ID)
|
||||
->findOne();
|
||||
$schedule_welcome_newsletter = false;
|
||||
|
||||
switch(current_filter()) {
|
||||
case 'delete_user':
|
||||
case 'deleted_user':
|
||||
@@ -36,18 +41,25 @@ class WP {
|
||||
'email' => $wp_user->user_email,
|
||||
'first_name' => $first_name,
|
||||
'last_name' => $last_name,
|
||||
'status' => 'subscribed'
|
||||
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||
);
|
||||
|
||||
if($subscriber !== false) {
|
||||
$data['id'] = $subscriber->id();
|
||||
$data['deleted_at'] = null; // remove the user from the trash
|
||||
unset($data['status']); // don't override status for existing users
|
||||
}
|
||||
|
||||
$subscriber = Subscriber::createOrUpdate($data);
|
||||
if($subscriber->getErrors() === false && $subscriber->id > 0) {
|
||||
if($segment !== false) {
|
||||
$segment->addSubscriber($subscriber->id);
|
||||
}
|
||||
if(isset($schedule_welcome_newsletter)) {
|
||||
// add subscriber to the WP Users segment
|
||||
SubscriberSegment::addSubscriptions(
|
||||
$subscriber,
|
||||
array($wp_users_segment->id)
|
||||
);
|
||||
|
||||
// welcome email
|
||||
if($schedule_welcome_newsletter === true) {
|
||||
Scheduler::scheduleWPUserWelcomeNotification(
|
||||
$subscriber->id,
|
||||
(array) $wp_user,
|
||||
@@ -61,34 +73,19 @@ class WP {
|
||||
|
||||
static function synchronizeUsers() {
|
||||
// get wordpress users list
|
||||
$segment = Segment::getWPUsers();
|
||||
$wp_users_segment = Segment::getWPUsers();
|
||||
|
||||
// count WP users
|
||||
$users_count = \count_users();
|
||||
$linked_subscribers_count = $segment->subscribers()->count();
|
||||
|
||||
if($users_count['total_users'] !== $linked_subscribers_count) {
|
||||
$linked_subscribers = Subscriber::select('wp_user_id')
|
||||
->whereNotNull('wp_user_id')
|
||||
->findArray();
|
||||
|
||||
$exclude_ids = array();
|
||||
if(!empty($linked_subscribers)) {
|
||||
$exclude_ids = array_map(function($subscriber) {
|
||||
return $subscriber['wp_user_id'];
|
||||
}, $linked_subscribers);
|
||||
}
|
||||
|
||||
$users = \get_users(array(
|
||||
// fetch all wp users id
|
||||
$wp_users = \get_users(array(
|
||||
'count_total' => false,
|
||||
'fields' => 'ID',
|
||||
'exclude' => $exclude_ids
|
||||
'fields' => 'ID'
|
||||
));
|
||||
|
||||
foreach($users as $user) {
|
||||
static::synchronizeUser($user);
|
||||
}
|
||||
// update data for each wp user
|
||||
foreach($wp_users as $wp_user_id) {
|
||||
static::synchronizeUser($wp_user_id);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -33,12 +33,13 @@
|
||||
'multipleSegmentsDeleted': __('%$1d segments were permanently deleted.'),
|
||||
'oneSegmentRestored': __('1 segment has been restored from the trash.'),
|
||||
'multipleSegmentsRestored': __('%$1d segments have been restored from the trash.'),
|
||||
'duplicate': __('Duplicate'),
|
||||
'listDuplicated': __('List "%$1s" has been duplicated.'),
|
||||
'update': __('Update'),
|
||||
'forceSync': __('Force Sync'),
|
||||
'readMore': __('Read More'),
|
||||
'listSynchronized': __('List "%$1s" has been synchronized.'),
|
||||
'viewSubscribers': __('View subscribers'),
|
||||
'viewSubscribers': __('View Subscribers'),
|
||||
'new': __('New'),
|
||||
'edit': __('Edit'),
|
||||
'trash': __('Trash'),
|
||||
|
Reference in New Issue
Block a user