Added BulkActionException to allow clean error feedback from bulk actions
This commit is contained in:
parent
7c32b1f7a8
commit
ac63992efa
1 changed files with 26 additions and 19 deletions
|
@ -1,5 +1,8 @@
|
||||||
<?php declare(strict_types=1);
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
class BulkActionException extends SCoreException
|
||||||
|
{
|
||||||
|
}
|
||||||
class BulkActionBlockBuildingEvent extends Event
|
class BulkActionBlockBuildingEvent extends Event
|
||||||
{
|
{
|
||||||
/** @var array */
|
/** @var array */
|
||||||
|
@ -166,28 +169,32 @@ class BulkActions extends Extension
|
||||||
|
|
||||||
$action = $_POST['bulk_action'];
|
$action = $_POST['bulk_action'];
|
||||||
|
|
||||||
$items = null;
|
try {
|
||||||
if (isset($_POST['bulk_selected_ids']) && !empty($_POST['bulk_selected_ids'])) {
|
$items = null;
|
||||||
$data = json_decode($_POST['bulk_selected_ids']);
|
if (isset($_POST['bulk_selected_ids']) && !empty($_POST['bulk_selected_ids'])) {
|
||||||
if (empty($data)) {
|
$data = json_decode($_POST['bulk_selected_ids']);
|
||||||
throw new SCoreException("No ids specified in bulk_selected_ids");
|
if (empty($data)) {
|
||||||
|
throw new BulkActionException("No ids specified in bulk_selected_ids");
|
||||||
|
}
|
||||||
|
if (is_array($data) && !empty($data)) {
|
||||||
|
$items = $this->yield_items($data);
|
||||||
|
}
|
||||||
|
} elseif (isset($_POST['bulk_query']) && $_POST['bulk_query'] != "") {
|
||||||
|
$query = $_POST['bulk_query'];
|
||||||
|
if ($query != null && $query != "") {
|
||||||
|
$items = $this->yield_search_results($query);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new BulkActionException("No ids selected and no query present, cannot perform bulk operation on entire collection");
|
||||||
}
|
}
|
||||||
if (is_array($data)&&!empty($data)) {
|
|
||||||
$items = $this->yield_items($data);
|
|
||||||
}
|
|
||||||
} elseif (isset($_POST['bulk_query']) && $_POST['bulk_query'] != "") {
|
|
||||||
$query = $_POST['bulk_query'];
|
|
||||||
if ($query != null && $query != "") {
|
|
||||||
$items = $this->yield_search_results($query);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new SCoreException("No ids selected and no query present, cannot perform bulk operation on entire collection");
|
|
||||||
}
|
|
||||||
|
|
||||||
$bae = new BulkActionEvent($action, $items);
|
$bae = new BulkActionEvent($action, $items);
|
||||||
|
|
||||||
if (is_iterable($items)) {
|
if (is_iterable($items)) {
|
||||||
send_event($bae);
|
send_event($bae);
|
||||||
|
}
|
||||||
|
} catch (BulkActionException $e) {
|
||||||
|
log_error(BulkActionsInfo::KEY, $e->getMessage(), $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($bae->redirect) {
|
if ($bae->redirect) {
|
||||||
|
|
Reference in a new issue