public ActionResult CreateItem(MenuItemRecordModel itemModel, bool continueEditing, FormCollection form) { if (ModelState.IsValid) { itemModel.ParentItemId = itemModel.ParentItemId ?? 0; var item = MiniMapper.Map <MenuItemRecordModel, MenuItemRecord>(itemModel); item.PermissionNames = string.Join(",", itemModel.PermissionNames ?? new string[0]).NullEmpty(); _menuStorage.InsertMenuItem(item); SaveStoreMappings(item, itemModel.SelectedStoreIds); SaveAclMappings(item, itemModel.SelectedCustomerRoleIds); UpdateLocales(item, itemModel); Services.EventPublisher.Publish(new ModelBoundEvent(itemModel, item, form)); NotifySuccess(T("Admin.Common.DataSuccessfullySaved")); if (continueEditing) { return(RedirectToAction("EditItem", new { id = item.Id })); } return(RedirectToAction("Edit", new { id = item.MenuId })); } PrepareModel(itemModel, null); return(View(itemModel)); }
public ActionResult CreateItem(MenuItemRecordModel itemModel, bool continueEditing, FormCollection form) { if (!Services.Permissions.Authorize(StandardPermissionProvider.ManageMenus)) { return(AccessDeniedView()); } if (ModelState.IsValid) { var item = MiniMapper.Map <MenuItemRecordModel, MenuItemRecord>(itemModel); item.ParentItemId = itemModel.ParentItemId ?? 0; item.PermissionNames = string.Join(",", itemModel.PermissionNames ?? new string[0]).NullEmpty(); _menuStorage.InsertMenuItem(item); UpdateLocales(item, itemModel); Services.EventPublisher.Publish(new ModelBoundEvent(itemModel, item, form)); NotifySuccess(T("Admin.Common.DataSuccessfullySaved")); if (continueEditing) { return(RedirectToAction("EditItem", new { id = item.Id })); } return(RedirectToAction("Edit", new { id = item.MenuId })); } PrepareModel(itemModel, null); return(View(itemModel)); }
// Do not use model binding because of input validation. public ActionResult CreateItem(string providerName, int menuId, int parentItemId) { if (!Services.Permissions.Authorize(StandardPermissionProvider.ManageMenus)) { return(AccessDeniedView()); } var menu = _menuStorage.GetMenuById(menuId); if (menu == null) { return(HttpNotFound()); } var model = new MenuItemRecordModel { ProviderName = providerName, MenuId = menuId, ParentItemId = parentItemId, Published = true }; PrepareModel(model, null); AddLocales(_languageService, model.Locales); return(View(model)); }
private void PrepareModel(MenuItemRecordModel model, MenuItemRecord entity) { Lazy <IMenuItemProvider, MenuItemProviderMetadata> provider = null; var entities = _menuStorage.GetMenuItems(model.MenuId, 0, true).ToDictionary(x => x.Id, x => x); model.Locales = new List <MenuItemRecordLocalizedModel>(); model.AllItems = new List <SelectListItem>(); if (entity != null && ModelState.IsValid) { model.SelectedStoreIds = _storeMappingService.GetStoresIdsWithAccess(entity); model.SelectedCustomerRoleIds = _aclService.GetCustomerRoleIdsWithAccessTo(entity); } if (_menuItemProviders.TryGetValue(model.ProviderName, out provider)) { model.ProviderAppendsMultipleItems = provider.Metadata.AppendsMultipleItems; } // Preset max display order to always insert item at the end. if (entity == null && entities.Any()) { var item = entities .Select(x => x.Value) .Where(x => x.ParentItemId == model.ParentItemId) .OrderByDescending(x => x.DisplayOrder) .FirstOrDefault(); model.DisplayOrder = (item?.DisplayOrder ?? 0) + 1; } // Create list for selecting parent item. var tree = entities.Values.GetTree("EditMenu", _menuItemProviders); tree.Traverse(x => { if (entity != null && entity.Id == x.Value.EntityId) { // Ignore. Element cannot be parent itself. model.TitlePlaceholder = x.Value.Text; } else if (entities.TryGetValue(x.Value.EntityId, out var record) && _menuItemProviders.TryGetValue(record.ProviderName, out provider) && provider.Metadata.AppendsMultipleItems) { // Ignore. Element cannot have child nodes. } else if (!x.Value.IsGroupHeader) { var path = string.Join(" » ", x.Trail.Skip(1).Select(y => y.Value.Text)); model.AllItems.Add(new SelectListItem { Text = path, Value = x.Value.EntityId.ToString(), Selected = entity != null && entity.ParentItemId == x.Value.EntityId }); } }); }
private void UpdateLocales(MenuItemRecord entity, MenuItemRecordModel model) { if (model.Locales != null) { foreach (var localized in model.Locales) { _localizedEntityService.SaveLocalizedValue(entity, x => x.Title, localized.Title, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(entity, x => x.ShortDescription, localized.ShortDescription, localized.LanguageId); } } }
public ActionResult CreateItem(string providerName, int menuId, int parentItemId) { var menu = _menuStorage.GetMenuById(menuId); if (menu == null) { return(HttpNotFound()); } var model = new MenuItemRecordModel { ProviderName = providerName, MenuId = menuId, ParentItemId = parentItemId, Published = true }; PrepareModel(model, null); AddLocales(_languageService, model.Locales); return(View(model)); }