Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        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));
        }
Example #5
0
        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));
        }
Example #6
0
        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));
        }