50 lines
1.5 KiB
PHP
50 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Traits\Controllers;
|
|
|
|
use App\Actions\Common\ExecuteMassAction;
|
|
use App\Contracts\Executor;
|
|
use App\Enums\MassActionType;
|
|
use App\Http\Requests\Bo\MassActionRequest;
|
|
use Illuminate\Http\RedirectResponse;
|
|
|
|
/**
|
|
* This trait works with Route::bind in App service provider
|
|
* to resolve the model and the DB row
|
|
* It does not work with binder Service
|
|
*
|
|
* @mixin \Illuminate\Routing\Controller
|
|
* @mixin \App\Interfaces\MassActions
|
|
*/
|
|
trait HasMassActions
|
|
{
|
|
/** Toggles model status */
|
|
public function massActions(
|
|
MassActionRequest $request,
|
|
ExecuteMassAction $action,
|
|
Executor $executor,
|
|
): RedirectResponse {
|
|
$modelClass = $this->getModelClass();
|
|
$model = new $modelClass();
|
|
$type = $request->getMassActionType();
|
|
|
|
if (in_array($type, [MassActionType::Star, MassActionType::Unstar], true)) {
|
|
$this->authorize('toggleStar', $model);
|
|
}
|
|
|
|
if (in_array($type, [MassActionType::Publish, MassActionType::Unpublish], true)) {
|
|
$this->authorize('toggleStatus', $model);
|
|
}
|
|
|
|
$executor->execute($action, $request->toExecuteMassActionInput($modelClass));
|
|
|
|
$message = match ($type) {
|
|
MassActionType::Star, MassActionType::Unstar => trans('crud.messages.star_saved'),
|
|
MassActionType::Publish, MassActionType::Unpublish => trans('crud.messages.publish_status_saved'),
|
|
};
|
|
|
|
return back()->with('info', $message);
|
|
}
|
|
}
|