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

Update::checkSelectedAll()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 1
eloc 2
c 2
b 1
f 0
nc 1
nop 2
dl 0
loc 6
rs 10
1
<?php
2
3
namespace EasyPanel\Http\Livewire\Role;
4
5
use Iya30n\DynamicAcl\ACL;
6
use Iya30n\DynamicAcl\Models\Role;
7
use Livewire\Component;
8
9
class Update extends Component
10
{
11
    public $role;
12
13
    public $name;
14
15
    public $permissions = [];
16
17
    public $access = [];
18
19
    public $selectedAll = [];
20
21
    protected $rules = [
22
        'name' => 'min:3'
23
    ];
24
25
    public function mount(Role $role)
26
    {
27
        $this->role = $role;
28
29
        $this->name = $role->name;
30
31
        $this->permissions = ACL::getRoutes();
32
33
        $this->setSelectedAccess($role->permissions);
34
    }
35
36
    /** 
37
     * this method checks if whole checkboxes checked, set value true for SelectAll checkbox
38
     * 
39
     * @param string $key
40
     * 
41
     * @param string $dashKey
42
     */
43
    public function checkSelectedAll($key, $dashKey)
44
    {
45
        $selectedRoutes = array_filter($this->access[$dashKey]);
46
47
        // we don't have delete route in cruds but we have a button for it. that's why i added 1
48
        $this->selectedAll[$dashKey] = count($selectedRoutes) == count($this->permissions[$key]) + 1;
49
    }
50
51
    public function updated($input)
52
    {
53
        $this->validateOnly($input);
54
    }
55
56
    public function update()
57
    {
58
        if ($this->getRules())
59
            $this->validate();
60
61
        if ($this->role->is_super_admin()) {
62
            $this->dispatchBrowserEvent('show-message', ['type' => 'error', 'message' => __('CannotUpdateMessage', ['name' => __('Role')])]);
63
            return;
64
        }
65
66
        $this->role->update([
67
            'name' => $this->name,
68
            'permissions' => $this->getSelectedAccess()
69
        ]);
70
71
        $this->dispatchBrowserEvent('show-message', ['type' => 'success', 'message' => __('UpdatedMessage', ['name' => __('Role')])]);
72
    }
73
74
    public function render()
75
    {
76
        return view('admin::livewire.role.update', [
77
            'role' => $this->role,
78
        ])->layout('admin::layouts.app', ['title' => __('UpdateTitle', ['name' => __('Role')])]);
79
    }
80
81
    private function setSelectedAccess($rolePermissions)
82
    {
83
        foreach($rolePermissions as $key => $value) { 
84
            $dashKey = str_replace('.', '-', $key);
85
            $value = is_array($value) ? array_filter($value) : $value; 
86
87
            if (empty($value))
88
                continue;
89
90
            $this->access[$dashKey] = $value;
91
92
            $this->checkSelectedAll($key, $dashKey);
93
        }
94
    }
95
96
    private function getSelectedAccess()
97
    {
98
        $access = $this->access;
99
        
100
        foreach($access as $key => $value) {
101
            unset($access[$key]);
102
            $key = str_replace('-', '.', $key);
103
            $access[$key] = is_array($value) ? array_filter($value) : $value;
104
        }
105
106
        return $access;
107
    }
108
}
109