Test Setup Failed
Pull Request — master (#26)
by guillaume
16:27 queued 10:25
created

OrganizationsController::listOrganizations()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 18
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 13
c 0
b 0
f 0
nc 4
nop 2
dl 0
loc 18
rs 9.8333
1
<?php
2
3
4
namespace App\Http\Controllers;
5
6
use App\Http\Common\Form\OrganizationForm;
7
use App\Src\UseCases\Domain\CreateOrganization;
8
use App\Src\UseCases\Domain\Invitation\AttachUserToAnOrganization;
9
use App\Src\UseCases\Domain\Invitation\RespondInvitationToAnOrganization;
10
use App\Src\UseCases\Domain\InviteUsersInOrganization;
11
use App\Src\UseCases\Domain\ListOrganizations;
12
use App\Src\UseCases\Domain\PrepareInvitationUsersInOrganization;
13
use App\Src\UseCases\Organizations\EditOrganization;
14
use App\Src\UseCases\Organizations\GetOrganization;
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
        if($action['action'] == 'register'){
101
            $request->session()->flash('should_attach_to_organization', $action['organization_id']);
102
            $request->session()->flash('user_to_register', $action['user']);
103
            return redirect()->route('register');
104
        }
105
        if($action['action'] == 'accept_or_decline'){
106
            $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
107
            return view('organizations.accept-or-decline-invitation', [
108
                'old_organisation' => isset($action['old_organisation']) ? $action['old_organisation']->toArray() : null,
109
                'organization_to_join' => isset($action['organization_to_join']) ? $action['organization_to_join']->toArray() : null
110
            ]);
111
        }
112
        if($action['action'] == 'logout-login'){
113
            $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
114
            $request->session()->flash('should_attach_to_organization_token', $token);
115
            $request->session()->flash('should_attach_to_organization_redirect', route('login'));
116
            return view('organizations.logout-to-accept-or-decline-invitation', [
117
                'organization_to_join' => isset($action['organization_to_join']) ? $action['organization_to_join']->toArray() : null
118
            ]);
119
        }
120
121
        if($action['action'] == 'login'){
122
            $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
123
            $request->session()->flash('should_attach_to_organization_token', $token);
124
            $request->session()->flash('should_attach_to_organization_redirect', route('login'));
125
            return redirect()->route('login');
126
        }
127
128
        if($action['action'] == 'logout-register'){
129
            $request->session()->flash('should_attach_to_organization', $action['organization_to_join']->id());
130
            $request->session()->flash('should_attach_to_organization_token', $token);
131
            $request->session()->flash('should_attach_to_organization_redirect', route('register'));
132
            $request->session()->flash('user_to_register', $action['user']);
133
            return view('organizations.logout-to-accept-or-decline-invitation', [
134
                'organization_to_join' => isset($action['organization_to_join']) ? $action['organization_to_join']->toArray() : null
135
            ]);
136
        }
137
    }
138
139
    public function joinOrganization(Request $request, AttachUserToAnOrganization $attachUserToAnOrganization)
140
    {
141
        $userId = Auth::user()->uuid;
0 ignored issues
show
Bug Best Practice introduced by
The property uuid does not exist on App\User. Since you implemented __get, consider adding a @property annotation.
Loading history...
142
        $organizationId = $request->session()->get('should_attach_to_organization');
143
        $attachUserToAnOrganization->attach($userId, $organizationId);
144
        $request->session()->flash('notif_msg', __('organizations.message.organization.joined'));
145
        return redirect()->route('home');
146
    }
147
}
148