Passed
Push — 5.0.0 ( 8a9c00...cfa35f )
by Fèvre
06:04
created

CreateRole   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
dl 0
loc 65
rs 10
c 1
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 13 1
A createPermission() 0 8 1
A render() 0 11 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Xetaravel\Livewire\Admin\Permission;
6
7
use Illuminate\Contracts\View\Factory;
8
use Illuminate\Contracts\View\View;
9
use Illuminate\Foundation\Application;
10
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
11
use Livewire\Attributes\On;
12
use Livewire\Component;
13
use Masmerise\Toaster\Toastable;
14
use Spatie\Permission\Models\Permission;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Xetaravel\Livewire\Admin\Permission\Permission. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
15
use Spatie\Permission\Models\Role as RoleModel;
16
use Xetaravel\Livewire\Forms\RoleForm;
17
18
class CreateRole extends Component
19
{
20
    use AuthorizesRequests;
21
    use Toastable;
22
23
    /**
24
     * The form used to create/update a model.
25
     *
26
     * @var RoleForm
27
     */
28
    public RoleForm $form;
29
30
    /**
31
     * Used to show the create modal.
32
     *
33
     * @var bool
34
     */
35
    public bool $showModal = false;
36
37
    /**
38
     * Create a blank model and assign it to the model. (Used in create modal)
39
     *
40
     * @return void
41
     */
42
    #[On('create-role')]
43
    public function createPermission(): void
44
    {
45
        $this->authorize('create', RoleModel::class);
46
47
        $this->form->reset();
48
49
        $this->showModal = true;
50
    }
51
52
    /**
53
     * Validate and save the model.
54
     *
55
     * @return void
56
     */
57
    public function create(): void
58
    {
59
        $this->authorize('create', RoleModel::class);
60
61
        $this->validate();
62
63
        $role = $this->form->create();
64
65
        $this->showModal = false;
66
67
        redirect()
68
            ->route('admin.role.index')
0 ignored issues
show
Bug introduced by
The method route() does not exist on Illuminate\Routing\Redirector. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

68
            ->/** @scrutinizer ignore-call */ route('admin.role.index')

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...
69
            ->success("The role $role->name has been created successfully !");
70
    }
71
72
    public function render(): View|Application|Factory|\Illuminate\View\View
73
    {
74
        // Select all permissions except `bypass login` which is handled by a checkbox.
75
        $permissions = Permission::where('name', '<>', 'bypass login')
76
            ->select(['name', 'description'])
77
            ->orderBy('name')
78
            ->get()
79
            ->toArray();
80
81
        return view('livewire.admin.permission.create-role', [
82
            'permissions' => $permissions,
83
        ]);
84
    }
85
}
86