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