public ActionResult CreateBook(BookAuthorClassification bookAuthorClassification, string[] authorChecklist, int?classificationRadio)
        {
            AuthorizeAndRedirect();
            Tuple <Book, BookValidation> bookTuple = _Manager.CreateBook(bookAuthorClassification, authorChecklist, classificationRadio);

            if (bookTuple.Item2.IsValid)
            {
                ModelState.Clear();
                return(RedirectToAction("ListBookDetails", "Book", new { id = bookTuple.Item1.ISBN }));
            }
            ValidationMessages.ConvertCodeToMsg(ModelState, bookTuple.Item2.ErrorDict);
            return(RedirectToAction("CreateBook", "BookAuthorClassification"));
        }
        public ActionResult CreateAuthor(Author author)
        {
            AuthorizeAndRedirect();
            Tuple <Author, AuthorValidation> authorTuple = _Manager.CreateAuthor(author);

            if (authorTuple.Item1 != null)
            {
                ModelState.Clear();
                return(RedirectToAction("ListAuthorDetails", "Author", new { id = Convert.ToInt32(authorTuple.Item1.Aid) }));
            }
            ValidationMessages.ConvertCodeToMsg(ModelState, authorTuple.Item2.ErrorDict);
            return(RedirectToAction("CreateAuthor", "Author"));
        }
        public ActionResult CreateAdmin(Admin admin)
        {
            AuthorizeAndRedirect(Rank.SuperAdmin);
            AdminValidation valid = _Manager.SignUp(admin);

            if (valid.IsValid)
            {
                ViewData.ModelState.Clear();
                return(RedirectToAction("AdminPanel", "Admin"));
            }
            ValidationMessages.ConvertCodeToMsg(ModelState, valid.ErrorDict);
            return(RedirectToAction("CreateAdmin", "Admin", null));
        }
        public ActionResult EditAdminPost(Admin admin)
        {
            if (!(admin.Username == Session["authentication"].ToString())) //Allow the user to change their own password even if not admin or higher
            {
                AuthorizeAndRedirect(Rank.Admin);
            }
            Admin oldAdmin = _Manager.GetAdmin(admin.Username);

            if ((Rank)Session["Level"] < Rank.SuperAdmin) //Don't allow changing of admin level or classification access if admin who edited is not superadmin
            {
                admin.PermissionLevel        = oldAdmin.PermissionLevel;
                admin.CanEditClassifications = oldAdmin.CanEditClassifications;
            }
            if (admin.Password == null)
            {
                admin.PasswordHash = oldAdmin.PasswordHash;
                admin.Salt         = oldAdmin.Salt;
                AdminValidation validation = _Manager.EditAdmin(admin, true);
                if (validation.IsValid)
                {
                    ViewData.ModelState.Clear();
                    return(RedirectToAction("AdminPanel", "Admin", null));
                }
                ValidationMessages.ConvertCodeToMsg(ModelState, validation.ErrorDict);
            }
            else
            {
                Hashing hashing = new Hashing(admin.Password);
                admin.PasswordHash = hashing.Hash;
                admin.Salt         = hashing.Salt;
                AdminValidation validation = _Manager.EditAdmin(admin);
                if (validation.IsValid)
                {
                    ViewData.ModelState.Clear();
                    return(RedirectToAction("AdminPanel", "Admin", null));
                }
                ValidationMessages.ConvertCodeToMsg(ModelState, validation.ErrorDict);
            }
            return(RedirectToAction("EditAdmin", new { id = admin.Username }));
        }
        public ActionResult Login(Admin admin, string returnBackTo = null)
        {
            Tuple <Admin, AdminValidation> validation = _Manager.Login(admin);

            if (validation.Item2.IsValid)
            {
                ViewData.ModelState.Clear();
                Session["authentication"]       = admin.Username;
                Session["level"]                = _Manager.GetPermissionLevel(admin.Username);
                Session["classificationEditor"] = validation.Item1.CanEditClassifications;
                if (String.IsNullOrEmpty(returnBackTo))
                {
                    return(RedirectToAction("index", "Home"));
                }
                return(Redirect(returnBackTo));
            }
            else
            {
                ValidationMessages.ConvertCodeToMsg(ModelState, validation.Item2.ErrorDict);
                return(RedirectToAction("Login", new { returnBackTo }));
            }
        }