//[Route("{entityTypeName}/{id:int}/settings/{actionName}/success")] public ActionResult SettingSuccess(string entityTypeName, int id, string actionName) { var s = CoreExtensions.GetEntity(DbContext, entityTypeName, id) as IHasSettings; var a = s?.Settings().WithAccess(User, DbContext).FirstOrDefault(sa => sa.ActualType().Name == CoreExtensions.DashesToCamelcase(actionName)); a.Setup(DbContext, User, Auth); if (s is IProtectedAccess) { if (!(s as IProtectedAccess).AccessibleTo(User, DbContext)) { return(View("Unauthorize")); } } var actions = s.Settings().WithAccess(User, DbContext).ToList(); foreach (var sa in actions) { sa.Setup(DbContext, User, Auth); } actions[actions.FindIndex(sa => sa.ActualType().IsAssignableFrom(a.ActualType()))] = a; var vm = new ViewModel { Entity = s, Description = s.Description(User), Actions = actions, SelectedAction = a, Submitted = true }; return(View("Settings", vm)); }
//[Route("{entityTypeName}/{id:int}/settings/{actionName}"), HttpPost, ValidateInput(false)] public ActionResult UpdateSetting(string entityTypeName, int id, string actionName) { var s = CoreExtensions.GetEntity(DbContext, entityTypeName, id) as IHasSettings; var a = s?.Settings().WithAccess(User, DbContext).FirstOrDefault(sa => sa.ActualType().Name == CoreExtensions.DashesToCamelcase(actionName)); a.Setup(DbContext, User, Auth); foreach (var field in a.Fields) { object value; if (Request.Files.AllKeys.Contains(field.UniqueName)) { value = (object)Request.Files.Get(field.UniqueName); } else if (field.FieldAttribute is RecurringFieldAttribute) { value = HttpUtility.HtmlDecode(Request.Form.GetValues(field.UniqueName)[0]); } else if (typeof(IEnumerable <object>).IsAssignableFrom(field.PropertyType)) { value = Request.Form.GetValues(field.UniqueName); } else { value = (object)Request.Form.Get(field.UniqueName); } field.PropertyInfo.SetValue(a, new ActionMapper(DbContext).Map(a, field, field.PropertyInfo.PropertyType, value)); } a.Validate(); if (a.IsValid) { a.Run(User); DbContext.SaveChanges(); } var actions = s.Settings().WithAccess(User, DbContext).ToList(); foreach (var sa in actions) { sa.Setup(DbContext, User, Auth); } actions[actions.FindIndex(sa => sa.ActualType().IsAssignableFrom(a.ActualType()))] = a; var vm = new ViewModel { Entity = s, Description = s.Description(User), Actions = actions, SelectedAction = a, Submitted = true }; if (a.IsValid) { return(RedirectToAction("SettingSuccess", new { entityTypeName = entityTypeName, id = id, actionName = actionName })); } return(View("Settings", vm)); }
//[Route("{entityTypeName}/{id:int}/settings")] public ActionResult Settings(string entityTypeName, int id) { var s = CoreExtensions.GetEntity(DbContext, entityTypeName, id) as IHasSettings; if (s is IProtectedAccess) { if (!(s as IProtectedAccess).AccessibleTo(User, DbContext)) { return(View("Unauthorize")); } } var actions = s.Settings().WithAccess(User, DbContext).ToList(); foreach (var a in actions) { a.Setup(DbContext, User, Auth); } var vm = new ViewModel { Entity = s, Description = s.Description(User), Actions = actions, SelectedAction = actions?.FirstOrDefault() }; return(View(vm)); }