示例#1
0
        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));
        }
示例#2
0
        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;
        }
示例#3
0
        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);
        }
示例#4
0
        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));
        }
示例#5
0
        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));
        }