Completed
Push — master ( 720025...0e57e6 )
by ARCANEDEV
04:07
created

RolesController::activate()   B

Complexity

Conditions 3
Paths 9

Size

Total Lines 35
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 35
c 0
b 0
f 0
ccs 0
cts 30
cp 0
rs 8.8571
cc 3
eloc 22
nc 9
nop 1
crap 12
1
<?php namespace Arcanesoft\Auth\Http\Controllers\Admin;
2
3
use Arcanesoft\Auth\Http\Requests\Admin\Roles\CreateRoleRequest;
4
use Arcanesoft\Auth\Http\Requests\Admin\Roles\UpdateRoleRequest;
5
use Arcanesoft\Auth\Policies\RolesPolicy;
6
use Arcanesoft\Contracts\Auth\Models\Role;
7
use Log;
8
9
/**
10
 * Class     RolesController
11
 *
12
 * @package  Arcanesoft\Auth\Http\Controllers\Admin
13
 * @author   ARCANEDEV <[email protected]>
14
 */
15
class RolesController extends Controller
16
{
17
    /* ------------------------------------------------------------------------------------------------
18
     |  Properties
19
     | ------------------------------------------------------------------------------------------------
20
     */
21
    /**
22
     * The Role model.
23
     *
24
     * @var \Arcanesoft\Contracts\Auth\Models\Role
25
     */
26
    protected $role;
27
28
    /* ------------------------------------------------------------------------------------------------
29
     |  Constructor
30
     | ------------------------------------------------------------------------------------------------
31
     */
32
    /**
33
     * Instantiate the controller.
34
     *
35
     * @param  \Arcanesoft\Contracts\Auth\Models\Role  $role
36
     */
37
    public function __construct(Role $role)
38
    {
39
        parent::__construct();
40
41
        $this->role = $role;
42
43
        $this->setCurrentPage('auth-roles');
44
        $this->addBreadcrumbRoute('Roles', 'admin::auth.roles.index');
45
    }
46
47
    /* ------------------------------------------------------------------------------------------------
48
     |  Main Functions
49
     | ------------------------------------------------------------------------------------------------
50
     */
51
    public function index()
52
    {
53
        $this->authorize(RolesPolicy::PERMISSION_LIST);
54
55
        $roles = $this->role->with('users', 'permissions')->paginate(30);
0 ignored issues
show
Bug introduced by
The method with() does not seem to exist on object<Arcanesoft\Contracts\Auth\Models\Role>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
56
57
        $title = 'List of roles';
58
        $this->setTitle($title);
59
        $this->addBreadcrumb($title);
60
61
        return $this->view('admin.roles.list', compact('roles'));
62
    }
63
64
    public function create()
65
    {
66
        $this->authorize(RolesPolicy::PERMISSION_CREATE);
67
68
        $title = 'Create a role';
69
        $this->setTitle($title);
70
        $this->addBreadcrumb($title);
71
72
        return $this->view('admin.roles.create');
73
    }
74
75
    public function store(CreateRoleRequest $request)
76
    {
77
        $this->authorize(RolesPolicy::PERMISSION_CREATE);
78
79
        $this->role->fill($request->only('name', 'slug', 'description'));
0 ignored issues
show
Bug introduced by
The method fill() does not seem to exist on object<Arcanesoft\Contracts\Auth\Models\Role>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
80
        $this->role->save();
81
        $this->role->permissions()->attach($request->get('permissions'));
82
83
        $message = 'The new role was successfully created !';
84
85
        Log::info($message, $this->role->toArray());
0 ignored issues
show
Bug introduced by
The method toArray() does not seem to exist on object<Arcanesoft\Contracts\Auth\Models\Role>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
86
        $this->notifySuccess($message, 'Role created !');
87
88
        return redirect()
89
            ->route('admin::auth.roles.index')
90
            ->with('success', $message);
91
    }
92
93
    public function show(Role $role)
94
    {
95
        $this->authorize(RolesPolicy::PERMISSION_SHOW);
96
97
        /** @var  \Arcanesoft\Auth\Models\Role  $role */
98
        $role->load(['users', 'permissions', 'permissions.group']);
99
100
        $title = 'Role details';
101
        $this->setTitle($title);
102
        $this->addBreadcrumb($title);
103
104
        return $this->view('admin.roles.show', compact('role'));
105
    }
106
107
    public function edit(Role $role)
108
    {
109
        $this->authorize(RolesPolicy::PERMISSION_UPDATE);
110
111
        /** @var  \Arcanesoft\Auth\Models\Role  $role */
112
        $role->load(['users', 'permissions']);
113
114
        $title = 'Edit Role';
115
        $this->setTitle($title);
116
        $this->addBreadcrumb($title);
117
118
        return $this->view('admin.roles.edit', compact('role'));
119
    }
120
121
    public function update(UpdateRoleRequest $request, Role $role)
122
    {
123
        $this->authorize(RolesPolicy::PERMISSION_UPDATE);
124
125
        /** @var  \Arcanesoft\Auth\Models\Role  $role */
126
        $role->fill($request->only('name', 'slug', 'description'));
127
        $role->save();
128
        $role->permissions()->sync($request->get('permissions'));
129
130
        $message = 'The role was successfully updated !';
131
132
        Log::info($message, $role->toArray());
133
        $this->notifySuccess($message, 'Role updated !');
134
135
        return redirect()
136
            ->route('admin::auth.roles.show', [$role->hashed_id])
137
            ->with('success', $message);
138
    }
139
140
    public function activate(Role $role)
141
    {
142
        /** @var  \Arcanesoft\Auth\Models\Role  $role */
143
        self::onlyAjax();
144
        $this->authorize(RolesPolicy::PERMISSION_UPDATE);
145
146
        try {
147
            if ($role->isActive()) {
148
                $role->deactivate();
149
                $title   = 'Role disabled !';
150
                $message = "The role {$role->name} has been successfully disabled !";
151
            }
152
            else {
153
                $role->activate();
154
                $title   = 'Role activated !';
155
                $message = "The role {$role->name} has been successfully activated !";
156
            }
157
158
            Log::info($message, $role->toArray());
159
            $this->notifySuccess($message, $title);
160
161
            $ajax = [
162
                'status'  => 'success',
163
                'message' => $message,
164
            ];
165
        }
166
        catch(\Exception $e) {
167
            $ajax = [
168
                'status'  => 'error',
169
                'message' => $e->getMessage(),
170
            ];
171
        }
172
173
        return response()->json($ajax);
174
    }
175
176
    public function delete(Role $role)
177
    {
178
        /** @var  \Arcanesoft\Auth\Models\Role  $role */
179
        self::onlyAjax();
180
        $this->authorize(RolesPolicy::PERMISSION_DELETE);
181
182
        try {
183
            $role->delete();
184
185
            $message = "The role {$role->name} has been successfully deleted !";
186
            Log::info($message, $role->toArray());
187
            $this->notifySuccess($message, 'Role deleted !');
188
189
            $ajax = [
190
                'status'  => 'success',
191
                'message' => $message,
192
            ];
193
        }
194
        catch(\Exception $e) {
195
            $ajax = [
196
                'status'  => 'error',
197
                'message' => $e->getMessage(),
198
            ];
199
        }
200
201
        return response()->json($ajax);
202
    }
203
}
204