/// <summary> /// Сохраняет настройки из объекта настроек <paramref name="configuration"/> и немедленно применяет их к модулю. /// </summary> /// <returns>Возвращает кортеж из двух значений - результат сохранения и идентификатор записи журнала в случае ошибки.</returns> /// <seealso cref="Journaling.JournalingManager.GetJournalData(int)"/> public (ApplyConfigurationResult, int?) ApplyConfiguration <TConfiguration>(TConfiguration configuration) where TConfiguration : ModuleConfiguration <TModule>, new() { try { var eventArgs = new ConfigurationApplyEventArgs <TModule>(configuration); _module.OnConfigurationApply(eventArgs); if (eventArgs.IsSuccess) { var result = AppCore.GetModulesManager().ApplyModuleConfiguration(configuration, this, _module); if (result == ApplyConfigurationResult.Success) { try { _module.OnConfigurationApplied(); } catch { } } return(result, null); } else { return(ApplyConfigurationResult.Failed, eventArgs.IdJournalData); } } catch (Exception ex) { return(ApplyConfigurationResult.Failed, _module.RegisterEvent(Journaling.EventType.Error, "Ошибка сохранения настроек", null, ex).Result); } }
public virtual ActionResult MainSettings() { var handler = AppCore.Get <ModuleControllerTypesManager>(); var model = new Model.AdminMainModelInfoPage(AppCore.AppConfig, AppCore.WebConfig) { ModulesList = (from p in AppCore.GetModulesManager().GetModules() where handler.GetModuleControllerTypes(p.QueryType) != null orderby p.Caption select new SelectListItem() { Value = p.ID.ToString(), Text = p.Caption, Selected = AppCore.WebConfig.IdModuleDefault == p.ID }).ToList() }; using (var db = Module.CreateUnitOfWork()) { model.Roles = (from p in db.Role orderby p.NameRole ascending select p).ToList(); model.Roles.Insert(0, new Role() { IdRole = 0, NameRole = "Не выбрано" }); } return(View("CoreSettings.tpl", model)); }
private void Execute() { try { var sitemapProviderTypes = AppCore.GetQueryTypes().Where(x => typeof(ISitemapProvider).IsAssignableFrom(x)).ToList(); var providerList = sitemapProviderTypes.Select(x => { try { return(AppCore.Create <ISitemapProvider>(x)); } catch { return(null); } }).Where(x => x != null).ToList(); var linksAll = providerList.SelectMany(x => x.GetItems() ?? new List <SitemapItem>()).ToList(); var module = AppCore.GetModulesManager().GetModule <ModuleSitemap>(); var code = WebUtils.RazorRenderHelper.RenderView(module, "SitemapXml.cshtml", linksAll); var path = System.IO.Path.Combine(OnUtils.LibraryEnumeratorFactory.LibraryDirectory, "data/sitemap.xml"); System.IO.File.WriteAllText(path, code); } catch (Exception ex) { this.RegisterEvent(Journaling.EventType.CriticalError, "Ошибка построения карты сайта", null, ex); } }
public virtual ActionResult Routing() { var model = new Model.Routing() { Modules = AppCore.GetModulesManager().GetModules().OfType <IModuleCore>().OrderBy(x => x.Caption).ToList() }; using (var db = new Modules.Routing.Db.DataContext()) { //test group var modulesIdList = model.Modules.Select(x => x.IdModule).ToArray(); var query = db.Routing .Where(x => modulesIdList.Contains(x.IdModule)) .GroupBy(x => new { x.IdModule, x.IdRoutingType }) .Select(x => new { x.Key.IdModule, x.Key.IdRoutingType, Count = x.Count() }) .GroupBy(x => x.IdRoutingType) .ToDictionary(x => x.Key, x => x.ToDictionary(y => y.IdModule, y => y.Count)) ; var query2 = (new RoutingType[] { RoutingType.Main, RoutingType.Additional, RoutingType.Old }) .ToDictionary(x => x, x => model.Modules.ToDictionary(y => y.IdModule, y => query.ContainsKey(x) && query[x].ContainsKey(y.IdModule) ? query[x][y.IdModule] : 0)); model.RoutesMain = query2[RoutingType.Main]; model.RoutesAdditional = query2[RoutingType.Additional]; model.RoutesOld = query2[RoutingType.Old]; } return(View("routing.cshtml", model)); }
/// <summary> /// Устанавливает в качестве системного языковой пакет <paramref name="language"/>. /// </summary> /// <returns>Возвращает true, если языковой пакет был успешно указан в качестве активного, либо false в случае ошибки.</returns> /// <exception cref="ArgumentNullException">Возникает, если <paramref name="language"/> равен null.</exception> public Types.ConfigurationSaveResult SetSystemLanguage(Language language) { if (language == null) { throw new ArgumentNullException(nameof(language)); } try { var module = AppCore.GetModulesManager().GetModule <CoreModule <WebApplication> >(); var cfg = module.GetConfigurationManipulator().GetEditable <CoreConfiguration <WebApplication> >(); cfg.IdSystemLanguage = language.IdLanguage; switch (module.GetConfigurationManipulator().ApplyConfiguration(cfg).Item1) { case ApplyConfigurationResult.PermissionDenied: return(Types.ConfigurationSaveResult.PermissionsDenied); case ApplyConfigurationResult.Success: return(Types.ConfigurationSaveResult.Success); default: return(Types.ConfigurationSaveResult.UnknownError); } } catch (Exception ex) { this.RegisterEvent(EventType.Error, "Ошибка при сохранении активного системного языкового пакета", null, null, ex); return(Types.ConfigurationSaveResult.UnknownError); } }
public JsonResult SchemeAdd(int?idModule = null, string schemeName = null) { var result = JsonAnswer <uint>(); try { if (!idModule.HasValue) { throw new Exception("Не указан идентификатор модуля."); } var module = AppCore.GetModulesManager().GetModule(idModule.Value) as IModuleCore; if (module == null) { throw new Exception("Модуль не найден."); } if (Request.Form.HasKey(nameof(schemeName))) { schemeName = Request.Form[nameof(schemeName)]; } if (string.IsNullOrEmpty(schemeName)) { result.Message = "Не указано название схемы!"; } else if (!schemeName.isOneStringTextOnly()) { result.Message = "Некорректно указано название схемы!"; } else { using (var db = this.CreateUnitOfWork()) { var data = new CustomFieldsScheme() { IdModule = idModule.Value, NameScheme = schemeName }; db.CustomFieldsSchemes.Add(data); if (db.SaveChanges() > 0) { result.Message = "Схема добавлена."; result.Success = true; result.Data = (uint)data.IdScheme; AppCore.Get <ModuleItemsCustomize <WebApplication> >().UpdateCache(); } else { result.Message = "По неизвестной причине схему не получилось добавить."; } } } } catch (Exception ex) { result.Message = ex.Message; } return(ReturnJson(result)); }
public virtual ActionResult RoutingModule(int IdModule) { if (IdModule <= 0) { throw new Exception("Не указан идентификатор модуля."); } var module = AppCore.GetModulesManager().GetModule(IdModule); if (module == null) { throw new Exception($"Не получилось найти модуль с указанным идентификатором {IdModule}."); } var model = new Model.RoutingModule() { Module = (IModuleCore)module }; var moduleActionAttributeType = typeof(ModuleActionAttribute); var moduleActionGetDisplayName = new Func <ActionDescriptor, string>(action => { var attr = action.GetCustomAttributes(moduleActionAttributeType, true).OfType <ModuleActionAttribute>().FirstOrDefault(); if (attr != null) { if (!string.IsNullOrEmpty(attr.Caption)) { return(attr.Caption); } } return(action.ActionName); }); var modulesActions = AppCore.GetModulesManager().GetModules().OfType <IModuleCore>().Select(x => new { Module = x, UserDescriptor = x.ControllerUser() != null ? new ReflectedControllerDescriptor(x.ControllerUser()) : null, AdminDescriptor = x.ControllerAdmin() != null ? new ReflectedControllerDescriptor(x.ControllerAdmin()) : null, }).Select(x => new { x.Module, UserActions = x.UserDescriptor != null ? x.UserDescriptor.GetCanonicalActions().Where(y => y.IsDefined(moduleActionAttributeType, true)).ToDictionary(y => y.ActionName, y => "Общее: " + moduleActionGetDisplayName(y)) : new Dictionary <string, string>(), AdminActions = x.AdminDescriptor != null ? x.AdminDescriptor.GetCanonicalActions().Where(y => y.IsDefined(moduleActionAttributeType, true)).ToDictionary(y => y.ActionName, y => "Администрирование: " + moduleActionGetDisplayName(y)) : new Dictionary <string, string>(), }).ToDictionary(x => x.Module, x => x.UserActions.Union(x.AdminActions).OrderBy(y => y.Value).ToDictionary(y => y.Key, y => y.Value)); model.ModulesActions = modulesActions. Select(x => new { Group = new SelectListGroup() { Name = x.Key.Caption }, Items = x.Value, Module = x.Key }). SelectMany(x => x.Items.Select(y => new SelectListItem() { Text = y.Value, Value = $"{x.Module.IdModule}_{y.Key}", Group = x.Group })).ToList(); return(View("routing_module.cshtml", model)); }
/// <summary> /// Возвращает объект типа <typeparamref name="TConfiguration"/>, содержащий настройки модуля <typeparamref name="TModule"/>. /// Изменение значений настроек в возвращенном объекте не влияет на непосредственно используемые в работе приложения значения. Для применения измененных значений см. <see cref="ApplyConfiguration{TConfiguration}(TConfiguration)"/>. /// </summary> /// <exception cref="InvalidOperationException">Возникает, если модуль <typeparamref name="TModule"/> не найден.</exception> public TConfiguration GetEditable <TConfiguration>() where TConfiguration : ModuleConfiguration <TModule>, new() { var valuesProviderUsable = AppCore.GetModulesManager().CreateValuesProviderForModule(_module); var configuration = new TConfiguration() { _isReadonly = false, _valuesProvider = valuesProviderUsable }; return(configuration); }
public ActionResult ModulesList() { var model = new Model.Modules() { //Unregistered = (from p in AppCore.GetModulesManager().getModulesCandidates() // orderby p.Key.Info.ModuleCaption // select new Model.ModuleUnregistered(p.Key) { Info = p.Value }).ToList(), Registered = (from p in AppCore.GetModulesManager().GetModules().OfType <IModuleCore>() orderby p.Caption select new Model.Module(p)).ToList() }; return(View("Modules.cshtml", model)); }
/// <summary> /// Возвращает объект типа <typeparamref name="TConfiguration"/>, содержащий параметры модуля <typeparamref name="TModule"/>. /// Возвращенный объект находится в режиме "только для чтения" - изменение параметров невозможно, попытка выполнить set вызовет <see cref="InvalidOperationException"/>. /// Все объекты конфигурации, созданные путем вызова этого метода, манипулируют одним набором значений. /// То есть после изменения конфигурации путем вызова <see cref="ApplyConfiguration{TConfiguration}(TConfiguration)"/> новые значения автоматически доступны во всех ранее созданных в данном методе экземплярах конфигурации. /// </summary> /// <exception cref="InvalidOperationException">Возникает, если модуль <typeparamref name="TModule"/> не найден.</exception> public TConfiguration GetUsable <TConfiguration>() where TConfiguration : ModuleConfiguration <TModule>, new() { if (_valuesProviderUsable == null) { _valuesProviderUsable = AppCore.GetModulesManager().CreateValuesProviderForModule(_module); } var configuration = new TConfiguration() { _isReadonly = true, _valuesProvider = _valuesProviderUsable }; return(configuration); }
public JsonResult FieldDelete(int IdField = 0) { var result = Controller.JsonAnswer(); try { using (var db = this.CreateUnitOfWork()) { var data = db.CustomFieldsFields.Where(x => x.IdField == IdField).Include(x => x.data).FirstOrDefault(); if (data == null) { throw new Exception("Такое поле не найдено в базе данных!"); } if (data.IdModule != this.Module.ID) { var module = AppCore.GetModulesManager().GetModule(data.IdModule); if (module == null) { throw new Exception("Это поле относится к другому модулю."); } else { throw new Exception(string.Format("Это поле относится к модулю '{0}'.", module.Caption)); } } using (var scope = db.CreateScope()) { db.DeleteEntity(data); if (db.SaveChanges <CustomFieldsField>() > 0) { db.CustomFieldsValues.Where(x => x.IdField == data.IdField).Delete(); db.CustomFieldsDatas.Where(x => x.IdField == data.IdField).Delete(); result.Message = "Удаление поля прошло успешно."; result.Success = true; scope.Commit(); } else { throw new Exception("Не получилось удалить поле."); } } } } catch (Exception ex) { result.Message = ex.Message; } return(Controller.ReturnJson(result)); }
public ActionResult FieldEdit(int?idModule = null, int idField = 0) { if (!idModule.HasValue) { throw new Exception("Не указан идентификатор модуля."); } var module = AppCore.GetModulesManager().GetModule(idModule.Value) as IModuleCore; if (module == null) { throw new Exception("Модуль не найден."); } CustomFieldsField data = null; if (idField > 0) { using (var db = this.CreateUnitOfWork()) { data = db.CustomFieldsFields.Where(x => x.IdField == idField).Include(x => x.data).FirstOrDefault(); if (data == null) { throw new Exception("Такое поле не найдено в базе данных!"); } if (data.IdModule != idModule.Value) { var module2 = AppCore.GetModulesManager().GetModule(data.IdModule); if (module2 == null) { throw new Exception("Это поле относится к другому модулю."); } else { throw new Exception(string.Format("Это поле относится к модулю '{0}'.", module2.Caption)); } } } } else { data = new CustomFieldsField() { IdFieldType = 0, IdModule = idModule.Value }; } return(View("FieldEdit.cshtml", new FieldEdit(data))); }
public virtual ActionResult RolesManage() { var model = new Model.AdminRolesManage(); using (var db = this.CreateUnitOfWork()) { var perms = (from p in db.RolePermission group p by p.IdRole into gr select new { gr.Key, gr }) .ToDictionary(x => x.Key, x => x.gr.Select(p => string.Format("{0};{1}", p.IdModule, p.Permission)).ToList()); model.Roles = db.Role .OrderBy(x => x.NameRole) .ToDictionary(x => x.IdRole, x => new Model.AdminRoleEdit(x) { Permissions = perms.ContainsKey(x.IdRole) ? perms[x.IdRole] : new List <string>() }); var mperms = new List <SelectListItem>(); foreach (var module in AppCore.GetModulesManager().GetModules().OrderBy(x => x.Caption)) { var gr = new SelectListGroup() { Name = module.Caption }; if (!(module is Admin.ModuleAdmin)) { mperms.Add(new SelectListItem() { Group = gr, Value = string.Format("{0};{1}", module.ID, ModulesConstants.PermissionManage), Text = "Администрирование: Управление модулем" }); } mperms.AddRange(module.GetPermissions().OrderBy(x => x.Caption).Select(x => new SelectListItem() { Group = gr, Value = string.Format("{0};{1}", module.ID, x.Key), Text = x.Caption })); } model.ModulesPermissions = mperms; } return(View("admin/admin_customer_rolesManage.cshtml", model)); }
/// <summary> /// См. <see cref="CheckPermissions(IModuleCore, RouteValueDictionary)"/>. /// </summary> public override bool CheckPermissions(IModuleCore module, RouteValueDictionary routeValues) { //Проверка доступа к саму панель управления. Нет прав на модуле "Admin". var moduleAdmin = AppCore.GetModulesManager().GetModule <Modules.Admin.ModuleAdmin>(); if (moduleAdmin != null) { if (moduleAdmin.CheckPermission(ModulesConstants.PermissionManage) != CheckPermissionVariant.Allowed) { return(false); } } return(true); }
NestedLinkCollection IMenuProvider.GetModuleAdminMenuLinks() { var moduleAdmin = AppCore.Get <Admin.ModuleAdmin>(); var modules = AppCore. GetModulesManager(). GetModules(). OfType <IModuleCore>(). OrderBy(x => x.Caption). Select(x => new NestedLinkSimple(x.Caption, new Uri($"/{moduleAdmin.UrlName}/mnadmin/{UrlName}/FieldsList/{x.IdModule}", UriKind.Relative))). ToList(); var collection = new NestedLinkCollection(new NestedLinkGroup("В модулях", modules.ToArray())); return(collection); }
public ActionResult EditableMenuEdit(int IdMenu = 0) { using (var db = new Db.DataContext()) { var menu = IdMenu == 0 ? new Db.Menu() : db.Menu.Where(x => x.id == IdMenu).FirstOrDefault(); if (menu == null) { throw new Exception(string.Format("Меню с id={0} не найдено.", IdMenu)); } return(View("EditableMenuEdit.cshtml", new Design.Model.EditableMenu() { Menu = menu, Modules = AppCore.GetModulesManager().GetModules().OfType <IModuleCore>().OrderBy(x => x.Caption).ToList() })); } }
public virtual ActionResult RolesManage() { var model = new Model.AdminRolesManage(); using (var db = new CoreContext()) { var permsQuery = (from p in db.RolePermission select new { p.IdRole, p.IdModule, p.Permission } ).Distinct(); var perms = permsQuery. ToList(). GroupBy(x => x.IdRole). ToDictionary(x => x.Key, x => x.Select(p => string.Format("{0};{1}", p.IdModule, p.Permission)).ToList()); model.Roles = db.Role .OrderBy(x => x.NameRole) .ToDictionary(x => x.IdRole, x => new Model.AdminRoleEdit(x) { Permissions = perms.ContainsKey(x.IdRole) ? perms[x.IdRole] : new List <string>() }); var mperms = new List <SelectListItem>(); foreach (var module in AppCore.GetModulesManager().GetModules().OrderBy(x => x.Caption)) { var gr = new SelectListGroup() { Name = module.Caption }; mperms.AddRange(module.GetPermissions().OrderBy(x => x.Caption).Select(x => new SelectListItem() { Group = gr, Value = string.Format("{0};{1}", module.ID, x.Key), Text = x.Caption })); } model.ModulesPermissions = mperms; } return(View("admin/admin_customer_rolesManage.cshtml", model)); }
/// <summary> /// Возвращает список контейнеров схем, зарегистрированных для текущего модуля. /// </summary> public Dictionary <ItemType, Dictionary <SchemeItem, string> > GetSchemeItemsList(int idModule) { var itemsGroups = new Dictionary <ItemType, Dictionary <SchemeItem, string> >(); var module = AppCore.GetModulesManager().GetModule(idModule) as IModuleCore; if (module == null) { return(null); } foreach (var itemType in module.GetItemTypes()) { var items = new Dictionary <SchemeItem, string>(); var _itemsPre = module.GetItems(itemType.IdItemType); var _items = _itemsPre != null?_itemsPre.GetSimplifiedHierarchy() : new NestedCollectionSimplified(); if (_items != null && _items.Count() > 0) { foreach (var res in _items) { items[new SchemeItem(res.Key.ID, itemType.IdItemType)] = res.Value; } } else { items[new SchemeItem(0, itemType.IdItemType)] = "По-умолчанию"; } if (!items.Any(x => x.Key.IdItem == 0 && x.Key.IdItemType == itemType.IdItemType)) { var items2 = new Dictionary <SchemeItem, string>(); items2[new SchemeItem(0, itemType.IdItemType)] = "По-умолчанию"; items.ForEach(x => items2.Add(x.Key, x.Value)); items = items2; } itemsGroups[itemType] = items; } return(itemsGroups); }
/// <summary> /// См. <see cref="ModuleAdmin.GetAdminMenuList(IUserContext)"/>. /// </summary> public override Dictionary <IModuleCore, NestedLinkCollection> GetAdminMenuList(IUserContext userContext) { var modulesList = AppCore.GetModulesManager().GetModules().OfType <IModuleCore>(); var mods = new Dictionary <IModuleCore, NestedLinkCollection>(); var mods_errors = new Dictionary <IModuleCore, string>(); foreach (var module in modulesList) { if (module.CheckPermission(userContext, ModulesConstants.PermissionManage) != CheckPermissionVariant.Allowed) { mods_errors[module] = "Недостаточно прав"; } else { var links = module.GetAdminMenuItems(); if (links == null) { links = new NestedLinkCollection(); } if (links.Count > 0) { if (module.CheckPermission(userContext, ModulesConstants.PermissionManage) == CheckPermissionVariant.Allowed) { mods[module] = links; } else { mods_errors[module] = "Недостаточно прав"; } } } } var model = new Dictionary <IModuleCore, NestedLinkCollection>(); mods.Where(x => x.Value.Count > 0).OrderBy(x => x.Key.Caption).ForEach(x => model[x.Key] = x.Value); mods_errors.OrderBy(x => x.Key.Caption).ForEach(x => model[x.Key].Add(new NestedLinkSimple(x.Value))); return(model); }
public ActionResult UploadFile(string moduleName = null, string uniqueKey = null) { var result = JsonAnswer <int>(); try { if (!string.IsNullOrEmpty(uniqueKey) && uniqueKey.Length > 255) { throw new ArgumentOutOfRangeException(nameof(uniqueKey), "Длина уникального ключа не может быть больше 255 символов."); } if (string.IsNullOrEmpty(moduleName)) { throw new ArgumentNullException(nameof(moduleName), "Не указан модуль, для которого загружается файл."); } var module = AppCore.GetModulesManager().GetModule(moduleName) ?? (int.TryParse(moduleName, out int idModule) ? AppCore.GetModulesManager().GetModule(idModule) : null); if (module == null) { throw new Exception("Указанный модуль не найден."); } var hpf = HttpContext.Request.Files["file"] as HttpPostedFileBase; if (hpf == null) { throw new ArgumentNullException("Не найден загружаемый файл."); } var rootDirectory = System.Web.Hosting.HostingEnvironment.MapPath("/"); var filePathRelative = Path.Combine("data/filesClosed/", Guid.NewGuid().ToString() + Path.GetExtension(hpf.FileName)); var filePath = Path.Combine(rootDirectory, filePathRelative); Directory.CreateDirectory(Path.GetDirectoryName(filePath)); hpf.SaveAs(filePath); switch (Module.Register(out var file, hpf.FileName, filePathRelative, uniqueKey, DateTime.Now.AddDays(1))) { case RegisterResult.Error: case RegisterResult.NotFound: result.FromFail("Не удалось зарегистрировать переданный файл."); break;
public ActionResult FieldsList(int?idModule = null) { if (!idModule.HasValue) { throw new Exception("Не указан идентификатор модуля."); } var module = AppCore.GetModulesManager().GetModule(idModule.Value) as IModuleCore; if (module == null) { throw new Exception("Модуль не найден."); } AppCore.Get <ModuleItemsCustomize <WebApplication> >().UpdateCache(); var schemes = Module.GetSchemeList(idModule.Value); var schemeItems = Module.GetSchemeItemsList(idModule.Value); var id = idModule.Value; using (var db = this.CreateUnitOfWork()) { var fields = (from p in db.CustomFieldsFields where p.Block == 0 && p.IdModule == id orderby p.name select p).ToDictionary(x => x.IdField, x => x as IField); return(View("SchemesEdit.cshtml", new Fields { IdModule = idModule.Value, FieldsList = fields, SchemeItems = schemeItems, Schemes = schemes, AllowSchemesManage = Module.CheckPermission(ModuleItemsCustomize <WebApplication> .PERM_EXTFIELDS_ALLOWMANAGE) == CheckPermissionResult.Allowed })); } }
public JsonResult EditableMenuLinks(int?idModule = 0) { var success = false; var result = ""; object data = null; try { if (!idModule.HasValue || idModule == 0) { throw new Exception("Не указан модуль, для которого необходимо получить список ссылок."); } var module = (IModuleCore)AppCore.GetModulesManager().GetModule(idModule.Value); if (module == null) { throw new Exception("Не удалось найти указанный модуль."); } var itemsAll = module.GetItemTypes(). SelectMany(x => module.GetItems(x.IdItemType)). OfType <IItemRouted>(). OrderBy(x => x.Caption). ToDictionary(x => x.Url.ToString(), x => x.Caption); data = itemsAll; success = true; } catch (Exception ex) { success = false; result = ex.Message; } return(ReturnJson(success, result, data)); }
public ActionResult FieldEdit(int IdField = 0) { CustomFieldsField data = null; if (IdField > 0) { using (var db = this.CreateUnitOfWork()) { data = db.CustomFieldsFields.Where(x => x.IdField == IdField).Include(x => x.data).FirstOrDefault(); if (data == null) { throw new Exception("Такое поле не найдено в базе данных!"); } if (data.IdModule != this.Module.ID) { var module = AppCore.GetModulesManager().GetModule(data.IdModule); if (module == null) { throw new Exception("Это поле относится к другому модулю."); } else { throw new Exception(string.Format("Это поле относится к модулю '{0}'.", module.Caption)); } } } } else { data = new DB.CustomFieldsField() { IdFieldType = 0, IdModule = this.Module.ID }; } return(Controller.display("ModuleExtensions/CustomFields/Design/FieldEdit.cshtml", new Model.FieldEdit(data))); }
public virtual ActionResult MainSettings() { var handler = AppCore.Get <ModuleControllerTypesManager>(); var model = new ViewModels.MainSettings(AppCore.AppConfig, AppCore.WebConfig); model.Modules = AppCore.GetModulesManager().GetModules(). Where(x => handler.GetModuleControllerTypes(x.QueryType) != null). Select(x => new ViewModels.MainSettingsModule() { Id = x.IdModule, Caption = x.Caption }). ToList(); using (var db = new DataContext()) { model.Roles = db.Role.Where(x => !x.IsHidden || x.IdRole == AppCore.AppConfig.RoleGuest || x.IdRole == AppCore.AppConfig.RoleUser).ToList(); model.Roles.Insert(0, new Role() { IdRole = 0, NameRole = "Не выбрано", IsHidden = false }); } return(View("MainSettings.tpl", model)); }
private void ExecuteInternal() { if (_isExecuting) { return; } try { _isExecuting = true; var sitemapProviderTypes = AppCore.GetQueryTypes().Where(x => typeof(ISitemapProvider).IsAssignableFrom(x)).ToList(); var providerList = sitemapProviderTypes.Select(x => { try { return(AppCore.Create <ISitemapProvider>(x)); } catch { return(null); } }).Where(x => x != null).ToList(); var linksAll = providerList.SelectMany(x => x.GetItems() ?? new List <SitemapItem>()).ToList(); var module = AppCore.GetModulesManager().GetModule <ModuleSitemap>(); var code = WebUtils.RazorRenderHelper.RenderView(module, "SitemapXml.cshtml", linksAll); var path = System.IO.Path.Combine(OnUtils.LibraryEnumeratorFactory.LibraryDirectory, "sitemap.xml"); System.IO.File.WriteAllText(path, code); } finally { _isExecuting = false; } }
public virtual JsonResult MainSettingsSave(Model.MainSettingsSave model) { var result = JsonAnswer(); CoreConfiguration cfgAppOld = null; WebCoreConfiguration cfgWebOld = null; try { if (ModelState.IsValid) { cfgAppOld = AppCore.AppCoreModule.GetConfigurationManipulator().GetEditable <CoreConfiguration>(); cfgWebOld = AppCore.GetModulesManager().GetModule <WebCoreModule>().GetConfigurationManipulator().GetEditable <WebCoreConfiguration>(); var cfgApp = AppCore.GetModulesManager().GetModule <CoreModule>().GetConfigurationManipulator().GetEditable <CoreConfiguration>(); cfgApp.RoleGuest = model.AppCoreConfiguration.RoleGuest; cfgApp.RoleUser = model.AppCoreConfiguration.RoleUser; cfgApp.ApplicationTimezoneId = model.AppCoreConfiguration.ApplicationTimezoneId; var applyResult = AppCore.GetModulesManager().GetModule <CoreModule>().GetConfigurationManipulator().ApplyConfiguration(cfgApp); switch (applyResult.Item1) { case ApplyConfigurationResult.PermissionDenied: result.Message = "Недостаточно прав для сохранения конфигурации системы."; result.Success = false; break; case ApplyConfigurationResult.Failed: var journalData = AppCore.Get <JournalingManager>().GetJournalData(applyResult.Item2.Value); result.Message = $"Возникла ошибка при сохранении настроек: {(journalData.Message ?? "текст ошибки не найден")}."; result.Success = false; break; case ApplyConfigurationResult.Success: System.Web.Routing.RouteTable.Routes.Where(x => x is RouteWithDefaults).Select(x => x as RouteWithDefaults).ForEach(x => x.UpdateDefaults()); result.Message = "Сохранено успешно!"; result.Success = true; break; } if (result.Success) { var cfg = AppCore.GetModulesManager().GetModule <WebCoreModule>().GetConfigurationManipulator().GetEditable <WebCoreConfiguration>(); cfg.IdModuleDefault = model.WebCoreConfiguration.IdModuleDefault; cfg.DeveloperEmail = model.WebCoreConfiguration.DeveloperEmail; cfg.SiteFullName = model.WebCoreConfiguration.SiteFullName; cfg.CriticalMessagesEmail = model.WebCoreConfiguration.CriticalMessagesEmail; cfg.register_mode = model.WebCoreConfiguration.register_mode; cfg.site_reginfo = model.WebCoreConfiguration.site_reginfo; cfg.site_loginfo = model.WebCoreConfiguration.site_loginfo; cfg.help_info = model.WebCoreConfiguration.help_info; cfg.site_descr = model.WebCoreConfiguration.site_descr; cfg.site_keys = model.WebCoreConfiguration.site_keys; cfg.userAuthorizeAllowed = model.WebCoreConfiguration.userAuthorizeAllowed; applyResult = AppCore.GetModulesManager().GetModule <WebCoreModule>().GetConfigurationManipulator().ApplyConfiguration(cfg); switch (applyResult.Item1) { case ApplyConfigurationResult.PermissionDenied: result.Message = "Недостаточно прав для сохранения конфигурации системы."; result.Success = false; break; case ApplyConfigurationResult.Failed: var journalData = AppCore.Get <JournalingManager>().GetJournalData(applyResult.Item2.Value); result.Message = $"Возникла ошибка при сохранении настроек: {(journalData.Message ?? "текст ошибки не найден")}."; result.Success = false; break; case ApplyConfigurationResult.Success: System.Web.Routing.RouteTable.Routes.Where(x => x is RouteWithDefaults).Select(x => x as RouteWithDefaults).ForEach(x => x.UpdateDefaults()); result.Message = "Сохранено успешно!"; result.Success = true; break; } } } } catch (Exception ex) { result.Success = false; result.Message = ex.Message; } try { if (!result.Success) { if (cfgAppOld != null) { AppCore.GetModulesManager().GetModule <CoreModule>().GetConfigurationManipulator().ApplyConfiguration(cfgAppOld); } if (cfgWebOld != null) { AppCore.GetModulesManager().GetModule <WebCoreModule>().GetConfigurationManipulator().ApplyConfiguration(cfgWebOld); } } } catch { } return(this.ReturnJson(result)); }
public JsonResult ContainerItemSave(int?idModule = null, int idSchemeItem = 0, int idSchemeItemType = 0, Dictionary <string, int[]> model = null) { var result = JsonAnswer(); try { if (!idModule.HasValue) { throw new Exception("Не указан идентификатор модуля."); } var module = AppCore.GetModulesManager().GetModule(idModule.Value) as IModuleCore; if (module == null) { throw new Exception("Модуль не найден."); } var schemeItem = new SchemeItem(idSchemeItem, idSchemeItemType); using (var db = Module.CreateUnitOfWork()) using (var scope = db.CreateScope()) { db.CustomFieldsSchemeDatas.Where(x => x.IdModule == idModule.Value && x.IdSchemeItem == schemeItem.IdItem && x.IdItemType == schemeItem.IdItemType).Delete(); int k = 0; var modelPrepared = model != null?model.Where(x => int.TryParse(x.Key, out k)).ToDictionary(x => uint.Parse(x.Key), x => new List <int>(x.Value)) : null; if (modelPrepared != null) { if (!modelPrepared.ContainsKey(0)) { modelPrepared[0] = new List <int>(); } foreach (var key in modelPrepared.Keys.ToList()) { if (key == 0) { continue; } var list = modelPrepared[key].Where(x => modelPrepared[0].Contains(x)).ToList(); modelPrepared[key] = list; } foreach (var pair in modelPrepared) { int i = 0; foreach (var field in pair.Value) { db.CustomFieldsSchemeDatas.Add(new CustomFieldsSchemeData() { IdModule = idModule.Value, IdScheme = (int)pair.Key, IdField = field, IdSchemeItem = schemeItem.IdItem, IdItemType = schemeItem.IdItemType, Order = i++ }); } } db.SaveChanges(); } scope.Commit(); result.Message = "Сохранение расположения полей прошло успешно."; result.Success = true; } AppCore.Get <ModuleItemsCustomize <WebApplication> >().UpdateCache(); } catch (Exception ex) { result.Message = ex.Message; } return(ReturnJson(result)); }
public ActionResult ContainerItem(int?idModule = null, int idSchemeItem = 0, int idSchemeItemType = 0) { if (!idModule.HasValue) { throw new Exception("Не указан идентификатор модуля."); } var module = AppCore.GetModulesManager().GetModule(idModule.Value) as IModuleCore; if (module == null) { throw new Exception("Модуль не найден."); } var schemeItem = new SchemeItem(idSchemeItem, idSchemeItemType); using (var db = this.CreateUnitOfWork()) { var fields = db.CustomFieldsFields.Where(x => x.IdModule == idModule.Value && x.Block == 0).ToDictionary(x => x.IdField, x => x); var schemes = db.CustomFieldsSchemes. Where(x => x.IdModule == idModule.Value && x.IdScheme > 0). OrderBy(x => x.NameScheme). ToDictionary(x => (uint)x.IdScheme, x => new SchemeContainerItem.Scheme() { Name = x.NameScheme, Fields = new Dictionary <int, IField>() }); schemes[0] = new SchemeContainerItem.Scheme() { Name = "По-умолчанию", Fields = new Dictionary <int, IField>() }; var sql = (from datas in db.CustomFieldsSchemeDatas where datas.IdModule == idModule.Value && datas.IdItemType == schemeItem.IdItemType && datas.IdSchemeItem == schemeItem.IdItem group new { datas.IdField, datas.Order } by datas.IdScheme into gr select new { IdScheme = gr.Key, Fields = gr.OrderBy(x => x.Order).Select(x => x.IdField).ToList() }); var fieldsWithSchemes = sql. ToList(). ToDictionary(x => (uint)x.IdScheme, x => x.Fields.GroupBy(IdField => IdField). Select(group => fields.GetValueOrDefault(group.Key)). Where(field => field != null). ToDictionary(field => field.IdField, field => field as IField) ); var model = new SchemeContainerItem() { IdModule = idModule.Value, SchemeItem = schemeItem }; if (fieldsWithSchemes.ContainsKey(0)) { schemes[0].Fields = fieldsWithSchemes[0]; } foreach (var p in schemes) { model.Schemes[p.Key] = p.Value; if (fieldsWithSchemes.ContainsKey(p.Key)) { p.Value.Fields = fieldsWithSchemes[p.Key]; } int i = 0; p.Value.Fields = p.Value.Fields.Where(x => schemes[0].Fields.ContainsKey(x.Key)).ToDictionary(x => i++, x => x.Value); } return(View("Item.cshtml", model)); } }
public IController CreateController(RequestContext requestContext, string moduleName) { requestContext.HttpContext.Items["TimeController"] = DateTime.Now; var isAjax = false; // Проверка на авторизацию. Ловим случаи, когда авторизация не сработала в HttpApplication. var context = AppCore.GetUserContextManager().GetCurrentUserContext(); if (context.IsGuest) { var sessionBinder = AppCore.Get <SessionBinder>(); context = sessionBinder.RestoreUserContextFromRequest(); if (context != null && !context.IsGuest) { AppCore.Get <OnWeb.Modules.Auth.ModuleAuth>()?.RegisterEvent(EventType.CriticalError, "Нарушение процесса авторизации", null); AppCore.GetUserContextManager().SetCurrentUserContext(context); } } IModuleCore module = null; try { /* * Определение языка и темы */ { var lang = string.Format("{0}", requestContext.RouteData.Values["language"]); using (var db = this.CreateUnitOfWork()) { var query = from Language in db.Language where Language.IsDefault != 0 || Language.ShortAlias == lang orderby(Language.ShortAlias == lang? 1 : 0) descending select Language; var data = query.ToList(); //var sql = DB.DataContext.ExecuteQuery<DB.Language>(@" // SELECT TOP(1) * // FROM Language // WHERE IsDefault <> 0 OR ShortAlias = '" + DataManager.prepare(lang) + @"' // ORDER BY CASE WHEN ShortAlias = '" + DataManager.prepare(lang) + @"' THEN 1 ELSE 0 END DESC //"); if (data.Count > 0) { var res = data.First(); requestContext.RouteData.Values["language"] = res.ShortAlias; } } } /* * Ищем модуль, к которому обращаются запросом. * */ if (int.TryParse(moduleName, out int moduleId) && moduleId.ToString() == moduleName) { module = (IModuleCore)AppCore.GetModulesManager().GetModule(moduleId); } else if (Guid.TryParse(moduleName, out Guid uniqueName) && uniqueName.ToString() == moduleName) { module = (IModuleCore)AppCore.GetModulesManager().GetModule(uniqueName); } else { module = (IModuleCore)AppCore.GetModulesManager().GetModule(moduleName); } if (module == null) { throw new ErrorCodeException(HttpStatusCode.NotFound, $"Адрес '{moduleName}' не найден."); } /* * Ищем контроллер, который относится к модулю. * */ var controllerType = ControllerTypeFactory.RoutingPrepareURL(requestContext.HttpContext.Request, UriExtensions.MakeRelativeFromUrl(requestContext.HttpContext.Request.Url.PathAndQuery)); if (requestContext.RouteData.Route is Route) { /* * Анализируем адрес и устанавливаем признак, если это вызов в панель управления. Пришлось пойти на такой хак. * */ var route = requestContext.RouteData.Route as Route; if (route.Url.StartsWith("admin/madmin")) { isAjax = true; } if (isAjax) { HttpContext.Current.Items["isAjax"] = true; } } var controller = CreateController(controllerType, module, requestContext.RouteData.Values); HttpContext.Current.Items["RequestContextController"] = controller; return(controller); } catch (Exception ex) { try { if (module == null) { var moduleTmp = new ModuleInternalErrors(); ((IComponentStartable)moduleTmp).Start(AppCore); module = moduleTmp; } var type = typeof(ModuleControllerInternalErrors <>).MakeGenericType(module.GetType()); var controller = CreateController(module, type, requestContext.RouteData.Values); (controller as IModuleControllerInternalErrors).SetException(ex); // todo (controller as Modules.ModuleController).IsAdminController = isErrorAdmin; HttpContext.Current.Items["RequestContextController"] = controller; return(controller); } catch (Exception ex2) { Debug.WriteLine("Throw: {0}", ex2.ToString()); throw ex; } } }
public JsonResult FieldSave(Model.FieldEdit model = null) { var result = Controller.JsonAnswer(); try { using (var db = this.CreateUnitOfWork()) { CustomFieldsField data = null; if (model.IdField > 0) { data = db.CustomFieldsFields.Where(x => x.IdField == model.IdField).Include(x => x.data).FirstOrDefault(); if (data == null) { throw new Exception("Такое поле не найдено в базе данных!"); } if (data.IdModule != this.Module.ID) { var module = AppCore.GetModulesManager().GetModule(data.IdModule); if (module == null) { throw new Exception("Это поле относится к другому модулю."); } else { throw new Exception(string.Format("Это поле относится к модулю '{0}'.", module.Caption)); } } } else { data = new DB.CustomFieldsField() { IdFieldType = 0, IdModule = this.Module.ID }; db.CustomFieldsFields.Add(data); } if (ModelState.ContainsKeyCorrect(nameof(model.name))) { data.name = model.name; } if (ModelState.ContainsKeyCorrect(nameof(model.nameAlt))) { data.nameAlt = model.nameAlt; } if (ModelState.ContainsKeyCorrect(nameof(model.alias))) { data.alias = model.alias; } if (ModelState.ContainsKeyCorrect(nameof(model.formatCheck))) { data.formatCheck = model.formatCheck; } if (ModelState.ContainsKeyCorrect(nameof(model.IdFieldType))) { data.IdFieldType = model.IdFieldType; } if (ModelState.ContainsKeyCorrect(nameof(model.IsValueRequired))) { data.IsValueRequired = model.IsValueRequired; } if (ModelState.ContainsKeyCorrect(nameof(model.IdValueType))) { data.IdValueType = model.IdValueType; } if (ModelState.ContainsKeyCorrect(nameof(model.size))) { data.size = model.size; } if (ModelState.ContainsKeyCorrect(nameof(model.nameEnding))) { data.nameEnding = model.nameEnding; } using (var scope = db.CreateScope()) { var entry = db.GetState(data); if (entry == ItemState.Detached) { throw new Exception("Невозможно найти поле для сохранения."); } else if (entry.In(ItemState.Modified, ItemState.Added)) { data.DateChange = DateTime.Now.Timestamp(); data.Block = 0; if (db.SaveChanges <CustomFieldsField>() == 0) { throw new Exception("Сохранение поля провалилось!"); } } if (Request.Form.HasKey("values")) { var t = DateTime.Now.Timestamp(); var vals = Request.Form.TryGetValue <CustomFieldsValue[]>("values"); if (vals != null) { foreach (var d in vals) { d.IdField = data.IdField; //d.Field = data; d.DateChange = t; } db.CustomFieldsValues.AddOrUpdate(vals); } else { vals = new CustomFieldsValue[0]; } var values = vals.ToList(); if (values.Count > 0) { if (db.SaveChanges <CustomFieldsValue>() == 0) { throw new Exception("Не удалось сохранить варианты значений поля"); } } data.data = data.FieldType.CreateValuesCollection(data, values); var keys = values.Select(x => x.IdFieldValue); var removeExistsValue = new Dictionary <int, string>(); var removeExistsObjects = new Dictionary <int, List <int> >(); var sql = (from p in db.CustomFieldsValues join d in db.CustomFieldsDatas on p.IdFieldValue equals d.IdFieldValue where p.IdField == data.IdField && !keys.Contains(p.IdFieldValue) select new { p, d }); foreach (var res in sql) { removeExistsValue[res.p.IdFieldValue] = res.p.FieldValue; if (!removeExistsObjects.ContainsKey(res.p.IdFieldValue)) { removeExistsObjects[res.p.IdFieldValue] = new List <int>(); } if (!removeExistsObjects[res.p.IdFieldValue].Contains(res.d.IdItem)) { removeExistsObjects[res.p.IdFieldValue].Add(res.d.IdItem); } } if (removeExistsValue.Count > 0) { var removeTexts = new Dictionary <int, string>(); foreach (var pair in removeExistsValue) { removeTexts[pair.Key] = " - №" + pair.Key + " \"" + pair.Value + "\" у объектов №" + string.Join(", №", removeExistsObjects[pair.Key]); } throw new Exception("Некоторые значения, которые вы пытаетесь удалить, указаны у следующих объектов:\r\n" + string.Join(", \r\n", removeTexts.Values)); } //todo подозрение, что неправильный запрос, может очистить всю таблицу. //DB.CustomFieldsValues.Where(x => !keys.Contains(x.IdFieldValue)).Delete(); } result.Message = "Сохранение поля прошло успешно!"; result.Success = true; result.Data = data; scope.Commit(); } result.Success = true; } } catch (OnUtils.Data.Validation.EntityValidationException ex) { result.Message = ex.CreateComplexMessage(); } catch (Exception ex) { result.Message = ex.Message; } return(Controller.ReturnJson(result)); }