public virtual IActionResult VendorReviewsAdd(string vendorId, VendorReviewsModel model, bool captchaValid) { var vendor = _vendorService.GetVendorById(vendorId); if (vendor == null || !vendor.Active || !vendor.AllowCustomerReviews) { return(RedirectToRoute("HomePage")); } //validate CAPTCHA if (_captchaSettings.Enabled && _captchaSettings.ShowOnVendorReviewPage && !captchaValid) { ModelState.AddModelError("", _captchaSettings.GetWrongCaptchaMessage(_localizationService)); } if (_workContext.CurrentCustomer.IsGuest() && !_vendorSettings.AllowAnonymousUsersToReviewVendor) { ModelState.AddModelError("", _localizationService.GetResource("VendorReviews.OnlyRegisteredUsersCanWriteReviews")); } //allow reviews only by customer that bought something from this vendor if (_vendorSettings.VendorReviewPossibleOnlyAfterPurchasing && !_orderService.SearchOrders(customerId: _workContext.CurrentCustomer.Id, vendorId: vendorId, os: OrderStatus.Complete).Any()) { ModelState.AddModelError(string.Empty, _localizationService.GetResource("VendorReviews.VendorReviewPossibleOnlyAfterPurchasing")); } if (ModelState.IsValid) { var vendorReview = _vendorWebService.InsertVendorReview(vendor, model); //activity log _customerActivityService.InsertActivity("PublicStore.AddVendorReview", vendor.Id, _localizationService.GetResource("ActivityLog.PublicStore.AddVendorReview"), vendor.Name); //raise event if (vendorReview.IsApproved) { _eventPublisher.Publish(new VendorReviewApprovedEvent(vendorReview)); } _vendorWebService.PrepareVendorReviewsModel(model, vendor); model.AddVendorReview.Title = null; model.AddVendorReview.ReviewText = null; model.AddVendorReview.SuccessfullyAdded = true; if (!vendorReview.IsApproved) { model.AddVendorReview.Result = _localizationService.GetResource("VendorReviews.SeeAfterApproving"); } else { model.AddVendorReview.Result = _localizationService.GetResource("VendorReviews.SuccessfullyAdded"); } return(View(model)); } //If we got this far, something failed, redisplay form _vendorWebService.PrepareVendorReviewsModel(model, vendor); return(View(model)); }
public virtual async Task PrepareVendorReviewsModel(VendorReviewsModel model, Vendor vendor) { if (vendor == null) { throw new ArgumentNullException("vendor"); } if (model == null) { throw new ArgumentNullException("model"); } model.VendorId = vendor.Id; model.VendorName = vendor.GetLocalized(x => x.Name, _workContext.WorkingLanguage.Id); model.VendorSeName = vendor.GetSeName(_workContext.WorkingLanguage.Id); var vendorReviews = await _vendorService.GetAllVendorReviews("", true, null, null, "", vendor.Id); foreach (var pr in vendorReviews) { var customer = await _serviceProvider.GetRequiredService <ICustomerService>().GetCustomerById(pr.CustomerId); model.Items.Add(new VendorReviewModel { Id = pr.Id, CustomerId = pr.CustomerId, CustomerName = customer.FormatUserName(_customerSettings.CustomerNameFormat), AllowViewingProfiles = _customerSettings.AllowViewingProfiles && customer != null && !customer.IsGuest(), Title = pr.Title, ReviewText = pr.ReviewText, Rating = pr.Rating, Helpfulness = new VendorReviewHelpfulnessModel { VendorId = vendor.Id, VendorReviewId = pr.Id, HelpfulYesTotal = pr.HelpfulYesTotal, HelpfulNoTotal = pr.HelpfulNoTotal, }, WrittenOnStr = _dateTimeHelper.ConvertToUserTime(pr.CreatedOnUtc, DateTimeKind.Utc).ToString("g"), }); } model.AddVendorReview.CanCurrentCustomerLeaveReview = _vendorSettings.AllowAnonymousUsersToReviewVendor || !_workContext.CurrentCustomer.IsGuest(); model.AddVendorReview.DisplayCaptcha = _captchaSettings.Enabled && _captchaSettings.ShowOnVendorReviewPage; }
public virtual VendorReview InsertVendorReview(Vendor vendor, VendorReviewsModel model) { //save review int rating = model.AddVendorReview.Rating; if (rating < 1 || rating > 5) { rating = _vendorSettings.DefaultVendorRatingValue; } bool isApproved = !_vendorSettings.VendorReviewsMustBeApproved; var vendorReview = new VendorReview { VendorId = vendor.Id, CustomerId = _workContext.CurrentCustomer.Id, Title = model.AddVendorReview.Title, ReviewText = model.AddVendorReview.ReviewText, Rating = rating, HelpfulYesTotal = 0, HelpfulNoTotal = 0, IsApproved = isApproved, CreatedOnUtc = DateTime.UtcNow, }; _vendorService.InsertVendorReview(vendorReview); if (!_workContext.CurrentCustomer.IsHasVendorReview) { _workContext.CurrentCustomer.IsHasVendorReview = true; EngineContext.Current.Resolve <ICustomerService>().UpdateHasVendorReview(_workContext.CurrentCustomer.Id); } //update vendor totals _vendorService.UpdateVendorReviewTotals(vendor); //notify store owner if (_vendorSettings.NotifyVendorAboutNewVendorReviews) { _workflowMessageService.SendVendorReviewNotificationMessage(vendorReview, _localizationSettings.DefaultAdminLanguageId); } return(vendorReview); }
public virtual IActionResult VendorReviews(string vendorId) { var vendor = _vendorService.GetVendorById(vendorId); if (vendor == null || !vendor.Active || !vendor.AllowCustomerReviews) { return(RedirectToRoute("HomePage")); } var model = new VendorReviewsModel(); _vendorWebService.PrepareVendorReviewsModel(model, vendor); //only registered users can leave reviews if (_workContext.CurrentCustomer.IsGuest() && !_vendorSettings.AllowAnonymousUsersToReviewVendor) { ModelState.AddModelError("", _localizationService.GetResource("VendorReviews.OnlyRegisteredUsersCanWriteReviews")); } //default value model.AddVendorReview.Rating = _vendorSettings.DefaultVendorRatingValue; return(View(model)); }
public virtual async Task <IActionResult> VendorReviewsAdd(string vendorId, VendorReviewsModel model, bool captchaValid, [FromServices] CaptchaSettings captchaSettings) { var vendor = await _vendorService.GetVendorById(vendorId); if (vendor == null || !vendor.Active || !vendor.AllowCustomerReviews) { return(RedirectToRoute("HomePage")); } //validate CAPTCHA if (captchaSettings.Enabled && captchaSettings.ShowOnVendorReviewPage && !captchaValid) { ModelState.AddModelError("", captchaSettings.GetWrongCaptchaMessage(_localizationService)); } if (_workContext.CurrentCustomer.IsGuest() && !_vendorSettings.AllowAnonymousUsersToReviewVendor) { ModelState.AddModelError("", _localizationService.GetResource("VendorReviews.OnlyRegisteredUsersCanWriteReviews")); } //allow reviews only by customer that bought something from this vendor if (_vendorSettings.VendorReviewPossibleOnlyAfterPurchasing && !(await _mediator.Send(new GetOrderQuery() { CustomerId = _workContext.CurrentCustomer.Id, VendorId = vendorId, Os = OrderStatus.Completed, PageSize = 1 })).Any()) { ModelState.AddModelError(string.Empty, _localizationService.GetResource("VendorReviews.VendorReviewPossibleOnlyAfterPurchasing")); } if (ModelState.IsValid) { var vendorReview = await _mediator.Send(new InsertVendorReviewCommand() { Vendor = vendor, Store = _storeContext.CurrentStore, Model = model }); //activity log await _customerActivityService.InsertActivity("PublicStore.AddVendorReview", vendor.Id, _localizationService.GetResource("ActivityLog.PublicStore.AddVendorReview"), vendor.Name); //raise event if (vendorReview.IsApproved) { await _mediator.Publish(new VendorReviewApprovedEvent(vendorReview)); } model = await _mediator.Send(new GetVendorReviews() { Vendor = vendor }); model.AddVendorReview.Title = null; model.AddVendorReview.ReviewText = null; model.AddVendorReview.SuccessfullyAdded = true; if (!vendorReview.IsApproved) { model.AddVendorReview.Result = _localizationService.GetResource("VendorReviews.SeeAfterApproving"); } else { model.AddVendorReview.Result = _localizationService.GetResource("VendorReviews.SuccessfullyAdded"); } return(View(model)); } model = await _mediator.Send(new GetVendorReviews() { Vendor = vendor }); return(View(model)); }