StoreHandlerTrait   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Test Coverage

Coverage 96.67%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 30
c 1
b 0
f 0
dl 0
loc 73
ccs 29
cts 30
cp 0.9667
rs 10
wmc 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B handleStore() 0 56 10
1
<?php
2
3
namespace Yaro\Jarboe\Http\Controllers\Traits\Handlers;
4
5
use Illuminate\Http\Request;
6
use Spatie\Permission\Exceptions\UnauthorizedException;
7
use Yaro\Jarboe\Exceptions\PermissionDenied;
8
use Yaro\Jarboe\Table\CRUD;
9
use Yaro\Jarboe\Table\Fields\AbstractField;
0 ignored issues
show
Bug introduced by
The type Yaro\Jarboe\Table\Fields\AbstractField was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
10
11
trait StoreHandlerTrait
12
{
13
    /**
14
     * Handle store action.
15
     *
16
     * @param Request $request
17
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
18
     * @throws PermissionDenied
19
     * @throws UnauthorizedException
20
     */
21 4
    public function handleStore(Request $request)
22
    {
23 4
        $this->beforeInit();
24 4
        $this->init();
25 4
        $this->bound();
26
27 4
        if (!$this->crud()->actions()->isAllowed('create')) {
28 1
            throw new PermissionDenied();
29
        }
30
31 3
        if (!$this->can('store')) {
32 2
            throw UnauthorizedException::forPermissions(['store']);
33
        }
34
35
36 1
        $fields = $this->crud()->getFieldsWithoutMarkup();
37
38 1
        $inputs = [];
39
        /** @var AbstractField $field */
40 1
        foreach ($fields as $field) {
41 1
            if ($field->belongsToArray()) {
42 1
                $inputs += [$field->name() => $request->input($field->getDotPatternName())];
43
            }
44
        }
45 1
        $request->replace(
46 1
            $request->all() + $inputs
47
        );
48
49
50 1
        $data = [];
51 1
        $additional = [];
52
        /** @var AbstractField $field */
53 1
        foreach ($fields as $field) {
54 1
            if ($field->hidden('create') || $field->shouldSkip($request)) {
55
                continue;
56
            }
57
58 1
            if ($field->belongsToArray()) {
59 1
                $additional[$field->getAncestorName()][$field->getDescendantName()] = $field->value($request);
60 1
                continue;
61
            }
62
63 1
            $data += [$field->name() => $field->value($request)];
64
        }
65
66 1
        $data = $data + $additional;
67
68 1
        $model = $this->crud()->repo()->store($data);
69
        /** @var AbstractField $field */
70 1
        foreach ($fields as $field) {
71 1
            $field->afterStore($model, $request);
72
        }
73
74 1
        $this->idEntity = $model->getKey();
0 ignored issues
show
Bug Best Practice introduced by
The property idEntity does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
75
76 1
        return redirect($this->crud()->listUrl());
77
    }
78
79
    abstract protected function beforeInit();
80
    abstract protected function init();
81
    abstract protected function bound();
82
    abstract protected function crud(): CRUD;
83
    abstract protected function can($action): bool;
84
}
85