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