diff --git a/app/Http/Controllers/TermsAndPrivacyController.php b/app/Http/Controllers/TermsAndPrivacyController.php index 0b9f17a..d0115f9 100644 --- a/app/Http/Controllers/TermsAndPrivacyController.php +++ b/app/Http/Controllers/TermsAndPrivacyController.php @@ -206,7 +206,7 @@ class TermsAndPrivacyController extends Controller ]; return view('pages.terms-and-privacy.edit', ['item' => $item, 'types' => ['1' => 'Terms', '2' => 'Privacy']]); } else { - Log::warning('No terms or privacy found or invalid API response: ', $json); + Log::warning('No terms and privacy found or invalid API response: ', $json); return redirect()->back()->with('error', 'Terms or privacy not found.'); } } catch (\Exception $e) { @@ -298,32 +298,49 @@ class TermsAndPrivacyController extends Controller $accessToken = $user['access_token'] ?? null; if (!$accessToken) { + Log::info('No access token found, redirecting to login from terms-and-privacy batch delete'); return redirect()->route('login')->with('error', 'Please log in to delete terms or privacy.'); } $uuids = $request->input('tp_uuid', []); + if (is_string($uuids)) { + $uuids = json_decode($uuids, true); + if (json_last_error() !== JSON_ERROR_NONE) { + Log::warning('Invalid JSON format for tp_uuid', ['input' => $uuids]); + return redirect()->back()->with('error', 'Invalid terms or privacy UUID format.'); + } + } - if (empty($uuids)) { + if (empty($uuids) || !is_array($uuids)) { + Log::warning('No valid tp_uuids provided for batch delete', ['uuids' => $uuids]); return redirect()->back()->with('error', 'No terms or privacy selected for deletion.'); } + Log::info('Attempting batch delete for UUIDs: ', ['uuids' => $uuids]); + $response = Http::withHeaders([ 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . $accessToken, + 'Content-Type' => 'application/json', ])->delete("{$this->apiBaseUrl}/TermsAndPrivacyBatchDelete", [ 'tp_uuid' => $uuids, ]); - if ($response->successful()) { - Log::info('Terms or privacy batch deleted successfully: ', $uuids); - return redirect()->route('terms-and-privacy')->with('success', 'Selected terms or privacy deleted successfully.'); + $json = $response->json(); + + Log::info('Batch delete response: ', ['response' => $json, 'status' => $response->status(), 'headers' => $response->headers()]); + + if ($response->successful() && isset($json['status']) && $json['status'] === 'success') { + Log::info('Batch delete successful for UUIDs: ', ['uuids' => $uuids, 'response' => $json]); + return redirect()->route('terms-and-privacy') + ->with('success', $json['message'] ?? 'Selected terms or privacy deleted successfully.'); } else { - Log::warning('Failed to batch delete terms or privacy: ', $response->json()); - return redirect()->back()->with('error', $response->json()['message'] ?? 'Failed to delete terms or privacy. Please try again.'); + Log::error('Batch delete failed: ', ['response' => $json, 'status' => $response->status(), 'headers' => $response->headers()]); + return redirect()->back()->with('error', $json['message'] ?? 'Failed to delete terms or privacy. Status: ' . $response->status()); } } catch (\Exception $e) { - Log::error('Error batch deleting terms or privacy: ' . $e->getMessage()); - return redirect()->back()->with('error', 'An error occurred while deleting the terms or privacy.'); + Log::error('Error in batch delete: ', ['error' => $e->getMessage(), 'uuids' => $uuids ?? [], 'trace' => $e->getTraceAsString()]); + return redirect()->back()->with('error', 'An error occurred while deleting terms or privacy: ' . $e->getMessage()); } } } \ No newline at end of file diff --git a/resources/views/components/terms-component.blade.php b/resources/views/components/terms-component.blade.php index 62bb3a7..209aa8b 100644 --- a/resources/views/components/terms-component.blade.php +++ b/resources/views/components/terms-component.blade.php @@ -65,43 +65,7 @@ @endif - - @foreach ($data as $row) - - @if ($showCheckboxes) - - - - @endif - @foreach ($columns as $column) - {{ $row[$column['key']] ?? '' }} - @endforeach - @if (!empty($actions)) - - @if (in_array('view', $actions)) - - - - @endif - @if (in_array('edit', $actions)) - - - - @endif - @if (in_array('delete', $actions)) -
- @csrf - @method('DELETE') - - - -
- @endif - - @endif - - @endforeach - + @@ -109,33 +73,13 @@
@if ($showBatchDelete)
-
- @csrf - - -
+
@endif
@@ -146,33 +90,120 @@ font-weight: 400; line-height: 1.5; } - .table-container { - overflow-x: auto; + .card-header h5 { + font-weight: 500; } - .table th, .table td { - white-space: nowrap; + .table thead th { + font-weight: 500; + font-size: 0.8rem; + } + .form-label { + font-weight: 500; + font-size: 0.9rem; + } + .card { + border-radius: 10px; + } + .card-header { + background-color: transparent; + } + .btn-primary { + background-color: #E74610; + border-color: #E74610; + } + .btn-primary:hover { + background-color: #E74610; + border-color: #E74610; } .sortable { cursor: pointer; - position: relative; } .sortable:hover { + background-color: #f1f3f5; + } + .table { + font-size: 0.85rem; + width: 100%; + table-layout: auto; + } + .table th, .table td { + padding: 0.5rem; + vertical-align: middle; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .table th:first-child, .table td:first-child { + width: 40px; + text-align: center; + } + .table th:last-child, .table td:last-child { + width: 120px; + text-align: center; + } + .table td:nth-child(5), .table th:nth-child(5) { + width: 100px; + } + .table td:nth-child(6), .table th:nth-child(6) { + max-width: 200px; + } + .edit-btn { + border-color: #E74610; + color: #E74610; + } + .edit-btn:hover { + background-color: #E74610; + border-color: #E74610; + color: #fff; + } + .view-btn { + border-color: #0d6efd; + color: #0d6efd; + } + .view-btn:hover { + background-color: #0d6efd; + color: #fff; + } + .delete-btn { + border-color: #dc3545; + color: #dc3545; + } + .delete-btn:hover { + background-color: #dc3545; + color: #fff; + } + .table-hover tbody tr:hover { + cursor: pointer; background-color: #f8f9fa; } - .sortable i { - margin-left: 5px; - color: #6c757d; + @media (max-width: 576px) { + .table { + font-size: 0.75rem; + } + .table thead th { + font-size: 0.75rem; + } + .table th, .table td { + padding: 0.3rem; + } + .btn-sm { + padding: 0.2rem 0.4rem; + font-size: 0.75rem; + } + .input-group-sm>.form-control { + font-size: 0.75rem; + } + .pagination-sm .page-link { + padding: 0.2rem 0.4rem; + font-size: 0.75rem; + } + .table td:nth-child(6) { + max-width: 150px; + } + .form-control, .form-select { + font-size: 0.85rem; + } } - .clickable-row:hover { - background-color: #f1f1f1; - cursor: pointer; - } - .view-btn { border-color: #0d6efd; color: #0d6efd; } - .view-btn:hover { background-color: #0d6efd; color: #fff; } - .edit-btn { border-color: #ffc107; color: #ffc107; } - .edit-btn:hover { background-color: #ffc107; color: #fff; } - .delete-btn { border-color: #dc3545; color: #dc3545; } - .delete-btn:hover { background-color: #dc3545; color: #fff; } \ No newline at end of file + renderPagination(); + + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index c1059f3..0164a50 100644 --- a/routes/web.php +++ b/routes/web.php @@ -189,7 +189,7 @@ Route::get('/terms-and-privacy/{uuid}', [TermsAndPrivacyController::class, 'show Route::get('/terms-and-privacy/{uuid}/edit', [TermsAndPrivacyController::class, 'edit'])->name('terms-and-privacy.edit'); Route::put('/terms-and-privacy/{uuid}', [TermsAndPrivacyController::class, 'update'])->name('terms-and-privacy.update'); Route::delete('/terms-and-privacy/{uuid}', [TermsAndPrivacyController::class, 'destroy'])->name('terms-and-privacy.destroy'); -Route::delete('/terms-and-privacy/batch-delete', [TermsAndPrivacyController::class, 'batchDelete'])->name('terms-and-privacy.batchDelete'); +Route::post('terms-and-privacy/batchDelete', [TermsAndPrivacyController::class, 'batchDelete'])->name('terms-and-privacy.batchDelete'); //Card Types Route::get('/card-types', [CardTypeController::class, 'index'])->name('card-types');