File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/app/Services/AdminReviewService.php
Back
<?php /** * AdminReviewService * Handles Review Moderation & Audit Logging for Admin */ require_once __DIR__ . '/../Models/Review.php'; require_once __DIR__ . '/../Models/AdminAuditLog.php'; class AdminReviewService { private Review $reviewModel; private AdminAuditLog $auditLog; public function __construct() { $this->reviewModel = new Review(); $this->auditLog = new AdminAuditLog(); } public function getAdminReviews(array $filters = [], int $page = 1, int $perPage = 20): array { $page = max(1, $page); $offset = ($page - 1) * $perPage; $reviews = $this->reviewModel->getAdminReviews($filters, $perPage, $offset); $totalCount = $this->reviewModel->countAdminReviews($filters); $stats = $this->reviewModel->getAdminReviewStats(); return [ 'reviews' => $reviews, 'stats' => $stats, 'total_count' => $totalCount, 'page' => $page, 'per_page' => $perPage, 'total_pages' => ceil($totalCount / $perPage), 'filters' => $filters ]; } public function getReviewDetail(int $id): ?array { return $this->reviewModel->findDetailById($id); } /** * Moderate Review (Hide, Restore, Remove) with Audit Log */ public function moderateReview(int $adminId, int $reviewId, string $action, string $reason): array { $review = $this->reviewModel->findById($reviewId); if (!$review) { return ['success' => false, 'message' => 'ไม่พบรีวิวที่ระบุ']; } $validActions = [ 'hide' => 'hidden', 'restore' => 'active', 'remove' => 'removed' ]; if (!isset($validActions[$action])) { return ['success' => false, 'message' => 'คำสั่งการจัดการไม่ถูกต้อง']; } $reason = trim($reason); if (empty($reason) && in_array($action, ['hide', 'remove'], true)) { return ['success' => false, 'message' => 'กรุณาระบุเหตุผลในการจัดการรีวิว']; } $newStatus = $validActions[$action]; $adminNotes = "Action: {$action} | Reason: {$reason} | Admin ID: {$adminId} | At: " . date('Y-m-d H:i:s'); $updated = $this->reviewModel->updateReviewStatus($reviewId, $newStatus, $adminNotes); if ($updated) { $this->auditLog->record( $adminId, "review.{$action}", 'reviews', 'review', $reviewId, json_encode([ 'from_status' => $review['status'], 'to_status' => $newStatus, 'reason' => $reason, 'product_id' => $review['product_id'], 'user_id' => $review['user_id'] ]) ); $actionTexts = [ 'hide' => 'ซ่อนรีวิวเรียบร้อยแล้ว (จะไม่แสดงในหน้าร้านค้าและไม่นำมาคำนวณคะแนน)', 'restore' => 'คืนสถานะรีวิวเรียบร้อยแล้ว (แสดงในหน้าร้านค้าและนำมาคำนวณคะแนนตามปกติ)', 'remove' => 'ลบรีวิวออกจากระบบเรียบร้อยแล้ว' ]; return [ 'success' => true, 'message' => $actionTexts[$action] ?? 'ดำเนินการเรียบร้อยแล้ว' ]; } return ['success' => false, 'message' => 'ไม่สามารถดำเนินการได้']; } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings