protected void PrepareBlogPostModel(BlogPostModel model, BlogPost blogPost, bool prepareComments) { if (blogPost == null) throw new ArgumentNullException("blogPost"); if (model == null) throw new ArgumentNullException("model"); model.Id = blogPost.Id; model.MetaTitle = blogPost.MetaTitle; model.MetaDescription = blogPost.MetaDescription; model.MetaKeywords = blogPost.MetaKeywords; model.SeName = blogPost.GetSeName(blogPost.LanguageId, ensureTwoPublishedLanguages: false); model.Title = blogPost.Title; model.Body = blogPost.Body; model.AllowComments = blogPost.AllowComments; model.AvatarPictureSize = _mediaSettings.AvatarPictureSize; model.CreatedOn = _dateTimeHelper.ConvertToUserTime(blogPost.CreatedOnUtc, DateTimeKind.Utc); model.Tags = blogPost.ParseTags().ToList(); model.NumberOfComments = blogPost.ApprovedCommentCount; model.AddNewComment.DisplayCaptcha = _captchaSettings.Enabled && _captchaSettings.ShowOnBlogCommentPage; model.AllowCustomersToUploadAvatars = _customerSettings.AllowCustomersToUploadAvatars; if (prepareComments) { var blogComments = blogPost.BlogComments.Where(pr => pr.IsApproved).OrderBy(pr => pr.CreatedOnUtc); foreach (var bc in blogComments) { var commentModel = new BlogCommentModel() { Id = bc.Id, CustomerId = bc.CustomerId, CustomerName = bc.Customer.FormatUserName(), CommentText = bc.CommentText, CreatedOn = _dateTimeHelper.ConvertToUserTime(bc.CreatedOnUtc, DateTimeKind.Utc), AllowViewingProfiles = _customerSettings.AllowViewingProfiles && bc.Customer != null && !bc.Customer.IsGuest() }; if (_customerSettings.AllowCustomersToUploadAvatars) { var customer = bc.Customer; string avatarUrl = _pictureService.GetPictureUrl(customer.GetAttribute<int>(SystemCustomerAttributeNames.AvatarPictureId), _mediaSettings.AvatarPictureSize, false); if (String.IsNullOrEmpty(avatarUrl) && _customerSettings.DefaultAvatarEnabled) avatarUrl = _pictureService.GetDefaultPictureUrl(_mediaSettings.AvatarPictureSize, PictureType.Avatar); commentModel.CustomerAvatarUrl = avatarUrl; } model.Comments.Add(commentModel); } } }
public ActionResult BlogPost(int blogPostId) { if (!_blogSettings.Enabled) return HttpNotFound(); var blogPost = _blogService.GetBlogPostById(blogPostId); if (blogPost == null || (blogPost.StartDateUtc.HasValue && blogPost.StartDateUtc.Value >= DateTime.UtcNow) || (blogPost.EndDateUtc.HasValue && blogPost.EndDateUtc.Value <= DateTime.UtcNow)) return HttpNotFound(); //Store mapping if (!_storeMappingService.Authorize(blogPost)) return HttpNotFound(); var model = new BlogPostModel(); PrepareBlogPostModel(model, blogPost, true); return View(model); }
protected BlogPostListModel PrepareBlogPostListModel(BlogPagingFilteringModel command) { if (command == null) throw new ArgumentNullException("command"); var model = new BlogPostListModel(); model.PagingFilteringContext.Tag = command.Tag; model.PagingFilteringContext.Month = command.Month; model.WorkingLanguageId = _workContext.WorkingLanguage.Id; if (command.PageSize <= 0) command.PageSize = _blogSettings.PostsPageSize; if (command.PageNumber <= 0) command.PageNumber = 1; DateTime? dateFrom = command.GetFromMonth(); DateTime? dateTo = command.GetToMonth(); IPagedList<BlogPost> blogPosts; if (String.IsNullOrEmpty(command.Tag)) { blogPosts = _blogService.GetAllBlogPosts(_storeContext.CurrentStore.Id, _workContext.WorkingLanguage.Id, dateFrom, dateTo, command.PageNumber - 1, command.PageSize); } else { blogPosts = _blogService.GetAllBlogPostsByTag(_storeContext.CurrentStore.Id, _workContext.WorkingLanguage.Id, command.Tag, command.PageNumber - 1, command.PageSize); } model.PagingFilteringContext.LoadPagedList(blogPosts); model.BlogPosts = blogPosts .Select(x => { var blogPostModel = new BlogPostModel(); PrepareBlogPostModel(blogPostModel, x, false); return blogPostModel; }) .ToList(); return model; }
public ActionResult BlogCommentAdd(int blogPostId, BlogPostModel model, bool captchaValid) { if (!_blogSettings.Enabled) return HttpNotFound(); var blogPost = _blogService.GetBlogPostById(blogPostId); if (blogPost == null || !blogPost.AllowComments) return HttpNotFound(); if (_workContext.CurrentCustomer.IsGuest() && !_blogSettings.AllowNotRegisteredUsersToLeaveComments) { ModelState.AddModelError("", _localizationService.GetResource("Blog.Comments.OnlyRegisteredUsersLeaveComments")); } //validate CAPTCHA if (_captchaSettings.Enabled && _captchaSettings.ShowOnBlogCommentPage && !captchaValid) { ModelState.AddModelError("", _localizationService.GetResource("Common.WrongCaptcha")); } if (ModelState.IsValid) { var comment = new BlogComment() { BlogPostId = blogPost.Id, CustomerId = _workContext.CurrentCustomer.Id, IpAddress = _webHelper.GetCurrentIpAddress(), CommentText = model.AddNewComment.CommentText, IsApproved = true, CreatedOnUtc = DateTime.UtcNow, UpdatedOnUtc = DateTime.UtcNow, }; _customerContentService.InsertCustomerContent(comment); //update totals _blogService.UpdateCommentTotals(blogPost); //notify a store owner if (_blogSettings.NotifyAboutNewBlogComments) _workflowMessageService.SendBlogCommentNotificationMessage(comment, _localizationSettings.DefaultAdminLanguageId); //activity log _customerActivityService.InsertActivity("PublicStore.AddBlogComment", _localizationService.GetResource("ActivityLog.PublicStore.AddBlogComment")); //The text boxes should be cleared after a comment has been posted //That' why we reload the page TempData["sm.blog.addcomment.result"] = _localizationService.GetResource("Blog.Comments.SuccessfullyAdded"); // codehint: sm-add (MC) > append url fragment to route url string url = UrlHelper.GenerateUrl( routeName: "BlogPost", actionName: null, controllerName: null, protocol: null, hostName: null, fragment: "new-comment", routeValues: new RouteValueDictionary(new { blogPostId = blogPost.Id, SeName = blogPost.GetSeName(blogPost.LanguageId, ensureTwoPublishedLanguages: false) }), routeCollection: System.Web.Routing.RouteTable.Routes, requestContext: this.ControllerContext.RequestContext, includeImplicitMvcValues: true /*helps fill in the nulls above*/ ); return Redirect(url); } //If we got this far, something failed, redisplay form PrepareBlogPostModel(model, blogPost, true); return View(model); }