示例#1
0
        public static IEnumerable <BackendActionStatus> GetStatusesList(string menuCode, int entityId, int parentEntityId, bool?boundToExternal)
        {
            var result = ContextMenuRepository.GetStatusesList(menuCode, entityId);

            result = result.ResolveStatusesForCustomActions(menuCode, entityId, parentEntityId);
            switch (menuCode)
            {
            case EntityTypeCode.ContentGroup:
                result = result.ResolveStatusesForContentGroup(entityId);
                break;

            case EntityTypeCode.SiteFolder:
                result = result.ResolveStatusesForSiteFolder(entityId);
                break;

            case EntityTypeCode.ContentFolder:
                result = result.ResolveStatusesForContentFolder(entityId);
                break;

            case EntityTypeCode.Article:
                result = result.ResolveStatusesForArticle(entityId, boundToExternal);
                break;

            case EntityTypeCode.Field:
                result = result.ResolveStatusesForField(entityId);
                break;

            case EntityTypeCode.ArticleVersion:
                result = result.ResolveStatusesForArticleVersion(entityId, boundToExternal);
                break;
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// Возвращает контекстное меню по его коду
        /// </summary>
        public static ContextMenu GetByCode(string menuCode, bool loadItems = false)
        {
            if (string.IsNullOrWhiteSpace(menuCode))
            {
                return(null);
            }

            return(ContextMenuRepository.GetByCode(menuCode, loadItems));
        }
        /// <summary>
        /// Устанавливает соответствующий статус элементам меню связанным с Custom Action
        /// </summary>
        public static IEnumerable <BackendActionStatus> ResolveStatusesForCustomActions(this IEnumerable <BackendActionStatus> statuses, string menuCode, int entityId, int parentEntityId)
        {
            var menu = ContextMenuRepository.GetByCode(menuCode);

            if (menu == null)
            {
                return(Enumerable.Empty <BackendActionStatus>());
            }

            if (menu.EntityType == null)
            {
                return(statuses);
            }

            return(CustomActionResolver.ResolveStatus(menu.EntityType.Code, entityId, parentEntityId, statuses.ToArray()));
        }
示例#4
0
        private static CustomAction Normalize(CustomAction customAction, int[] selectedActionsIds)
        {
            if (customAction.IsNew)
            {
                customAction.Action.ControllerActionUrl = ControllerActionUrl;
                customAction.Action.Code = !string.IsNullOrEmpty(customAction.ForceActionCode) ? customAction.ForceActionCode : $"custom_{DateTime.Now.Ticks}";
            }

            var entityType = EntityTypeRepository.GetById(customAction.Action.EntityTypeId);

            if (entityType.ContextMenu == null)
            {
                entityType.ContextMenu = ContextMenuRepository.GetByCode(entityType.Code);
            }

            customAction.Action.EntityType = entityType;
            customAction.Action.Name       = customAction.Name;
            customAction.Action.TabId      = entityType.TabId;
            customAction.CalculateOrder(entityType.Id);

            if (!customAction.ShowInToolbar)
            {
                customAction.ParentActions         = null;
                customAction.Action.ToolbarButtons = Enumerable.Empty <ToolbarButton>();
            }
            else if (selectedActionsIds != null)
            {
                var result = new List <ToolbarButton>();
                foreach (var id in selectedActionsIds)
                {
                    var button = customAction.Action.ToolbarButtons?.FirstOrDefault(n => n.ParentActionId == id) ?? new ToolbarButton();
                    button.ActionId       = customAction.Action.Id;
                    button.ParentActionId = id;
                    button.Name           = customAction.Name;
                    button.Icon           = !string.IsNullOrWhiteSpace(customAction.IconUrl) ? customAction.IconUrl : ToolbarButtonDefaultIconUrl;
                    button.Order          = customAction.Order + 1000;
                    result.Add(button);
                }

                customAction.Action.ToolbarButtons = result;
            }

            BackendActionTypeRepository.GetById(customAction.Action.TypeId);
            if (customAction.ShowInMenu)
            {
                if (entityType.ContextMenu == null)
                {
                    throw new ApplicationException(string.Format(CustomActionStrings.ThereIsNoContextMenuForEntityType, entityType.Name));
                }

                ContextMenuItem contentMenuItem;
                if (customAction.Action.ContextMenuItems != null && customAction.Action.ContextMenuItems.Any())
                {
                    contentMenuItem = customAction.Action.ContextMenuItems.First();
                }
                else
                {
                    contentMenuItem = new ContextMenuItem();
                }

                contentMenuItem.ContextMenuId        = entityType.ContextMenu.Id;
                contentMenuItem.ActionId             = customAction.Action.Id;
                contentMenuItem.Name                 = customAction.Name;
                contentMenuItem.Icon                 = !string.IsNullOrWhiteSpace(customAction.IconUrl) ? customAction.IconUrl : ToolbarButtonDefaultIconUrl;
                contentMenuItem.Order                = customAction.Order + 1000;
                customAction.Action.ContextMenuItems = new[] { contentMenuItem };
            }
            else
            {
                customAction.Action.ContextMenuItems = Enumerable.Empty <ContextMenuItem>();
            }

            if (!customAction.Action.IsInterface)
            {
                customAction.Action.IsWindow = false;
            }
            else
            {
                customAction.Action.ConfirmPhrase = null;
                customAction.Action.HasPreAction  = false;
            }

            if (!customAction.Action.IsWindow)
            {
                customAction.Action.WindowHeight = null;
                customAction.Action.WindowWidth  = null;
            }

            if (!IsEntityTypeSiteDescendants(entityType.Id))
            {
                customAction.SiteIds      = new int[] {};
                customAction.SiteExcluded = false;
            }

            if (!IsEntityTypeContentDescendants(entityType.Id))
            {
                customAction.ContentIds      = new int[] {};
                customAction.ContentExcluded = false;
            }

            return(customAction);
        }
示例#5
0
 public ContextMenu()
 {
     entityType = new Lazy <EntityType>(() => ContextMenuRepository.GetEntityType(Id));
 }
示例#6
0
 /// <summary>
 /// Возвращает список контекстных меню
 /// </summary>
 public static List <ContextMenu> GetList() => ContextMenuRepository.GetList();
示例#7
0
 /// <summary>
 /// Возвращает контекстное меню по его идентификатору
 /// </summary>
 public static ContextMenu GetById(int menuId, bool loadItems = false) => ContextMenuRepository.GetById(menuId, loadItems);
示例#8
0
 /// <summary>
 /// Возвращает контекстное меню по его коду
 /// </summary>
 public static ContextMenu GetByCode(string menuCode, bool loadItems = false)
 {
     return(ContextMenuRepository.GetByCode(menuCode, loadItems));
 }