AdminMethodsUpdate::update()   B
last analyzed

Complexity

Conditions 8
Paths 14

Size

Total Lines 31
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 2 Features 1
Metric Value
cc 8
eloc 20
c 4
b 2
f 1
nc 14
nop 2
dl 0
loc 31
rs 8.4444
1
<?php
2
3
namespace Larrock\Core\Traits;
4
5
use Larrock\Core\Helpers\FormBuilder\FormCheckbox;
6
use Validator;
7
use Larrock\Core\Component;
8
use Illuminate\Http\Request;
9
use Larrock\Core\Helpers\MessageLarrock;
10
use Larrock\Core\Events\ComponentItemUpdated;
11
use Larrock\Core\Helpers\FormBuilder\FormDate;
12
13
trait AdminMethodsUpdate
14
{
15
    /**
16
     * @var Component
17
     */
18
    protected $config;
19
20
    /**
21
     * Update the specified resource in storage.
22
     *
23
     * @param  \Illuminate\Http\Request $request
24
     * @param  int $id
25
     * @return \Illuminate\Http\RedirectResponse
26
     * @throws \Exception
27
     */
28
    public function update(Request $request, $id)
29
    {
30
        $validate_data_array = $request->all();
31
        $data = $this->config->getModel()::find($id);
32
        $data->fill($request->all());
33
34
        foreach ($this->config->rows as $row) {
35
            if ($row->fillable && ! isset($data->{$row->name})) {
36
                if ($row instanceof FormDate) {
37
                    $data->{$row->name} = $request->input('date', date('Y-m-d'));
38
                } else {
39
                    $data->{$row->name} = $request->input($row->name, $row->default);
40
                }
41
                $validate_data_array[$row->name] = $data->{$row->name};
42
            }
43
            if ($row instanceof FormCheckbox && empty($request->get($row->name, null))) {
44
                $data->{$row->name} = null;
45
            }
46
        }
47
48
        $validator = Validator::make($validate_data_array, $this->config->getValid($id));
49
        if ($validator->fails()) {
50
            return back()->withInput($request->except('password'))->withErrors($validator);
51
        }
52
53
        $data->save();
54
        event(new ComponentItemUpdated($this->config, $data, $request));
55
        MessageLarrock::success('Материал '.$request->input('title').' изменен');
56
        \Cache::flush();
57
58
        return back();
59
    }
60
}
61