Skip to content

Commit 9a721a5

Browse files
authored
2 parents 7c6fcbd + 5c2237e commit 9a721a5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+4590
-1923
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
namespace App\DataTables;
3+
4+
use App\Models\User;
5+
use Yajra\DataTables\Html\Button;
6+
use Yajra\DataTables\Html\Column;
7+
use Yajra\DataTables\Services\DataTable;
8+
9+
class UsersDataTable extends DataTable
10+
{
11+
public function dataTable($query)
12+
{
13+
return datatables()
14+
->eloquent($query)
15+
->addColumn('DT_RowIndex', function ($user) {
16+
return '';
17+
})
18+
->editColumn('name', function ($user) {
19+
return view('admin.pages.users.partials.name-column', compact('user'));
20+
})
21+
->editColumn('roles', function ($user) {
22+
return view('admin.pages.users.partials.roles-column', compact('user'));
23+
})
24+
->editColumn('is_active', function ($user) {
25+
return view('admin.pages.users.partials.status-column', compact('user'));
26+
})
27+
->editColumn('last_login_time', function ($user) {
28+
return $user->last_login_time ? $user->last_login_time->format('Y-m-d H:i') : 'Never';
29+
})
30+
->addColumn('actions', function ($user) {
31+
return view('admin.pages.users.partials.actions-column', compact('user'));
32+
})
33+
->rawColumns(['name', 'roles', 'is_active', 'actions']);
34+
}
35+
36+
public function query(User $model)
37+
{
38+
return $model->newQuery()->with('roles');
39+
}
40+
41+
public function html()
42+
{
43+
return $this->builder()
44+
->setTableId('usersTable')
45+
->columns($this->getColumns())
46+
->minifiedAjax()
47+
->dom('<"row"<"col-md-6"l><"col-md-6"f>>rt<"row"<"col-md-6"i><"col-md-6"p>>')
48+
->orderBy(1)
49+
->responsive(true)
50+
->buttons(
51+
Button::make('reload')
52+
);
53+
}
54+
55+
protected function getColumns()
56+
{
57+
return [
58+
Column::make('DT_RowIndex')->title('#'),
59+
Column::make('name')->title('Name'),
60+
Column::make('username')->title('Username'),
61+
Column::make('email')->title('Email'),
62+
Column::make('roles')->title('Roles'),
63+
Column::make('is_active')->title('Status'),
64+
Column::make('last_login_time')->title('Last Login'),
65+
Column::computed('actions')->title('Actions')
66+
->exportable(false)
67+
->printable(false)
68+
->width(120)
69+
->addClass('text-center'),
70+
];
71+
}
72+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
namespace App\Http\Controllers\Auth;
3+
4+
use App\Http\Controllers\Controller;
5+
use Illuminate\Http\Request;
6+
use Illuminate\Support\Facades\Auth;
7+
use Illuminate\Support\Facades\Hash;
8+
use App\Models\User;
9+
10+
class AuthLoginCustomController extends Controller
11+
{
12+
public function showLoginForm()
13+
{
14+
return view('auth.login'); // Gunakan view login yang sama
15+
}
16+
17+
public function login(Request $request)
18+
{
19+
$request->validate([
20+
'email' => 'required|email', // Atau 'username'
21+
'password' => 'required',
22+
'remember' => 'nullable|boolean',
23+
]);
24+
25+
$user = User::where('email', $request->email)->first(); // Atau 'username'
26+
27+
if ($user && Hash::check($request->password, $user->password)) {
28+
Auth::login($user, $request->remember);
29+
// dd(Auth::user());
30+
return redirect()->intended(route('home')); // Sesuaikan dengan route Anda
31+
}
32+
33+
return back()->withErrors([
34+
'email' => 'These credentials do not match our records.', // Sesuaikan pesan error
35+
])->onlyInput('email');
36+
}
37+
38+
public function logout(Request $request)
39+
{
40+
Auth::logout();
41+
$request->session()->invalidate();
42+
$request->session()->regenerateToken();
43+
return redirect('/');
44+
}
45+
}
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
<?php
2+
namespace App\Http\Controllers\admin;
3+
4+
use App\Http\Controllers\Controller;
5+
use App\Models\User;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Facades\Hash;
8+
use Illuminate\Support\Str;
9+
use Spatie\Permission\Models\Role;
10+
11+
// Ensure Role model is imported
12+
13+
class UserController extends Controller
14+
{
15+
/**
16+
* Display the users index page.
17+
* @return \Illuminate\View\View
18+
*/
19+
public function indexView()
20+
{
21+
return view('admin.pages.users.index');
22+
}
23+
24+
/**
25+
* Fetch all users for DataTables.
26+
* @return \Illuminate\Http\JsonResponse
27+
*/
28+
public function index()
29+
{
30+
try {
31+
$users = User::with('roles')->get([
32+
'id', 'name', 'username', 'email', 'phone', 'is_active',
33+
]);
34+
35+
// \Log::info('Users data:', $users->toArray());
36+
return response()->json($users);
37+
} catch (\Exception $e) {
38+
\Log::error('Error in users index: ' . $e->getMessage());
39+
return response()->json(['error' => 'Server error'], 500);
40+
}
41+
}
42+
43+
/**
44+
* Show the create user form.
45+
* @return \Illuminate\View\View
46+
*/
47+
public function create()
48+
{
49+
$roles = Role::select('id', 'name')->get();
50+
return view('admin.pages.users.create', compact('roles'));
51+
}
52+
53+
/**
54+
* Store a new user.
55+
* @param \Illuminate\Http\Request $request
56+
* @return \Illuminate\Http\RedirectResponse
57+
*/
58+
public function store(Request $request)
59+
{
60+
$validated = $request->validate([
61+
'name' => 'required|string|max:255',
62+
'username' => 'required|string|max:255|unique:users,username',
63+
'email' => 'required|email|max:255|unique:users,email',
64+
'password' => 'required|string|min:8|confirmed',
65+
'phone' => 'nullable|string|max:20',
66+
'roles' => 'required|array|min:1',
67+
'roles.*' => 'exists:roles,id',
68+
'is_active' => 'nullable|in:on',
69+
]);
70+
71+
try {
72+
$user = User::create([
73+
'name' => $validated['name'],
74+
'username' => $validated['username'],
75+
'email' => $validated['email'],
76+
'password' => Hash::make($validated['password']),
77+
'phone' => $validated['phone'],
78+
'slug' => Str::slug($validated['username']),
79+
'is_active' => $request->has('is_active'),
80+
]);
81+
82+
$roles = Role::whereIn('id', $validated['roles'])->get();
83+
$user->syncRoles($roles);
84+
85+
return redirect()->route('users.index')
86+
->with('success', 'User created successfully.');
87+
} catch (\Exception $e) {
88+
\Log::error('Error creating user: ' . $e->getMessage());
89+
return redirect()->back()
90+
->withErrors(['error' => 'Failed to create user: ' . $e->getMessage()])
91+
->withInput();
92+
}
93+
}
94+
95+
/**
96+
* Show the edit user form.
97+
* @param int $id
98+
* @return \Illuminate\View\View
99+
*/
100+
public function edit($id)
101+
{
102+
$user = User::findOrFail($id);
103+
$roles = Role::select('id', 'name')->get();
104+
$userRoles = $user->roles->pluck('id')->toArray();
105+
return view('admin.pages.users.edit', compact('user', 'roles', 'userRoles'));
106+
}
107+
108+
/**
109+
* Update an existing user.
110+
* @param \Illuminate\Http\Request $request
111+
* @param int $id
112+
* @return \Illuminate\Http\RedirectResponse
113+
*/
114+
public function update(Request $request, $id)
115+
{
116+
$user = User::findOrFail($id);
117+
118+
$validated = $request->validate([
119+
'name' => 'required|string|max:255',
120+
'username' => 'required|string|max:255|unique:users,username,' . $id,
121+
'email' => 'required|email|max:255|unique:users,email,' . $id,
122+
'password' => 'nullable|string|min:8|confirmed',
123+
'phone' => 'nullable|string|max:20',
124+
'roles' => 'required|array|min:1',
125+
'roles.*' => 'exists:roles,id',
126+
'is_active' => 'nullable|in:on',
127+
]);
128+
129+
try {
130+
$data = [
131+
'name' => $validated['name'],
132+
'username' => $validated['username'],
133+
'email' => $validated['email'],
134+
'phone' => $validated['phone'],
135+
'slug' => Str::slug($validated['username']),
136+
'is_active' => $request->has('is_active'),
137+
];
138+
139+
if (! empty($validated['password'])) {
140+
$data['password'] = Hash::make($validated['password']);
141+
}
142+
143+
$user->update($data);
144+
145+
$roles = Role::whereIn('id', $validated['roles'])->get();
146+
$user->syncRoles($roles);
147+
148+
return redirect()->route('users.index')
149+
->with('success', 'User updated successfully.');
150+
} catch (\Exception $e) {
151+
\Log::error('Error updating user: ' . $e->getMessage());
152+
return redirect()->back()
153+
->withErrors(['error' => 'Failed to update user.'])
154+
->withInput();
155+
}
156+
}
157+
158+
/**
159+
* Delete a user.
160+
* @param int $id
161+
* @return \Illuminate\Http\RedirectResponse
162+
*/
163+
public function destroy($id)
164+
{
165+
try {
166+
$user = User::find($id);
167+
168+
if (! $user) {
169+
return redirect()->route('users.index')
170+
->withErrors(['error' => 'User not found.']);
171+
}
172+
173+
$user->delete();
174+
175+
return redirect()->route('users.index')
176+
->with('success', 'User deleted successfully.');
177+
} catch (\Exception $e) {
178+
\Log::error('Error deleting user: ' . $e->getMessage());
179+
return redirect()->route('users.index')
180+
->withErrors(['error' => 'Failed to delete user.']);
181+
}
182+
}
183+
}

web-sch-12/app/Http/Kernel.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace App\Http;
4+
5+
use Illuminate\Foundation\Http\Kernel as HttpKernel;
6+
7+
class Kernel extends HttpKernel
8+
{
9+
10+
protected $middleware = [
11+
// \App\Http\Middleware\TrustHosts::class,
12+
\App\Http\Middleware\TrustProxies::class,
13+
\Illuminate\Http\Middleware\HandleCors::class,
14+
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
15+
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
16+
\App\Http\Middleware\TrimStrings::class,
17+
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
18+
];
19+
20+
protected $middlewareGroups = [
21+
'web' => [
22+
\App\Http\Middleware\EncryptCookies::class,
23+
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
24+
\Illuminate\Session\Middleware\StartSession::class,
25+
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
26+
\App\Http\Middleware\VerifyCsrfToken::class,
27+
\Illuminate\Routing\Middleware\SubstituteBindings::class,
28+
],
29+
30+
'api' => [
31+
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
32+
// \Fruitcake\Cors\HandleCors::class, // Middleware CORS
33+
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
34+
\Illuminate\Routing\Middleware\SubstituteBindings::class,
35+
\Illuminate\Session\Middleware\StartSession::class, // Add this line fixing the issue middleware login
36+
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
37+
'throttle:60,1',
38+
\Illuminate\Routing\Middleware\SubstituteBindings::class, // baru
39+
],
40+
];
41+
42+
protected $middlewareAliases = [
43+
'auth' => \App\Http\Middleware\Authenticate::class,
44+
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
45+
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
46+
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
47+
'can' => \Illuminate\Auth\Middleware\Authorize::class,
48+
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
49+
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
50+
'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
51+
'signed' => \App\Http\Middleware\ValidateSignature::class,
52+
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
53+
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
54+
];
55+
protected $routeMiddleware = [
56+
'TimeOutLogin' => \App\Http\Middleware\TimeOutLogin::class,
57+
];
58+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Auth\Middleware\Authenticate as Middleware;
6+
use Illuminate\Http\Request;
7+
8+
class Authenticate extends Middleware
9+
{
10+
/**
11+
* Get the path the user should be redirected to when they are not authenticated.
12+
*/
13+
protected function redirectTo(Request $request): ?string
14+
{
15+
return $request->expectsJson() ? null : route('login-page');
16+
}
17+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
6+
7+
class EncryptCookies extends Middleware
8+
{
9+
10+
protected $except = [
11+
//
12+
];
13+
}

0 commit comments

Comments
 (0)