public IActionResult ReviewEditor(int reviewId) { var review = reviewId > 0 ? _reviewService.Get(reviewId) : new Review(); if (review == null) { return(NotFound()); } var reviewModel = _reviewModelFactory.Create(review); return(R.Success.With("review", reviewModel).Result); }
public IActionResult ReviewEditor(int productId, int reviewId) { //check if the product is valid var product = _productService.Get(productId); if (!product.IsPublic(CurrentStore.Id)) { return(NotFound()); } var currentUser = ApplicationEngine.CurrentUser; var review = reviewId > 0 ? _reviewService.Get(reviewId) : new Review() { ProductId = productId, UserId = currentUser.Id }; if (review == null || review.ProductId != productId) { return(NotFound()); } if (review.UserId != ApplicationEngine.CurrentUser.Id || (review.Id > 0 && !_catalogSettings.AllowReviewModification)) { return(NotFound()); } var response = R.Success; //check if review should be allowed for this product if (_catalogSettings.AllowReviewsForStorePurchaseOnly) { //check if user has purchased anything here var orders = _orderService.GetOrders(out int _, userId: currentUser.Id, storeId: CurrentStore.Id, paymentStatus: new List <PaymentStatus>() { PaymentStatus.Complete }, orderStatus: new List <OrderStatus>() { OrderStatus.Complete }); if (orders.SelectMany(x => x.OrderItems).All(y => y.ProductId != productId)) { return(NotFound()); } } if (_catalogSettings.AllowOneReviewPerUserPerItem && reviewId == 0) { //check if user has already reviewed this product var savedReview = _reviewService.FirstOrDefault(x => x.ProductId == productId && x.UserId == CurrentUser.Id); if (savedReview != null) { return(RedirectToRoute(RouteNames.AccountReviews)); } } var reviewModel = _reviewModelFactory.Create(review); var productModel = _productModelFactory.Create(product); //set breadcrumb nodes SetBreadcrumbToRoute("Account", RouteNames.AccountProfile); SetBreadcrumbToRoute("Review Center", RouteNames.AccountReviews); SetBreadcrumbToRoute("Edit Review", RouteNames.ReviewEditor); return(response.With("review", reviewModel).With("product", productModel).Result); }