Skip to content

Commit 7459bf3

Browse files
Ivan LiIvan Li
Ivan Li
authored and
Ivan Li
committed
user list
1 parent ca88a0e commit 7459bf3

File tree

8 files changed

+322
-4
lines changed

8 files changed

+322
-4
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use Illuminate\Foundation\Auth\User;
6+
use Illuminate\Http\JsonResponse;
7+
use Illuminate\Http\Request;
8+
9+
use App\Http\Requests;
10+
11+
class UserController extends Controller
12+
{
13+
public function __construct()
14+
{
15+
$this->middleware('auth');
16+
$this->middleware('role:kb_admin');
17+
}
18+
19+
public function index(Request $request)
20+
{
21+
if ($request->ajax()) {
22+
$users = User::all();
23+
if ($request->json()) {
24+
return new JsonResponse($users);
25+
} else {
26+
return $users;
27+
}
28+
} else {
29+
return view('user.index');
30+
}
31+
}
32+
33+
public function create(Request $request)
34+
{
35+
36+
}
37+
38+
public function store()
39+
{
40+
41+
}
42+
43+
public function show($user_id)
44+
{
45+
46+
}
47+
48+
public function edit($user_id)
49+
{
50+
51+
}
52+
53+
public function update(Request $request, $user_id)
54+
{
55+
56+
}
57+
58+
public function destroy($user_id)
59+
{
60+
61+
}
62+
}

app/Http/routes.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@
3030
'middleware' => ['auth', 'role:chams_admin|chams_asset_distributor|chams_asset_manager|chams_client|chams_reporter|chams_staff']
3131
], function () {
3232
Route::get('/', ['uses' => 'CHAMS\RoutingController@home']);
33-
Route::get('users', ['uses' => 'CHAMS\RoutingController@users']);
33+
Route::get('users', ['middleware' => ['auth', 'role:chams_admin'], 'uses' => 'CHAMS\RoutingController@users']);
3434
});
35+
36+
// Route::group([
37+
// 'prefix' => 'user',
38+
// 'middleware' => ['auth', 'role:kb_admin']
39+
// ],function(){
40+
// Route::get('/', ['uses' => 'UserController@users']);
41+
// Route::get('{user_id}', ['uses' => 'UserController@user']);
42+
// });
43+
44+
/*we need to have separated url for ajax and html page calls because chrome cache*/
45+
Route::resource('user', 'UserController');
46+
Route::resource('ajax/user', 'UserController');
3547
});

app/Role.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace App;
1010

1111

12-
use Zizaco\Entrust\Middleware\EntrustRole;
12+
use Zizaco\Entrust\EntrustRole;
1313

