akaunting/app/Http/Controllers/Common/BulkActions.php

104 lines
3.2 KiB
PHP
Raw Normal View History

2019-11-16 10:21:14 +03:00
<?php
namespace App\Http\Controllers\Common;
use App\Abstracts\Http\Controller;
use App\Http\Requests\Common\BulkAction as Request;
2021-07-30 14:09:27 +01:00
use Illuminate\Http\RedirectResponse;
2020-06-22 17:59:33 +03:00
use Illuminate\Support\Str;
2019-11-16 10:21:14 +03:00
2020-11-06 01:48:49 +03:00
class BulkActions extends Controller
2019-11-16 10:21:14 +03:00
{
/**
* Show the form for creating a new resource.
*
* @param $group
* @param $type
* @param Request $request
* @return Response
*/
public function action($group, $type, Request $request)
{
2022-06-01 10:15:55 +03:00
$handle = $request->get('handle', '*');
if ($handle == '*') {
2020-02-22 12:29:46 +03:00
return response()->json([
'success' => false,
'redirect' => true,
'error' => true,
'data' => [],
'message' => ''
]);
}
2019-11-16 10:21:14 +03:00
// Check is module
$module = module($group);
2022-06-01 10:15:55 +03:00
$page = ucfirst($type);
2019-11-16 10:21:14 +03:00
if ($module instanceof \Akaunting\Module\Module) {
$tmp = explode('.', $type);
$file_name = !empty($tmp[1]) ? Str::studly($tmp[0]) . '\\' . Str::studly($tmp[1]) : Str::studly($tmp[0]);
$bulk_actions = app('Modules\\' . $module->getStudlyName() . '\BulkActions\\' . $file_name);
2022-06-01 10:15:55 +03:00
$page = ucfirst($file_name);
2019-11-16 10:21:14 +03:00
} else {
$bulk_actions = app('App\BulkActions\\' . ucfirst($group) . '\\' . ucfirst($type));
}
2022-06-01 10:15:55 +03:00
if (isset($bulk_actions->actions[$handle]['permission']) && !user()->can($bulk_actions->actions[$handle]['permission'])) {
flash(trans('errors.message.403'))->error()->important();
2020-02-13 15:49:43 +03:00
return response()->json([
'success' => false,
'redirect' => true,
'error' => true,
'data' => [],
'message' => trans('errors.message.403')
]);
}
2022-06-01 10:15:55 +03:00
$result = $bulk_actions->{$handle}($request);
2023-02-22 19:17:32 +03:00
$count = count($request->get('selected'));
$not_passed = 0;
2022-06-01 10:15:55 +03:00
2023-02-22 19:17:32 +03:00
flash()->messages->each(function ($message) use (&$not_passed) {
if (in_array($message->level, ['danger', 'warning'])) {
$not_passed++;
}
});
$message = trans($bulk_actions->messages['general'], ['type' => $handle, 'count' => $count - $not_passed]);
if (array_key_exists($handle, $bulk_actions->messages) && $not_passed === 0) {
2022-06-01 10:15:55 +03:00
$message = trans($bulk_actions->messages[$handle], ['type' => $page]);
}
2023-02-22 19:17:32 +03:00
$level = $not_passed > 0 ? 'info' : 'success';
flash($message)->{$level}();
2023-02-22 19:17:32 +03:00
if (! empty($result) && ($result instanceof \Symfony\Component\HttpFoundation\BinaryFileResponse)) {
2019-12-27 17:18:45 +03:00
return $result;
2022-06-01 10:15:55 +03:00
} elseif (! empty($result) && ($result instanceof RedirectResponse)) {
2021-07-30 14:09:27 +01:00
return response()->json([
'success' => true,
'redirect' => $result->getTargetUrl(),
'error' => false,
'data' => [],
'message' => ''
]);
} else {
return response()->json([
'success' => true,
'redirect' => true,
'error' => false,
'data' => [],
'message' => ''
]);
}
2019-11-16 10:21:14 +03:00
}
}