Completed
Push — master ( 833504...ead8c1 )
by Reza
15s queued 11s
created

Create::fixAccessKeys()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 5
c 1
b 0
f 0
nc 3
nop 0
dl 0
loc 9
rs 10
1
<?php
2
3
namespace EasyPanel\Http\Livewire\Role;
4
5
use Livewire\Component;
6
use Iya30n\DynamicAcl\ACL;
7
use Iya30n\DynamicAcl\Models\Role;
8
9
class Create extends Component
10
{
11
    public $name;
12
13
    public $permissionsData = [];
14
15
    public $access = [];
16
17
    public $selectedAll = [];
18
19
    protected $rules = [
20
        'name' => 'required|min:3|unique:roles',
21
        'access' => 'required'
22
    ];
23
24
    private function fixAccessKeys()
25
    {
26
        foreach($this->access as $key => $value) {
27
            unset($this->access[$key]);
28
            $key = str_replace('-', '.', $key);
29
            $this->access[$key] = is_array($value) ? array_filter($value) : $value;
30
        }
31
32
        return array_filter($this->access);
33
    }
34
35
    /** 
36
     * this method checks if whole checkboxes checked, set value true for SelectAll checkbox
37
     * 
38
     * @param string $key
39
     * 
40
     * @param string $dashKey
41
     */
42
    public function checkSelectedAll($key, $dashKey)
43
    {
44
        $selectedRoutes = array_filter($this->access[$dashKey]);
45
46
        // we don't have delete route in cruds but we have a button for it. that's why i added 1
47
        $this->selectedAll[$dashKey] = count($selectedRoutes) == count($this->permissionsData[$key]) + 1;
48
    }
49
50
    public function create()
51
    {
52
        $this->validate();
53
54
        try {
55
            Role::create(['name' => $this->name, 'permissions' => $this->fixAccessKeys()]);
56
57
            $this->dispatchBrowserEvent('show-message', ['type' => 'success', 'message' => __('CreatedMessage', ['name' => __('Role') ])]);
58
        } catch (\Exception $exception){
59
            $this->dispatchBrowserEvent('show-message', ['type' => 'error', 'message' => $exception->getMessage()]);
60
        }
61
62
        $this->reset();
63
    }
64
65
    public function render()
66
    {
67
        $this->permissionsData = ACL::getRoutes();
68
69
        return view('admin::livewire.role.create', ['permissions' => $this->permissionsData])
70
            ->layout('admin::layouts.app', ['title' => __('CreateTitle', ['name' => __('Role') ])]);
71
    }
72
}
73