1414
class Role extends EntrustRole
1515
{

database/seeds/MainUserRoleSeeder.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
use Illuminate\Database\Seeder;
4+
use Illuminate\Support\Facades\DB;
5+
6+
class MainUserRoleSeeder extends Seeder
7+
{
8+
/**
9+
* Run the database seeds.
10+
*
11+
* @return void
12+
*/
13+
public function run()
14+
{
15+
//role:chams_admin|chams_asset_distributor|chams_asset_manager|chams_client|chams_reporter|chams_staff
16+
date_default_timezone_set('Australia/Sydney');
17+
DB::table('roles')->insert([
18+
[
19+
'id' => 7,
20+
'name' => "kb_admin",
21+
'display_name' => "ICL KB Administrator",
22+
'description' => "Administrator of ICL Knowledge Base",
23+
'created_at' => new DateTime,
24+
'updated_at' => new DateTime
25+
],
26+
[
27+
'id' => 8,
28+
'name' => "kb_visitor",
29+
'display_name' => "ICL KB Visitor",
30+
'description' => "Visitor of ICL Knowledge Base",
31+
'created_at' => new DateTime,
32+
'updated_at' => new DateTime
33+
],
34+
]);
35+
}
36+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/**
2+
* Created by Ivan on 7/06/2016.
3+
*/
4+
function alertP(title, bodyText) {
5+
var $modal = popupHTML(title, bodyText);
6+
$modal.modal();
7+
}
8+
9+
function confirmP(title, bodyText, btnOpts) {
10+
var $footer = $("<div>").append(
11+
$("<button>")
12+
.addClass("btn")
13+
.addClass(typeof btnOpts.affirmativeBtnClass == 'undefined' ? "" : btnOpts.affirmativeBtnClass)
14+
.on("click", function () {
15+
if (typeof btnOpts.affirmativeCallback != 'undefined' && $.isFunction(btnOpts.affirmativeCallback)) {
16+
btnOpts.affirmativeCallback();
17+
}
18+
})
19+
.attr("data-dismiss", function () {
20+
return typeof btnOpts.affirmativeDismiss != 'undefined' && btnOpts.affirmativeDismiss == true ? "modal" : "";
21+
})
22+
.text(typeof btnOpts.affirmativeText != 'undefined' ? btnOpts.affirmativeText : 'OK'),
23+
$("<button>")
24+
.addClass("btn")
25+
.addClass(typeof btnOpts.negativeBtnClass == 'undefined' ? "" : btnOpts.negativeBtnClass)
26+
.on("click", function () {
27+
if (typeof btnOpts.negativeCallback != 'undefined' && $.isFunction(btnOpts.negativeCallback)) {
28+
btnOpts.negativeCallback();
29+
}
30+
})
31+
.attr("data-dismiss", function () {
32+
return typeof btnOpts.negativeDismiss != 'undefined' && btnOpts.negativeDismiss == true ? "modal" : "";
33+
})
34+
.text(typeof btnOpts.negativeText != 'undefined' ? btnOpts.negativeText : 'Cancel')
35+
);
36+
var $modal = popupHTML(title, bodyText, $footer);
37+
$modal.modal();
38+
}
39+
40+
function popupHTML(title, $content, $footer) {
41+
if (typeof $footer == 'undefined') {
42+
$footer = $("<button>").addClass("btn").attr({
43+
"type": "button",
44+
"data-dismiss": "modal"
45+
}).text("OK");
46+
}
47+
return $("<div>").attr("id", randomString(10)).addClass("modal fade popup").append(
48+
$("<div>").addClass("modal-dialog modal-sm").append(
49+
$("<div>").addClass("modal-content").append(
50+
$("<div>").addClass("modal-header").append(
51+
$("<button>").addClass("close").attr({
52+
"type": "button",
53+
"data-dismiss": "modal",
54+
"aria-label": "Close"
55+
}).append(
56+
$("<span>").attr({
57+
"aria-hidden": "true"
58+
}).html("&nbsp;")
59+
),
60+
$("<h4>").addClass("modal-title").text(title)
61+
),
62+
$("<div>").addClass("modal-body").append($content),
63+
$("<div>").addClass("modal-footer m-0").append($footer)
64+
)
65+
)
66+
);
67+
}
68+
69+
function randomString(length, chars) {
70+
if (typeof chars == 'undefined') {
71+
chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
72+
}
73+
var result = '';
74+
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
75+
return result;
76+
}

resources/views/home.blade.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
@stop
1313
@section('content')
1414

15-
{!! Auth::user()->roles !!}
16-
1715
Test page
1816

1917
@stop

resources/views/layouts/neat.blade.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@
392392
<!-- All JS functions -->
393393
<script src="{{asset('assets/external/sa/js/functions.js')}}"></script>
394394

395+
<script src="{{asset('assets/internal/js/commonFunctions.js')}}"></script>
395396
@yield('script')
396397
</body>
397398

resources/views/user/index.blade.php

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: Ivan
5+
* Date: 6/06/2016
6+
* Time: 9:53 PM
7+
*/
8+
?>
9+
@extends('layouts.neat')
10+
@section('title')
11+
ICL KB - User
12+
@stop
13+
@section('link')
14+
@stop
15+
@section('content')
16+
17+
<div class="block-area">
18+
<h3 class="block-title">User List</h3>
19+
20+
<div class="table-responsive overflow" style="overflow: hidden;" tabindex="5005">
21+
<table id="tbl-user" class="tile table table-bordered table-striped">
22+
<thead>
23+
<tr>
24+
<th>ID</th>
25+
<th>Full Name</th>
26+
<th>Email</th>
27+
<th>Status</th>
28+
<th>Registered at</th>
29+
<th></th>
30+
</tr>
31+
</thead>
32+
<tbody>
33+
</tbody>
34+
</table>
35+
</div>
36+
</div>
37+
38+
@stop
39+
@section('script')
40+
<script>
41+
$(function () {
42+
loadUsers(function (users) {
43+
$.each(users, function (index, user) {
44+
$("#tbl-user").find("tbody").append(
45+
$("<tr>").append(
46+
$("<td>").text(user.id),
47+
$("<td>").text(user.name),
48+
$("<td>").text(user.email),
49+
$("<td>").text(user.status),
50+
$("<td>").text(user.created_at),
51+
$("<td>").addClass("text-center").append(
52+
$("<a>").attr({
53+
"href": "{{url('user/')}}/" + user.id
54+
}).addClass("btn btn-sm btn-alt").append(
55+
$("<i>").addClass("fa fa-pencil")
56+
),
57+
$("<button>").attr({
58+
"onclick": "deleteUserOnClick(this); return false;",
59+
"data-user": JSON.stringify(user)
60+
}).addClass("btn btn-sm btn-alt").append(
61+
$("<i>").addClass("fa fa-times")
62+
)
63+
)
64+
)
65+
)
66+
});
67+
})
68+
});
69+
70+
function loadUsers(callback) {
71+
$.ajax({
72+
'url': "{{url('user')}}",
73+
'method': "get",
74+
'dataType': "json",
75+
'cache': false,
76+
'success': function (response) {
77+
if ($.isFunction(callback)) {
78+
callback(response);
79+
}
80+
},
81+
'error': function (xhr, status, error) {
82+
console.info('xhr', xhr);
83+
console.info('status', status);
84+
console.info('error', error);
85+
}
86+
})
87+
}
88+
89+
function deleteUserOnClick(el) {
90+
if (typeof $(el).attr("data-user") != 'undefined') {
91+
var user = JSON.parse($(el).attr("data-user"));
92+
93+
confirmP("Delete User", "Are you sure you want to delete user: " + user.name + "?", {
94+
affirmativeCallback: function () {
95+
deleteUser(user.id, function () {
96+
alertP("Delete User", user.name + " is now deleted.");
97+
$(el).closest("tr").remove();
98+
}, function (xhr) {
99+
alertP("Delete User", "Unable to delete user: " + user.name + ". Error message: " + xhr.responseText + ". Please try again later.");
100+
});
101+
},
102+
affirmativeDismiss: true,
103+
negativeDismiss: true,
104+
affirmativeText: "Yes, delete",
105+
negativeText: "Cancel"
106+
})
107+
} else {
108+
alertP("Delete User", "Unable to delete user due to incorrect user information.");
109+
}
110+
}
111+
112+
function deleteUser(id, successCallback, errorCallback) {
113+
$.ajax({
114+
'url': "{{url('user')}}/" + id,
115+
'data': {
116+
"_token": "{{ csrf_token() }}"
117+
},
118+
'type': "delete",
119+
'cache': false,
120+
'success': function (response) {
121+
if ($.isFunction(successCallback)) {
122+
successCallback(response);
123+
}
124+
},
125+
'error': function (xhr, status, error) {
126+
if ($.isFunction(successCallback)) {
127+
successCallback(xhr);
128+
}
129+
}
130+
})
131+
}
132+
</script>
133+
@stop

0 commit comments

Comments
 (0)