Ejemplo n.º 1
0
        public async Task <ActionResult> Subscribed(Domain.Models.DomainType domainType)
        {
            switch (domainType)
            {
            case Domain.Models.DomainType.Subverse:
                var domainReference = new Domain.Models.DomainReference(Domain.Models.DomainType.Set, Domain.Models.SetType.Front.ToString(), User.Identity.Name);
                return(RedirectToAction("Details", "Set", new { name = domainReference.FullName }));

                break;

            case Domain.Models.DomainType.Set:


                var options = new SearchOptions(Request.QueryString.Value);

                var q = new QueryUserSubscribedSets(options).SetUserContext(User);

                var results = await q.ExecuteAsync();

                var paged = new Utilities.PaginatedList <Domain.Models.DomainReferenceDetails>(results, options.Page, options.Count);

                ViewBag.NavigationViewModel = new Models.ViewModels.NavigationViewModel()
                {
                    Description = "Subscribed Sets",
                    Name        = "No Idea",
                    MenuType    = Models.ViewModels.MenuType.Discovery,
                    BasePath    = null,
                    Sort        = null
                };
                ViewBag.DomainType = Voat.Domain.Models.DomainType.Set;
                return(View(paged));

                break;

            default:
            case Domain.Models.DomainType.User:
                throw new NotImplementedException("This isn't done yet!");
                break;
            }
        }
        // GET: show a subverse index
        public async Task <ActionResult> SubverseIndex(string subverse, string sort = "hot", bool?previewMode = null)
        {
            const string cookieName = "NSFWEnabled";

            var viewProperties = new ListViewModel <Domain.Models.Submission>();

            viewProperties.PreviewMode = previewMode ?? false;
            ViewBag.PreviewMode        = viewProperties.PreviewMode;

            //Set to DEFAULT if querystring is present
            if (Request.Query["frontpage"] == "guest")
            {
                subverse = AGGREGATE_SUBVERSE.DEFAULT;
            }
            if (String.IsNullOrEmpty(subverse))
            {
                subverse = AGGREGATE_SUBVERSE.FRONT;
            }

            SetFirstTimeCookie();
            var logVisit = new LogVisitCommand(subverse, null, IpHash.CreateHash(Request.RemoteAddress())).SetUserContext(User);
            await logVisit.Execute();

            //Parse query
            var options = new SearchOptions(Request.QueryString.Value);

            //Set sort because it is part of path
            if (!String.IsNullOrEmpty(sort))
            {
                options.Sort = (Domain.Models.SortAlgorithm)Enum.Parse(typeof(Domain.Models.SortAlgorithm), sort, true);
            }

            //set span to day if not specified explicitly
            if (options.Sort == Domain.Models.SortAlgorithm.Top && !Request.Query.ContainsKey("span"))
            {
                options.Span = Domain.Models.SortSpan.Day;
            }
            //reset count incase they try to change it with querystrings those sneaky snakes
            options.Count = 25;

            viewProperties.Sort = options.Sort;
            viewProperties.Span = options.Span;
            var routeName = ROUTE_NAMES.SUBVERSE_INDEX;

            try
            {
                PaginatedList <Domain.Models.Submission> pageList = null;

                if (AGGREGATE_SUBVERSE.IsAggregate(subverse))
                {
                    if (AGGREGATE_SUBVERSE.FRONT.IsEqual(subverse))
                    {
                        //Check if user is logged in and has subscriptions, if not we convert to default query
                        if (!User.Identity.IsAuthenticated || (User.Identity.IsAuthenticated && !UserData.HasSubscriptions()))
                        {
                            subverse = AGGREGATE_SUBVERSE.DEFAULT;
                        }
                        else
                        {
                            subverse = AGGREGATE_SUBVERSE.FRONT;
                        }
                        //viewProperties.Title = "Front";
                        //ViewBag.SelectedSubverse = "frontpage";
                    }
                    else if (AGGREGATE_SUBVERSE.DEFAULT.IsEqual(subverse))
                    {
                        //viewProperties.Title = "Front";
                        //ViewBag.SelectedSubverse = "frontpage";
                    }
                    else
                    {
                        // selected subverse is ALL, show submissions from all subverses, sorted by rank
                        viewProperties.Title = "all subverses";
                        if (AGGREGATE_SUBVERSE.ANY.IsEqual(subverse))
                        {
                            viewProperties.Context = new Domain.Models.DomainReference(Domain.Models.DomainType.Subverse, AGGREGATE_SUBVERSE.ANY);
                            subverse = AGGREGATE_SUBVERSE.ANY;
                        }
                        else
                        {
                            viewProperties.Context = new Domain.Models.DomainReference(Domain.Models.DomainType.Subverse, "all");
                            subverse = AGGREGATE_SUBVERSE.ALL;
                        }
                    }
                }
                else
                {
                    // check if subverse exists, if not, send to a page not found error
                    //Can't use cached, view using to query db
                    var subverseObject = _db.Subverse.FirstOrDefault(x => x.Name.ToLower() == subverse.ToLower());

                    if (subverseObject == null)
                    {
                        ViewBag.SelectedSubverse = "404";
                        return(ErrorView(ErrorViewModel.GetErrorViewModel(ErrorType.SubverseNotFound)));
                    }

                    //Set to proper cased name
                    subverse = subverseObject.Name;

                    //HACK: Disable subverse
                    if (subverseObject.IsAdminDisabled.HasValue && subverseObject.IsAdminDisabled.Value)
                    {
                        //viewProperties.Subverse = subverseObject.Name;
                        ViewBag.Subverse = subverseObject.Name;
                        return(ErrorView(ErrorViewModel.GetErrorViewModel(ErrorType.SubverseDisabled)));
                    }

                    //Check NSFW Settings
                    if (subverseObject.IsAdult)
                    {
                        if (User.Identity.IsAuthenticated)
                        {
                            if (!UserData.Preferences.EnableAdultContent)
                            {
                                // display a view explaining that account preference is set to NO NSFW and why this subverse can not be shown
                                return(RedirectToAction("AdultContentFiltered", "Subverses", new { destination = subverseObject.Name }));
                            }
                        }
                        // check if user wants to see NSFW content by reading NSFW cookie
                        else if (!ControllerContext.HttpContext.Request.Cookies.ContainsKey(cookieName))
                        {
                            return(RedirectToAction("AdultContentWarning", "Subverses", new { destination = subverseObject.Name, nsfwok = false }));
                        }
                    }

                    viewProperties.Context = new Domain.Models.DomainReference(Domain.Models.DomainType.Subverse, subverseObject.Name);
                    viewProperties.Title   = subverseObject.Title;
                    routeName = ROUTE_NAMES.SUBVERSE_INDEX;
                }
                //what to query
                var domainReference = new Domain.Models.DomainReference(Domain.Models.DomainType.Subverse, subverse);

                var q       = new QuerySubmissions(domainReference, options).SetUserContext(User);
                var results = await q.ExecuteAsync().ConfigureAwait(false);

                viewProperties.Context = domainReference;
                pageList             = new PaginatedList <Domain.Models.Submission>(results, options.Page, options.Count, -1);
                pageList.RouteName   = routeName;
                viewProperties.Items = pageList;

                var navModel = new NavigationViewModel()
                {
                    Description = "Subverse",
                    Name        = subverse,
                    MenuType    = MenuType.Subverse,
                    BasePath    = "/v/" + subverse,
                    Sort        = null
                };

                //Backwards compat with Views
                if (subverse == AGGREGATE_SUBVERSE.FRONT || subverse == AGGREGATE_SUBVERSE.DEFAULT)
                {
                    navModel.BasePath = "";
                    navModel.Name     = "";
                    //ViewBag.SelectedSubverse = "frontpage";
                    viewProperties.Context.Name = "";
                    pageList.RouteName          = Models.ROUTE_NAMES.FRONT_INDEX;
                }
                else if (subverse == AGGREGATE_SUBVERSE.ALL || subverse == AGGREGATE_SUBVERSE.ANY)
                {
                    navModel.BasePath           = "/v/all";
                    navModel.Name               = "All";
                    ViewBag.SelectedSubverse    = "all";
                    viewProperties.Context.Name = "all";
                }
                else
                {
                    ViewBag.SelectedSubverse = subverse;
                }
                ViewBag.SortingMode = sort;

                ViewBag.NavigationViewModel = navModel;
                var viewPath = ViewPath(domainReference);

                return(View(viewPath, viewProperties));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 3
0
        public async Task <ActionResult> Blocked(Domain.Models.DomainType blockType, int?page)
        {
            switch (blockType)
            {
            case Domain.Models.DomainType.User:
                var q      = new QueryUserBlocks().SetUserContext(User);
                var blocks = await q.ExecuteAsync();

                var userBlocks = blocks.Where(x => x.Type == Domain.Models.DomainType.User).OrderBy(x => x.Name);

                var originalUserName = User.Identity.Name;
                ViewBag.NavigationViewModel = new NavigationViewModel()
                {
                    MenuType    = MenuType.UserProfile,
                    Name        = originalUserName,
                    BasePath    = "/user/" + originalUserName,
                    Description = originalUserName + "'s Blocked Users",
                };

                return(View("BlockedUsers", userBlocks));

                break;

            case Domain.Models.DomainType.Subverse:
            default:

                var domainReference = new Domain.Models.DomainReference(Domain.Models.DomainType.Set, Domain.Models.SetType.Blocked.ToString(), User.Identity.Name);
                return(RedirectToAction("Details", "Set", new { name = domainReference.FullName }));

                ////Original Code below, leaving as is bc it works
                //ViewBag.SelectedSubverse = "subverses";
                //ViewBag.SubversesView = "blocked";
                //const int pageSize = 25;
                //int pageNumber = (page ?? 0);

                //if (pageNumber < 0)
                //{
                //    return ErrorView(ErrorViewModel.GetErrorViewModel(ErrorType.NotFound));
                //}
                //string userName = User.Identity.Name;
                //// get a list of user blocked subverses with details and order by subverse name, ascending
                //IQueryable<SubverseDetailsViewModel> blockedSubverses = from c in _db.Subverses
                //                                                        join a in _db.UserBlockedSubverses
                //                                                        on c.Name equals a.Subverse
                //                                                        where a.UserName.Equals(userName)
                //                                                        orderby a.Subverse ascending
                //                                                        select new SubverseDetailsViewModel
                //                                                        {
                //                                                            Name = c.Name,
                //                                                            Title = c.Title,
                //                                                            Description = c.Description,
                //                                                            CreationDate = c.CreationDate,
                //                                                            Subscribers = c.SubscriberCount
                //                                                        };

                //var paginatedBlockedSubverses = new PaginatedList<SubverseDetailsViewModel>(blockedSubverses, page ?? 0, pageSize);

                //return View("BlockedSubverses", paginatedBlockedSubverses);

                break;
            }
        }