public ActionResult TopicCreate(EditForumTopicModel model) { if (!_forumSettings.ForumsEnabled) { return HttpNotFound(); } 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; var nowUtc = DateTime.UtcNow; string ipAddress = _webHelper.GetCurrentIpAddress(); 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.GetLocalized(x => x.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); }
public ActionResult TopicEdit(EditForumTopicModel model) { if (!_forumSettings.ForumsEnabled) { return HttpNotFound(); } var forumTopic = _forumService.GetTopicById(model.Id); if (forumTopic == null) { return RedirectToRoute("Boards"); } var forum = forumTopic.Forum; if (forum == null) { return RedirectToRoute("Boards"); } if (ModelState.IsValid) { try { if (!_forumService.IsCustomerAllowedToEditTopic(_workContext.CurrentCustomer, forumTopic)) { 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(); DateTime nowUtc = DateTime.UtcNow; if (_forumService.IsCustomerAllowedToSetTopicPriority(_workContext.CurrentCustomer)) { topicType = (ForumTopicType) Enum.ToObject(typeof (ForumTopicType), model.TopicTypeId); } //forum topic forumTopic.TopicTypeId = (int) topicType; forumTopic.Subject = subject; forumTopic.UpdatedOnUtc = nowUtc; _forumService.UpdateTopic(forumTopic); //forum post var firstPost = forumTopic.GetFirstPost(_forumService); if (firstPost != null) { firstPost.Text = text; firstPost.UpdatedOnUtc = nowUtc; _forumService.UpdatePost(firstPost); } else { //error (not possible) firstPost = new ForumPost() { TopicId = forumTopic.Id, CustomerId = forumTopic.CustomerId, Text = text, IPAddress = ipAddress, UpdatedOnUtc = nowUtc }; _forumService.InsertPost(firstPost, false); } //subscription if (_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer)) { var forumSubscription = _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id, 0, forumTopic.Id, 0, 1).FirstOrDefault(); if (model.Subscribed) { if (forumSubscription == null) { forumSubscription = new ForumSubscription { SubscriptionGuid = Guid.NewGuid(), CustomerId = _workContext.CurrentCustomer.Id, TopicId = forumTopic.Id, CreatedOnUtc = nowUtc }; _forumService.InsertSubscription(forumSubscription); } } else { if (forumSubscription != null) { _forumService.DeleteSubscription(forumSubscription); } } } // redirect to the topic page with the topic slug return RedirectToRoute("TopicSlug", new {id = forumTopic.Id, slug = forumTopic.GetSeName()}); } catch (Exception ex) { ModelState.AddModelError("", ex.Message); } } // redisplay form model.TopicPriorities = ForumTopicTypesList(); model.IsEdit = true; model.ForumName = forum.GetLocalized(x => x.Name); model.ForumSeName = forum.GetSeName(); model.ForumId = forum.Id; model.ForumEditor = _forumSettings.ForumEditor; model.IsCustomerAllowedToSetTopicPriority = _forumService.IsCustomerAllowedToSetTopicPriority(_workContext.CurrentCustomer); model.IsCustomerAllowedToSubscribe = _forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer); return View(model); }
public ActionResult TopicWatch(int id) { bool subscribed = false; string watchTopic = _localizationService.GetResource("Forum.WatchTopic"); string unwatchTopic = _localizationService.GetResource("Forum.UnwatchTopic"); string returnText = watchTopic; var forumTopic = _forumService.GetTopicById(id); if (forumTopic == null) { return Json(new { Subscribed = subscribed, Text = returnText, Error = true }); } if (!_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer)) { return Json(new { Subscribed = subscribed, Text = returnText, Error = true }); } var forumSubscription = _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id, 0, forumTopic.Id, 0, 1).FirstOrDefault(); if (forumSubscription == null) { forumSubscription = new ForumSubscription { SubscriptionGuid = Guid.NewGuid(), CustomerId = _workContext.CurrentCustomer.Id, TopicId = forumTopic.Id, CreatedOnUtc = DateTime.UtcNow }; _forumService.InsertSubscription(forumSubscription); subscribed = true; returnText = unwatchTopic; } else { _forumService.DeleteSubscription(forumSubscription); subscribed = false; } return Json(new { Subscribed = subscribed, Text = returnText, Error = false }); }
public ActionResult PostEdit(EditForumPostModel model) { if (!_forumSettings.ForumsEnabled) { return HttpNotFound(); } var forumPost = _forumService.GetPostById(model.Id); if (forumPost == null) { return RedirectToRoute("Boards"); } if (!_forumService.IsCustomerAllowedToEditPost(_workContext.CurrentCustomer, forumPost)) { return new HttpUnauthorizedResult(); } var forumTopic = forumPost.ForumTopic; if (forumTopic == null) { return RedirectToRoute("Boards"); } var forum = forumTopic.Forum; if (forum == null) { return RedirectToRoute("Boards"); } if (ModelState.IsValid) { try { var nowUtc = DateTime.UtcNow; var text = model.Text; var maxPostLength = _forumSettings.PostMaxLength; if (maxPostLength > 0 && text.Length > maxPostLength) { text = text.Substring(0, maxPostLength); } forumPost.UpdatedOnUtc = nowUtc; forumPost.Text = text; _forumService.UpdatePost(forumPost); //subscription if (_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer)) { var forumSubscription = _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id, 0, forumPost.TopicId, 0, 1).FirstOrDefault(); if (model.Subscribed) { if (forumSubscription == null) { forumSubscription = new ForumSubscription { SubscriptionGuid = Guid.NewGuid(), CustomerId = _workContext.CurrentCustomer.Id, TopicId = forumPost.TopicId, CreatedOnUtc = nowUtc }; _forumService.InsertSubscription(forumSubscription); } } else { if (forumSubscription != null) { _forumService.DeleteSubscription(forumSubscription); } } } int pageSize = 10; if (_forumSettings.PostsPageSize > 0) { pageSize = _forumSettings.PostsPageSize; } int pageIndex = (_forumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.Id) + 1); var url = string.Empty; if (pageIndex > 1) { url = Url.RouteUrl("TopicSlug", new { id = forumPost.TopicId, slug = forumPost.ForumTopic.GetSeName(), page = pageIndex }); } else { url = Url.RouteUrl("TopicSlug", new { id = forumPost.TopicId, slug = forumPost.ForumTopic.GetSeName() }); } return Redirect(string.Format("{0}#{1}", url, forumPost.Id)); } catch (Exception ex) { ModelState.AddModelError("", ex.Message); } } //redisplay form model.IsEdit = true; model.ForumName = forum.GetLocalized(x => x.Name); model.ForumTopicId = forumTopic.Id; model.ForumTopicSubject = forumTopic.Subject; model.ForumTopicSeName = forumTopic.GetSeName(); model.Id = forumPost.Id; model.IsCustomerAllowedToSubscribe = _forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer); model.ForumEditor = _forumSettings.ForumEditor; return View(model); }
/// <summary> /// Updates the forum subscription /// </summary> /// <param name="forumSubscription">Forum subscription</param> public virtual void UpdateSubscription(ForumSubscription forumSubscription) { if (forumSubscription == null) { throw new ArgumentNullException("forumSubscription"); } _forumSubscriptionRepository.Update(forumSubscription); //event notification _eventPublisher.EntityUpdated(forumSubscription); }
/// <summary> /// Inserts a forum subscription /// </summary> /// <param name="forumSubscription">Forum subscription</param> public virtual void InsertSubscription(ForumSubscription forumSubscription) { if (forumSubscription == null) { throw new ArgumentNullException("forumSubscription"); } _forumSubscriptionRepository.Insert(forumSubscription); //event notification _services.EventPublisher.EntityInserted(forumSubscription); }
public void Can_save_and_load_forum_subscription_topic_subscribed() { var customer = GetTestCustomer(); var customerFromDb = SaveAndLoadEntity(customer); customerFromDb.ShouldNotBeNull(); var forumGroup = new ForumGroup { Name = "Forum Group 1", Description = "Forum Group 1 Description", DisplayOrder = 1, CreatedOnUtc = DateTime.UtcNow, UpdatedOnUtc = DateTime.UtcNow }; var forumGroupFromDb = SaveAndLoadEntity(forumGroup); forumGroupFromDb.ShouldNotBeNull(); forumGroupFromDb.Name.ShouldEqual("Forum Group 1"); forumGroupFromDb.Description.ShouldEqual("Forum Group 1 Description"); forumGroupFromDb.DisplayOrder.ShouldEqual(1); var forum = new Forum { ForumGroup = forumGroupFromDb, Name = "Forum 1", Description = "Forum 1 Description", ForumGroupId = forumGroupFromDb.Id, DisplayOrder = 10, CreatedOnUtc = DateTime.UtcNow, UpdatedOnUtc = DateTime.UtcNow, NumPosts = 25, NumTopics = 15 }; forumGroup.Forums.Add(forum); var forumFromDb = SaveAndLoadEntity(forum); forumFromDb.ShouldNotBeNull(); forumFromDb.Name.ShouldEqual("Forum 1"); forumFromDb.Description.ShouldEqual("Forum 1 Description"); forumFromDb.DisplayOrder.ShouldEqual(10); forumFromDb.NumTopics.ShouldEqual(15); forumFromDb.NumPosts.ShouldEqual(25); forumFromDb.ForumGroupId.ShouldEqual(forumGroupFromDb.Id); var forumTopic = new ForumTopic { Subject = "Forum Topic 1", Forum = forumFromDb, ForumId = forumFromDb.Id, TopicTypeId = (int)ForumTopicType.Sticky, Views = 123, CreatedOnUtc = DateTime.UtcNow, UpdatedOnUtc = DateTime.UtcNow, NumPosts = 100, CustomerId = customerFromDb.Id, }; var forumTopicFromDb = SaveAndLoadEntity(forumTopic); forumTopicFromDb.ShouldNotBeNull(); forumTopicFromDb.Subject.ShouldEqual("Forum Topic 1"); forumTopicFromDb.Views.ShouldEqual(123); forumTopicFromDb.NumPosts.ShouldEqual(100); forumTopicFromDb.TopicTypeId.ShouldEqual((int)ForumTopicType.Sticky); forumTopicFromDb.ForumId.ShouldEqual(forumFromDb.Id); var forumSubscription = new ForumSubscription { CreatedOnUtc = DateTime.UtcNow, SubscriptionGuid = new Guid("11111111-2222-3333-4444-555555555555"), TopicId = forumTopicFromDb.Id, CustomerId = customerFromDb.Id, }; var forumSubscriptionFromDb = SaveAndLoadEntity(forumSubscription); forumSubscriptionFromDb.ShouldNotBeNull(); forumSubscriptionFromDb.SubscriptionGuid.ToString().ShouldEqual("11111111-2222-3333-4444-555555555555"); forumSubscriptionFromDb.TopicId.ShouldEqual(forumTopicFromDb.Id); forumSubscriptionFromDb.ForumId.ShouldEqual(0); }