/**
  * Function: GetRoleWithID
  * List Menu through Role ID
  * @returns: Roles and list Menus
  * Author: Le Dang Son
  * Date: 06/08/2012
  */
 public Roles GetRoleWithID()
 {
     Roles roles = new Roles();
     using (var db = new FineArtContext())
     {
         roles = (Roles)db.Roles.Include("menu").Where(r => r.ID == this.ID).FirstOrDefault();
     }
     return roles;
 }
        public ActionResult MenusRole(string id)
        {
            int admin = base.Authentication();
            if (admin == 0)
            {
                return Redirect("~/member/logout");
            }
            else if (admin == 1)
            {
                base.LoadMenu();
                try
                {
                    int idd = Convert.ToInt16(id);
                    Roles role = new Roles();
                    role.ID = idd;
                    role = role.GetRoleWithID();
                    List<Menus> listMenu = role.Menu.ToList();
                    listMenu.ForEach(delegate(Menus menu)
                    {
                        if (menu.Controller == "")
                        {
                            menu.Controller = "Index";
                        }
                        if (menu.Action == "")
                        {
                            menu.Action = "Index";
                        }
                        Strings stringsLibs = new Strings();
                        menu.Controller = stringsLibs.Capacital(menu.Controller);
                        menu.Action = stringsLibs.Capacital(menu.Action);
                    });
                    ViewBag.RoleID = idd;
                    ViewBag.Title += " Menus for " + role.Name;
                    ViewBag.listMenu = listMenu;
                }
                catch
                {

                }
                return View();
            }
            else
            {
                Session["errorContorllerAction"] = true;
                return Redirect("~/administrator");
            }
        }
        /**
         * Controller: Roles
         * Action: Index
         * List all roles system
         * Author: Le Dang Son
         * Date: 08/08/2012
         */

        public ActionResult Index()
        {
            int admin = base.Authentication();
            if (admin == 0)
            {
                return Redirect("~/member/logout");
            }
            else if (admin == 1)
            {
                base.LoadMenu();
                Roles rolesModels = new Roles();
                ViewBag.listRole = rolesModels.ListRole();
                ViewBag.Title += " Roles";
                return View();
            }
            else
            {
                Session["errorContorllerAction"] = true;
                return Redirect("~/administrator");
            }
        }
 public void LoadMenu()
 {
     if (Session["admin"] != null)
     {
         Members member = (Members)Session["admin"];
         Roles rolesModels = new Roles();
         rolesModels.ID = member.Role.ID;
         rolesModels = rolesModels.GetRoleWithID();
         ViewBag.Title = rolesModels.Name + " Page:";
         ICollection<Menus> listMenus = rolesModels.Menu.Where(m=>m.Display == true).ToList();
         //var listParentMenu = listMenu.Where(m => m.ParentID == -1);
         //foreach (Menus parentMenu in listParentMenu)
         //{
         //    var listChildMenu = listMenu.Where(m => m.ParentID == parentMenu.ID);
         //    foreach (Menus childMenu in listChildMenu)
         //    {
         //        Response.Write(childMenu.Name);
         //    }
         //}
         ViewBag.listMenuMain = listMenus;
     }
 }
        public ActionResult Add(FormCollection form)
        {
            int admin = base.Authentication();
            if (admin == 0)
            {
                return Redirect("~/member/logout");
            }
            else if (admin == 1)
            {
                base.LoadMenu();
                var db = new FineArtContext();
                ViewBag.listMenu = db.Menus.ToList();
                if (form["submit_role"] != null)
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append("<ul>");
                    Strings stringsLibs = new Strings();
                    if (form["Name"].Trim() == "")
                    {
                        stringBuilder.Append("<li>Please type role name</li>");
                    }
                    if (form["Alias"].Trim() == "" || !Validator.ISAlias(form["Alias"]))
                    {
                        stringBuilder.Append("<li>Please type role alias</li>");
                    }
                    else
                    {
                        try
                        {
                            string alias = form["Alias"].Trim().ToString();
                            var role = db.Roles.Where(c => c.Alias == alias).First();
                            stringBuilder.Append("<li>This role alias had been exists in database, try a different</li>");
                        }
                        catch { }
                    }
                    int[] IDMenus = stringsLibs.ListID(form["Menus"]);
                    ViewBag.IDMenus = IDMenus;
                    ICollection<Menus> listMenus = db.Menus.Where(s => IDMenus.Contains(s.ID)).ToList();
                    if (stringBuilder.ToString() == "<ul>")
                    {
                        Roles roles = new Roles
                        {
                            Name = form["Name"].Trim(),
                            Alias = form["Alias"].Trim(),
                            Description = form["Description"].Trim(),
                            Menu = listMenus
                        };
                        db.Roles.Add(roles);
                        db.SaveChanges();
                        ViewBag.success = "Add role success!";
                    }
                    else
                    {
                        stringBuilder.Append("</ul>");
                        ViewBag.error = stringBuilder.ToString();
                        ViewBag.dataForm = form;
                    }
                }

                return View();
            }
            else
            {
                Session["errorContorllerAction"] = true;
                return Redirect("~/administrator");
            }
        }