public ActionResult Edit(string subName) { var sub = _subDao.GetSubByName(subName); if (sub == null) { throw new NotFoundException(); } if (!_permissionDao.CanUserManageSubStyles(_userContext.CurrentUser, sub.Id)) { throw new UnauthorizedException(); } var model = new StylesEditModel(); model.Sub = sub; model.StyledEnabledForUser = _userContext.CurrentUser.EnableStyles; if (Request.Cookies.ContainsKey("preview-" + sub.Name.ToLower())) { var preview = HttpContext.Session.Get <StylesPreviewModel>("preview-" + sub.Name.ToLower()); if (preview != null) { _mapper.Map(preview, model); return(View(model)); } } var styles = _subStylesDao.GetStylesForSub(sub.Id); if (styles == null) { styles = new SubCss(); styles.CssType = CssType.None; } _mapper.Map(styles, model); return(View(model)); }
public ActionResult Posts(string name) { if (string.IsNullOrEmpty(name)) { return(Redirect(Url.Subs())); } var sub = _subDao.GetSubByName(name); if (sub == null) { return(Redirect(Url.Subs(name))); } var model = new SubPosts(); model.Sub = _mapper.Map <Sub, SubModel>(sub); model.Sub.IsSubscribed = _contextService.IsSubcribedToSub(sub.Name); return(View(model)); }
public ActionResult Unmoderated(string subName) { if (string.IsNullOrEmpty(subName)) { throw new NotFoundException(); } var sub = _subDao.GetSubByName(subName); if (sub == null) { throw new NotFoundException(); } var postIds = _postDao.GetUnmoderatedPosts(new List <Guid> { sub.Id }, take: 30); var model = new SubPostsModel(); model.Sub = _subWrapper.Wrap(sub.Id, _userContext.CurrentUser); model.SortBy = PostsSortBy.New; model.Posts = new PagedList <PostWrapped>(_postWrapper.Wrap(postIds, _userContext.CurrentUser), 0, 30, postIds.HasMore); return(View(model)); }
public IViewComponentResult Invoke(string subName) { // the user doesn't want to see any styles! if (_userContext.CurrentUser != null && !_userContext.CurrentUser.EnableStyles) { return(Content(string.Empty)); } var sub = _subDao.GetSubByName(subName); if (sub == null) { return(Content(string.Empty)); } var isPreviewing = false; var header = Request.Headers.ContainsKey(HeaderNames.SetCookie); if (ViewContext.HttpContext.Response.Headers.ContainsKey(HeaderNames.SetCookie)) { var setCookie = ViewContext.HttpContext.Response.Headers[HeaderNames.SetCookie]; foreach (var value in setCookie) { if (!string.IsNullOrEmpty(value)) { if (value.Contains($"preview-{sub.Name.ToLower()}=;")) { isPreviewing = true; break; } } } } else if (Request.Cookies.ContainsKey($"preview-{sub.Name.ToLower()}")) { isPreviewing = true; } if (isPreviewing) { var preview = HttpContext.Session.Get <StylesPreviewModel>($"preview-{sub.Name.ToLower()}"); if (preview != null) { ViewBag.IsPreview = true; ViewBag.PreviewStylesSubName = sub.Name; return(View(_mapper.Map <StylesPreviewModel, SubCss>(preview))); } } var styles = _subCssDao.GetStylesForSub(sub.Id); if (styles == null) { return(Content(string.Empty)); } ViewBag.IsPreview = false; return(View(styles)); }
public ActionResult SearchSub(string subName, string query, PostsSearchSortBy?sort, PostsTimeFilter?time, int?pageNumber, int?pageSize) { if (string.IsNullOrEmpty(subName)) { return(Redirect(Url.Subs())); } if (sort == null) { sort = PostsSearchSortBy.Relevance; } if (time == null) { time = PostsTimeFilter.All; } var sub = _subDao.GetSubByName(subName); if (sub == null) { return(Redirect(Url.Subs(subName))); } if (pageNumber == null || pageNumber < 1) { pageNumber = 1; } if (pageSize == null) { pageSize = 25; } if (pageSize > 100) { pageSize = 100; } if (pageSize < 1) { pageSize = 1; } var model = new SearchResultsModel(); model.Query = query; model.SortBy = sort.Value; model.TimeFilter = time.Value; model.ResultType = SearchResultType.Post; model.LimitingToSub = _subWrapper.Wrap(sub.Id, _userContext.CurrentUser); var postIds = _postDao.QueryPosts(query, model.LimitingToSub.Sub.Id, sortBy: sort.Value, timeFilter: time.Value, nsfw: _userContext.CurrentNsfw, skip: ((pageNumber - 1) * pageSize), take: pageSize); if (!string.IsNullOrEmpty(model.Query)) { model.Posts = new PagedList <PostWrapped>( _postWrapper.Wrap(postIds, _userContext.CurrentUser), pageNumber.Value, pageSize.Value, postIds.HasMore); } return(View("Search", model)); }
public ActionResult ModeratorMail(InboxType type, string subName = null, int?pageNumber = null, int?pageSize = null) { ViewBag.ManageNavigationKey = "moderatormail"; if (pageNumber == null || pageNumber < 1) { pageNumber = 1; } if (pageSize == null) { pageSize = 25; } if (pageSize > 100) { pageSize = 100; } if (pageSize < 1) { pageSize = 1; } var skip = (pageNumber - 1) * pageSize; var take = pageSize; var moderatingSubs = _moderationDao.GetSubsModeratoredByUserWithPermissions(_userContext.CurrentUser.Id); var model = new InboxViewModel { InboxType = type }; model.IsModerator = moderatingSubs.Count > 0; if (!string.IsNullOrEmpty(subName)) { var sub = _subDao.GetSubByName(subName); if (sub == null) { throw new NotFoundException(); } // make the sure that the user is allowed to see this mod mail if (!_userContext.CurrentUser.IsAdmin) { if (!moderatingSubs.ContainsKey(sub.Id)) { throw new UnauthorizedException(); } if (!moderatingSubs[sub.Id].HasPermission(ModeratorPermissions.Mail)) { throw new UnauthorizedException(); } } model.Sub = sub; model.ModeratorMailForSubs = new List <Guid> { sub.Id }; } else { model.ModeratorMailForSubs = new List <Guid>(); foreach (var key in moderatingSubs.Keys) { if (moderatingSubs[key].HasPermission(ModeratorPermissions.Mail)) { model.ModeratorMailForSubs.Add(key); } } } SeekedList <Guid> messages; if (moderatingSubs.Count == 0) { messages = new SeekedList <Guid>(); } else { switch (type) { case InboxType.ModeratorMail: messages = _messageDao.GetModeratorMailForSubs(moderatingSubs.Select(x => x.Key).ToList(), skip, take); break; case InboxType.ModeratorMailUnread: messages = _messageDao.GetUnreadModeratorMailForSubs(moderatingSubs.Select(x => x.Key).ToList(), skip, take); break; case InboxType.ModeratorMailSent: messages = _messageDao.GetSentModeratorMailForSubs(moderatingSubs.Select(x => x.Key).ToList(), skip, take); break; default: throw new Exception("invalid type"); } } model.Messages = new PagedList <MessageWrapped>(_messageWrapper.Wrap(messages, _userContext.CurrentUser), pageNumber.Value, pageSize.Value, messages.HasMore); return(View(model)); }