Skip to content

Commit

Permalink
Fix vendor review
Browse files Browse the repository at this point in the history
  • Loading branch information
KrzysztofPajak committed Nov 2, 2021
1 parent 904a3df commit 7b33ff9
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 148 deletions.
37 changes: 12 additions & 25 deletions src/Web/Grand.Web/Controllers/CatalogController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -350,31 +350,16 @@ public virtual async Task<IActionResult> VendorAll()

#region Vendor reviews

public virtual async Task<IActionResult> VendorReviews(string vendorId)
{
var vendor = await _vendorService.GetVendorById(vendorId);
if (vendor == null || !vendor.Active || !vendor.AllowCustomerReviews)
return RedirectToRoute("HomePage");

var model = await _mediator.Send(new GetVendorReviews() { Vendor = vendor });

//only registered users can leave reviews
if (await _groupService.IsGuest(_workContext.CurrentCustomer) && !_vendorSettings.AllowAnonymousUsersToReviewVendor)
ModelState.AddModelError("", _translationService.GetResource("VendorReviews.OnlyRegisteredUsersCanWriteReviews"));
//default value
model.AddVendorReview.Rating = _vendorSettings.DefaultVendorRatingValue;
return View(model);
}

[HttpPost]
[AutoValidateAntiforgeryToken]
[ValidateCaptcha]
public virtual async Task<IActionResult> VendorReviews(string vendorId, VendorReviewsModel model, bool captchaValid,
public virtual async Task<IActionResult> VendorReviews(
VendorReviewsModel model, bool captchaValid,
[FromServices] CaptchaSettings captchaSettings)
{
var vendor = await _vendorService.GetVendorById(vendorId);
var vendor = await _vendorService.GetVendorById(model.VendorId);
if (vendor == null || !vendor.Active || !vendor.AllowCustomerReviews)
return RedirectToRoute("HomePage");
return Content("");

//validate CAPTCHA
if (captchaSettings.Enabled && captchaSettings.ShowOnVendorReviewPage && !captchaValid)
Expand All @@ -392,7 +377,7 @@ public virtual async Task<IActionResult> VendorReviews(string vendorId)
!(await _mediator.Send(new GetOrderQuery()
{
CustomerId = _workContext.CurrentCustomer.Id,
VendorId = vendorId,
VendorId = vendor.Id,
Os = (int)OrderStatusSystem.Complete,
PageSize = 1
})).Any())
Expand Down Expand Up @@ -422,14 +407,16 @@ public virtual async Task<IActionResult> VendorReviews(string vendorId)
model.AddVendorReview.Result = _translationService.GetResource("VendorReviews.SuccessfullyAdded");
model.VendorReviewOverview = PrepareVendorReviewOverviewModel(vendor);
}
return View(model);
return Json(model);
}

