Webiant Logo Webiant Logo
  1. No results found.

    Try your search with a different keyword or use * as a wildcard.

_ProductReviews.cshtml

@model ProductReviewsModel

@inject Nop.Services.Html.IHtmlFormatter htmlFormatter

<section class="page product-reviews">
    @await Component.InvokeAsync(typeof(WidgetViewComponent), new { widgetZone = PublicWidgetZones.ProductReviewsPageTop, additionalData = Model })
    @if (Model.Items.Count > 0)
    {
        <div class="product-review-list">
            <a name="productreviews"></a>
            <h2 class="title">
                @T("Reviews.ExistingReviews")
            </h2>
            @foreach (var review in Model.Items)
            {
                var ratingPercent = review.Rating * 20;
                <div class="product-review-item">
                    <div class="review-item-head">
                        <div class="review-title">
                            <strong>@review.Title</strong>
                        </div>
                        <div class="product-review-box">
                            <div class="rating">
                                <div style="width: @(ratingPercent)%">
                                    @review.Rating
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="review-content">
                        <div class="review-text">
                            @if (!string.IsNullOrEmpty(review.CustomerAvatarUrl))
                            {
                                <div class="avatar">
                                    @if (review.AllowViewingProfiles)
                                    {
                                        <a href="@Url.RouteUrl(NopRouteNames.Standard.CUSTOMER_PROFILE, new { id = review.CustomerId })" class="avatar-img-link">
                                            <img src="@(review.CustomerAvatarUrl)" class="avatar-img" alt="Avatar" />
                                        </a>
                                    }
                                    else
                                    {
                                        <img src="@(review.CustomerAvatarUrl)" class="avatar-img" alt="Avatar" />
                                    }
                                </div>
                            }
                            <div class="text-body">
                                @Html.Raw(htmlFormatter.FormatText(review.ReviewText, false, true, false, false, false, false))
                            </div>
                        </div>
                        @foreach (var reviewType in review.AdditionalProductReviewList.Where(x => x.Rating > 0 && x.VisibleToAllCustomers))
                        {
                            var ratingExtPercent = reviewType.Rating * 20;
                            <div class="review-type-rating-ext">
                                <div class="review-title">
                                    <i>@reviewType.Name</i>
                                </div>
                                <div class="product-review-box">
                                    <div class="rating">
                                        <div style="width: @(ratingExtPercent)%">
                                            @reviewType.Rating
                                        </div>
                                    </div>
                                </div>
                            </div>
                        }
                        <div class="review-info">
                            <span class="user">
                                <label>@T("Reviews.From"):</label>
                                @if (review.AllowViewingProfiles)
                                {
                                    <a href="@Url.RouteUrl(NopRouteNames.Standard.CUSTOMER_PROFILE, new { id = review.CustomerId })">@(review.CustomerName)</a>
                                }
                                else
                                {
                                    <span>@review.CustomerName</span>
                                }
                            </span>
                            <span class="separator">|</span>
                            <span class="date">
                                <label>@T("Reviews.Date"):</label>
                                <span>@review.WrittenOnStr</span>
                            </span>
                        </div>
                        @await Html.PartialAsync("_ProductReviewHelpfulness", review.Helpfulness)
                        @await Component.InvokeAsync(typeof(WidgetViewComponent), new { widgetZone = PublicWidgetZones.ProductReviewsPageInsideReview, additionalData = review })
                        @if (!string.IsNullOrEmpty(review.ReplyText))
                        {
                            <div class="reply">
                                <div class="reply-header">
                                    @T("Reviews.Reply")
                                </div>
                                <div class="reply-text">
                                    @Html.Raw(htmlFormatter.FormatText(review.ReplyText, false, true, false, false, false, false))
                                </div>
                            </div>
                        }
                    </div>
                </div>
            }
        </div>
    }

    @if (!Model.AddProductReview.CanCurrentCustomerLeaveReview)
    {
        <div class="result review-already-added">
            @T("Reviews.OnlyRegisteredUsersCanWriteReviews")
        </div>
    }
    else if (!Model.AddProductReview.CanAddNewReview)
    {
        <div class="result review-already-added">
            @T("Reviews.AlreadyAddedProductReviews")
        </div>
    }         
    else
    {
        <div class="write-review" id="review-form">
            <a name="addreview"></a>
            <h2 class="title">
                @T("Reviews.Write")
            </h2>
            <form asp-action="ProductReviews" asp-fragment="addreview" method="post">
                <input type="hidden" asp-for="ProductId" />
                <div asp-validation-summary="ModelOnly" class="message-error"></div>
                <section class="fieldset">
                    <div class="form-fields">
                        <div class="inputs">
                            <label asp-for="AddProductReview.Title" asp-postfix=":"></label>
                            <input asp-for="AddProductReview.Title" class="review-title" />
                            <nop-required />
                            <span asp-validation-for="AddProductReview.Title"></span>
                        </div>
                        <div class="inputs">
                            <label asp-for="AddProductReview.ReviewText" asp-postfix=":"></label>
                            <textarea asp-for="AddProductReview.ReviewText" class="review-text"></textarea>
                            <nop-required />
                            <span asp-validation-for="AddProductReview.ReviewText"></span>
                        </div>
                        <div class="review-rating">
                            <div class="name-description">
                                <label asp-for="AddProductReview.Rating" asp-postfix=":"></label>
                            </div>
                            <div class="rating-wrapper">
                                <div class="label first">@T("Reviews.Fields.Rating.Bad")</div>
                                <div class="rating-options">
                                    <input asp-for="AddProductReview.Rating" value="0" type="radio" id="addproductrating_0" style="display: none;"/>
                                    <input asp-for="AddProductReview.Rating" value="1" type="radio" id="addproductrating_1" aria-label="@T("Reviews.Fields.Rating.Bad")" />
                                    <input asp-for="AddProductReview.Rating" value="2" type="radio" id="addproductrating_2" aria-label="@T("Reviews.Fields.Rating.NotGood")" />
                                    <input asp-for="AddProductReview.Rating" value="3" type="radio" id="addproductrating_3" aria-label="@T("Reviews.Fields.Rating.NotBadNotExcellent")" />
                                    <input asp-for="AddProductReview.Rating" value="4" type="radio" id="addproductrating_4" aria-label="@T("Reviews.Fields.Rating.Good")" />
                                    <input asp-for="AddProductReview.Rating" value="5" type="radio" id="addproductrating_5" aria-label="@T("Reviews.Fields.Rating.Excellent")" />
                                </div>                                    
                                <div class="label last">@T("Reviews.Fields.Rating.Excellent")</div>
                            </div>
                        </div>
                        @if (Model.ReviewTypeList.Count > 0)
                        {
                            foreach (var additionalReview in Model.AddAdditionalProductReviewList.OrderBy(ob => ob.DisplayOrder).ToList())
                            {
                                var curAdditionalReview = Model.AddAdditionalProductReviewList.IndexOf(additionalReview);
                                <div class="review-rating">
                                    <div class="name-description">
                                        <div class="tooltip">
                                            <label>@Html.Raw(additionalReview.Name):</label>
                                            <span class="tooltiptext">@Html.Raw(additionalReview.Description)</span>
                                        </div>
                                    </div>
                                    <div class="rating-wrapper">
                                        <div class="label first">@T("Reviews.Fields.Rating.Bad")</div>
                                        <div class="rating-options">
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].ReviewTypeId" value="@(additionalReview.ReviewTypeId)" type="hidden" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Name" value="@(additionalReview.Name)" type="hidden" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Description" value="@(additionalReview.Description)" type="hidden" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].DisplayOrder" value="@(additionalReview.DisplayOrder)" type="hidden" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].IsRequired" value="@(additionalReview.IsRequired)" type="hidden" />

                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Rating" value="0" type="radio" id="addproductratingext_0_@(additionalReview.ReviewTypeId)" style="display: none;" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Rating" value="1" type="radio" id="addproductratingext_1_@(additionalReview.ReviewTypeId)" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Rating" value="2" type="radio" id="addproductratingext_2_@(additionalReview.ReviewTypeId)" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Rating" value="3" type="radio" id="addproductratingext_3_@(additionalReview.ReviewTypeId)" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Rating" value="4" type="radio" id="addproductratingext_4_@(additionalReview.ReviewTypeId)" />
                                            <input asp-for="@Model.AddAdditionalProductReviewList[curAdditionalReview].Rating" value="5" type="radio" id="addproductratingext_5_@(additionalReview.ReviewTypeId)" />
                                        </div>
                                        <div class="label last">@T("Reviews.Fields.Rating.Excellent")</div>
                                    </div>
                                </div>
                            }
                        }

                        @if (Model.AddProductReview.DisplayCaptcha)
                        {
                            <nop-captcha action-name="ProductReviews" />
                        }
                    </div>
                </section>
                <section class="buttons">
                    <button type="submit" name="add-review" id="add-review" class="button-1 write-product-review-button">@T("Reviews.SubmitButton")</button>
                </section>
            </form>
        </div>
    }
    @await Component.InvokeAsync(typeof(WidgetViewComponent), new { widgetZone = PublicWidgetZones.ProductReviewsPageBottom, additionalData = Model })
</section>