Example #1
0
 public virtual void DeleteSubscription(ForumSubscription subscription)
 {
     if (subscription != null)
     {
         _forumSubscriptionRepository.Delete(subscription);
     }
 }
Example #2
0
        protected void btnWatchForum_Click(object sender, EventArgs e)
        {
            Forum forum = ForumManager.GetForumByID(this.ForumID);

            if (forum == null)
            {
                return;
            }

            if (!ForumManager.IsUserAllowedToSubscribe(NopContext.Current.User))
            {
                string loginURL = CommonHelper.GetLoginPageURL(true);
                Response.Redirect(loginURL);
            }

            ForumSubscription forumSubscription = ForumManager.GetAllSubscriptions(NopContext.Current.User.CustomerID,
                                                                                   forum.ForumID, 0, 1, 0).FirstOrDefault();

            if (forumSubscription == null)
            {
                forumSubscription = ForumManager.InsertSubscription(Guid.NewGuid(),
                                                                    NopContext.Current.User.CustomerID, forum.ForumID, 0, DateTime.Now);
            }
            else
            {
                ForumManager.DeleteSubscription(forumSubscription.ForumSubscriptionID);
            }

            CommonHelper.ReloadCurrentPage();
        }
Example #3
0
        protected void btnDeleteSelected_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                try
                {
                    foreach (GridViewRow row in gvForumSubscriptions.Rows)
                    {
                        var cbSelect = row.FindControl("cbSelect") as CheckBox;
                        var hfForumSubscriptionId = row.FindControl("hfForumSubscriptionId") as HiddenField;
                        if (cbSelect != null && cbSelect.Checked && hfForumSubscriptionId != null)
                        {
                            int forumSubscriptionId        = int.Parse(hfForumSubscriptionId.Value);
                            ForumSubscription subscription = ForumManager.GetSubscriptionById(forumSubscriptionId);

                            if (subscription != null && subscription.UserId == NopContext.Current.User.CustomerId)
                            {
                                ForumManager.DeleteSubscription(forumSubscriptionId);
                            }
                        }
                    }
                    gvForumSubscriptions.PageIndex = 0;
                    BindData();
                }
                catch (Exception exc)
                {
                    LogManager.InsertLog(LogTypeEnum.CustomerError, exc.Message, exc);
                }
            }
        }
Example #4
0
        public virtual void UpdateSubscription(ForumSubscription forumSubscription)
        {
            if (forumSubscription == null)
            {
                throw new ArgumentNullException("forumSubscription");
            }

            _forumSubscriptionRepository.Update(forumSubscription);
        }
Example #5
0
        public void InsertSubscription(ForumSubscription forumSubscription)
        {
            if (forumSubscription == null)
            {
                throw new ArgumentNullException("forumSubscription");
            }

            _forumSubscriptionRepository.Insert(forumSubscription);

            //event notification
            _eventPublisher.EntityInserted(forumSubscription);
        }
Example #6
0
        public virtual async Task UpdateSubscription(ForumSubscription forumSubscription)
        {
            if (forumSubscription == null)
            {
                throw new ArgumentNullException("forumSubscription");
            }

            await forumSubscriptionRepository.UpdateAsync(forumSubscription);

            //event notification
            //_eventPublisher.EntityUpdated(forumSubscription);
        }
Example #7
0
        public virtual void UpdateSubscription(ForumSubscription forumSubscription)
        {
            if (forumSubscription == null)
            {
                throw new ArgumentNullException("forumSubscription");
            }

            _forumSubscriptionRepository.Update(forumSubscription);

            //event notification
            _services.EventPublisher.EntityUpdated(forumSubscription);
        }
        public virtual async Task <IActionResult> TopicWatch(int id)
        {
            var watchTopic = await _localizationService.GetResourceAsync("Forum.WatchTopic");

            var unwatchTopic = await _localizationService.GetResourceAsync("Forum.UnwatchTopic");

            var returnText = watchTopic;

            var forumTopic = await _forumService.GetTopicByIdAsync(id);

            if (forumTopic == null)
            {
                return(Json(new { Subscribed = false, Text = returnText, Error = true }));
            }

            var customer = await _workContext.GetCurrentCustomerAsync();

            if (!await _forumService.IsCustomerAllowedToSubscribeAsync(customer))
            {
                return(Json(new { Subscribed = false, Text = returnText, Error = true }));
            }

            var forumSubscription = (await _forumService.GetAllSubscriptionsAsync(customer.Id,
                                                                                  0, forumTopic.Id, 0, 1)).FirstOrDefault();

            bool subscribed;

            if (forumSubscription == null)
            {
                forumSubscription = new ForumSubscription
                {
                    SubscriptionGuid = Guid.NewGuid(),
                    CustomerId       = customer.Id,
                    TopicId          = forumTopic.Id,
                    CreatedOnUtc     = DateTime.UtcNow
                };
                await _forumService.InsertSubscriptionAsync(forumSubscription);

                subscribed = true;
                returnText = unwatchTopic;
            }
            else
            {
                await _forumService.DeleteSubscriptionAsync(forumSubscription);

                subscribed = false;
            }

            return(Json(new { Subscribed = subscribed, Text = returnText, Error = false }));
        }
        public virtual async Task <IActionResult> ForumWatch(string id)
        {
            string watchTopic   = _localizationService.GetResource("Forum.WatchForum");
            string unwatchTopic = _localizationService.GetResource("Forum.UnwatchForum");
            string returnText   = watchTopic;

            var forum = await _forumService.GetForumById(id);

            if (forum == null)
            {
                return(Json(new { Subscribed = false, Text = returnText, Error = true }));
            }

            if (!_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer))
            {
                return(Json(new { Subscribed = false, Text = returnText, Error = true }));
            }

            var forumSubscription = (await _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id,
                                                                             forum.Id, "", 0, 1)).FirstOrDefault();

            bool subscribed;

            if (forumSubscription == null)
            {
                forumSubscription = new ForumSubscription
                {
                    SubscriptionGuid = Guid.NewGuid(),
                    CustomerId       = _workContext.CurrentCustomer.Id,
                    ForumId          = forum.Id,
                    CreatedOnUtc     = DateTime.UtcNow
                };
                await _forumService.InsertSubscription(forumSubscription);

                subscribed = true;
                returnText = unwatchTopic;
            }
            else
            {
                await _forumService.DeleteSubscription(forumSubscription);

                subscribed = false;
            }

            return(Json(new { Subscribed = subscribed, Text = returnText, Error = false }));
        }
