Exemple #1
0
        public static IEnumerable <CommentModel> GetFeaturedCommentsForArticle(ArticleModel article)
        {
            if (article.DiscourseTopicId != null)
            {
                var comments = DiscourseHelper.GetFeaturedCommentsForArticle((int)article.Id);
                return(comments.Select(c => CommentModel.FromDiscourse(c)));
            }

            return(new CommentModel[0]);
        }
        public ActionResult EditArticle(EditArticleViewModel post)
        {
            if (string.IsNullOrEmpty(post.Article.Series.Slug))
            {
                this.ModelState.AddModelError(string.Empty, "A series is required");
            }
            if (string.IsNullOrEmpty(post.Article.Author.Slug))
            {
                this.ModelState.AddModelError(string.Empty, "An author is required");
            }
            if (!string.IsNullOrEmpty(post.Article.Author.Slug) && !this.User.IsAdmin && post.Article.Author.Slug != this.User.Identity.Name)
            {
                this.ModelState.AddModelError(string.Empty, "Only administrators can change authors.");
            }
            if (!this.ModelState.IsValid)
            {
                return(View(post));
            }

            try
            {
                if (post.OpenCommentDiscussionChecked && post.Article.DiscourseTopicId > 0)
                {
                    DiscourseHelper.OpenCommentDiscussion((int)post.Article.Id, (int)post.Article.DiscourseTopicId);
                }

                Logger.Information("Creating or updating article \"{0}\".", post.Article.Title);
                int?articleId = StoredProcs.Articles_CreateOrUpdateArticle(
                    post.Article.Id,
                    post.Article.Slug ?? this.User.Identity.Name,
                    post.PublishedDate,
                    post.Article.Status,
                    post.Article.Author.Slug,
                    post.Article.Title,
                    post.Article.Series.Slug,
                    post.Article.BodyHtml,
                    post.Article.DiscourseTopicId
                    ).Execute();

                post.Article.Id = post.Article.Id ?? articleId;

                if (post.CreateCommentDiscussionChecked)
                {
                    DiscourseHelper.CreateCommentDiscussion(post.Article);
                }

                return(RedirectToAction("index"));
            }
            catch (Exception ex)
            {
                post.ErrorMessage = ex.ToString();
                return(View(post));
            }
        }
        public ActionResult EditArticle(EditArticleViewModel post)
        {
            if (string.IsNullOrEmpty(post.Article.Series.Slug))
            {
                this.ModelState.AddModelError(string.Empty, "A series is required");
            }
            if (string.IsNullOrEmpty(post.Article.Author.Slug))
            {
                this.ModelState.AddModelError(string.Empty, "An author is required");
            }
            if (!this.ModelState.IsValid)
            {
                return(View(post));
            }

            try
            {
                int?newlyCreatedTopicId = null;
                if (post.CreateCommentDiscussionChecked)
                {
                    newlyCreatedTopicId = DiscourseHelper.CreateCommentDiscussion(post.Article);
                }
                if (post.OpenCommentDiscussionChecked && post.Article.DiscourseTopicId > 0)
                {
                    DiscourseHelper.OpenCommentDiscussion((int)post.Article.Id, (int)post.Article.DiscourseTopicId);
                }

                StoredProcs.Articles_CreateOrUpdateArticle(
                    post.Article.Id,
                    post.Article.Slug,
                    post.PublishedDate,
                    post.Article.Status,
                    post.Article.Author.Slug,
                    post.Article.Title,
                    post.Article.Series.Slug,
                    post.Article.BodyHtml,
                    newlyCreatedTopicId ?? post.Article.DiscourseTopicId
                    ).Execute();

                return(RedirectToAction("index"));
            }
            catch (Exception ex)
            {
                post.ErrorMessage = ex.ToString();
                return(View(post));
            }
        }
Exemple #4
0
        public ActionResult ViewArticleComments(string articleSlug)
        {
            var article = ArticleModel.GetArticleBySlug(articleSlug);

            if (article == null)
            {
                return(HttpNotFound());
            }

            if (!article.DiscourseTopicOpened && article.DiscourseTopicId != null && article.PublishedDate < DateTime.Now)
            {
                DiscourseHelper.OpenCommentDiscussion((int)article.Id, (int)article.DiscourseTopicId);
            }

            bool commentsPulled = DiscourseHelper.PullCommentsFromDiscourse(article);

            if (commentsPulled)
            {
                article = ArticleModel.GetArticleBySlug(articleSlug); // reload article with cached comments
            }
            return(View(new ViewCommentsViewModel(article)));
        }
Exemple #5
0
        public static ArticleModel FromTable(Tables.Articles_Extended article)
        {
            DateTime lastCommentDate = DateTime.Now;

            var model = new ArticleModel()
            {
                Id       = article.Article_Id,
                Slug     = article.Article_Slug,
                Author   = AuthorModel.FromTable(article),
                BodyHtml = article.Body_Html,
                DiscourseCommentCount = (int)article.Cached_Comment_Count,
                CachedCommentCount    = (int)article.Cached_Comment_Count,
                DiscourseTopicId      = article.Discourse_Topic_Id,
                DiscourseTopicOpened  = article.Discourse_Topic_Opened == "Y",
                LastCommentDate       = lastCommentDate,
                PublishedDate         = article.Published_Date,
                Series               = SeriesModel.FromTable(article),
                Status               = article.PublishedStatus_Name,
                SummaryHtml          = ArticleModel.ExtractSummary(article.Body_Html),
                Title                = article.Title_Text,
                PreviousArticleId    = article.Previous_Article_Id,
                PreviousArticleSlug  = article.Previous_Article_Slug,
                PreviousArticleTitle = article.Previous_Title_Text,
                NextArticleId        = article.Next_Article_Id,
                NextArticleSlug      = article.Next_Article_Slug,
                NextArticleTitle     = article.Next_Title_Text
            };

            if (article.Discourse_Topic_Id != null)
            {
                var topic = DiscourseHelper.GetDiscussionTopic((int)article.Discourse_Topic_Id);
                model.LastCommentDate       = topic.LastPostedAt;
                model.DiscourseCommentCount = topic.PostsCount;
                model.DiscourseTopicSlug    = topic.Slug;
            }

            return(model);
        }
        public ActionResult ReenableDiscourse()
        {
            DiscourseHelper.UnpauseDiscourseConnections();

            return(Redirect("/admin"));
        }
 public IEnumerable <Topic> GetSideBarWtfs()
 {
     return(DiscourseHelper.GetSideBarWtfs());
 }