public virtual async Task <IActionResult> ArticleCommentAdd(string articleId, KnowledgebaseArticleModel model, bool captchaValid, [FromServices] IWorkContext workContext, [FromServices] IGroupService groupService, [FromServices] ICustomerService customerService) { if (!_knowledgebaseSettings.Enabled) { return(RedirectToRoute("HomePage")); } var article = await _knowledgebaseService.GetPublicKnowledgebaseArticle(articleId); if (article == null || !article.AllowComments) { return(RedirectToRoute("HomePage")); } if (await groupService.IsGuest(workContext.CurrentCustomer) && !_knowledgebaseSettings.AllowNotRegisteredUsersToLeaveComments) { ModelState.AddModelError("", _translationService.GetResource("Knowledgebase.Article.Comments.OnlyRegisteredUsersLeaveComments")); } //validate CAPTCHA if (_captchaSettings.Enabled && _captchaSettings.ShowOnArticleCommentPage && !captchaValid) { ModelState.AddModelError("", _captchaSettings.GetWrongCaptchaMessage(_translationService)); } if (ModelState.IsValid) { var customer = _workContext.CurrentCustomer; var comment = new KnowledgebaseArticleComment { ArticleId = article.Id, CustomerId = customer.Id, CommentText = model.AddNewComment.CommentText, CreatedOnUtc = DateTime.UtcNow, ArticleTitle = article.Name, }; await _knowledgebaseService.InsertArticleComment(comment); if (!customer.HasContributions) { await customerService.UpdateContributions(customer); } //notify a store owner if (_knowledgebaseSettings.NotifyAboutNewArticleComments) { await _messageProviderService.SendArticleCommentMessage(article, comment, _languageSettings.DefaultAdminLanguageId); } //activity log await _customerActivityService.InsertActivity("PublicStore.AddArticleComment", comment.Id, _translationService.GetResource("ActivityLog.PublicStore.AddArticleComment")); //The text boxes should be cleared after a comment has been posted //That' why we reload the page TempData["Grand.knowledgebase.addarticlecomment.result"] = _translationService.GetResource("Knowledgebase.Article.Comments.SuccessfullyAdded"); return(RedirectToRoute("KnowledgebaseArticle", new { SeName = article.GetSeName(_workContext.WorkingLanguage.Id) })); } //If we got this far, something failed, redisplay form await PrepareKnowledgebaseArticleModel(model, article, customerService); return(View("Article", model)); }