public ActionResult AddLinkFlair(SubverseFlairInput subverseFlairSetting)
        {
            if (!ModelState.IsValid)
            {
                return(View("~/Views/Subverses/Admin/Flair/AddLinkFlair.cshtml", subverseFlairSetting));
            }

            //check perms
            if (!ModeratorPermission.HasPermission(User, subverseFlairSetting.Subverse, Domain.Models.ModeratorAction.ModifyFlair))
            {
                return(RedirectToAction("Index", "Home"));
            }

            // get model for selected subverse
            var subverse = DataCache.Subverse.Retrieve(subverseFlairSetting.Subverse);

            if (subverse == null)
            {
                return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.SubverseNotFound)));
            }
            var count = _db.SubverseFlair.Count(x => x.Subverse == subverseFlairSetting.Subverse);

            if (count >= 20)
            {
                ViewBag.SubverseModel    = subverse;
                ViewBag.SubverseName     = subverse.Name;
                ViewBag.SelectedSubverse = string.Empty;
                SetNavigationViewModel(subverse.Name);
                ModelState.AddModelError("", "Subverses are limited to 20 flairs");
                return(View("~/Views/Subverses/Admin/Flair/AddLinkFlair.cshtml", subverseFlairSetting));
            }

            subverseFlairSetting.Subverse = subverse.Name;
            _db.SubverseFlair.Add(new SubverseFlair()
            {
                Label    = subverseFlairSetting.Label,
                CssClass = subverseFlairSetting.CssClass,
                Subverse = subverseFlairSetting.Subverse
            });
            _db.SaveChanges();

            //clear cache
            CacheHandler.Instance.Remove(CachingKey.SubverseFlair(subverse.Name));

            return(RedirectToAction("SubverseFlairSettings"));
        }
        public ActionResult ApplyLinkFlair(int?submissionID, int?flairId)
        {
            if (submissionID == null || flairId == null)
            {
                return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.NotFound)));
                //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var submission = _db.Submission.Find(submissionID);

            if (submission == null || submission.IsDeleted)
            {
                return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.NotFound)));
                //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            if (!ModeratorPermission.HasPermission(User, submission.Subverse, Domain.Models.ModeratorAction.AssignFlair))
            {
                return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.Unauthorized)));
                //return new HttpUnauthorizedResult();
            }

            // find flair by id, apply it to submission
            var flairModel = _db.SubverseFlair.Find(flairId);

            if (flairModel == null || flairModel.Subverse != submission.Subverse)
            {
                return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.NotFound)));
            }
            //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

            // apply flair and save submission
            submission.FlairCss   = flairModel.CssClass;
            submission.FlairLabel = flairModel.Label;
            _db.SaveChanges();
            DataCache.Submission.Remove(submissionID.Value);

            return(JsonResult(CommandResponse.FromStatus(Status.Success)));
            //return new HttpStatusCodeResult(HttpStatusCode.OK);
        }