public ActionResult ActionsList(int?contentTypeId, string controllerName) { // модель ActionsListViewModel model = new ActionsListViewModel(); // список контроллеров и их экшенов List <ControllerAction> caList = ControllerActionList.GetList(); // данные типа контента List <ContentType> ct = new List <ContentType>(); ct = contenttype.ContentTypeList(contentTypeId, ""); // прогоняем весь список foreach (var i in caList) { // поиск контроллера в списке if (i.Controller == controllerName) { // экшены List <Permission> actions = new List <Permission>(); // прогоняем все экшены foreach (var j in i.Actions) { // экшен Permission action = new Permission(); action.Name = j; action.Selected = false; // по-умолчанию action.Title = ""; // может быть ситуация, что, к примеру, еще нет ни одного типа контента... // поэтому делаем следующее, если список типов контента не пуст if (ct.Count() != 0) { // если 'contentTypeId' = null, то условие ниже никогда не выполнится, т.к. // в списке 'caList' не будет контроллеров, кот. в 'ct[0].Controller', потому что в // 'caList' только свободные контроллеры // условие ниже только для изменения, а не на создание типа контента // ищем совпадения экшенов по 'ContentType', кот. в 'ct[0]' для того, чтобы // указать 'Selected' в общий список экшенов // данный подход необходим в случае, если в контроллер добавились новые экшены и // мы должны видеть их в списке // если мы возращаемся к предыдущему контроллеру, то восстанавливаем все отмеченные экшены if (controllerName == ct[0].Controller) { foreach (var f in ct[0].Actions) { if (j == f.Name) { action.Selected = f.Selected; action.Title = f.Title; } } } } // добавляем в экшены actions.Add(action); } // добавляем в модель model.Actions = actions; } } return(PartialView(model)); }
public ActionResult Create() { // модель CreateContentTypeViewModel model = new CreateContentTypeViewModel(); // список контроллеров и их экшенов List <ControllerAction> caList = ControllerActionList.GetList(); // данные Всех типов контента List <ContentType> ctAll = new List <ContentType>(); ctAll = contenttype.ContentTypeList(null, ""); // список контроллеров и их экшенов из сборки 'WebSphere.WebUI' foreach (var i in caList.ToList()) { // список контроллеров и их экшенов из БД foreach (var j in ctAll) { // удаляем из 'caList' занятые контроллеры с экшенами if (i.Controller == j.Controller && j.Actions[0].Selected) { caList.Remove(i); } } } // проверка 'caList' есть ли свободные контроллеры // невозможно создать новый тип контента без свободного контроллера if (caList.Count() != 0) { ViewBag.EmptyCaListKey = 1; // список 'caList' не пуст // список групп типов контента List <ContentGroup> contentgrouplist = contenttype.GetContentTypeGroups(null); ViewBag.ContentGroupList = contentgrouplist; // закидываем пересобранный список во 'ViewBag' ViewBag.caList = caList; // сериализуем 'caList' для 'ChangePartial' model.caList = json.Serialize(caList); // экшены List <Permission> actions = new List <Permission>(); // прогоняем все экшены в 'caList[0]', // т.к. по-умолчанию в списке контроллеров именно тот, кот. в [0], то и экшены соответсвующие foreach (var i in caList[0].Actions) { // экшен Permission action = new Permission(); action.Name = i; action.Selected = false; // по-умолчанию // добавляем в экшены actions.Add(action); } // добавляем в модель model.Actions = actions; return(PartialView(model)); } ViewBag.EmptyCaListKey = null; // список 'caList' пуст return(PartialView()); }
public ActionResult Change(string obj) { // модель ChangeContentTypeViewModel model = new ChangeContentTypeViewModel(); // список контроллеров и их экшенов List <ControllerAction> caList = ControllerActionList.GetList(); // данные Всех типов контента List <ContentType> ctAll = new List <ContentType>(); ctAll = contenttype.ContentTypeList(null, ""); // данные типа контента по 'Name' List <ContentType> ct = new List <ContentType>(); ct = contenttype.ContentTypeList(null, obj); // список групп типов контента List <ContentGroup> contentgrouplist = contenttype.GetContentTypeGroups(null); ViewBag.ContentGroupList = contentgrouplist; // наполняем модель model.Id = ct[0].Id; model.Name = ct[0].Name; model.Controller = ct[0].Controller; model.contentGroup = ct[0].contentGroup; // список контроллеров и их экшенов из сборки 'WebSphere.WebUI' foreach (var i in caList.ToList()) { // список контроллеров и их экшенов из БД foreach (var j in ctAll) { // удаляем из 'caList' занятые контроллеры с экшенами, кроме текущего контроллера 'ct[0].Controller' if (i.Controller == j.Controller && i.Controller != ct[0].Controller && j.Actions[0].Selected) { caList.Remove(i); } } } // закидываем пересобранный список во 'ViewBag' ViewBag.caList = caList; // сериализуем 'caList' для 'ChangePartial' model.caList = json.Serialize(caList); // удаляем контроллер из списка экшенов, кот. в 'ct[0]', оставляем только экшены ct[0].Actions.RemoveAt(0); // прогоняем весь список экшенов по текущему контроллеру в 'ct[0]' по 'caList' foreach (var i in caList) { // поиск контроллера в списке if (i.Controller == ct[0].Controller) { // экшены List <Permission> actions = new List <Permission>(); // прогоняем все экшены foreach (var j in i.Actions) { // экшен Permission action = new Permission(); action.Name = j; action.Selected = false; // по-умолчанию action.Title = ""; // ищем совпадения экшенов по 'ContentType', кот. в 'ct[0]' для того, чтобы // указать 'Selected' в общий список экшенов // данный подход необходим в случае, если в контроллер добавились новые экшены и // мы должны видеть их в списке foreach (var f in ct[0].Actions) { if (j == f.Name) { action.Selected = f.Selected; action.Title = f.Title; } } // добавляем в экшены actions.Add(action); } // добавляем в модель model.Actions = actions; } } return(PartialView(model)); }