public function updateSeries(int $seriesId, array $oldItems, array $post) : bool
{
$this->db->beginTransaction();
$newItems = \explode(',', $post['items']);
$inserts = \array_diff($newItems, $oldItems);
$deletes = \array_diff($oldItems, $newItems);
foreach ($deletes as $del) {
list($type, $itemid) = \explode('_', $del);
switch ($type) {
case 'series':
$this->db->delete('hull_blog_series_items', ['parent' => $seriesId, 'series' => $itemid]);
break;
case 'blogpost':
$this->db->delete('hull_blog_series_items', ['parent' => $seriesId, 'post' => $itemid]);
break;
}
}
$updates = ['name' => $post['name'], 'preamble' => $post['preamble'] ?? '', 'format' => $post['format'] ?? 'HTML', 'config' => $post['config'] ? \json_encode($post['config']) : '[]'];
if (!empty($post['author'])) {
$updates['author'] = $post['author'];
}
$this->db->update('hull_blog_series', $updates, ['seriesid' => $seriesId]);
$listOrder = 0;
foreach ($newItems as $new) {
if (\strpos($new, '_') === false) {
continue;
}
list($type, $itemId) = \explode('_', $new);
if (\in_array($new, $inserts)) {
switch ($type) {
case 'series':
$this->db->insert('hull_blog_series_items', ['parent' => $seriesId, 'series' => $itemId, 'listorder' => ++$listOrder]);
break;
case 'blogpost':
$this->db->insert('hull_blog_series_items', ['parent' => $seriesId, 'post' => $itemId, 'listorder' => ++$listOrder]);
break;
}
} else {
switch ($type) {
case 'series':
$this->db->update('hull_blog_series_items', ['listorder' => ++$listOrder], ['parent' => $seriesId, 'series' => $itemId]);
break;
case 'blogpost':
$this->db->update('hull_blog_series_items', ['listorder' => ++$listOrder], ['parent' => $seriesId, 'post' => $itemId]);
break;
}
}
}
return $this->db->commit();
}