Пример #1
0
        public async Task <PostPageModel> BuildNewPostPageModelAsync(Guid siteId, Guid forumId)
        {
            var forum = await _dbContext.Forums
                        .Include(x => x.Category)
                        .FirstOrDefaultAsync(x =>
                                             x.Id == forumId &&
                                             x.Category.SiteId == siteId &&
                                             x.Status == StatusType.Published);

            if (forum == null)
            {
                return(null);
            }

            var result = new PostPageModel
            {
                Forum = new PostPageModel.ForumModel
                {
                    Id   = forum.Id,
                    Name = forum.Name,
                    Slug = forum.Slug
                }
            };

            return(result);
        }
Пример #2
0
 public PostPageModel GetAll(int?pageSize, int?pageNumber, string orderBy, string searchTerm, bool all)
 {
     using (UnitOfWork uow = new UnitOfWork())
     {
         PostPageModel postPageModel = uow.PostRepository.GetAll(pageSize, pageNumber, orderBy, searchTerm, all);
         return(postPageModel);
     }
 }
Пример #3
0
        public async Task <ActionResult> UpdateTopic(PostPageModel model)
        {
            var site = await _contextService.CurrentSiteAsync();

            var user = await _contextService.CurrentUserAsync();

            var command = new UpdateTopic
            {
                Id      = model.Topic.Id,
                ForumId = model.Forum.Id,
                Title   = model.Topic.Title,
                Content = model.Topic.Content,
                Status  = PostStatusType.Published,
                SiteId  = site.Id,
                UserId  = user.Id
            };

            var topicInfo = await _dbContext.Posts
                            .Where(x =>
                                   x.Id == command.Id &&
                                   x.TopicId == null &&
                                   x.ForumId == command.ForumId &&
                                   x.Forum.Category.SiteId == command.SiteId &&
                                   x.Status != PostStatusType.Deleted)
                            .Select(x => new { UserId = x.CreatedBy, x.Locked })
                            .FirstOrDefaultAsync();

            var permissions = await _permissionModelBuilder.BuildPermissionModelsByForumId(site.Id, model.Forum.Id);

            var canEdit     = _securityService.HasPermission(PermissionType.Edit, permissions);
            var canModerate = _securityService.HasPermission(PermissionType.Moderate, permissions);
            var authorized  = (canEdit && topicInfo.UserId == user.Id && !topicInfo.Locked || canModerate) && !user.IsSuspended;

            if (!authorized)
            {
                _logger.LogWarning("Unauthorized access to update topic", new
                {
                    SiteId  = site.Id,
                    ForumId = model.Forum?.Id,
                    TopicId = model.Topic?.Id,
                    User    = User.Identity.Name
                });

                return(Unauthorized());
            }

            var slug = await _topicService.UpdateAsync(command);

            return(Ok(slug));
        }
Пример #4
0
        protected override async Task OnInitializedAsync()
        {
            await base.OnInitializedAsync();

            var requestUri = TopicId != null
                ? $"api/public/topics/{ForumId}/edit-topic/{TopicId.Value}"
                : $"api/public/topics/{ForumId}/new-topic";

            try
            {
                Model = await ApiService.GetFromJsonAsync <PostPageModel>(requestUri);

                DisplayPage = true;
            }
            catch (Exception)
            {
                Model       = new PostPageModel();
                DisplayPage = false;
            }
        }
Пример #5
0
        public PostPageModel GetAll(int?pageSize, int?pageNumber, string orderBy, string searchTerm, bool all)
        {
            PostPageModel model = new PostPageModel();

            var query = (IQueryable <Post>)dbSet.Include("PostImages");

            if (!all)
            {
                query = query.Where(p => p.Active);
            }

            if (!string.IsNullOrEmpty(searchTerm))
            {
                query = query.Where(p => p.Title.ToLower().Contains(searchTerm.ToLower()) ||
                                    p.Content.ToLower().Contains(searchTerm.ToLower()));
            }

            switch (orderBy)
            {
            case "title": query = query.OrderBy(p => p.Title); break;

            case "-title": query = query.OrderByDescending(p => p.Title); break;

            case "date": query = query.OrderBy(p => p.Date); break;

            case "-date": query = query.OrderByDescending(p => p.Date); break;

            default: query = query.OrderBy(pg => pg.Id); break;
            }

            model.TotalCount = query.Count();
            if (pageNumber.HasValue && pageSize.HasValue)
            {
                query = query.Skip((pageNumber.Value - 1) * pageSize.Value).Take(pageSize.Value);
            }

            model.Posts = query.ToList();

            return(model);
        }
