File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/app/Controllers/ReviewController.php
Back
<?php /** * ReviewController * Handles Customer Review Creation, Editing, Deletion, Reporting, and Account Review List */ require_once __DIR__ . '/../Core/Controller.php'; require_once __DIR__ . '/../Services/ReviewService.php'; require_once __DIR__ . '/../Helpers/Auth.php'; require_once __DIR__ . '/../Helpers/Session.php'; require_once __DIR__ . '/../Helpers/Url.php'; require_once __DIR__ . '/../Helpers/Security.php'; class ReviewController extends Controller { private ReviewService $reviewService; public function __construct() { $this->reviewService = new ReviewService(); } /** * GET /reviews/create/{order_item_id} * Review form for a purchased and completed item */ public function create(int $orderItemId): void { $userId = Auth::id(); $eligibility = $this->reviewService->checkEligibility($userId, $orderItemId); if (!$eligibility['eligible']) { if (!empty($eligibility['already_reviewed'])) { Session::setFlash('info', 'คุณได้ทำการรีวิวสินค้านี้ไปแล้ว คุณสามารถดูหรือแก้ไขรีวิวได้ที่หน้ารายการรีวิวของคุณ'); $this->redirect('/account/reviews'); } else { Session::setFlash('danger', $eligibility['message']); $this->redirect('/account/orders'); } return; } $this->render('reviews/create', [ 'item' => $eligibility['item'], 'pageTitle' => 'เขียนรีวิวสินค้า - CARGOO' ], 'main'); } /** * POST /reviews/store * Save customer review */ public function store(): void { $userId = Auth::id(); $orderItemId = (int)($_POST['order_item_id'] ?? 0); $rating = (int)($_POST['rating'] ?? 0); $reviewText = trim($_POST['review_text'] ?? ''); $isAnonymous = !empty($_POST['is_anonymous']); $images = $_FILES['images'] ?? []; $result = $this->reviewService->submitReview( $userId, $orderItemId, $rating, $reviewText, $images, $isAnonymous ); if ($result['success']) { Session::setFlash('success', $result['message']); $this->redirect('/account/reviews'); } else { Session::setFlash('danger', $result['message']); $this->redirect('/reviews/create/' . $orderItemId); } } /** * GET /reviews/{id}/edit * Edit review form */ public function edit(int $id): void { $userId = Auth::id(); $review = $this->reviewService->getReviewDetail($id); if (!$review || (int)$review['user_id'] !== $userId) { Session::setFlash('danger', 'ไม่พบรีวิวหรือคุณไม่มีสิทธิ์แก้ไข'); $this->redirect('/account/reviews'); return; } $this->render('reviews/edit', [ 'review' => $review, 'pageTitle' => 'แก้ไขรีวิวสินค้า - CARGOO' ], 'main'); } /** * POST /reviews/{id}/update * Update review */ public function update(int $id): void { $userId = Auth::id(); $rating = (int)($_POST['rating'] ?? 0); $reviewText = trim($_POST['review_text'] ?? ''); $isAnonymous = !empty($_POST['is_anonymous']); $newImages = $_FILES['new_images'] ?? []; $deleteImageIds = array_map('intval', $_POST['delete_image_ids'] ?? []); $result = $this->reviewService->updateReview( $userId, $id, $rating, $reviewText, $newImages, $deleteImageIds, $isAnonymous ); if ($result['success']) { Session::setFlash('success', $result['message']); $this->redirect('/account/reviews'); } else { Session::setFlash('danger', $result['message']); $this->redirect('/reviews/' . $id . '/edit'); } } /** * POST /reviews/{id}/delete * User deletes own review */ public function delete(int $id): void { $userId = Auth::id(); $result = $this->reviewService->deleteReview($userId, $id); if ($result['success']) { Session::setFlash('success', $result['message']); } else { Session::setFlash('danger', $result['message']); } $this->redirect('/account/reviews'); } /** * GET /account/reviews * Customer reviews & pending unreviewed order items */ public function myReviews(): void { $userId = Auth::id(); $data = $this->reviewService->getUserReviewData($userId); $this->render('account/my_reviews', [ 'myReviews' => $data['my_reviews'], 'pendingItems' => $data['pending_items'], 'pageTitle' => 'รีวิวของฉัน - CARGOO', 'activeTab' => 'reviews' ], 'account'); } /** * POST /reviews/{id}/report * Report an inappropriate review */ public function report(int $id): void { $userId = Auth::id(); $reason = trim($_POST['reason'] ?? ''); $description = trim($_POST['description'] ?? ''); $result = $this->reviewService->reportReview($userId, $id, $reason, !empty($description) ? $description : null); if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') { $this->json($result, $result['success'] ? 200 : 400); return; } if ($result['success']) { Session::setFlash('success', $result['message']); } else { Session::setFlash('danger', $result['message']); } $referrer = $_SERVER['HTTP_REFERER'] ?? url('/'); Url::redirect($referrer); } /** * GET /api/v1/products/{id}/reviews * AJAX endpoint for product detail page review pagination & star filtering */ public function ajaxProductReviews(int $productId): void { $page = max(1, (int)($_GET['page'] ?? 1)); $rating = !empty($_GET['rating']) ? (int)$_GET['rating'] : null; $data = $this->reviewService->getProductReviews($productId, $page, 10, $rating); $this->json([ 'success' => true, 'data' => $data ]); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings