- Rebased master
- Cleaned up import & moved it under Subscribers menu
This commit is contained in:
@@ -94,6 +94,18 @@ class Segment extends Model {
|
||||
}
|
||||
}
|
||||
|
||||
static function filterWithSubscriberCount($orm) {
|
||||
$orm = $orm
|
||||
->selectMany(array(self::$_table.'.id', self::$_table.'.name'))
|
||||
->select_expr('COUNT('.MP_SUBSCRIBER_SEGMENT_TABLE.'.subscriber_id)', 'subscribers')
|
||||
->left_outer_join(
|
||||
MP_SUBSCRIBER_SEGMENT_TABLE,
|
||||
array(self::$_table.'.id', '=', MP_SUBSCRIBER_SEGMENT_TABLE.'.segment_id'))
|
||||
->group_by(self::$_table.'.id')
|
||||
->group_by(self::$_table.'.name');
|
||||
return $orm;
|
||||
}
|
||||
|
||||
static function createOrUpdate($data = array()) {
|
||||
$segment = false;
|
||||
|
||||
@@ -112,4 +124,4 @@ class Segment extends Model {
|
||||
$segment->save();
|
||||
return $segment;
|
||||
}
|
||||
}
|
||||
}
|
@@ -304,9 +304,9 @@ class Subscriber extends Model {
|
||||
->where('status', 'unconfirmed');
|
||||
}
|
||||
|
||||
static function createMultiple($columns, $values) {
|
||||
static function createMultiple($columns, $values) {
|
||||
return self::rawExecute(
|
||||
'INSERT IGNORE INTO `' . self::$_table . '` ' .
|
||||
'INSERT INTO `' . self::$_table . '` ' .
|
||||
'(' . implode(', ', $columns) . ') ' .
|
||||
'VALUES ' . rtrim(
|
||||
str_repeat(
|
||||
@@ -324,31 +324,46 @@ class Subscriber extends Model {
|
||||
'created_at'
|
||||
);
|
||||
$emailPosition = array_search('email', $columns);
|
||||
$sql = function ($type) use ($columns, $subscribers, $emailPosition, $ignoreColumnsOnUpdate) {
|
||||
return array_filter(
|
||||
array_map(function ($columnPosition, $columnName) use ($type, $subscribers, $emailPosition, $ignoreColumnsOnUpdate) {
|
||||
if(in_array($columnName, $ignoreColumnsOnUpdate)) return;
|
||||
$query = array_map(
|
||||
function ($subscriber) use ($type, $columnPosition, $emailPosition) {
|
||||
return ($type === 'values') ?
|
||||
array(
|
||||
$subscriber[$emailPosition],
|
||||
$subscriber[$columnPosition]
|
||||
) :
|
||||
'WHEN email = ? THEN ?';
|
||||
}, $subscribers);
|
||||
return ($type === 'values') ?
|
||||
Helpers::flattenArray($query) :
|
||||
$columnName . '= (CASE ' . implode(' ', $query) . ' END)';
|
||||
}, array_keys($columns), $columns)
|
||||
);
|
||||
};
|
||||
$sql =
|
||||
function ($type) use (
|
||||
$columns,
|
||||
$subscribers,
|
||||
$emailPosition,
|
||||
$ignoreColumnsOnUpdate
|
||||
) {
|
||||
return array_filter(
|
||||
array_map(function ($columnPosition, $columnName) use (
|
||||
$type,
|
||||
$subscribers,
|
||||
$emailPosition,
|
||||
$ignoreColumnsOnUpdate
|
||||
) {
|
||||
if(in_array($columnName, $ignoreColumnsOnUpdate)) return;
|
||||
$query = array_map(
|
||||
function ($subscriber) use ($type, $columnPosition, $emailPosition) {
|
||||
return ($type === 'values') ?
|
||||
array(
|
||||
$subscriber[$emailPosition],
|
||||
$subscriber[$columnPosition]
|
||||
) :
|
||||
'WHEN email = ? THEN ?';
|
||||
}, $subscribers);
|
||||
return ($type === 'values') ?
|
||||
Helpers::flattenArray($query) :
|
||||
$columnName . '= (CASE ' . implode(' ', $query) . ' END)';
|
||||
}, array_keys($columns), $columns)
|
||||
);
|
||||
};
|
||||
return self::rawExecute(
|
||||
'UPDATE `' . self::$_table . '` ' .
|
||||
'SET ' . implode(', ', $sql('statement')) . ', ' .
|
||||
'updated_at = "' . $currentTime . '" ' .
|
||||
'WHERE email IN (' . rtrim(str_repeat('?,', count($subscribers)), ',') . ')',
|
||||
array_merge(Helpers::flattenArray($sql('values')), Helpers::arrayColumn($subscribers, $emailPosition))
|
||||
'WHERE email IN ' .
|
||||
'(' . rtrim(str_repeat('?,', count($subscribers)), ',') . ')',
|
||||
array_merge(
|
||||
Helpers::flattenArray($sql('values')),
|
||||
Helpers::arrayColumn($subscribers, $emailPosition)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
@@ -1,6 +1,8 @@
|
||||
<?php
|
||||
namespace MailPoet\Models;
|
||||
|
||||
use MailPoet\Util\Helpers;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
|
||||
class SubscriberSegment extends Model {
|
||||
@@ -9,4 +11,26 @@ class SubscriberSegment extends Model {
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
|
||||
static function createMultiple($segmnets, $subscribers) {
|
||||
$values = Helpers::flattenArray(
|
||||
array_map(function ($segment) use ($subscribers) {
|
||||
return array_map(function ($subscriber) use ($segment) {
|
||||
return array(
|
||||
$segment,
|
||||
$subscriber
|
||||
);
|
||||
}, $subscribers);
|
||||
}, $segmnets)
|
||||
);
|
||||
return self::rawExecute(
|
||||
'INSERT IGNORE INTO `' . self::$_table . '` ' .
|
||||
'(segment_id, subscriber_id) ' .
|
||||
'VALUES ' . rtrim(
|
||||
str_repeat(
|
||||
'(?, ?), ', count($subscribers) * count($segmnets)), ', '
|
||||
),
|
||||
$values
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user