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));
        }
예제 #2
0
        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));
        }
예제 #3
0
        // 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));
        }