@extends('layouts.dashboard') @section('content') @php /** * Admin โ†’ Reviews โ†’ moderate one review. The reviewer, restaurant and linked * order are read-only provenance (a review is bound one-to-one to its order); * only the moderator-owned rating / comment / status are editable. Saving * recomputes the restaurant's cached rating (ReviewController::save()). * * @var array $review joined review row (restaurant_name/logo, customer_name/avatar/email, order_number) * @var array $authorHistory this reviewer's other reviews (up to 10, newest first) * @var array|null $authorSummary reviews_c / avg_rating / low_c / first_at for this reviewer */ $statusPill = ['approved' => 'qm-pill-green', 'pending' => 'qm-pill-amber']; $authorHistory = $authorHistory ?? []; $authorSummary = $authorSummary ?? null; $reviewerName = (string) ($review['customer_name'] ?? '') !== '' ? (string) $review['customer_name'] : ((string) ($review['author_name'] ?? '') !== '' ? (string) $review['author_name'] : t_raw('admin.reviewdetail.guest')); @endphp @php /* .qm-d2: the dashboard density standard (app.css ยง35) */ @endphp
{{ t_raw('admin.reviewdetail.back') }}
{{ t_raw('admin.reviewdetail.reviewer') }}
{!! brandmark_html($review['customer_avatar'] ?? null, $reviewerName, 'md', 'qm-brandmark--round') !!}
{{ $reviewerName }} @if (!empty($review['customer_email'])){{ $review['customer_email'] }}@endif @if ($authorSummary && (int) $authorSummary['reviews_c'] > 0) {{ t_raw('admin.reviews.author_history', [ ':count' => (int) $authorSummary['reviews_c'], ':avg' => number_format((float) $authorSummary['avg_rating'], 1), ]) }} @endif
{{ t_raw('admin.reviewdetail.restaurant') }}
@if (!empty($review['restaurant_id']) && !empty($review['restaurant_name'])) {{ $review['restaurant_name'] }} @else {{ t_raw('admin.reviews.deleted_restaurant') }} @endif
{{ t_raw('admin.reviewdetail.order') }}
@if (!empty($review['order_id']) && !empty($review['order_number'])) {{ $review['order_number'] }} @else {{ t_raw('admin.reviewdetail.no_order') }} @endif
{{ t_raw('common.rating') }}
{!! rating_stars_html((float) (int) $review['rating']) !!}
{{ t_raw('admin.reviews.col_posted') }}
{!! fmt_day($review['created_at']) !!}
{{ t_raw('common.status') }}
{{ status_label('review', (string) $review['status']) }}
@csrf

{{ t_raw('admin.reviewdetail.sec_moderation') }}

{{ t_raw('common.cancel') }}
@if ($authorSummary && (int) $authorSummary['reviews_c'] > 0) @php // Everything else this account has written. A single harsh review reads very // differently once the moderator can see whether the same reviewer rates // everything one star or has been consistently positive elsewhere. $avg = (float) $authorSummary['avg_rating']; $lowC = (int) $authorSummary['low_c']; $total = (int) $authorSummary['reviews_c']; @endphp

{{ t_raw('admin.reviewdetail.sec_reviewer_history') }}

{{ t_raw('admin.reviewdetail.pill_reviews_written', [':count' => $total]) }} {{ t_raw('admin.reviewdetail.pill_average', [':avg' => number_format($avg, 1)]) }} @if ($lowC > 0){{ t_raw('admin.reviewdetail.pill_low_ratings', [':count' => $lowC]) }}@endif @if (!empty($authorSummary['first_at'])){!! t_raw('admin.reviewdetail.pill_reviewing_since', [':date' => fmt_day($authorSummary['first_at'], true)]) !!}@endif
@if ($authorHistory) @foreach ($authorHistory as $h) @endforeach @else @partial('table-empty', ['colspan' => 6, 'icon' => 'fa-star', 'msg' => t('admin.reviewdetail.only_review')]) @endif
{{ t_raw('nav.restaurants') }}{{ t_raw('common.rating') }}{{ t_raw('admin.reviews.col_review') }}{{ t_raw('common.status') }}{{ t_raw('admin.reviews.col_posted') }}{{ t_raw('common.actions') }}
{!! or_dash($h['restaurant_name'] ?? null) !!} {!! rating_stars_html((float) (int) $h['rating']) !!}
{!! or_dash($h['comment'] ?? null) !!}
{{ status_label('review', (string) $h['status']) }} {!! fmt_day($h['created_at']) !!} @partial('row-actions', ['actions' => [ ['label' => t_raw('admin.reviews.aria_edit'), 'icon' => 'fa-pen', 'href' => '/admin/reviews/' . (int) $h['id'], 'primary' => true], ]])
@php /* This table is this reviewer's OTHER reviews, so its total is counted with the same exclusion the list runs โ€” never derived from the all-inclusive figure in the pills above, which counts the review being moderated here as well. */ @endphp @partial('table-toolbar', ['pager' => $historyPager ?? []])
@endif
@php /* /.qm-d2 */ @endphp @endsection