Пример #6
0
        public async Task <PostPageModel> BuildEditPostPageModelAsync(Guid siteId, Guid forumId, Guid topicId)
        {
            var topic = await _dbContext.Posts
                        .Include(x => x.Forum).ThenInclude(x => x.Category)
                        .Include(x => x.CreatedByUser)
                        .FirstOrDefaultAsync(x =>
                                             x.TopicId == null &&
                                             x.Forum.Category.SiteId == siteId &&
                                             x.Forum.Id == forumId &&
                                             x.Id == topicId &&
                                             x.Status == StatusType.Published);

            if (topic == null)
            {
                return(null);
            }

            var result = new PostPageModel
            {
                Forum = new PostPageModel.ForumModel
                {
                    Id   = topic.Forum.Id,
                    Name = topic.Forum.Name,
                    Slug = topic.Forum.Slug
                },
                Topic = new PostPageModel.TopicModel
                {
                    Id      = topic.Id,
                    Title   = topic.Title,
                    Slug    = topic.Slug,
                    Content = topic.Content,
                    UserId  = topic.CreatedByUser.Id,
                    Locked  = topic.Locked
                }
            };

            return(result);
        }
Пример #7
0
        public async Task <ActionResult> CreateTopic(PostPageModel model)
        {
            var site = await _contextService.CurrentSiteAsync();

            var user = await _contextService.CurrentUserAsync();

            var permissions = await _permissionModelBuilder.BuildPermissionModelsByForumId(site.Id, model.Forum.Id);

            var canPost = _securityService.HasPermission(PermissionType.Start, permissions) && !user.IsSuspended;

            if (!canPost)
            {
                _logger.LogWarning("Unauthorized access to create topic", new
                {
                    SiteId  = site.Id,
                    ForumId = model.Forum?.Id,
                    User    = User.Identity.Name
                });

                return(Unauthorized());
            }

            var command = new CreateTopic
            {
                ForumId = model.Forum.Id,
                Title   = model.Topic.Title,
                Content = model.Topic.Content,
                Status  = PostStatusType.Published,
                SiteId  = site.Id,
                UserId  = user.Id
            };

            var slug = await _topicService.CreateAsync(command);

            return(Ok(slug));
        }
Пример #8
0
        public PostPageModel GetAllPublic(int?pageSize = null, int?pageNumber = null, string orderBy = null, string searchTerm = null)
        {
            PostPageModel postPageModel = PostManager.GetAll(pageSize, pageNumber, orderBy, searchTerm, false);

            return(postPageModel);
        }
