Exemplo n.º 1
0
        //[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());
            }
        }
Exemplo n.º 2
0
        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));
            }
        }