Fix WP Sync

- added missing translations in listings (responsive view)
This commit is contained in:
Jonathan Labreuille
2016-05-19 14:28:28 +02:00
parent 046127eeba
commit 6074aa927b
6 changed files with 67 additions and 63 deletions

View File

@@ -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]

View File

@@ -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;

View File

@@ -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>

View File

@@ -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>

View File

@@ -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;
}
}

View File

@@ -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'),