TrainingUserController   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 85
Duplicated Lines 17.65 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 8
dl 15
loc 85
ccs 0
cts 60
cp 0
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 9 1
A store() 0 20 2
A show() 0 11 2
A edit() 0 14 2
A update() 15 15 2
A destroy() 0 8 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace SET\Http\Controllers;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Auth;
7
use Illuminate\Support\Facades\Event;
8
use Illuminate\Support\Facades\Gate;
9
use Illuminate\Support\Facades\Redirect;
10
use Illuminate\Support\Facades\Storage;
11
use Krucas\Notification\Facades\Notification;
12
use SET\Attachment;
13
use SET\Events\TrainingAssigned;
14
use SET\Http\Requests\TrainingUserRequest;
15
use SET\Training;
16
use SET\TrainingUser;
17
use SET\User;
18
19
class TrainingUserController extends Controller
20
{
21
    public function create(User $user)
22
    {
23
        $this->authorize('edit');
24
25
        $training = Training::all()->pluck('name', 'id')->toArray();
26
        $disabled = '';
27
28
        return view('traininguser.create', compact('user', 'training', 'disabled'));
29
    }
30
31
    public function store(TrainingUserRequest $request, User $user)
32
    {
33
        $this->authorize('edit');
34
35
        $data = $request->all();
36
        $data['author_id'] = Auth::user()->id;
37
        $data['user_id'] = $user->id;
38
39
        $trainingUser = TrainingUser::create($data);
40
41
        if ($request->hasFile('files')) {
42
            Attachment::upload($trainingUser, $request->file('files'), $data['encrypt']);
43
        }
44
45
        Event::fire(new TrainingAssigned($trainingUser));
46
47
        Notification::container()->success('Training successfully assigned');
48
49
        return redirect()->action('UserController@show', $user->id);
50
    }
51
52
    public function show(User $user, $trainingUserID)
53
    {
54
        $trainingUser = TrainingUser::with('training')->findOrFail($trainingUserID);
55
        $this->authorize('show_user', $user);
56
57
        if (isset($trainingUser->completed_date)) {
58
            return redirect()->action('UserController@show', $user->id);
59
        }
60
61
        return view('traininguser.show', compact('trainingUser', 'user'));
62
    }
63
64
    public function edit(User $user, $trainingUserID)
65
    {
66
        $this->authorize('edit_training_user', $user);
67
        $training = Training::all()->pluck('name', 'id')->toArray();
68
        $trainingUser = TrainingUser::findOrFail($trainingUserID);
69
70
        //disable the due by field unless admin.
71
        $disabled = '';
72
        if (Gate::denies('edit')) {
73
            $disabled = 'disabled';
74
        }
75
76
        return view('traininguser.edit', compact('user', 'trainingUser', 'training', 'disabled'));
77
    }
78
79 View Code Duplication
    public function update(Request $request, User $user, $trainingUserID)
80
    {
81
        $this->authorize('edit_training_user', $user);
82
        $trainingUser = TrainingUser::findOrFail($trainingUserID);
83
        $data = $request->all();
84
        $trainingUser->update($data);
85
86
        if ($request->hasFile('files')) {
87
            Attachment::upload($trainingUser, $request->file('files'), $data['encrypt']);
88
        }
89
90
        Notification::container()->success('Training successfully updated');
91
92
        return redirect()->action('UserController@show', $user->id);
93
    }
94
95
    public function destroy($userID, $trainingUserID)
96
    {
97
        $this->authorize('edit');
98
        TrainingUser::findOrFail($trainingUserID)->delete();
99
        Storage::deleteDirectory('traininguser_'.$trainingUserID);
100
101
        return Redirect::back();
102
    }
103
}
104