Example #10
0
        protected virtual object CreateModelPart(ForumSubscription part, MessageContext messageContext)
        {
            Guard.NotNull(messageContext, nameof(messageContext));
            Guard.NotNull(part, nameof(part));

            var m = new Dictionary <string, object>
            {
                { "SubscriptionGuid", part.SubscriptionGuid },
                { "CustomerId", part.CustomerId },
                { "ForumId", part.ForumId },
                { "TopicId", part.TopicId },
                { "CreatedOn", ToUserDate(part.CreatedOnUtc, messageContext) }
            };

            PublishModelPartCreatedEvent <ForumSubscription>(part, m);

            return(m);
        }
        public ActionResult TopicWatch(int id)
        {
            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 = false, Text = returnText, Error = true }));
            }

            if (!_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer))
            {
                return(Json(new { Subscribed = false, Text = returnText, Error = true }));
            }

            var forumSubscription = _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id,
                                                                      0, forumTopic.Id, 0, 1).FirstOrDefault();

            bool subscribed;

            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 }));
        }
        protected string GetForumTopicLink(ForumSubscription subscription)
        {
            if (subscription == null)
            {
                return(String.Empty);
            }

            Forum forum = subscription.Forum;

            if (forum != null)
            {
                return(SEOHelper.GetForumUrl(forum));
            }

            ForumTopic topic = subscription.Topic;

            if (topic != null)
            {
                return(SEOHelper.GetForumTopicUrl(topic));
            }

            return(String.Empty);
        }
        protected string GetForumTopicInfo(ForumSubscription subscription)
        {
            if (subscription == null)
            {
                return(String.Empty);
            }

            Forum forum = subscription.Forum;

            if (forum != null)
            {
                return(Server.HtmlEncode(forum.Name));
            }

            ForumTopic topic = subscription.Topic;

            if (topic != null)
            {
                return(Server.HtmlEncode(topic.Subject));
            }

            return(String.Empty);
        }
        protected void btnWatchTopic_Click(object sender, EventArgs e)
        {
            var forumTopic = this.ForumService.GetTopicById(this.TopicId);

            if (forumTopic == null)
            {
                return;
            }

            if (!this.ForumService.IsUserAllowedToSubscribe(NopContext.Current.User))
            {
                string loginURL = SEOHelper.GetLoginPageUrl(true);
                Response.Redirect(loginURL);
            }

            var forumSubscription = this.ForumService.GetAllSubscriptions(NopContext.Current.User.CustomerId,
                                                                          0, forumTopic.ForumTopicId, 0, 1).FirstOrDefault();

            if (forumSubscription == null)
            {
                forumSubscription = new ForumSubscription()
                {
                    SubscriptionGuid = Guid.NewGuid(),
                    UserId           = NopContext.Current.User.CustomerId,
                    TopicId          = forumTopic.ForumTopicId,
                    CreatedOn        = DateTime.UtcNow
                };
                this.ForumService.InsertSubscription(forumSubscription);
            }
            else
            {
                this.ForumService.DeleteSubscription(forumSubscription.ForumSubscriptionId);
            }

            CommonHelper.ReloadCurrentPage();
        }
        public virtual async Task <IActionResult> TopicCreate(EditForumTopicModel model, [FromServices] ICustomerService customerService)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("HomePage"));
            }

            var forum = await _forumService.GetForumById(model.ForumId);

            if (forum == null)
            {
                return(RedirectToRoute("Boards"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (!_forumService.IsCustomerAllowedToCreateTopic(_workContext.CurrentCustomer, forum))
                    {
                        return(new ChallengeResult());
                    }

                    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,
                        ForumGroupId = forum.ForumGroupId,
                        CustomerId   = _workContext.CurrentCustomer.Id,
                        TopicTypeId  = (int)topicType,
                        Subject      = subject,
                        CreatedOnUtc = nowUtc,
                        UpdatedOnUtc = nowUtc
                    };
                    await _forumService.InsertTopic(forumTopic, true);

                    if (!_workContext.CurrentCustomer.HasContributions)
                    {
                        await customerService.UpdateContributions(_workContext.CurrentCustomer);
                    }
                    //forum post
                    var forumPost = new ForumPost {
                        TopicId      = forumTopic.Id,
                        ForumId      = forum.Id,
                        ForumGroupId = forum.ForumGroupId,
                        CustomerId   = _workContext.CurrentCustomer.Id,
                        Text         = text,
                        IPAddress    = ipAddress,
                        CreatedOnUtc = nowUtc,
                        UpdatedOnUtc = nowUtc
                    };
                    await _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;
                    await _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
                            };

                            await _forumService.InsertSubscription(forumSubscription);
                        }
                    }

                    return(RedirectToRoute("TopicSlug", new { id = forumTopic.Id, slug = forumTopic.GetSeName() }));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                }
            }
            // redisplay form
            model.TopicPriorities = await _mediator.Send(new GetTopicTypesList());

            model.IsEdit      = false;
            model.ForumId     = forum.Id;
            model.ForumName   = forum.Name;
            model.ForumSeName = forum.GetSeName();
            model.Id          = "";
            model.IsCustomerAllowedToSetTopicPriority = _forumService.IsCustomerAllowedToSetTopicPriority(_workContext.CurrentCustomer);
            model.IsCustomerAllowedToSubscribe        = _forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer);
            model.ForumEditor = _forumSettings.ForumEditor;

            return(View(model));
        }
        public virtual async Task <IActionResult> PostEdit(EditForumPostModel model)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("HomePage"));
            }

            var forumPost = await _forumService.GetPostById(model.Id);

            if (forumPost == null)
            {
                return(RedirectToRoute("Boards"));
            }

            if (!_forumService.IsCustomerAllowedToEditPost(_workContext.CurrentCustomer, forumPost))
            {
                return(new ChallengeResult());
            }

            var forumTopic = await _forumService.GetTopicById(forumPost.TopicId);

            if (forumTopic == null)
            {
                return(RedirectToRoute("Boards"));
            }

            var forum = await _forumService.GetForumById(forumTopic.ForumId);

            if (forum == null)
            {
                return(RedirectToRoute("Boards"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    DateTime 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;
                    await _forumService.UpdatePost(forumPost);

                    //subscription
                    if (_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer))
                    {
                        var forumSubscription = (await _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id,
                                                                                         "", 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
                                };
                                await _forumService.InsertSubscription(forumSubscription);
                            }
                        }
                        else
                        {
                            if (forumSubscription != null)
                            {
                                await _forumService.DeleteSubscription(forumSubscription);
                            }
                        }
                    }

                    int pageSize   = _forumSettings.PostsPageSize > 0 ? _forumSettings.PostsPageSize : 10;
                    int pageIndex  = (await _forumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.Id) + 1);
                    var url        = string.Empty;
                    var forumtopic = await _forumService.GetTopicById(forumPost.TopicId);

                    if (pageIndex > 1)
                    {
                        url = Url.RouteUrl("TopicSlugPaged", new { id = forumPost.TopicId, slug = forumtopic.GetSeName(), page = pageIndex });
                    }
                    else
                    {
                        url = Url.RouteUrl("TopicSlug", new { id = forumPost.TopicId, slug = 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.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));
        }
