OrganizationsController   A
last analyzed

Complexity

Total Complexity 26

Size/Duplication

Total Lines 153
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 78
c 3
b 0
f 0
dl 0
loc 153
rs 10
wmc 26

15 Methods

Rating   Name   Duplication   Size   Complexity  
A prepareInvitation() 0 11 1
A showAddForm() 0 3 1
A showEditForm() 0 5 1
A listOrganizations() 0 18 3
A processAdd() 0 5 1
A list() 0 3 1
A sendInvitations() 0 8 1
A processEdit() 0 6 1
A redirectToRegisterPage() 0 5 1
A joinOrganization() 0 7 1
A showLogoutToRegister() 0 8 2
A showLogoutToAcceptInvitation() 0 7 2
A showAcceptOrDeclinePage() 0 6 3
A redirectToLogin() 0 6 1
A acceptInvite() 0 14 6
1
<?php
2
3
4
namespace App\Http\Controllers;
5
6
use App\Http\Common\Form\OrganizationForm;
7
use App\Src\UseCases\Domain\Organizations\CreateOrganization;
8
use App\Src\UseCases\Domain\Organizations\EditOrganization;
9
use App\Src\UseCases\Domain\Organizations\GetOrganization;
10
use App\Src\UseCases\Domain\Organizations\Invitation\AttachUserToAnOrganization;
11
use App\Src\UseCases\Domain\Organizations\Invitation\InviteUsersInOrganization;
12
use App\Src\UseCases\Domain\Organizations\Invitation\PrepareInvitationUsersInOrganization;
13
use App\Src\UseCases\Domain\Organizations\Invitation\RespondInvitationToAnOrganization;
14
use App\Src\UseCases\Domain\Organizations\ListOrganizations;
15
use Illuminate\Http\Request;
16
use Illuminate\Support\Facades\Auth;
17
18
class OrganizationsController extends Controller
19
{
20
    public function showAddForm()
21
    {
22
        return view('organizations/add_form');
23
    }
24
25
    public function processAdd(Request $request, CreateOrganization $createOrganization, OrganizationForm $form)
26
    {
27
        list($name, $address, $picture) = $form->process();
28
        $createOrganization->create($name, $picture, $address);
29
        return redirect()->route('organization.list');
30
    }
31
32
    public function showEditForm(string $organisationId, GetOrganization $getOrganization)
33
    {
34
        $organization = $getOrganization->get($organisationId);
35
        return view('organizations/edit_form', [
36
            'organization' => $organization->toArray()
37
        ]);
38
    }
39
40
    public function processEdit(string $organizationId, Request $request, EditOrganization $editOrganization, OrganizationForm $form)
41
    {
42
        list($name, $address, $picture) = $form->process();
43
        $editOrganization->edit($organizationId, $name, $picture, $address);
44
        $request->session()->flash('notif_msg', __('organizations.message.organization.updated'));
45
        return redirect()->back();
46
    }
47
48
    public function list()
49
    {
50
        return view('organizations/list');
51
    }
52
53
    public function listOrganizations(Request $request, ListOrganizations $listOrganizations)
54
    {
55
        $page = $request->input('start')/10 + 1;
56
        $organizations = $listOrganizations->list($page, 10);
57
        $total = isset($organizations['total']) ? $organizations['total'] : 0;
58
        $list = [];
59
        foreach ($organizations['list'] as $organization){
60
            $org = $organization->toArray();
61
            $list[] = [
62
                $org['name'],
63
                $org['url_picture'],
64
                '',
65
                $org['uuid'],
66
                route('organization.edit.form', ['id' => $org['uuid']])
67
            ];
68
        }
69
70
        return format($total, $list);
71
    }
72
73
    public function prepareInvitation(Request $request,  PrepareInvitationUsersInOrganization $prepareInvitationUsersInOrganization)
74
    {
75
        $users = $request->input('users');
76
        $users = explode(PHP_EOL, $users);
77
        $organizationId = $request->input('organization_id');
78
79
        $usersToProcess = $prepareInvitationUsersInOrganization->prepare($organizationId, $users);
80
81
        return view('organizations.prepare-invitation', [
82
            'organization_id' => $organizationId,
83
            'usersToProcess' => $usersToProcess
84
        ]);
85
    }
86
87
    public function sendInvitations(Request $request, InviteUsersInOrganization $inviteUsersInOrganization)
88
    {
89
        $users = json_decode($request->input('users'), true);
90
        $organizationId = $request->input('organization_id');
91
92
        $inviteUsersInOrganization->invite($organizationId, $users['users']);
93
        $request->session()->flash('notif_msg', __('organizations.message.organization.invitation_send'));
94
        return redirect()->route('organization.list');
95
    }
96
97
    public function acceptInvite(Request $request, RespondInvitationToAnOrganization $respondInvitationToAnOrganization)
98
    {
99
        $action = $respondInvitationToAnOrganization->respond($token = $request->input('token'));
100
        switch($action['action']){
101
            case 'register':
102
                return $this->redirectToRegisterPage($request, $action);
103
            case 'accept_or_decline':
104
                return $this->showAcceptOrDeclinePage($request, $action);
105
            case 'logout-login':
106
                return $this->showLogoutToAcceptInvitation($request, $action, $token);
107
            case 'login':
108
                return $this->redirectToLogin($request, $action, $token);
109
            case 'logout-register':
110
                return $this->showLogoutToRegister($request, $action, $token);
111
        }
112
    }
113
114
    public function joinOrganization(Request $request, AttachUserToAnOrganization $attachUserToAnOrganization)
115
    {
116
        $userId = Auth::user()->uuid;
117
        $organizationId = $request->session()->get('should_attach_to_organization');
118
        $attachUserToAnOrganization->attach($userId, $organizationId);
0 ignored issues
show
Bug introduced by
It seems like $organizationId can also be of type null; however, parameter $organizationId of App\Src\UseCases\Domain\...nOrganization::attach() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

118
        $attachUserToAnOrganization->attach($userId, /** @scrutinizer ignore-type */ $organizationId);
Loading history...
119
        $request->session()->flash('notif_msg', __('organizations.message.organization.joined'));
120
        return redirect()->route('home');
121
    }
122
123
    private function redirectToRegisterPage(Request $request, array $action): \Illuminate\Http\RedirectResponse
124
    {
125
        $request->session()->flash('should_attach_to_organization', $action['organization_id']);
126
        $request->session()->flash('user_to_register', $action['user']);
127
        return redirect()->route('register');
128
    }
129
130
    private function showAcceptOrDeclinePage(Request $request, array $action)
131
    {
132
        $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
133
        return view('organizations.accept-or-decline-invitation', [
134
            'old_organisation' => isset($action['old_organisation']) ? $action['old_organisation']->toArray() : null,
135
            'organization_to_join' => isset($action['organization_to_join']) ? $action['organization_to_join']->toArray() : null
136
        ]);
137
    }
138
139
    private function showLogoutToAcceptInvitation(Request $request, array $action, $token)
140
    {
141
        $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
142
        $request->session()->flash('should_attach_to_organization_token', $token);
143
        $request->session()->flash('should_attach_to_organization_redirect', route('login'));
144
        return view('organizations.logout-to-accept-or-decline-invitation', [
145
            'organization_to_join' => isset($action['organization_to_join']) ? $action['organization_to_join']->toArray() : null
146
        ]);
147
    }
148
149
    private function redirectToLogin(Request $request, array $action, $token): \Illuminate\Http\RedirectResponse
150
    {
151
        $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
152
        $request->session()->flash('should_attach_to_organization_token', $token);
153
        $request->session()->flash('should_attach_to_organization_redirect', route('login'));
154
        return redirect()->route('login');
155
    }
156
157
    /**
158
     * @param Request $request
159
     * @param array $action
160
     * @param $token
161
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
162
     */
163
    private function showLogoutToRegister(Request $request, array $action, $token)
164
    {
165
        $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
166
        $request->session()->flash('should_attach_to_organization_token', $token);
167
        $request->session()->flash('should_attach_to_organization_redirect', route('register'));
168
        $request->session()->flash('user_to_register', $action['user']);
169
        return view('organizations.logout-to-accept-or-decline-invitation', [
170
            'organization_to_join' => isset($action['organization_to_join']) ? $action['organization_to_join']->toArray() : null
171
        ]);
172
    }
173
}
174