Пример #9
0
    protected void Page_Load(object sender, EventArgs e)
    {
        PPM = new PostPageModel();
        string pname = "";

        if (Page.RouteData.Values["pagename"] != null)
        {
            pname = Page.RouteData.Values["pagename"].ToString();
        }

        if (Request.IsAuthenticated)
        {
            CurrentUser = MemberManager.GetUser(User.Identity.Name);
        }

        if (Request.QueryString["preview"] != null)
        {
            try
            {
                Preview = Convert.ToBoolean(Request.QueryString["preview"]);
            }
            catch (Exception ex)
            {
                Preview = false;
                Trace.Write("Invalid id");
                Trace.Write(ex.Message);
                Trace.Write(ex.StackTrace);
            }
        }

        using (RockyingDataClassesDataContext dc = new RockyingDataClassesDataContext(Utility.ConnectionString))
        {
            Post item = (from t in dc.Posts
                         where t.URL.ToLower().Trim() == pname.ToLower().Trim() &&
                         (t.Status == (byte)PostStatusType.Publish || Preview == true)
                         select t).SingleOrDefault();
            if (item != null)
            {
                PPM.ArticleCreator = item.Member;
                Article a = new Article();
                //try
                //{
                //    //if (!string.IsNullOrWhiteSpace(item.Article))
                //    //{
                //    //    a = Utility.Deserialize<Article>(item.Article);
                //    //}
                //    //else
                //    //{
                //    //    a = Utility.Deserialize<Article>(System.IO.File.ReadAllText(Server.MapPath(string.Format("{1}/articlexml-{0}.txt", item.ID, Utility.ArticleFolder))));
                //    //}
                //}
                //catch (Exception ex)
                //{
                //    Trace.Write("Unable to read xml file of article.");
                //    Trace.Write(ex.Message);
                //    Trace.Write(ex.StackTrace);
                //    try
                //    {
                //        a.Text = System.IO.File.ReadAllText(Server.MapPath(string.Format("{1}/article-{0}.txt", item.ID, Utility.ArticleFolder)));
                //    }
                //    catch (Exception ex1)
                //    {
                //        a.Text = string.Empty;
                //        Trace.Write(ex1.Message);
                //        Trace.Write(ex1.StackTrace);
                //    }
                //}
                a.Category      = item.Category;
                a.CategoryName  = item.Category1.Name;
                a.CreatedBy     = item.CreatedBy;
                a.CreatedByName = item.Member.MemberName;
                a.DateCreated   = item.DateCreated;
                a.DateModified  = item.DateModified;
                a.Description   = item.Description;
                a.ID            = item.ID;
                a.ModifiedBy    = item.ModifiedBy;
                a.Status        = (PostStatusType)item.Status;
                a.Tag           = string.Format("{0}, {1}", item.Tag, item.Category1.Keywords);
                a.Title         = item.Title;
                a.WriterEmail   = item.WriterEmail;
                a.WriterName    = item.WriterName;
                a.Viewed        = item.Viewed;
                a.URL           = item.URL;
                a.Text          = item.Article;
                PPM.Item        = a;
                if (File.Exists(Server.MapPath("~/rockyingdata/article/" + a.ID + ".m4a")))
                {
                    PPM.AudioURL = string.Format("{0}/rockyingdata/article/{1}.m4a", Utility.SiteURL, a.ID);
                }
                PPM.ArticleCategory = item.Category1;
                if (PPM.ArticleCreator.UserType != (byte)MemberTypeType.Admin)
                {
                    PPM.Item.Text = HttpUtility.HtmlEncode(PPM.Item.Text);
                    //change article text add HTML tags.
                    PPM.Item.Text = string.Format("<p>{0}</p>", PPM.Item.Text.Replace("\n", "</p><p>"));
                }
                //GetRating();
                //#region Replace Custom Data Source
                //DataSourceManager dsm = new DataSourceManager();
                //if (PPM.Item.TemplateName == string.Empty)
                //{
                //    PPM.Item.TemplateName = "LeftColumnBlogTemplate";
                //}
                //if (PPM.Item.TemplateName != string.Empty)
                //{
                //    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                //    string templateHTML = dsm.LoadContent(PPM.Item.TemplateName);
                //    doc.LoadHtml(templateHTML);

                //    if (doc.DocumentNode.SelectNodes("//datasource") != null)
                //    {
                //        foreach (HtmlAgilityPack.HtmlNode ds in doc.DocumentNode.SelectNodes("//datasource"))
                //        {
                //            try
                //            {
                //                HtmlAgilityPack.HtmlAttribute att = ds.Attributes["name"];

                //                if (att != null)
                //                {
                //                    var temp = doc.CreateElement("temp");
                //                    var current = ds;
                //                    if (att.Value == "articletext")
                //                    {
                //                        temp.InnerHtml = PPM.Item.Text;
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articleimg")
                //                    {
                //                        if (PPM.Item.OGImage != string.Empty)
                //                            temp.InnerHtml = string.Format("<img src='{0}' alt='' />", PPM.Item.OGImage);
                //                        else
                //                            temp.InnerHtml = "";

                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articletitle")
                //                    {
                //                        temp.InnerHtml = PPM.Item.Title;
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articledate")
                //                    {
                //                        temp.InnerHtml = PPM.Item.DateCreated.ToShortDateString();
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articleviewcount")
                //                    {
                //                        temp.InnerHtml = PPM.Item.Viewed.ToString();
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articletag")
                //                    {
                //                        temp.InnerHtml = PPM.Item.Tag;
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articlewritername")
                //                    {
                //                        temp.InnerHtml = PPM.Item.WriterName;
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articlewriteremail")
                //                    {
                //                        temp.InnerHtml = PPM.Item.WriterEmail;
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articlecategory")
                //                    {
                //                        temp.InnerHtml = PPM.Item.CategoryName;
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                    else if (att.Value == "articledescription")
                //                    {
                //                        temp.InnerHtml = PPM.Item.OGDescription;
                //                        foreach (var child in temp.ChildNodes)
                //                        {
                //                            ds.ParentNode.InsertAfter(child, current);
                //                            current = child;
                //                        }
                //                        ds.Remove();
                //                    }
                //                }
                //            }
                //            catch (Exception ex) {
                //                Trace.Write(ex.Message);
                //                Trace.Write(ex.Source);
                //                Trace.Write(ex.StackTrace);
                //            }
                //        }
                //    }

                //    PPM.Item.Text = doc.DocumentNode.OuterHtml;
                //}
                //PPM.Item.Text = dsm.ParseAndPopulate(PPM.Item.Text);
                //#endregion

                // get the next article by this writer in the same category
                PPM.NextByWriter = (from t in dc.Posts
                                    where t.ID > item.ID && t.CreatedBy == item.CreatedBy && t.Category == item.Category &&
                                    (t.Status == (byte)PostStatusType.Publish)
                                    select t).FirstOrDefault();
                if (PPM.NextByWriter != null)
                {
                    PPM.RecommendationList.Add(new Article(PPM.NextByWriter));
                }

                // get the previous article by this writer in the same category
                PPM.PrevByWriter = (from t in dc.Posts
                                    where t.ID < item.ID && t.CreatedBy == item.CreatedBy && t.Category == item.Category &&
                                    (t.Status == (byte)PostStatusType.Publish)
                                    select t).FirstOrDefault();
                if (PPM.PrevByWriter != null)
                {
                    PPM.RecommendationList.Add(new Article(PPM.PrevByWriter));
                }
                //- 3 latest stories by other writers in same category
                var Latest3SameCatOtherWrites = (from t in dc.Posts
                                                 where t.CreatedBy != item.CreatedBy && t.Category == item.Category &&
                                                 (t.Status == (byte)PostStatusType.Publish)
                                                 select t).OrderByDescending(t => t.DateCreated).Take(3);
                foreach (Post p in Latest3SameCatOtherWrites)
                {
                    if (PPM.NextByWriter != null && p.ID == PPM.NextByWriter.ID)
                    {
                        continue;
                    }
                    if (PPM.PrevByWriter != null && p.ID == PPM.PrevByWriter.ID)
                    {
                        continue;
                    }
                    if (PPM.Item != null && p.ID == PPM.Item.ID)
                    {
                        continue;
                    }

                    PPM.RecommendationList.Add(new Article(p));
                }
                //- 1 latest story by writer in other category
                var LatestStoryByWriterInOtherCat = (from t in dc.Posts
                                                     where t.CreatedBy == item.CreatedBy &&
                                                     t.Category != item.Category &&
                                                     t.Status == (byte)PostStatusType.Publish
                                                     select t).OrderByDescending(t => t.DateCreated).FirstOrDefault();
                if (LatestStoryByWriterInOtherCat != null)
                {
                    PPM.RecommendationList.Add(new Article(LatestStoryByWriterInOtherCat));
                }

                //- 5 latest stories on site in all categories
                var Latest5AllCat = (from t in dc.Posts
                                     where (PPM.Item != null && t.ID != PPM.Item.ID) && t.Status == (byte)PostStatusType.Publish
                                     select t).OrderByDescending(t => t.DateCreated).Take(5);
                foreach (Post p in Latest5AllCat)
                {
                    if (PPM.NextByWriter != null && p.ID == PPM.NextByWriter.ID)
                    {
                        continue;
                    }
                    if (PPM.PrevByWriter != null && p.ID == PPM.PrevByWriter.ID)
                    {
                        continue;
                    }
                    PPM.RecommendationList.Add(new Article(p));
                }

                foreach (TopStory ts in dc.TopStories)
                {
                    if (PPM.NextByWriter != null && ts.PostId == PPM.NextByWriter.ID)
                    {
                        continue;
                    }
                    if (PPM.PrevByWriter != null && ts.PostId == PPM.PrevByWriter.ID)
                    {
                        continue;
                    }
                    if (PPM.Item != null && ts.PostId == PPM.Item.ID)
                    {
                        continue;
                    }

                    PPM.RecommendationList.Add(new Article(ts.Post));
                }
            }
        }
    }