Example #17
0
        public virtual IActionResult PostEdit(EditForumPostModel model)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("HomePage"));
            }

            var forumPost = _forumService.GetPostById(model.Id);

            if (forumPost == null)
            {
                return(RedirectToRoute("Boards"));
            }

            if (!_forumService.IsCustomerAllowedToEditPost(_workContext.CurrentCustomer, forumPost))
            {
                return(Challenge());
            }

            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);
                            }
                        }
                    }

                    var pageSize  = _forumSettings.PostsPageSize > 0 ? _forumSettings.PostsPageSize : 10;
                    var pageIndex = (_forumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.Id) + 1);
                    var url       = string.Empty;
                    if (pageIndex > 1)
                    {
                        url = Url.RouteUrl("TopicSlugPaged", new { id = forumPost.TopicId, slug = _forumService.GetTopicSeName(forumPost.ForumTopic), pageNumber = pageIndex });
                    }
                    else
                    {
                        url = Url.RouteUrl("TopicSlug", new { id = forumPost.TopicId, slug = _forumService.GetTopicSeName(forumPost.ForumTopic) });
                    }
                    return(Redirect($"{url}#{forumPost.Id}"));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                }
            }

            //redisplay form
            _forumModelFactory.PreparePostEditModel(forumPost, true);
            return(View(model));
        }
Example #18
0
        public virtual IActionResult TopicEdit(EditForumTopicModel model)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("HomePage"));
            }

            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(Challenge());
                    }

                    var 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 ipAddress = _webHelper.GetCurrentIpAddress();

                    var 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 = _forumService.GetFirstPost(forumTopic);
                    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 = _forumService.GetTopicSeName(forumTopic) }));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                }
            }

            //redisplay form
            _forumModelFactory.PrepareTopicEditModel(forumTopic, model, true);
            return(View(model));
        }
