- Finishes import migration

- Updates models
- Improves Notice.js
This commit is contained in:
MrCasual
2015-11-06 21:28:24 -05:00
parent 158d26ef86
commit 3f168d052f
16 changed files with 586 additions and 139 deletions

View File

@ -1,6 +1,7 @@
<?php
namespace MailPoet\Models;
use MailPoet\Util\Helpers;
if(!defined('ABSPATH')) exit;
class Subscriber extends Model {
@ -302,4 +303,52 @@ class Subscriber extends Model {
->whereNull('deleted_at')
->where('status', 'unconfirmed');
}
static function createMultiple($columns, $values) {
return self::rawExecute(
'INSERT IGNORE INTO `' . self::$_table . '` ' .
'(' . implode(', ', $columns) . ') ' .
'VALUES ' . rtrim(
str_repeat(
'(' . rtrim(str_repeat('?,', count($columns)), ',') . ')' . ', '
, count($values)
)
, ', '),
Helpers::flattenArray($values)
);
}
static function updateMultiple($columns, $subscribers, $currentTime) {
$ignoreColumnsOnUpdate = array(
'email',
'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)
);
};
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))
);
}
}