//[OutputCache(Duration = 600)] public ActionResult StickiedSubmission() { Submission sticky = StickyHelper.GetSticky("announcements"); if (sticky != null) { return(PartialView("~/Views/Subverses/_Stickied.cshtml", sticky)); } else { return(new EmptyResult()); } }
public ActionResult ToggleSticky(int submissionID) { // get model for selected submission var submissionModel = _db.Submissions.Find(submissionID); if (submissionModel == null || submissionModel.IsDeleted) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // check if caller is subverse moderator, if not, deny change if (!ModeratorPermission.HasPermission(User.Identity.Name, submissionModel.Subverse, Domain.Models.ModeratorAction.AssignStickies)) { return(new HttpUnauthorizedResult()); } try { // find and clear current sticky if toggling var existingSticky = _db.StickiedSubmissions.FirstOrDefault(s => s.SubmissionID == submissionID); if (existingSticky != null) { _db.StickiedSubmissions.Remove(existingSticky); } else { // remove all stickies for subverse matching submission subverse _db.StickiedSubmissions.RemoveRange(_db.StickiedSubmissions.Where(s => s.Subverse == submissionModel.Subverse)); // set new submission as sticky var stickyModel = new StickiedSubmission { SubmissionID = submissionID, CreatedBy = User.Identity.Name, CreationDate = Repository.CurrentDate, Subverse = submissionModel.Subverse }; _db.StickiedSubmissions.Add(stickyModel); } _db.SaveChanges(); StickyHelper.ClearStickyCache(submissionModel.Subverse); return(new HttpStatusCodeResult(HttpStatusCode.OK)); } catch (Exception) { return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError)); } }
public async Task <CommandResponse> ToggleSticky(int submissionID, string subverse = null, bool clearExisting = false, int stickyLimit = 3) { DemandAuthentication(); // get model for selected submission var submission = _db.Submission.Find(submissionID); var response = CommandResponse.FromStatus(Status.Error); if (submission == null || submission.IsDeleted) { return(CommandResponse.FromStatus(Status.Error, "Submission is missing or deleted")); } //Eventually we want users to be able to sticky other subs posts, but for now make sure we don't allow this subverse = submission.Subverse; // check if caller is subverse moderator, if not, deny change if (!ModeratorPermission.HasPermission(User, subverse, Domain.Models.ModeratorAction.AssignStickies)) { return(CommandResponse.FromStatus(Status.Denied, "Moderator Permissions are not satisfied")); } int affectedCount = 0; try { // find and clear current sticky if toggling var existingSticky = _db.StickiedSubmission.FirstOrDefault(s => s.SubmissionID == submissionID); if (existingSticky != null) { _db.StickiedSubmission.Remove(existingSticky); affectedCount += -1; } else { if (clearExisting) { // remove all stickies for subverse matching submission subverse _db.StickiedSubmission.RemoveRange(_db.StickiedSubmission.Where(s => s.Subverse == subverse)); affectedCount = 0; } // set new submission as sticky var stickyModel = new Data.Models.StickiedSubmission { SubmissionID = submissionID, CreatedBy = User.Identity.Name, CreationDate = Repository.CurrentDate, Subverse = subverse }; _db.StickiedSubmission.Add(stickyModel); affectedCount += 1; } //limit sticky counts var currentCount = _db.StickiedSubmission.Count(x => x.Subverse == subverse); if ((currentCount + affectedCount) > stickyLimit) { return(CommandResponse.FromStatus(Status.Denied, $"Stickies are limited to {stickyLimit}")); } await _db.SaveChangesAsync(); StickyHelper.ClearStickyCache(submission.Subverse); return(CommandResponse.FromStatus(Status.Success)); } catch (Exception ex) { return(CommandResponse.Error <CommandResponse>(ex)); } }