Example #19
0
        public virtual IActionResult 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(Challenge());
                    }

                    var 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 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 = _forumService.GetTopicSeName(forumTopic) }));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                }
            }

            //redisplay form
            _forumModelFactory.PrepareTopicCreateModel(forum, model);
            return(View(model));
        }
        public ActionResult PostCreate(EditForumPostModel model)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("HomePage"));
            }

            var forumTopic = _forumService.GetTopicById(model.ForumTopicId);

            if (forumTopic == null)
            {
                return(RedirectToRoute("Boards"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (!_forumService.IsCustomerAllowedToCreatePost(_workContext.CurrentCustomer, forumTopic))
                    {
                        return(new HttpUnauthorizedResult());
                    }

                    var text          = model.Text;
                    var maxPostLength = _forumSettings.PostMaxLength;
                    if (maxPostLength > 0 && text.Length > maxPostLength)
                    {
                        text = text.Substring(0, maxPostLength);
                    }

                    string ipAddress = _webHelper.GetCurrentIpAddress();

                    DateTime nowUtc = DateTime.UtcNow;

                    var forumPost = new ForumPost
                    {
                        TopicId      = forumTopic.Id,
                        CustomerId   = _workContext.CurrentCustomer.Id,
                        Text         = text,
                        IPAddress    = ipAddress,
                        CreatedOnUtc = nowUtc,
                        UpdatedOnUtc = nowUtc
                    };
                    _forumService.InsertPost(forumPost, true);

                    //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 = _forumSettings.PostsPageSize > 0 ? _forumSettings.PostsPageSize : 10;

                    int pageIndex = (_forumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.Id) + 1);
                    var url       = string.Empty;
                    if (pageIndex > 1)
                    {
                        url = Url.RouteUrl("TopicSlugPaged", 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
            _forumModelFactory.PreparePostCreateModel(forumTopic, 0, true);
            return(View(model));
        }
Example #21
0
 public IndividualForumSubcriptionResponse CreateForumSubscription(ForumSubscription forumSubscription)
 {
     return(GenericPost <IndividualForumSubcriptionResponse>(string.Format("forum_subscriptions.json"), forumSubscription));
 }
        private void BindData()
        {
            ForumTopic forumTopic = ForumManager.GetTopicByID(this.TopicID, true);

            if (forumTopic != null)
            {
                btnEdit.Visible      = ForumManager.IsUserAllowedToEditTopic(NopContext.Current.User, forumTopic);
                btnDelete.Visible    = ForumManager.IsUserAllowedToDeleteTopic(NopContext.Current.User, forumTopic);
                btnMoveTopic.Visible = ForumManager.IsUserAllowedToMoveTopic(NopContext.Current.User, forumTopic);
                //btnReply.Visible = ForumManager.IsUserAllowedToCreatePost(NopContext.Current.User, forumTopic);

                lblTopicSubject.Text = Server.HtmlEncode(forumTopic.Subject);

                int totalRecords = 0;
                int pageSize     = 10;
                if (ForumManager.PostsPageSize > 0)
                {
                    pageSize = ForumManager.PostsPageSize;
                }

                ForumPostCollection forumPosts = ForumManager.GetAllPosts(forumTopic.ForumTopicID, 0, string.Empty,
                                                                          pageSize, this.CurrentPageIndex, out totalRecords);
                if (forumPosts.Count > 0)
                {
                    this.postsPager1.PageSize     = pageSize;
                    this.postsPager1.TotalRecords = totalRecords;
                    this.postsPager1.PageIndex    = this.CurrentPageIndex;

                    this.postsPager2.PageSize     = pageSize;
                    this.postsPager2.TotalRecords = totalRecords;
                    this.postsPager2.PageIndex    = this.CurrentPageIndex;

                    rptrPosts.DataSource = forumPosts;
                    rptrPosts.DataBind();
                }

                //subsciption
                if (ForumManager.IsUserAllowedToSubscribe(NopContext.Current.User))
                {
                    ForumSubscription forumSubscription = ForumManager.GetAllSubscriptions(NopContext.Current.User.CustomerID,
                                                                                           0, forumTopic.ForumTopicID, 1, 0).FirstOrDefault();

                    if (forumSubscription == null)
                    {
                        btnWatchTopic.Text  = GetLocaleResourceString("Forum.WatchTopic");
                        btnWatchTopic2.Text = GetLocaleResourceString("Forum.WatchTopic");
                    }
                    else
                    {
                        btnWatchTopic.Text  = GetLocaleResourceString("Forum.UnwatchTopic");
                        btnWatchTopic2.Text = GetLocaleResourceString("Forum.UnwatchTopic");
                    }
                }
                else
                {
                    btnWatchTopic.Visible  = false;
                    btnWatchTopic2.Visible = false;
                }
            }
            else
            {
                Response.Redirect(SEOHelper.GetForumMainURL());
            }
        }
Example #23
0
        public virtual void UpdateSubscription(ForumSubscription subscription)
        {
            Guard.NotNull(subscription, nameof(subscription));

            _forumSubscriptionRepository.Update(subscription);
        }
Example #24
0
        public virtual void InsertSubscription(ForumSubscription subscription)
        {
            Guard.NotNull(subscription, nameof(subscription));

            _forumSubscriptionRepository.Insert(subscription);
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            try
            {
                string text = string.Empty;

                switch (this.ForumService.ForumEditor)
                {
                case EditorTypeEnum.SimpleTextBox:
                {
                    text = txtTopicBodySimple.Text.Trim();
                }
                break;

                case EditorTypeEnum.BBCodeEditor:
                {
                    text = txtTopicBodyBBCode.Text.Trim();
                }
                break;

                case EditorTypeEnum.HtmlEditor:
                {
                    text = txtTopicBodyHtml.Value;
                }
                break;

                default:
                    break;
                }

                string subject   = txtTopicTitle.Text;
                var    topicType = ForumTopicTypeEnum.Normal;
                bool   subscribe = cbSubscribe.Checked;

                string IPAddress = NopContext.Current.UserHostAddress;

                DateTime nowDT = DateTime.UtcNow;

                if (this.ForumService.IsUserAllowedToSetTopicPriority(NopContext.Current.User))
                {
                    topicType = (ForumTopicTypeEnum)Enum.ToObject(typeof(ForumTopicTypeEnum), int.Parse(ddlPriority.SelectedItem.Value));
                }

                text = text.Trim();
                if (String.IsNullOrEmpty(text))
                {
                    throw new NopException(GetLocaleResourceString("Forum.TextCannotBeEmpty"));
                }

                if (this.AddTopic)
                {
                    #region Adding topic
                    var forum = this.ForumService.GetForumById(this.ForumId);
                    if (forum == null)
                    {
                        Response.Redirect(SEOHelper.GetForumMainUrl());
                    }

                    if (!this.ForumService.IsUserAllowedToCreateTopic(NopContext.Current.User, forum))
                    {
                        string loginURL = SEOHelper.GetLoginPageUrl(true);
                        Response.Redirect(loginURL);
                    }

                    subject = subject.Trim();
                    if (String.IsNullOrEmpty(subject))
                    {
                        throw new NopException(GetLocaleResourceString("Forum.TopicSubjectCannotBeEmpty"));
                    }

                    //forum topic
                    var forumTopic = new ForumTopic()
                    {
                        ForumId     = forum.ForumId,
                        UserId      = NopContext.Current.User.CustomerId,
                        TopicTypeId = (int)topicType,
                        Subject     = subject,
                        CreatedOn   = nowDT,
                        UpdatedOn   = nowDT
                    };
                    this.ForumService.InsertTopic(forumTopic, true);

                    //forum post
                    var forumPost = new ForumPost()
                    {
                        TopicId   = forumTopic.ForumTopicId,
                        UserId    = NopContext.Current.User.CustomerId,
                        Text      = text,
                        IPAddress = IPAddress,
                        CreatedOn = nowDT,
                        UpdatedOn = nowDT
                    };
                    this.ForumService.InsertPost(forumPost, false);

                    //update forum topic
                    forumTopic.NumPosts       = 1;
                    forumTopic.LastPostId     = forumPost.ForumPostId;
                    forumTopic.LastPostUserId = forumPost.UserId;
                    forumTopic.LastPostTime   = forumPost.CreatedOn;
                    forumTopic.UpdatedOn      = nowDT;
                    this.ForumService.UpdateTopic(forumTopic);

                    //subscription
                    if (this.ForumService.IsUserAllowedToSubscribe(NopContext.Current.User))
                    {
                        if (subscribe)
                        {
                            var forumSubscription = new ForumSubscription()
                            {
                                SubscriptionGuid = Guid.NewGuid(),
                                UserId           = NopContext.Current.User.CustomerId,
                                TopicId          = forumTopic.ForumTopicId,
                                CreatedOn        = nowDT
                            };

                            this.ForumService.InsertSubscription(forumSubscription);
                        }
                    }

                    string topicURL = SEOHelper.GetForumTopicUrl(forumTopic);
                    Response.Redirect(topicURL);
                    #endregion
                }
                else if (this.EditTopic)
                {
                    #region Editing topic
                    var forumTopic = this.ForumService.GetTopicById(this.ForumTopicId);
                    if (forumTopic == null)
                    {
                        Response.Redirect(SEOHelper.GetForumMainUrl());
                    }

                    if (!this.ForumService.IsUserAllowedToEditTopic(NopContext.Current.User, forumTopic))
                    {
                        string loginURL = SEOHelper.GetLoginPageUrl(true);
                        Response.Redirect(loginURL);
                    }

                    subject = subject.Trim();
                    if (String.IsNullOrEmpty(subject))
                    {
                        throw new NopException(GetLocaleResourceString("Forum.TopicSubjectCannotBeEmpty"));
                    }

                    //forum topic
                    forumTopic.TopicTypeId = (int)topicType;
                    forumTopic.Subject     = subject;
                    forumTopic.UpdatedOn   = nowDT;
                    this.ForumService.UpdateTopic(forumTopic);

                    //forum post
                    var firstPost = forumTopic.FirstPost;
                    if (firstPost != null)
                    {
                        firstPost.Text      = text;
                        firstPost.UpdatedOn = nowDT;
                        this.ForumService.UpdatePost(firstPost);
                    }
                    else
                    {
                        //error (not possible)
                        firstPost = new ForumPost()
                        {
                            TopicId   = forumTopic.ForumTopicId,
                            UserId    = forumTopic.UserId,
                            Text      = text,
                            IPAddress = IPAddress,
                            UpdatedOn = nowDT
                        };

                        this.ForumService.InsertPost(firstPost, false);
                    }

                    //subscription
                    if (this.ForumService.IsUserAllowedToSubscribe(NopContext.Current.User))
                    {
                        var forumSubscription = this.ForumService.GetAllSubscriptions(NopContext.Current.User.CustomerId,
                                                                                      0, forumTopic.ForumTopicId, 0, 1).FirstOrDefault();
                        if (subscribe)
                        {
                            if (forumSubscription == null)
                            {
                                forumSubscription = new ForumSubscription()
                                {
                                    SubscriptionGuid = Guid.NewGuid(),
                                    UserId           = NopContext.Current.User.CustomerId,
                                    TopicId          = forumTopic.ForumTopicId,
                                    CreatedOn        = nowDT
                                };

                                this.ForumService.InsertSubscription(forumSubscription);
                            }
                        }
                        else
                        {
                            if (forumSubscription != null)
                            {
                                this.ForumService.DeleteSubscription(forumSubscription.ForumSubscriptionId);
                            }
                        }
                    }

                    string topicURL = SEOHelper.GetForumTopicUrl(forumTopic);
                    Response.Redirect(topicURL);
                    #endregion
                }
                else if (this.AddPost)
                {
                    #region Adding post
                    var forumTopic = this.ForumService.GetTopicById(this.ForumTopicId);
                    if (forumTopic == null)
                    {
                        Response.Redirect(SEOHelper.GetForumMainUrl());
                    }

                    if (!this.ForumService.IsUserAllowedToCreatePost(NopContext.Current.User, forumTopic))
                    {
                        string loginURL = SEOHelper.GetLoginPageUrl(true);
                        Response.Redirect(loginURL);
                    }

                    //forum post
                    var forumPost = new ForumPost()
                    {
                        TopicId   = this.ForumTopicId,
                        UserId    = NopContext.Current.User.CustomerId,
                        Text      = text,
                        IPAddress = IPAddress,
                        CreatedOn = nowDT,
                        UpdatedOn = nowDT
                    };
                    this.ForumService.InsertPost(forumPost, true);

                    //subscription
                    if (this.ForumService.IsUserAllowedToSubscribe(NopContext.Current.User))
                    {
                        var forumSubscription = this.ForumService.GetAllSubscriptions(NopContext.Current.User.CustomerId,
                                                                                      0, forumPost.TopicId, 0, 1).FirstOrDefault();
                        if (subscribe)
                        {
                            if (forumSubscription == null)
                            {
                                forumSubscription = new ForumSubscription()
                                {
                                    SubscriptionGuid = Guid.NewGuid(),
                                    UserId           = NopContext.Current.User.CustomerId,
                                    TopicId          = forumPost.TopicId,
                                    CreatedOn        = nowDT
                                };

                                this.ForumService.InsertSubscription(forumSubscription);
                            }
                        }
                        else
                        {
                            if (forumSubscription != null)
                            {
                                this.ForumService.DeleteSubscription(forumSubscription.ForumSubscriptionId);
                            }
                        }
                    }


                    int pageSize = 10;
                    if (this.ForumService.PostsPageSize > 0)
                    {
                        pageSize = this.ForumService.PostsPageSize;
                    }
                    int    pageIndex = this.ForumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.ForumPostId);
                    string topicURL  = SEOHelper.GetForumTopicUrl(forumPost.TopicId, "p", pageIndex + 1, forumPost.ForumPostId);
                    Response.Redirect(topicURL);
                    #endregion
                }
                else if (this.EditPost)
                {
                    #region Editing post
                    var forumPost = this.ForumService.GetPostById(this.ForumPostId);
                    if (forumPost == null)
                    {
                        Response.Redirect(SEOHelper.GetForumMainUrl());
                    }

                    if (!this.ForumService.IsUserAllowedToEditPost(NopContext.Current.User, forumPost))
                    {
                        string loginURL = SEOHelper.GetLoginPageUrl(true);
                        Response.Redirect(loginURL);
                    }

                    forumPost.Text      = text;
                    forumPost.UpdatedOn = nowDT;
                    this.ForumService.UpdatePost(forumPost);

                    //subscription
                    if (this.ForumService.IsUserAllowedToSubscribe(NopContext.Current.User))
                    {
                        var forumSubscription = this.ForumService.GetAllSubscriptions(NopContext.Current.User.CustomerId,
                                                                                      0, forumPost.TopicId, 0, 1).FirstOrDefault();
                        if (subscribe)
                        {
                            if (forumSubscription == null)
                            {
                                forumSubscription = new ForumSubscription()
                                {
                                    SubscriptionGuid = Guid.NewGuid(),
                                    UserId           = NopContext.Current.User.CustomerId,
                                    TopicId          = forumPost.TopicId,
                                    CreatedOn        = nowDT
                                };

                                this.ForumService.InsertSubscription(forumSubscription);
                            }
                        }
                        else
                        {
                            if (forumSubscription != null)
                            {
                                this.ForumService.DeleteSubscription(forumSubscription.ForumSubscriptionId);
                            }
                        }
                    }

                    int pageSize = 10;
                    if (this.ForumService.PostsPageSize > 0)
                    {
                        pageSize = this.ForumService.PostsPageSize;
                    }
                    int    pageIndex = this.ForumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.ForumPostId);
                    string topicURL  = SEOHelper.GetForumTopicUrl(forumPost.TopicId, "p", pageIndex + 1, forumPost.ForumPostId);
                    Response.Redirect(topicURL);
                    #endregion
                }
            }
            catch (Exception exc)
            {
                pnlError.Visible   = true;
                lErrorMessage.Text = Server.HtmlEncode(exc.Message);
            }
        }
Example #26
0
        public virtual IActionResult PostCreate(EditForumPostModel model, bool captchaValid)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("Homepage"));
            }

            var forumTopic = _forumService.GetTopicById(model.ForumTopicId);

            if (forumTopic == null)
            {
                return(RedirectToRoute("Boards"));
            }

            //validate CAPTCHA
            if (_captchaSettings.Enabled && _captchaSettings.ShowOnForum && !captchaValid)
            {
                ModelState.AddModelError("", _localizationService.GetResource("Common.WrongCaptchaMessage"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (!_forumService.IsCustomerAllowedToCreatePost(_workContext.CurrentCustomer, forumTopic))
                    {
                        return(Challenge());
                    }

                    var text          = model.Text;
                    var maxPostLength = _forumSettings.PostMaxLength;
                    if (maxPostLength > 0 && text.Length > maxPostLength)
                    {
                        text = text.Substring(0, maxPostLength);
                    }

                    var ipAddress = _webHelper.GetCurrentIpAddress();

                    var nowUtc = DateTime.UtcNow;

                    var forumPost = new ForumPost
                    {
                        TopicId      = forumTopic.Id,
                        CustomerId   = _workContext.CurrentCustomer.Id,
                        Text         = text,
                        IPAddress    = ipAddress,
                        CreatedOnUtc = nowUtc,
                        UpdatedOnUtc = nowUtc
                    };
                    _forumService.InsertPost(forumPost, true);

                    //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);
                            }
                        }
                    }

                    var pageSize = _forumSettings.PostsPageSize > 0 ? _forumSettings.PostsPageSize : 10;

                    var pageIndex = (_forumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.Id) + 1);
                    var url       = string.Empty;
                    if (pageIndex > 1)
                    {
                        url = Url.RouteUrl("TopicSlugPaged", new { id = forumPost.TopicId, slug = _forumService.GetTopicSeName(forumTopic), pageNumber = pageIndex });
                    }
                    else
                    {
                        url = Url.RouteUrl("TopicSlug", new { id = forumPost.TopicId, slug = _forumService.GetTopicSeName(forumTopic) });
                    }
                    return(Redirect($"{url}#{forumPost.Id}"));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                }
            }

            //redisplay form
            model = _forumModelFactory.PreparePostCreateModel(forumTopic, 0, true);

            return(View(model));
        }
        public virtual async Task <IActionResult> TopicEdit(EditForumTopicModel model)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("HomePage"));
            }

            var forumTopic = await _forumService.GetTopicById(model.Id);

            if (forumTopic == null)
            {
                return(RedirectToRoute("Boards"));
            }
            var forum = await _forumService.GetForumById(forumTopic.ForumId);

            if (forum == null)
            {
                return(RedirectToRoute("Boards"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (!_forumService.IsCustomerAllowedToEditTopic(_workContext.CurrentCustomer, forumTopic))
                    {
                        return(new ChallengeResult());
                    }

                    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;
                    await _forumService.UpdateTopic(forumTopic);

                    //forum post
                    var firstPost = await forumTopic.GetFirstPost(_forumService);

                    if (firstPost != null)
                    {
                        firstPost.Text         = text;
                        firstPost.UpdatedOnUtc = nowUtc;
                        await _forumService.UpdatePost(firstPost);
                    }
                    else
                    {
                        //error (not possible)
                        firstPost = new ForumPost {
                            TopicId      = forumTopic.Id,
                            ForumId      = forum.Id,
                            ForumGroupId = forum.ForumGroupId,
                            CustomerId   = forumTopic.CustomerId,
                            Text         = text,
                            IPAddress    = ipAddress,
                            UpdatedOnUtc = nowUtc
                        };

                        await _forumService.InsertPost(firstPost, false);
                    }

                    //subscription
                    if (_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer))
                    {
                        var forumSubscription = (await _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id,
                                                                                         "", 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
                                };

                                await _forumService.InsertSubscription(forumSubscription);
                            }
                        }
                        else
                        {
                            if (forumSubscription != null)
                            {
                                await _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 = await _mediator.Send(new GetTopicTypesList());

            model.IsEdit      = true;
            model.ForumName   = forum.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));
        }
