Skip to content

Commit 8e3d7e4

Browse files
committed
first part of fix for user delete modal
1 parent fa50b5a commit 8e3d7e4

File tree

5 files changed

+99
-207
lines changed

5 files changed

+99
-207
lines changed

app/Http/Controllers/UsersController.php

+51-4
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function __construct(
4848
public function index()
4949
{
5050
return view('users.index')
51-
->with('users', User::select('id', 'name')->orderBy('name')->get());
51+
->with('users', User::orderBy('name')->get()->pluck('name', 'id'));
5252
}
5353

5454
public function users()
@@ -69,7 +69,7 @@ public function anyData()
6969
return '<a href="'.route('users.edit', $user->id).'" class="btn btn-success"> Edit</a>';
7070
})
7171
->add_column('delete', function ($user) {
72-
return '<button type="button" class="btn btn-danger delete_client" data-client_id="'.$user->id.'" onClick="openModal('.$user->id.')" id="myBtn">Delete</button>';
72+
return '<button type="button" class="btn btn-danger delete_client" data-client_id="'.$user->id.'" data-toggle="modal" data-target="#myModal">Delete</button>';
7373
})->make(true);
7474
}
7575

@@ -236,9 +236,56 @@ public function update($id, UpdateUserRequest $request)
236236
*
237237
* @return mixed
238238
*/
239-
public function destroy(Request $request, $id)
239+
public function destroy(Request $request)
240240
{
241-
$this->users->destroy($request, $id);
241+
// load the user so we can get relational data
242+
$id = $request->id;
243+
$user = User::with('clients', 'tasks', 'leads')->findOrFail($id);
244+
245+
if ($request->user_clients === $id || $request->user_tasks === $id || $request->user_leads === $id) {
246+
Session()->flash('flash_error', 'You may not reassign clients, leads or tasks to the user you are deleting!');
247+
} else {
248+
// are we keeping her clients?
249+
if ('' === $request->user_clients) {
250+
// just delete all the clients related to this user
251+
foreach ($user->clients as $client) {
252+
$client->delete();
253+
}
254+
} else {
255+
// move all clients to new user
256+
foreach ($user->clients() as $client) {
257+
$client->user_id = $request->user_clients;
258+
$client->save();
259+
}
260+
}
261+
262+
// are we keeping her tasks?
263+
if ('' === $request->user_tasks) {
264+
// just delete all the tasks related to this user
265+
$user->tasks()->delete();
266+
} else {
267+
// move all clients to new user
268+
foreach ($user->tasks() as $task) {
269+
$task->user_id = $request->user_tasks;
270+
$task->save();
271+
}
272+
}
273+
274+
// are we keeping her leads?
275+
if ('' === $request->user_leads) {
276+
// just delete all the leads related to this user
277+
$user->leads()->delete();
278+
} else {
279+
// move all clients to new user
280+
foreach ($user->leads() as $lead) {
281+
$lead->user_assigned_id = $request->user_leads;
282+
$lead->save();
283+
}
284+
}
285+
286+
$user->delete();
287+
Session()->flash('flash_message', 'User successfully deleted');
288+
}
242289

243290
return redirect()->route('users.index');
244291
}

app/Models/User.php

+6-35
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,19 @@ class User extends Authenticatable
4444

4545
protected $primaryKey = 'id';
4646

47+
public function clients()
48+
{
49+
return $this->hasMany(Client::class, 'user_id', 'id');
50+
}
51+
4752
public function tasks()
4853
{
4954
return $this->hasMany(Task::class, 'user_assigned_id', 'id');
5055
}
5156

5257
public function leads()
5358
{
54-
return $this->hasMany(Lead::class, 'user_id', 'id');
59+
return $this->hasMany(Lead::class, 'user_assigned_id', 'id');
5560
}
5661

5762
public function department()
@@ -73,38 +78,4 @@ public function getNameAndDepartmentAttribute()
7378
{
7479
return $this->name.' '.'('.$this->department()->first()->name.')';
7580
}
76-
77-
public function moveTasks($user_id)
78-
{
79-
$tasks = $this->tasks()->get();
80-
foreach ($tasks as $task) {
81-
$task->user_assigned_id = $user_id;
82-
$task->save();
83-
}
84-
}
85-
86-
public function moveLeads($user_id)
87-
{
88-
$leads = $this->leads()->get();
89-
foreach ($leads as $lead) {
90-
$lead->user_assigned_id = $user_id;
91-
$lead->save();
92-
}
93-
}
94-
95-
public function moveClients($user_id)
96-
{
97-
$clients = $this->clients()->get();
98-
foreach ($clients as $client) {
99-
$client->user_id = $user_id;
100-
$client->save();
101-
}
102-
}
103-
104-
public function getAvatarattribute()
105-
{
106-
$setting = Setting::first();
107-
108-
return $this->image_path ? 'images/'.$setting->company.'/'.$this->image_path : 'images/default_avatar.jpg';
109-
}
11081
}

app/Repositories/User/UserRepository.php

