Optimized Bulk actions

- Updated SQL schema for every created_at column so that it has a default value
- Updated unit tests based on recent changes (new methods in SubscriberSegment model)
- Added check for HelpScout initialization code so that it doesn't throw errors
This commit is contained in:
Jonathan Labreuille
2016-05-27 10:49:34 +02:00
parent 4a4c4e093a
commit 3c46a5b434
10 changed files with 288 additions and 244 deletions

View File

@ -498,54 +498,72 @@ class Subscriber extends Model {
));
}
static function bulkAddToList($orm, $data = array()) {
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
$segment = Segment::findOne($segment_id);
if($segment === false) return false;
$subscribers_count = parent::bulkAction($orm,
function($subscriber_ids) use($segment) {
SubscriberSegment::subscribeManyToSegments(
$subscriber_ids, array($segment->id)
);
}
);
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
static function bulkMoveToList($orm, $data = array()) {
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
$segment = Segment::findOne($segment_id);
if($segment !== false) {
$subscribers_count = 0;
$subscribers = $orm->findResultSet();
foreach($subscribers as $subscriber) {
SubscriberSegment::resetSubscriptions($subscriber, array($segment->id));
$subscribers_count++;
}
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
return false;
if($segment === false) return false;
$subscribers_count = parent::bulkAction($orm,
function($subscriber_ids) use($segment) {
SubscriberSegment::deleteManySubscriptions($subscriber_ids);
SubscriberSegment::subscribeManyToSegments(
$subscriber_ids, array($segment->id)
);
});
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
static function bulkRemoveFromList($orm, $data = array()) {
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
$segment = Segment::findOne($segment_id);
if($segment !== false) {
$subscribers_count = 0;
if($segment === false) return false;
// delete relations with segment
$subscribers = $orm->findResultSet();
foreach($subscribers as $subscriber) {
SubscriberSegment::unsubscribeFromSegments($subscriber, array($segment->id));
$subscribers_count++;
$subscribers_count = parent::bulkAction($orm,
function($subscriber_ids) use($segment) {
SubscriberSegment::deleteManySubscriptions(
$subscriber_ids, array($segment->id)
);
}
);
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
return false;
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
static function bulkRemoveFromAllLists($orm) {
$subscribers = $orm->findResultSet();
$subscribers_count = 0;
foreach($subscribers as $subscriber) {
SubscriberSegment::unsubscribeFromSegments($subscriber);
$subscribers_count++;
}
static function bulkRemoveFromAllLists($orm, $data = array()) {
$subscribers_count = $orm->count();
parent::bulkAction($orm, function($subscriber_ids) {
SubscriberSegment::deleteManySubscriptions($subscriber_ids);
});
return $subscribers_count;
}
@ -567,31 +585,9 @@ class Subscriber extends Model {
return false;
}
static function bulkAddToList($orm, $data = array()) {
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
$segment = Segment::findOne($segment_id);
if($segment !== false) {
$subscribers_count = 0;
$subscribers = $orm->findMany();
foreach($subscribers as $subscriber) {
try {
SubscriberSegment::subscribeToSegments($subscriber, array($segment->id));
$subscribers_count++;
} catch(Exception $e) {
}
}
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
return false;
}
static function bulkTrash($orm) {
return parent::bulkAction($orm, function($subscriber_ids) use($orm) {
parent::rawExecute(join(' ', array(
return parent::bulkAction($orm, function($subscriber_ids) {
self::rawExecute(join(' ', array(
'UPDATE `'.self::$_table.'`',
'SET `deleted_at` = NOW()',
'WHERE `id` IN ('.rtrim(str_repeat('?,', count($subscriber_ids)), ',').')',