public async Task <ActionResult> RemoveLinkFlair(int id)
        {
            // get link flair for selected subverse
            var linkFlairToRemove = await _db.SubverseFlair.FindAsync(id);

            if (linkFlairToRemove == null)
            {
                return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.NotFound)));
                //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var subverse = DataCache.Subverse.Retrieve(linkFlairToRemove.Subverse);

            if (subverse == null)
            {
                return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.SubverseNotFound)));
                //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            // check if caller has clearance to remove a link flair
            if (!ModeratorPermission.HasPermission(User, subverse.Name, Domain.Models.ModeratorAction.ModifyFlair))
            {
                return(RedirectToAction("Index", "Home"));
            }

            // execute removal
            var subverseFlairSetting = await _db.SubverseFlair.FindAsync(id);

            _db.SubverseFlair.Remove(subverseFlairSetting);
            await _db.SaveChangesAsync();

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

            return(RedirectToAction("SubverseFlairSettings"));
        }
        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"));
        }