示例#1
0
        // GET: /set/setId/page
        // fetch x more items from a set
        public ActionResult SingleSetPage(int setId, int page)
        {
            if (Settings.SetsDisabled)
            {
                return(RedirectToAction("UnAuthorized", "Error"));
            }
            const int pageSize = 2;

            try
            {
                // get list of subverses for the set
                // for each subverse, get top ranked submissions
                var set = _db.UserSets.FirstOrDefault(ds => ds.ID == setId);

                if (set == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
                }

                ViewBag.SelectedSubverse = set.Name;
                var singleSetResultModel = new SingleSetViewModel();
                var submissions          = new List <SetSubmission>();

                foreach (var subverse in set.UserSetLists)
                {
                    // get 5 top ranked submissions for current subverse
                    Subverse currentSubverse = subverse.Subverse1;

                    if (currentSubverse != null)
                    {
                        // skip parameter could be passed here
                        submissions.AddRange(SetsUtility.TopRankedSubmissionsFromASub(currentSubverse.Name, _db.Submissions, set.Name, pageSize, page * pageSize));
                    }
                    singleSetResultModel.Name        = set.Name;
                    singleSetResultModel.Description = set.Description;
                    singleSetResultModel.Id          = set.ID;
                }

                singleSetResultModel.SubmissionsList = new List <SetSubmission>(submissions.OrderByDescending(s => s.Rank).ThenByDescending(s => s.CreationDate));

                if (submissions.Any())
                {
                    ViewBag.Page = page;
                    return(PartialView("~/Views/Sets/_SingleSetPage.cshtml", singleSetResultModel));
                }

                // no more entries found
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#2
0
        // GET: /set/setid
        // show single set frontpage
        public ActionResult SingleSet(int setId, int?page)
        {
            const int pageSize      = 25;
            int       recordsToSkip = (page ?? 0);

            try
            {
                // get list of subverses for the set
                // for each subverse, get top ranked submissions
                var set = _db.Usersets.FirstOrDefault(ds => ds.Set_id == setId);

                if (set == null)
                {
                    return(RedirectToAction("NotFound", "Error"));
                }

                ViewBag.SelectedSubverse = set.Name;
                var singleSetResultModel = new SingleSetViewModel();
                var submissions          = new List <SetSubmission>();

                // if subs in set count is < 1, don't display the page, instead, check if the user owns this set and give them a chance to add subs to the set
                if (set.Usersetdefinitions.Count < 1)
                {
                    // check if the user owns this sub
                    if (User.Identity.IsAuthenticated && User.Identity.Name == set.Created_by)
                    {
                        return(RedirectToAction("EditSet", "Sets", new { setId = set.Set_id }));
                    }
                }

                foreach (var subverse in set.Usersetdefinitions)
                {
                    // get 5 top ranked submissions for current subverse
                    Subverse currentSubverse = subverse.Subvers;

                    if (currentSubverse != null)
                    {
                        // skip parameter could be passed here
                        submissions.AddRange(SetsUtility.TopRankedSubmissionsFromASub(currentSubverse.name, _db.Messages, set.Name, 5, recordsToSkip * pageSize));
                    }
                    singleSetResultModel.Name = set.Name;
                    singleSetResultModel.Id   = set.Set_id;
                }

                singleSetResultModel.SubmissionsList = new List <SetSubmission>(submissions.OrderByDescending(s => s.Rank));

                return(View("~/Views/Sets/Index.cshtml", singleSetResultModel));
            }
            catch (Exception)
            {
                return(RedirectToAction("HeavyLoad", "Error"));
            }
        }
示例#3
0
        // GET: /v2
        public ActionResult IndexV2(int?page)
        {
            ViewBag.SelectedSubverse = "frontpage";
            var submissions = new List <SetSubmission>();

            try
            {
                var frontPageResultModel = new SetFrontpageViewModel();

                // show user sets
                // get names of each set that user is subscribed to
                // for each set name, get list of subverses that define the set
                // for each subverse, get top ranked submissions
                if (User.Identity.IsAuthenticated && Utils.User.SetsSubscriptionCount(User.Identity.Name) > 0)
                {
                    var userSetSubscriptions = _db.Usersetsubscriptions.Where(usd => usd.Username == User.Identity.Name);
                    var blockedSubverses     = _db.UserBlockedSubverses.Where(x => x.Username.Equals(User.Identity.Name)).Select(x => x.SubverseName);

                    foreach (var set in userSetSubscriptions)
                    {
                        Usersetsubscription setId = set;
                        var userSetDefinition     = _db.Usersetdefinitions.Where(st => st.Set_id == setId.Set_id);

                        foreach (var subverse in userSetDefinition)
                        {
                            // get top ranked submissions
                            var submissionsExcludingBlockedSubverses = SetsUtility.TopRankedSubmissionsFromASub(subverse.Subversename, _db.Messages, subverse.Userset.Name, 2, 0)
                                                                       .Where(x => !blockedSubverses.Contains(x.Subverse));
                            submissions.AddRange(submissionsExcludingBlockedSubverses);
                        }
                    }

                    frontPageResultModel.HasSetSubscriptions = true;
                    frontPageResultModel.UserSets            = userSetSubscriptions;
                    frontPageResultModel.SubmissionsList     = new List <SetSubmission>(submissions.OrderByDescending(s => s.Rank));

                    return(View("~/Views/Home/IndexV2.cshtml", frontPageResultModel));
                }

                // show default sets since user is not logged in or has no set subscriptions
                // get names of default sets
                // for each set name, get list of subverses
                // for each subverse, get top ranked submissions
                var defaultSets = _db.Usersets.Where(ds => ds.Default && ds.Usersetdefinitions.Any());
                var defaultFrontPageResultModel = new SetFrontpageViewModel();

                foreach (var set in defaultSets)
                {
                    Userset setId = set;
                    var     defaultSetDefinition = _db.Usersetdefinitions.Where(st => st.Set_id == setId.Set_id);

                    foreach (var subverse in defaultSetDefinition)
                    {
                        // get top ranked submissions
                        submissions.AddRange(SetsUtility.TopRankedSubmissionsFromASub(subverse.Subversename, _db.Messages, set.Name, 2, 0));
                    }
                }

                defaultFrontPageResultModel.DefaultSets         = defaultSets;
                defaultFrontPageResultModel.HasSetSubscriptions = false;
                defaultFrontPageResultModel.SubmissionsList     = new List <SetSubmission>(submissions.OrderByDescending(s => s.Rank));

                return(View("~/Views/Home/IndexV2.cshtml", defaultFrontPageResultModel));
            }
            catch (Exception)
            {
                return(RedirectToAction("HeavyLoad", "Error"));
            }
        }
示例#4
0
        // GET: /set/setid
        // show single set frontpage
        public ActionResult SingleSet(int setId, int?page)
        {
            const int pageSize      = 25;
            int       recordsToSkip = (page ?? 0);

            try
            {
                // get list of subverses for the set
                // for each subverse, get top ranked submissions
                var set = _db.UserSets.FirstOrDefault(ds => ds.ID == setId);

                if (set == null)
                {
                    return(RedirectToAction("NotFound", "Error"));
                }

                ViewBag.SelectedSubverse = set.Name;
                var singleSetResultModel = new SingleSetViewModel();
                var submissions          = new List <SetSubmission>();

                // if subs in set count is < 1, don't display the page, instead, check if the user owns this set and give them a chance to add subs to the set
                if (set.UserSetLists.Count < 1)
                {
                    // check if the user owns this sub
                    if (User.Identity.IsAuthenticated && User.Identity.Name == set.CreatedBy)
                    {
                        return(RedirectToAction("EditSet", "Sets", new { setId = set.ID }));
                    }
                }

                int subsInSet        = set.UserSetLists.Count();
                int submissionsToGet = 5;

                // there is at least 1 sub in the set
                if (subsInSet == 1)
                {
                    submissionsToGet = 25;
                }
                // get only one submission from each sub if set contains 25 or more subverses
                else if (subsInSet >= 25)
                {
                    submissionsToGet = 1;
                }
                // try to aim for 25 submissions
                else
                {
                    submissionsToGet = (int)Math.Ceiling((double)25 / subsInSet);
                }

                foreach (var subverse in set.UserSetLists)
                {
                    // get top ranked submissions for current subverse
                    Subverse currentSubverse = subverse.Subverse1;

                    if (currentSubverse != null)
                    {
                        // skip parameter could be passed here
                        submissions.AddRange(SetsUtility.TopRankedSubmissionsFromASub(currentSubverse.Name, _db.Submissions, set.Name, submissionsToGet, recordsToSkip * pageSize));
                    }
                    singleSetResultModel.Name        = set.Name;
                    singleSetResultModel.Description = set.Description;
                    singleSetResultModel.Id          = set.ID;
                }

                singleSetResultModel.SubmissionsList = new List <SetSubmission>(submissions.OrderByDescending(s => s.Rank));

                return(View("~/Views/Sets/Index.cshtml", singleSetResultModel));
            }
            catch (Exception)
            {
                return(RedirectToAction("HeavyLoad", "Error"));
            }
        }