reviews) && is_array($trip->reviews) ? $trip->reviews : []; // Total approved count and average come from SQL on the Trip model (list may be capped at N rows). $total_reviews = (int) ($trip->review_count ?? 0); if ($total_reviews < 1) { $total_reviews = count($display_reviews); } $avg_rating = (isset($trip->average_rating) && (float) $trip->average_rating > 0) ? (float) $trip->average_rating : 0.0; // Rating distribution: prefer full aggregate from Trip (accurate when review list is limited). $rating_distribution = [5 => 0, 4 => 0, 3 => 0, 2 => 0, 1 => 0]; $dist = $trip->rating_distribution ?? null; if (is_array($dist) && $dist !== [] && ($trip->review_count ?? 0) > 0) { foreach ([5, 4, 3, 2, 1] as $star) { $rating_distribution[$star] = (int) ($dist[$star] ?? $dist[(string) $star] ?? 0); } } else { foreach ($display_reviews as $review) { $review_rating = (int) (is_object($review) ? ($review->rating ?? 0) : ($review['rating'] ?? 0)); if ($review_rating >= 1 && $review_rating <= 5) { $rating_distribution[$review_rating]++; } } } // If we have reviews, calculate average from them if ($total_reviews > 0 && $avg_rating == 0) { $total_rating = 0; foreach ($display_reviews as $review) { $total_rating += (int) (is_object($review) ? ($review->rating ?? 0) : ($review['rating'] ?? 0)); } $avg_rating = round($total_rating / $total_reviews, 1); } ?>
/5
★ ★ ★

= 1; $star--): $count = $rating_distribution[$star]; $percentage = $total_reviews > 0 ? ($count / $total_reviews) * 100 : 0; ?>
★
rating ?? 5) : ($review['rating'] ?? 5); $review_title = is_object($review) ? ($review->title ?? '') : ($review['title'] ?? ''); $review_content = is_object($review) ? ($review->content ?? '') : ($review['content'] ?? ''); $review_author = is_object($review) ? ($review->author_name ?? __('Anonymous', 'yatra')) : ($review['author_name'] ?? __('Anonymous', 'yatra')); $review_location = is_object($review) ? ($review->author_location ?? '') : ($review['author_location'] ?? ''); $review_date = is_object($review) ? ($review->created_at ?? '') : ($review['created_at'] ?? ''); $review_user_id = is_object($review) ? ($review->user_id ?? 0) : ($review['user_id'] ?? 0); $is_verified = $review_user_id > 0; $author_initial = strtoupper(substr($review_author, 0, 1)); $avatar_colors = ['#ef4444', '#f97316', '#eab308', '#22c55e', '#3b82f6', '#8b5cf6', '#ec4899']; $avatar_color = $avatar_colors[ord($author_initial) % count($avatar_colors)]; ?>
•
★

3): ?>

id); $require_booking = yatra_setting_enabled('require_booking_to_review'); $minimum_rating = (int) yatra_get_setting('minimum_rating', 1); // Check for existing review that can be edited $existing_review = null; $can_edit_review = false; $edit_time_remaining = ''; if (is_user_logged_in()) { $existing_review = yatra_get_user_review((int) $trip->id); if ($existing_review) { $can_edit_review = yatra_can_edit_review($existing_review); if ($can_edit_review) { $edit_time_remaining = yatra_get_review_edit_time_remaining($existing_review); } } } ?>

status) && $existing_review->status === 'approved'): ?>

rating : 5; for ($i = 1; $i <= 5; $i++): ?> >
1): ?>