diff --git a/app/Http/Controllers/PhotoSliderViewController.php b/app/Http/Controllers/PhotoSliderViewController.php new file mode 100644 index 0000000..e90a974 --- /dev/null +++ b/app/Http/Controllers/PhotoSliderViewController.php @@ -0,0 +1,59 @@ +apiBaseUrl = config('services.api.base_url'); // put your base URL in config/services.php + } + + public function index() + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + Log::info('No access token found, redirecting to login from photo-slider'); + return redirect()->route('login')->with('error', 'Please log in to view photo sliders.'); + } + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->get("{$this->apiBaseUrl}/cms/photoSlider"); + + $json = $response->json(); + Log::info('Photo Slider API Response: ', $json); + + if ($response->successful() && isset($json['data']) && is_array($json['data'])) { + $sliders = array_map(function ($slider) { + return [ + 'id' => $slider['id'], + 'title' => $slider['title'], + 'type' => $slider['type'], + 'startDate' => $slider['start_date'], + 'endDate' => $slider['end_date'], + ]; + }, $json['data']); + + return view('pages.home page.photo-slider', [ + 'sliders' => $sliders, + ]); + } else { + Log::warning('No slider data found or invalid API response: ', $json); + return view('pages.home page.photo-slider', ['sliders' => []]); + } + } catch (\Exception $e) { + Log::error('Error fetching photo slider data: ' . $e->getMessage()); + return view('pages.home page.photo-slider', ['sliders' => []]); + } + } +} diff --git a/app/Http/Controllers/UserManagementController.php b/app/Http/Controllers/UserManagementController.php index b6e8a7d..62284f3 100644 --- a/app/Http/Controllers/UserManagementController.php +++ b/app/Http/Controllers/UserManagementController.php @@ -9,15 +9,11 @@ use Illuminate\Support\Facades\Session; class UserManagementController extends Controller { - protected $apiBaseUrl = 'http://192.168.100.6:8081/api'; // Same as in AuthController + protected $apiBaseUrl = 'http://192.168.100.6:8081/api'; - /** - * Display the user management page with user data - */ public function index() { try { - // Fetch the access token from the session $user = Session::get('user'); $accessToken = $user['access_token'] ?? null; @@ -26,7 +22,6 @@ class UserManagementController extends Controller return redirect()->route('login')->with('error', 'Please log in to view user management.'); } - // Make the API call to fetch admin users $response = Http::withHeaders([ 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . $accessToken, @@ -37,34 +32,340 @@ class UserManagementController extends Controller Log::info('User Management API Response: ', $json); if ($response->successful() && isset($json['data']) && is_array($json['data'])) { - // Transform the API response into the format expected by the table component $users = array_map(function ($admin) { return [ - + 'admin_uuid' => $admin['admin_uuid'], 'username' => $admin['username'], 'firstName' => $admin['firstname'], 'lastName' => $admin['lastname'], - 'role' => 'Admin', // Adjust if the API provides role data + 'role' => 'Admin', 'email' => $admin['email'], - // 'status' => $admin['is_active'] ? 'Active' : 'Inactive', + 'status' => $admin['status'] ? 'Active' : 'Inactive', ]; }, $json['data']); - // Pass the transformed data to the view return view('pages.user-management', [ 'users' => $users, ]); } else { Log::warning('No user data found or invalid API response: ', $json); return view('pages.user-management', [ - 'users' => [], // Pass an empty array if no data + 'users' => [], ]); } } catch (\Exception $e) { Log::error('Error fetching user data: ' . $e->getMessage()); return view('pages.user-management', [ - 'users' => [], // Pass an empty array on error + 'users' => [], ]); } } + + public function create() + { + return view('pages.user-management.add-user'); + } + + public function store(Request $request) + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + return redirect()->route('login')->with('error', 'Please log in to add a user.'); + } + + $validated = $request->validate([ + 'username' => 'required|string|max:255', + 'firstName' => 'required|string|max:255', + 'lastName' => 'required|string|max:255', + 'role' => 'required|in:0,1', + 'email' => 'required|email|max:255', + 'status' => 'required|in:active,inactive', + ]); + + // Generate password via API + $passwordResponse = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->post("{$this->apiBaseUrl}/cms/generatePassword"); + + $passwordJson = $passwordResponse->json(); + + if (!$passwordResponse->successful() || !isset($passwordJson['data']['password'])) { + Log::error('Failed to generate password: ', $passwordJson); + return redirect()->back()->with('error', 'Failed to generate password.'); + } + + $generatedPassword = $passwordJson['data']['password']; + + $payload = [ + 'username' => $validated['username'], + 'firstname' => $validated['firstName'], + 'lastname' => $validated['lastName'], + 'role' => $validated['role'], + 'email' => $validated['email'], + 'password' => $generatedPassword, + 'status' => $validated['status'], // Send as 'active' or 'inactive' + ]; + + Log::info('API Payload for creating user: ', $payload); + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->post("{$this->apiBaseUrl}/cms/admin", $payload); + + $json = $response->json(); + + if ($response->successful()) { + Log::info('User created successfully: ', $json); + return redirect()->route('user.management') + ->with('success', "User added successfully. Generated password: {$generatedPassword}"); + } else { + Log::error('Failed to create user: ', $json); + return redirect()->back()->with('error', $json['message'] ?? 'Failed to add user.'); + } + } catch (\Exception $e) { + Log::error('Error creating user: ' . $e->getMessage()); + return redirect()->back()->with('error', 'An error occurred while adding the user.'); + } + } + + public function show($uuid) + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + return response()->json(['error' => 'Unauthorized'], 401); + } + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->get("{$this->apiBaseUrl}/cms/admin/{$uuid}"); + + $json = $response->json(); + + if ($response->successful() && isset($json['data'])) { + $userData = [ + 'admin_uuid' => $json['data']['admin_uuid'], + 'username' => $json['data']['username'], + 'firstName' => $json['data']['firstname'], + 'lastName' => $json['data']['lastname'], + 'role' => 'Admin', + 'email' => $json['data']['email'], + 'status' => $json['data']['status'] ? 'Active' : 'Inactive', + 'generated_password' => $json['data']['generated_password'] ?? null, + ]; + return response()->json(['data' => $userData]); + } else { + Log::warning('User not found: ', $json); + return response()->json(['error' => $json['message'] ?? 'User not found'], 404); + } + } catch (\Exception $e) { + Log::error('Error fetching user: ' . $e->getMessage()); + return response()->json(['error' => 'An error occurred'], 500); + } + } + + public function edit($uuid) + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + Log::info('No access token found, redirecting to login from user-management edit'); + return redirect()->route('login')->with('error', 'Please log in to edit a user.'); + } + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->get("{$this->apiBaseUrl}/cms/admin/{$uuid}"); + + $json = $response->json(); + + if ($response->successful() && isset($json['data'])) { + $userData = [ + 'admin_uuid' => $json['data']['admin_uuid'], + 'username' => $json['data']['username'], + 'firstName' => $json['data']['firstname'], + 'lastName' => $json['data']['lastname'], + 'role' => 'Admin', + 'email' => $json['data']['email'], + 'status' => $json['data']['status'] ? 'Active' : 'Inactive', + ]; + return view('pages.user-management.edit-user', [ + 'user' => $userData, + ]); + } else { + Log::warning('User not found: ', $json); + return redirect()->route('user-management.index')->with('error', $json['message'] ?? 'User not found.'); + } + } catch (\Exception $e) { + Log::error('Error fetching user for edit: ' . $e->getMessage()); + return redirect()->route('user-management.index')->with('error', 'An error occurred while fetching the user.'); + } + } + + public function update(Request $request, $uuid) + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + return response()->json(['error' => 'Unauthorized'], 401); + } + + $validated = $request->validate([ + 'username' => 'required|string|max:255', + 'firstName' => 'required|string|max:255', + 'lastName' => 'required|string|max:255', + 'email' => 'required|email|max:255', + 'password' => 'nullable|string|min:8', + 'status' => 'required|in:active,inactive', + ]); + + $data = [ + 'username' => $validated['username'], + 'firstname' => $validated['firstName'], + 'lastname' => $validated['lastName'], + 'email' => $validated['email'], + 'status' => $validated['status'], + ]; + + if (!empty($validated['password'])) { + $data['password'] = $validated['password']; + } + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->put("{$this->apiBaseUrl}/cms/admin/{$uuid}", $data); + + $json = $response->json(); + + if ($response->successful()) { + Log::info('User updated successfully: ', $json); + return response()->json(['message' => $json['message'] ?? 'User updated successfully']); + } else { + Log::error('Failed to update user: ', $json); + return response()->json(['error' => $json['message'] ?? 'Failed to update user'], 400); + } + } catch (\Exception $e) { + Log::error('Error updating user: ' . $e->getMessage()); + return response()->json(['error' => 'An error occurred'], 500); + } + } + + public function destroy($uuid) + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + return response()->json(['error' => 'Unauthorized'], 401); + } + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->delete("{$this->apiBaseUrl}/cms/admin/{$uuid}"); + + $json = $response->json(); + + if ($response->successful()) { + Log::info('User deleted successfully: ', $json); + return response()->json(['message' => $json['message'] ?? 'User deleted successfully']); + } else { + Log::error('Failed to delete user: ', $json); + return response()->json(['error' => $json['message'] ?? 'Failed to delete user'], 400); + } + } catch (\Exception $e) { + Log::error('Error deleting user: ' . $e->getMessage()); + return response()->json(['error' => 'An error occurred'], 500); + } + } + + public function batchDelete(Request $request) + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + return response()->json(['error' => 'Unauthorized'], 401); + } + + $uuids = $request->input('admin_uuid', []); + + if (empty($uuids)) { + return response()->json(['error' => 'No users selected'], 400); + } + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->delete("{$this->apiBaseUrl}/cms/adminBatchDelete", [ + 'admin_uuid' => $uuids, + ]); + + $json = $response->json(); + + if ($response->successful()) { + Log::info('Batch delete successful for UUIDs: ' . implode(',', $uuids)); + return response()->json(['message' => $json['message'] ?? 'Users deleted successfully']); + } else { + Log::error('Failed to batch delete users: ', $json); + return response()->json(['error' => $json['message'] ?? 'Failed to delete users'], 400); + } + } catch (\Exception $e) { + Log::error('Error in batch delete: ' . $e->getMessage()); + return response()->json(['error' => 'An error occurred'], 500); + } + } + + public function changeStatus(Request $request, $uuid) + { + try { + $user = Session::get('user'); + $accessToken = $user['access_token'] ?? null; + + if (!$accessToken) { + return response()->json(['error' => 'Unauthorized'], 401); + } + + $validated = $request->validate([ + 'status' => 'required|in:active,inactive', + ]); + + $response = Http::withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $accessToken, + ])->post("{$this->apiBaseUrl}/cms/adminChangeStatus", [ + 'admin_uuid' => $uuid, + 'status' => $validated['status'], + ]); + + $json = $response->json(); + + if ($response->successful()) { + Log::info('Status changed successfully for UUID: ' . $uuid); + return response()->json(['message' => $json['message'] ?? 'Status updated successfully']); + } else { + Log::error('Failed to change status: ', $json); + return response()->json(['error' => $json['message'] ?? 'Failed to update status'], 400); + } + } catch (\Exception $e) { + Log::error('Error changing status: ' . $e->getMessage()); + return response()->json(['error' => 'An error occurred'], 500); + } + } } \ No newline at end of file diff --git a/resources/views/components/user-management-component.blade.php b/resources/views/components/user-management-component.blade.php new file mode 100644 index 0000000..7330f08 --- /dev/null +++ b/resources/views/components/user-management-component.blade.php @@ -0,0 +1,607 @@ +@props([ + 'pageTitle' => '', + 'data' => [], + 'columns' => [], + 'actions' => [], + 'showAddButton' => false, + 'addButtonUrl' => '#', + 'showCheckboxes' => false, + 'showBatchDelete' => false, + 'showEditModal' => false, + 'showViewModal' => false +]) + +
+ + | + @endif + @foreach ($columns as $index => $column) ++ {{ $column['name'] }} + @if ($column['sortable']) + + @endif + | + @endforeach + @if (!empty($actions)) +Action | + @endif +
---|
No Data Found
+No users found.