model = await _mediator.Send(new GetVendorReviews() { Vendor = vendor });
model.AddVendorReview.SuccessfullyAdded = false;
model.AddVendorReview.Result = string.Join("; ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage));
var returnmodel = await _mediator.Send(new GetVendorReviews() { Vendor = vendor });
returnmodel.AddVendorReview.ReviewText = model.AddVendorReview.ReviewText;
returnmodel.AddVendorReview.Title = model.AddVendorReview.Title;
returnmodel.AddVendorReview.SuccessfullyAdded = false;
returnmodel.AddVendorReview.Result = string.Join("; ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage));

return View(model);
return Json(returnmodel);
}

[HttpPost]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ else
}),
methods: {
test(url) {
alert('test');
var bodyFormData = new FormData(document.getElementById("vendorContact"));
axios({
url: url,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@model VendorReviewsModel

<div class="mb-3">
<a class="btn btn-info" @@click="vendorreviews.addVendorReview('@Url.RouteUrl("VendorReviews", new { vendorId = Model.VendorId })')">@Loc["Reviews.Overview.AddNew"]</a>
<a class="btn btn-info" @@click="vendorreviews.addVendorReview()">@Loc["Reviews.Overview.AddNew"]</a>
</div>
@if (Model.AddVendorReview.DisplayCaptcha)
{
Expand All @@ -11,7 +11,8 @@
</div>
</div>
}
<partial name="_VendorReview.Modal" />
<partial name="_VendorReview.Modal" model="Model" />

<template id="vendor-review-list" v-if="vendorreviews.Model.Items.length > 0">
<div class="vendor-review-list">
<h5 class="mb-3"><strong>@Loc["Reviews.ExistingReviews"]</strong></h5>
Expand Down Expand Up @@ -68,7 +69,6 @@
Model: null,
rating: null,
captcha: null,
PopupVendorReviewVueModal: null,
}
},
created() {
Expand Down Expand Up @@ -106,29 +106,18 @@
alert(error);
})
},
addVendorReview: function (url) {
axios({
url: url,
method: 'get',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Response-View': 'Json'
}
}).then(function (response) {
vendorreviews.PopupVendorReviewVueModal = response.data;
vm.$refs['ModalVendorReview'].show();
});
addVendorReview: function () {
vm.$refs['ModalVendorReview'].show();
},
modalReviewShown: function () {
if (vendorreviews.PopupVendorReviewVueModal.AddVendorReview.DisplayCaptcha && document.querySelector("#ModalVendorReview .captcha-box") == null) {
if (vendorreviews.Model.AddVendorReview.DisplayCaptcha && document.querySelector("#ModalVendorReview .captcha-box") == null) {
var html = document.getElementById("captcha-box");
document.getElementById("captcha-popup").prepend(html);
}
vendorreviews.PopupVendorReviewVueModal = Object.assign({}, vendorreviews.PopupVendorReviewVueModal, { ReviewTitle: '', ReviewText: '' })
vendorreviews.Model = Object.assign({}, vendorreviews.Model, { ReviewTitle: '', ReviewText: '' })
},
modalReviewClose: function () {
if (vendorreviews.PopupVendorReviewVueModal.AddVendorReview.DisplayCaptcha && document.querySelector("#ModalVendorReview .captcha-box") !== null) {
if (vendorreviews.Model.AddVendorReview.DisplayCaptcha && document.querySelector("#ModalVendorReview .captcha-box") !== null) {
var html = document.getElementById("captcha-box");
document.getElementById("captcha-container").prepend(html);
}
Expand All @@ -147,7 +136,7 @@
'X-Response-View': 'Json'
},
}).then(function (response) {
vendorreviews.PopupVendorReviewVueModal = response.data;
vendorreviews.Model = response.data;
vendorreviews.Model.Items = response.data.Items;
var result = response.data.AddVendorReview.Result;
Expand Down
91 changes: 0 additions & 91 deletions src/Web/Grand.Web/Views/Catalog/VendorReviews.cshtml

This file was deleted.

25 changes: 13 additions & 12 deletions src/Web/Grand.Web/Views/Catalog/_VendorReview.Modal.cshtml
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
@{
var vendorlink = @Url.RouteUrl("Vendor");
@model VendorReviewsModel
@{
var vendorlink = @Url.RouteUrl("Vendor", new { SeName = Model.VendorSeName } );
}

<b-modal id="ModalVendorReview" ref="ModalVendorReview" :dark-theme="darkMode" size="xl" @@shown="vendorreviews.modalReviewShown()" @@hide="vendorreviews.modalReviewClose()" centered hide-footer hide-header>
<template v-if="vendorreviews.PopupVendorReviewVueModal !== null">
<h2 class="generalTitle h3">@Loc["Reviews.VendorReviewsFor"] <a href="@vendorlink">{{vendorreviews.PopupVendorReviewVueModal.VendorName}}</a></h2>
<template v-if="vendorreviews.Model !== null">
<h2 class="generalTitle h3">@Loc["Reviews.VendorReviewsFor"] <a href="@vendorlink">{{vendorreviews.Model.VendorName}}</a></h2>
<a class="modal-close" @@click="$bvModal.hide('ModalVendorReview')"><b-icon icon="x"></b-icon></a>
<template v-if="!vendorreviews.PopupVendorReviewVueModal.AddVendorReview.SuccessfullyAdded">
<template v-if="!vendorreviews.Model.AddVendorReview.SuccessfullyAdded">
<div class="write-review" id="review-form">
<h5 class="generalTitle"><strong>@Loc["Reviews.Write"]</strong></h5>
<validation-observer v-slot="{ handleSubmit }">
<form id="addReviewForm" :action="'/vendoreviews/' + vendorreviews.PopupVendorReviewVueModal.VendorId" method="post" ref="modalForm" v-on:submit.prevent="handleSubmit(vendorreviews.submitVendorReview)" :data-title="'@Loc["Reviews.VendorReviewsFor"] ' + vendorreviews.PopupVendorReviewVueModal.VendorName">
<input type="hidden" name="VendorId" :value="vendorreviews.PopupVendorReviewVueModal.VendorId" />
<form id="addReviewForm" asp-route="VendorReviews" asp-route-VendorId="@Model.VendorId"
method="post" ref="modalForm" v-on:submit.prevent="handleSubmit(vendorreviews.submitVendorReview)" :data-title="'@Loc["Reviews.VendorReviewsFor"] ' + vendorreviews.Model.VendorName">
<input type="hidden" name="VendorId" :value="vendorreviews.Model.VendorId" />
<div asp-validation-summary="ModelOnly" class="message-error alert alert-danger my-3"></div>
<fieldset>
<div class="form-fields">
<div class="form-group">
<validation-provider tag="div" rules="required" name="AddVendorReview.Title" v-slot="{ errors, classes }">
<label for="AddVendorReview_Title" class="col-form-label">@Loc["Reviews.Fields.Title"]:</label>
<input data-val-required="@Loc["reviews.fields.title.required"]" v-model="vendorreviews.PopupVendorReviewVueModal.ReviewTitle" id="AddVendorReview_Title" name="AddVendorReview.Title" v-bind:class="[classes , 'form-control review-title']" :disabled="!vendorreviews.PopupVendorReviewVueModal.AddVendorReview.CanCurrentCustomerLeaveReview" />
<input data-val-required="@Loc["reviews.fields.title.required"]" v-model="vendorreviews.Model.AddVendorReview.Title" id="AddVendorReview_Title" name="AddVendorReview.Title" v-bind:class="[classes , 'form-control review-title']" :disabled="!vendorreviews.Model.AddVendorReview.CanCurrentCustomerLeaveReview" />
<span class="field-validation-error">{{ errors[0] }}</span>
</validation-provider>
</div>
<div class="form-group">
<validation-provider tag="div" rules="required" name="AddVendorReview.ReviewText" v-slot="{ errors, classes }">
<label for="AddVendorReview_ReviewText" class="col-form-label">@Loc["Reviews.Fields.ReviewText"]:</label>
<textarea data-val-required="@Loc["reviews.fields.reviewtext.required"]" v-model="vendorreviews.PopupVendorReviewVueModal.ReviewText" id="AddVendorReview_ReviewText" name="AddVendorReview.ReviewText" v-bind:class="[classes , 'form-control review-text']" :disabled="!vendorreviews.PopupVendorReviewVueModal.AddVendorReview.CanCurrentCustomerLeaveReview"></textarea>
<textarea data-val-required="@Loc["reviews.fields.reviewtext.required"]" v-model="vendorreviews.Model.AddVendorReview.ReviewText" id="AddVendorReview_ReviewText" name="AddVendorReview.ReviewText" v-bind:class="[classes , 'form-control review-text']" :disabled="!vendorreviews.Model.AddVendorReview.CanCurrentCustomerLeaveReview"></textarea>
<span class="field-validation-error">{{ errors[0] }}</span>
</validation-provider>
</div>
Expand All @@ -34,13 +35,13 @@
<b-form-rating v-model="value" variant="warning" show-value value="5" inline></b-form-rating>
<input class="sr-only" id="AddVendorReview_Rating" name="AddVendorReview.Rating" v-model="value" />
</div>
<template v-if="vendorreviews.PopupVendorReviewVueModal.AddVendorReview.DisplayCaptcha">
<template v-if="vendorreviews.Model.AddVendorReview.DisplayCaptcha">
<div id="captcha-popup"></div>
</template>
</div>
</fieldset>
<div class="buttons my-3">
<input type="submit" class="btn btn-info write-vendor-review-button" value="@Loc[" Reviews.SubmitButton"]" :disabled="!vendorreviews.PopupVendorReviewVueModal.AddVendorReview.CanCurrentCustomerLeaveReview" />
<input type="submit" class="btn btn-info write-vendor-review-button" value="@Loc[" Reviews.SubmitButton"]" :disabled="!vendorreviews.Model.AddVendorReview.CanCurrentCustomerLeaveReview" />
</div>
</form>
</validation-observer>
Expand Down

0 comments on commit 7b33ff9

Please sign in to comment.