public ActionResult ReviewsAdd(int id, ProductReviewsModel model, bool captchaValid) { var product = _productService.GetProductById(id); if (product == null || product.Deleted || !product.Published || !product.AllowCustomerReviews) return HttpNotFound(); //validate CAPTCHA if (_captchaSettings.Enabled && _captchaSettings.ShowOnProductReviewPage && !captchaValid) { ModelState.AddModelError("", T("Common.WrongCaptcha")); } if (_services.WorkContext.CurrentCustomer.IsGuest() && !_catalogSettings.AllowAnonymousUsersToReviewProduct) { ModelState.AddModelError("", T("Reviews.OnlyRegisteredUsersCanWriteReviews")); } if (ModelState.IsValid) { //save review int rating = model.AddProductReview.Rating; if (rating < 1 || rating > 5) rating = _catalogSettings.DefaultProductRatingValue; bool isApproved = !_catalogSettings.ProductReviewsMustBeApproved; var customer = _services.WorkContext.CurrentCustomer; var productReview = new ProductReview() { ProductId = product.Id, CustomerId = customer.Id, IpAddress = _services.WebHelper.GetCurrentIpAddress(), Title = model.AddProductReview.Title, ReviewText = model.AddProductReview.ReviewText, Rating = rating, HelpfulYesTotal = 0, HelpfulNoTotal = 0, IsApproved = isApproved, CreatedOnUtc = DateTime.UtcNow, UpdatedOnUtc = DateTime.UtcNow, }; _customerContentService.InsertCustomerContent(productReview); //update product totals _productService.UpdateProductReviewTotals(product); //notify store owner if (_catalogSettings.NotifyStoreOwnerAboutNewProductReviews) _workflowMessageService.SendProductReviewNotificationMessage(productReview, _localizationSettings.DefaultAdminLanguageId); //activity log _services.CustomerActivity.InsertActivity("PublicStore.AddProductReview", T("ActivityLog.PublicStore.AddProductReview"), product.Name); if (isApproved) _customerService.RewardPointsForProductReview(customer, product, true); _helper.PrepareProductReviewsModel(model, product); model.AddProductReview.Title = null; model.AddProductReview.ReviewText = null; model.AddProductReview.SuccessfullyAdded = true; if (!isApproved) model.AddProductReview.Result = T("Reviews.SeeAfterApproving"); else model.AddProductReview.Result = T("Reviews.SuccessfullyAdded"); return View(model); } //If we got this far, something failed, redisplay form _helper.PrepareProductReviewsModel(model, product); return View(model); }
public ActionResult ProductDetailReviews(int productId) { var product = _productService.GetProductById(productId); if (product == null || !product.AllowCustomerReviews) return Content(""); var model = new ProductReviewsModel(); _helper.PrepareProductReviewsModel(model, product); return PartialView(model); }
public ActionResult Reviews(int id) { var product = _productService.GetProductById(id); if (product == null || product.Deleted || !product.Published || !product.AllowCustomerReviews) return HttpNotFound(); var model = new ProductReviewsModel(); _helper.PrepareProductReviewsModel(model, product); //only registered users can leave reviews if (_services.WorkContext.CurrentCustomer.IsGuest() && !_catalogSettings.AllowAnonymousUsersToReviewProduct) ModelState.AddModelError("", T("Reviews.OnlyRegisteredUsersCanWriteReviews")); //default value model.AddProductReview.Rating = _catalogSettings.DefaultProductRatingValue; return View(model); }
public void PrepareProductReviewsModel(ProductReviewsModel model, Product product) { if (product == null) throw new ArgumentNullException("product"); if (model == null) throw new ArgumentNullException("model"); model.ProductId = product.Id; model.ProductName = product.GetLocalized(x => x.Name); model.ProductSeName = product.GetSeName(); var productReviews = product.ProductReviews.Where(pr => pr.IsApproved).OrderBy(pr => pr.CreatedOnUtc); foreach (var pr in productReviews) { model.Items.Add(new ProductReviewModel() { Id = pr.Id, CustomerId = pr.CustomerId, CustomerName = pr.Customer.FormatUserName(), AllowViewingProfiles = _customerSettings.AllowViewingProfiles && pr.Customer != null && !pr.Customer.IsGuest(), Title = pr.Title, ReviewText = pr.ReviewText, Rating = pr.Rating, Helpfulness = new ProductReviewHelpfulnessModel() { ProductReviewId = pr.Id, HelpfulYesTotal = pr.HelpfulYesTotal, HelpfulNoTotal = pr.HelpfulNoTotal, }, WrittenOnStr = _dateTimeHelper.ConvertToUserTime(pr.CreatedOnUtc, DateTimeKind.Utc).ToString("g"), }); } model.AddProductReview.CanCurrentCustomerLeaveReview = _catalogSettings.AllowAnonymousUsersToReviewProduct || !_services.WorkContext.CurrentCustomer.IsGuest(); model.AddProductReview.DisplayCaptcha = _captchaSettings.Enabled && _captchaSettings.ShowOnProductReviewPage; }