-30
Original file line numberDiff line numberDiff line change
@@ -120,34 +120,4 @@ public function update($id, $requestData)
120120

121121
return $user;
122122
}
123-
124-
/**
125-
* @param $id
126-
*
127-
* @return mixed
128-
*/
129-
public function destroy($request, $id)
130-
{
131-
$user = User::findorFail($id);
132-
if ($user->hasRole('super_administrator')) {
133-
return Session()->flash('flash_message_warning', 'Not allowed to delete super admin');
134-
}
135-
136-
if ('move_all_tasks' == $request->tasks && '' != $request->task_user) {
137-
$user->moveTasks($request->task_user);
138-
}
139-
if ('move_all_leads' == $request->leads && '' != $request->lead_user) {
140-
$user->moveLeads($request->lead_user);
141-
}
142-
if ('move_all_clients' == $request->clients && '' != $request->client_user) {
143-
$user->moveClients($request->client_user);
144-
}
145-
146-
try {
147-
$user->delete();
148-
Session()->flash('flash_message', 'User successfully deleted');
149-
} catch (\Illuminate\Database\QueryException $e) {
150-
Session()->flash('flash_message_warning', 'User can NOT have, leads, clients, or tasks assigned when deleted');
151-
}
152-
}
153123
}

app/Repositories/User/UserRepositoryContract.php

-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,4 @@ public function getAllUsersWithDepartments();
1313
public function create($requestData);
1414

1515
public function update($id, $requestData);
16-
17-
public function destroy($request, $id);
1816
}

resources/views/users/index.blade.php

+42-136
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
@stop
55

66
@section('content')
7+
78
<table class="table table-striped" id="users-table">
89
<thead>
910
<tr>
@@ -17,81 +18,46 @@
1718
</table>
1819

1920

20-
<div class="modal fade" id="myModal" role="dialog">
21-
<div class="modal-dialog">
22-
23-
<!-- Modal content-->
24-
<div class="modal-content">
25-
<div class="modal-header" style="padding:35px 50px;">
26-
<button type="button" class="close" data-dismiss="modal">&times;</button>
27-
<h4><span class="glyphicon glyphicon-lock"></span> Handle deletion of user</h4>
28-
</div>
29-
<div class="modal-body" style="padding:40px 50px;">
30-
<form role="form">
31-
32-
<!--HANDLE TASKS-->
33-
<div class="form-group">
34-
<label for="tasks"><span class=""></span> {{ __('How to handle the user tasks?') }}</label>
35-
<select name="handle_tasks" id="handle_tasks" class="form-control">
36-
<option value="delete_all_tasks">{{ __('Delete all tasks') }}</option>
37-
<option value="move_all_tasks"> {{ __('Move all tasks') }}</option>
38-
</select>
39-
</div>
40-
<div class="form-group" id="assign_tasks" style="display:none">
41-
<label for="user_tasks"><span class="glyphicon glyphicon-user"></span> {{ __('Choose a new user to assign the tasks') }}</label>
42-
<select name="user_tasks" id="user_tasks" class="form-control">
43-
<option value="null" disabled selected> {{ __('Select a user') }} </option>
44-
@foreach ($users as $user)
45-
<option value="{{ $user->id }}">{{ $user->name }}</option>
46-
@endforeach
47-
</select>
48-
</div>
49-
50-
<!--HANDLE LEADS-->
51-
<div class="form-group">
52-
<label for="handle_leads"><span class=""></span> {{ __('How to handle the user leads?') }}</label>
53-
<select name="leads" id="handle_leads" class="form-control">
54-
<option value="delete_all_leads">{{ __('Delete all leads') }}</option>
55-
<option value="move_all_leads"> {{ __('Move all leads') }}</option>
56-
</select>
57-
</div>
58-
<div class="form-group" id="assign_leads" style="display:none">
59-
<label for="user_leads"><span class="glyphicon glyphicon-user"></span> {{ __('Choose a new user to assign the leads') }}</label>
60-
<select name="user_leads" id="user_leads" class="form-control">
61-
<option value="null" disabled selected> {{ __('Select a user') }} </option>
62-
@foreach ($users as $user)
63-
<option value="{{ $user->id }}">{{ $user->name }}</option>
64-
@endforeach
65-
</select>
66-
</div>
67-
68-
<!--HANDLE CLIENTS-->
69-
<div class="form-group">
70-
<label for="handle_clients"><span class=""></span> {{ __('How to handle the user clients?') }}</label>
71-
<select name="clients" id="handle_clients" class="form-control">
72-
<option value="delete_all_clients">{{ __('Delete all clients') }}</option>
73-
<option value="move_all_clients"> {{ __('Move all clients') }}</option>
74-
</select>
75-
</div>
76-
<div class="form-group" id="assign_clients" style="display:none">
77-
<label for="user_clients"><span class="glyphicon glyphicon-user"></span> {{ __('Choose a new user to assign the clients') }}</label>
78-
<select name="user_clients" id="user_clients" class="form-control">
79-
<option value="null" disabled selected> {{ __('Select a user') }} </option>
80-
@foreach ($users as $user)
81-
<option value="{{ $user->id }}">{{ $user->name }}</option>
82-
@endforeach
83-
</select>
21+
<div class="modal fade" id="myModal" tabindex="-1" role="dialog">
22+
{!! Form::open(['route' => ['users.destroy', 'delete'], 'method' => 'delete']) !!} <!-- and invalid ID is intentionally set here -->
23+
{!! Form::hidden('id', '', ['id' => 'client-id']) !!}
24+
<div class="modal-dialog" role="document">
25+
26+
<!-- Modal content-->
27+
<div class="modal-content">
28+
<div class="modal-header" style="padding:35px 50px;">
29+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
30+
<h4 class="modal-title"><span class="glyphicon glyphicon-lock"></span> Handle deletion of user</h4>
31+
</div>
32+
<div class="modal-body" style="padding:40px 50px;">
33+
34+
<!--HANDLE TASKS-->
35+
<div class="form-group">
36+
{{ Form::label('user_clients', __('Choose a new user to assign the clients')) }}
37+
{{ Form::select('user_clients', $users, null, ['class' => 'form-control', 'placeholder' => 'Delete All Clients']) }}
38+
</div>
39+
40+
<!--HANDLE LEADS-->
41+
<div class="form-group">
42+
{{ Form::label('user_leads', __('Choose a new user to assign the leads')) }}
43+
{{ Form::select('user_leads', $users, null, ['class' => 'form-control', 'placeholder' => 'Delete All Leads']) }}
44+
</div>
45+
46+
<!--HANDLE CLIENTS-->
47+
<div class="form-group">
48+
{{ Form::label('user_tasks', __('Choose a new user to assign the tasks')) }}
49+
{{ Form::select('user_tasks', $users, null, ['class' => 'form-control', 'placeholder' => 'Delete All Tasks']) }}
50+
</div>
51+
52+
</div>
53+
<div class="modal-footer">
54+
<button type="submit" class="btn btn-danger" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span> Cancel</button>
55+
<button type="submit" id="confirm_delete" class="btn btn-success"><span class="glyphicon glyphicon-off"></span> Delete</button>
56+
</div>
57+
{!! Form::close() !!}
8458
</div>
85-
</form>
86-
</div>
87-
<div class="modal-footer">
88-
<button type="submit" class="btn btn-danger" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span> Cancel</button>
89-
<button type="submit" id="confirm_delete" class="btn btn-success"><span class="glyphicon glyphicon-off"></span> Delete</button>
9059
</div>
91-
</div>
92-
93-
</div>
94-
</div>
60+
</div>
9561

