public ActionResult TopicCreate(EditForumTopicModel model) { if (!_forumSettings.ForumsEnabled) { return RedirectToRoute("HomePage"); } var forum = _forumService.GetForumById(model.ForumId); if (forum == null) { return RedirectToRoute("Boards"); } if (ModelState.IsValid) { try { if (!_forumService.IsCustomerAllowedToCreateTopic(_workContext.CurrentCustomer, forum)) { return new HttpUnauthorizedResult(); } string subject = model.Subject; var maxSubjectLength = _forumSettings.TopicSubjectMaxLength; if (maxSubjectLength > 0 && subject.Length > maxSubjectLength) { subject = subject.Substring(0, maxSubjectLength); } var text = model.Text; var maxPostLength = _forumSettings.PostMaxLength; if (maxPostLength > 0 && text.Length > maxPostLength) { text = text.Substring(0, maxPostLength); } var topicType = ForumTopicType.Normal; string ipAddress = _webHelper.GetCurrentIpAddress(); var nowUtc = DateTime.UtcNow; if (_forumService.IsCustomerAllowedToSetTopicPriority(_workContext.CurrentCustomer)) { topicType = (ForumTopicType) Enum.ToObject(typeof (ForumTopicType), model.TopicTypeId); } //forum topic var forumTopic = new ForumTopic() { ForumId = forum.Id, CustomerId = _workContext.CurrentCustomer.Id, TopicTypeId = (int) topicType, Subject = subject, CreatedOnUtc = nowUtc, UpdatedOnUtc = nowUtc }; _forumService.InsertTopic(forumTopic, true); //forum post var forumPost = new ForumPost() { TopicId = forumTopic.Id, CustomerId = _workContext.CurrentCustomer.Id, Text = text, IPAddress = ipAddress, CreatedOnUtc = nowUtc, UpdatedOnUtc = nowUtc }; _forumService.InsertPost(forumPost, false); //update forum topic forumTopic.NumPosts = 1; forumTopic.LastPostId = forumPost.Id; forumTopic.LastPostCustomerId = forumPost.CustomerId; forumTopic.LastPostTime = forumPost.CreatedOnUtc; forumTopic.UpdatedOnUtc = nowUtc; _forumService.UpdateTopic(forumTopic); //subscription if (_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer)) { if (model.Subscribed) { var forumSubscription = new ForumSubscription() { SubscriptionGuid = Guid.NewGuid(), CustomerId = _workContext.CurrentCustomer.Id, TopicId = forumTopic.Id, CreatedOnUtc = nowUtc }; _forumService.InsertSubscription(forumSubscription); } } return RedirectToRoute("TopicSlug", new {id = forumTopic.Id, slug = forumTopic.GetSeName()}); } catch (Exception ex) { ModelState.AddModelError("", ex.Message); } } // redisplay form model.TopicPriorities = ForumTopicTypesList(); model.IsEdit = false; model.ForumId = forum.Id; model.ForumName = forum.Name; model.ForumSeName = forum.GetSeName(); model.Id = 0; model.IsCustomerAllowedToSetTopicPriority = _forumService.IsCustomerAllowedToSetTopicPriority(_workContext.CurrentCustomer); model.IsCustomerAllowedToSubscribe = _forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer); model.ForumEditor = _forumSettings.ForumEditor; return View(model); }
protected ForumTopicRowModel PrepareForumTopicRowModel(ForumTopic topic) { var topicModel = new ForumTopicRowModel() { Id = topic.Id, Subject = topic.Subject, SeName = topic.GetSeName(), LastPostId = topic.LastPostId, NumPosts = topic.NumPosts, Views = topic.Views, NumReplies = topic.NumReplies, ForumTopicType = topic.ForumTopicType, CustomerId = topic.CustomerId, AllowViewingProfiles = _customerSettings.AllowViewingProfiles, CustomerName = topic.Customer.FormatUserName(), IsCustomerGuest = topic.Customer.IsGuest() }; var forumPosts = _forumService.GetAllPosts(topic.Id, 0, string.Empty, 1, _forumSettings.PostsPageSize); topicModel.TotalPostPages = forumPosts.TotalPages; return topicModel; }
public virtual void AddForumTopicTokens(IList<Token> tokens, ForumTopic forumTopic, int? friendlyForumTopicPageIndex = null, int? appendedPostIdentifierAnchor = null) { //TODO add a method for getting URL (use routing because it handles all SEO friendly URLs) string topicUrl = null; if (friendlyForumTopicPageIndex.HasValue && friendlyForumTopicPageIndex.Value > 1) topicUrl = string.Format("{0}boards/topic/{1}/{2}/page/{3}", _webHelper.GetStoreLocation(false), forumTopic.Id, forumTopic.GetSeName(), friendlyForumTopicPageIndex.Value); else topicUrl = string.Format("{0}boards/topic/{1}/{2}", _webHelper.GetStoreLocation(false), forumTopic.Id, forumTopic.GetSeName()); if (appendedPostIdentifierAnchor.HasValue && appendedPostIdentifierAnchor.Value > 0) topicUrl = string.Format("{0}#{1}", topicUrl, appendedPostIdentifierAnchor.Value); tokens.Add(new Token("Forums.TopicURL", topicUrl, true)); tokens.Add(new Token("Forums.TopicName", forumTopic.Subject)); //event notification _eventPublisher.EntityTokensAdded(forumTopic, tokens); }