Example #28
0
        protected void BindData()
        {
            Forum forum = ForumManager.GetForumByID(this.ForumID);

            if (forum != null)
            {
                //hlNewTopic.Visible = ForumManager.IsUserAllowedToCreateTopic(NopContext.Current.User, forum);

                lblForumName.Text        = Server.HtmlEncode(forum.Name);
                lblForumDescription.Text = Server.HtmlEncode(forum.Description);

                hlNewTopic.NavigateUrl = SEOHelper.GetNewForumTopicURL(forum.ForumID);

                int totalRecords = 0;
                int pageSize     = 10;
                if (ForumManager.TopicsPageSize > 0)
                {
                    pageSize = ForumManager.TopicsPageSize;
                }

                ForumTopicCollection forumTopics = ForumManager.GetAllTopics(forum.ForumID, 0, string.Empty,
                                                                             false, pageSize, this.CurrentPageIndex, out totalRecords);
                if (forumTopics.Count > 0)
                {
                    this.topicsPager1.PageSize     = pageSize;
                    this.topicsPager1.TotalRecords = totalRecords;
                    this.topicsPager1.PageIndex    = this.CurrentPageIndex;

                    this.topicsPager2.PageSize     = pageSize;
                    this.topicsPager2.TotalRecords = totalRecords;
                    this.topicsPager2.PageIndex    = this.CurrentPageIndex;

                    rptrTopics.DataSource = forumTopics;
                    rptrTopics.DataBind();
                }

                //subsciption
                if (ForumManager.IsUserAllowedToSubscribe(NopContext.Current.User))
                {
                    ForumSubscription forumSubscription = ForumManager.GetAllSubscriptions(NopContext.Current.User.CustomerID,
                                                                                           forum.ForumID, 0, 1, 0).FirstOrDefault();

                    if (forumSubscription == null)
                    {
                        btnWatchForum.Text = GetLocaleResourceString("Forum.WatchForum");
                    }
                    else
                    {
                        btnWatchForum.Text = GetLocaleResourceString("Forum.UnwatchForum");
                    }
                }
                else
                {
                    btnWatchForum.Visible = false;
                }
            }
            else
            {
                Response.Redirect(SEOHelper.GetForumMainURL());
            }
        }
        public virtual async Task <IActionResult> PostCreate(EditForumPostModel model, [FromServices] ICustomerService customerService)
        {
            if (!_forumSettings.ForumsEnabled)
            {
                return(RedirectToRoute("HomePage"));
            }

            var forumTopic = await _forumService.GetTopicById(model.ForumTopicId);

            if (forumTopic == null)
            {
                return(RedirectToRoute("Boards"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (!_forumService.IsCustomerAllowedToCreatePost(_workContext.CurrentCustomer, forumTopic))
                    {
                        return(new ChallengeResult());
                    }

                    var text          = model.Text;
                    var maxPostLength = _forumSettings.PostMaxLength;
                    if (maxPostLength > 0 && text.Length > maxPostLength)
                    {
                        text = text.Substring(0, maxPostLength);
                    }

                    string ipAddress = _webHelper.GetCurrentIpAddress();

                    DateTime nowUtc = DateTime.UtcNow;

                    var forumPost = new ForumPost {
                        TopicId      = forumTopic.Id,
                        ForumId      = forumTopic.ForumId,
                        ForumGroupId = forumTopic.ForumGroupId,
                        CustomerId   = _workContext.CurrentCustomer.Id,
                        Text         = text,
                        IPAddress    = ipAddress,
                        CreatedOnUtc = nowUtc,
                        UpdatedOnUtc = nowUtc
                    };
                    await _forumService.InsertPost(forumPost, true);

                    if (!_workContext.CurrentCustomer.HasContributions)
                    {
                        await customerService.UpdateContributions(_workContext.CurrentCustomer);
                    }

                    //subscription
                    if (_forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer))
                    {
                        var forumSubscription = (await _forumService.GetAllSubscriptions(_workContext.CurrentCustomer.Id,
                                                                                         "", 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
                                };

                                await _forumService.InsertSubscription(forumSubscription);
                            }
                        }
                        else
                        {
                            if (forumSubscription != null)
                            {
                                await _forumService.DeleteSubscription(forumSubscription);
                            }
                        }
                    }

                    int pageSize = _forumSettings.PostsPageSize > 0 ? _forumSettings.PostsPageSize : 10;

                    int pageIndex   = (await _forumService.CalculateTopicPageIndex(forumPost.TopicId, pageSize, forumPost.Id) + 1);
                    var url         = string.Empty;
                    var _forumTopic = await _forumService.GetTopicById(forumPost.TopicId);

                    if (pageIndex > 1)
                    {
                        url = Url.RouteUrl("TopicSlugPaged", new { id = forumPost.TopicId, slug = _forumTopic.GetSeName(), pageNumber = pageIndex });
                    }
                    else
                    {
                        url = Url.RouteUrl("TopicSlug", new { id = forumPost.TopicId, slug = _forumTopic.GetSeName() });
                    }
                    return(Redirect($"{url}#{forumPost.Id}"));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                }
            }

            // redisplay form
            var forum = await _forumService.GetForumById(forumTopic.ForumId);

            if (forum == null)
            {
                return(RedirectToRoute("Boards"));
            }

            model.IsEdit            = false;
            model.ForumName         = forum.Name;
            model.ForumTopicId      = forumTopic.Id;
            model.ForumTopicSubject = forumTopic.Subject;
            model.ForumTopicSeName  = forumTopic.GetSeName();
            model.Id = "";
            model.IsCustomerAllowedToSubscribe = _forumService.IsCustomerAllowedToSubscribe(_workContext.CurrentCustomer);
            model.ForumEditor = _forumSettings.ForumEditor;

            return(View(model));
        }
Example #30
0
        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);
        }