9662
@stop
9763

@@ -117,69 +83,9 @@
11783
});
11884
});
11985
120-
function openModal(client_id) {
121-
$("#confirm_delete").attr('delete-id', client_id);
122-
$("#myModal").modal();
123-
}
124-
125-
$("#handle_tasks").click(function () {
126-
if($("#handle_tasks").val() == "move_all_tasks") {
127-
$("#assign_tasks").css('display', 'block');
128-
} else {
129-
$("#assign_tasks").css('display', 'none');
130-
}
131-
});
132-
133-
134-
$("#handle_clients").click(function () {
135-
if($("#handle_clients").val() == "move_all_clients") {
136-
$("#assign_clients").css('display', 'block');
137-
} else {
138-
$("#assign_clients").css('display', 'none');
139-
}
140-
});
141-
142-
$("#handle_leads").click(function () {
143-
if($("#handle_leads").val() == "move_all_leads") {
144-
$("#assign_leads").css('display', 'block');
145-
} else {
146-
$("#assign_leads").css('display', 'none');
147-
}
148-
});
149-
150-
$("#confirm_delete").click(function () {
151-
152-
id = $(this).attr("delete-id");
153-
handle_leads = $("#handle_leads").val();
154-
handle_tasks = $("#handle_tasks").val();
155-
handle_clients = $("#handle_clients").val();
156-
leads_user = $("#user_leads").val();
157-
tasks_user = $("#user_tasks").val();
158-
clients_user = $("#user_clients").val();
159-
160-
$.ajax({
161-
url: "/users/" + id,
162-
type: 'DELETE',
163-
headers: {
164-
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
165-
},
166-
data: {
167-
tasks: handle_tasks,
168-
task_user: tasks_user,
169-
leads: handle_leads,
170-
lead_user: leads_user,
171-
clients: handle_clients,
172-
client_user: clients_user,
173-
},
174-
complete: function (jqXHR, textStatus) {
175-
// callback
176-
},
177-
success: function (data, textStatus, jqXHR) {
178-
// success callback
179-
},
180-
error: function (jqXHR, textStatus, errorThrown) {
181-
// error callback
182-
}
86+
$(function() {
87+
$('#myModal').on("show.bs.modal", function (e) {
88+
$("#client-id").val($(e.relatedTarget).data('client_id'));
18389
});
18490
});
18591

0 commit comments

Comments
 (0)