/// <summary> /// Возвращает список настроек фильтров по умолчанию для списка статей /// </summary> /// <param name="actionCode"></param> /// <param name="contentId"></param> /// <returns></returns> public IEnumerable <RelationSearchBlockState> GetDefaultFilterStates(string actionCode, int contentId) { var action = BackendActionRepository.GetByCode(actionCode); var entityCode = action.EntityType.Code; if ( ( action.ActionType.Code.Equals(ActionTypeCode.List, StringComparison.CurrentCultureIgnoreCase) || action.ActionType.Code.Equals(ActionTypeCode.Select, StringComparison.CurrentCultureIgnoreCase) || action.ActionType.Code.Equals(ActionTypeCode.MultipleSelect, StringComparison.CurrentCultureIgnoreCase) ) && ( entityCode.Equals(EntityTypeCode.Article, StringComparison.CurrentCultureIgnoreCase) || entityCode.Equals(EntityTypeCode.VirtualArticle, StringComparison.CurrentCultureIgnoreCase) ) ) { var defFilter = UserRepository.GetById(QPContext.CurrentUserId).ContentDefaultFilters .Where(f => f.ContentId.HasValue && f.ArticleIDs.Any()) .ToDictionary(f => f.ContentId.Value); if (defFilter.Any()) { var articles = ArticleRepository.GetList(defFilter.SelectMany(f => f.Value.ArticleIDs).ToList()) .GroupBy(a => a.ContentId) .ToDictionary(g => g.Key, g => g.Select(a => new EntityListItem { Id = a.Id, Name = a.Name })); return(ContentRepository.GetById(contentId).Fields .Where(f => (f.ExactType == FieldExactTypes.M2MRelation || f.ExactType == FieldExactTypes.O2MRelation) && f.UseForDefaultFiltration && f.RelateToContentId.HasValue && defFilter.ContainsKey(f.RelateToContentId.Value) ) .Select(f => new RelationSearchBlockState { SearchType = GetFieldSearchType(f), FieldId = f.Id, ContentId = f.ContentId, FieldColumnName = f.Name, FieldName = f.DisplayName, FieldGroup = f.Content.Name, SelectedEntities = articles[f.RelateToContentId.Value] }) .ToArray()); } return(Enumerable.Empty <RelationSearchBlockState>()); } return(Enumerable.Empty <RelationSearchBlockState>()); }
/// <summary> /// Возвращает словарь EntityTypeId -> Action ListItem Collection /// только статические интерфейсные деуствия /// </summary> public static IEnumerable <EntityTypeIdToActionListItemPair> GetEntityTypeIdToActionListItemsDictionary() { return(BackendActionRepository.GetInterfaceActionsForCustom().GroupBy(a => a.EntityTypeId).Select(g => new EntityTypeIdToActionListItemPair { EntityTypeId = g.Key, ActionItems = g.Select(a => new SimpleListItem { Value = a.Id.ToString(), Text = Translator.Translate(a.Name) }).OrderBy(n => n.Text).ToArray() }).ToArray()); }
/// <summary> /// Возвращает список кнопок панели инструментов по коду действия /// </summary> /// <param name="actionCode">код действия</param> /// <returns>список кнопок панели инструментов</returns> public static IEnumerable <ToolbarButton> GetButtonListByActionCode(string actionCode, int entityId, int parentEntityId, bool?boundToExternal) { var id = entityId == 0 ? parentEntityId : entityId; var action = BackendActionRepository.GetByCode(actionCode); var allButtons = ToolbarRepository.GetButtonListByActionCode(action.Code, entityId); // если неопределен id сущности, то нужно работать с родительским entity type var etypeCode = entityId != 0 ? action.EntityType.Code : action.EntityType.ParentCode; IEnumerable <string> legalActionCodes = CustomActionResolver.CanExecuteFilter(etypeCode, id, parentEntityId, allButtons.Select(b => b.ActionCode)).ToArray(); // Только те кнопки, для которых разрешены Action IEnumerable <ToolbarButton> result = allButtons.Where(b => legalActionCodes.Contains(b.ActionCode)).ToArray(); if (actionCode.Equals(ActionCode.Articles) || actionCode.Equals(ActionCode.EditArticle)) { var content = ContentRepository.GetById(parentEntityId); if (actionCode.Equals(ActionCode.Articles) && (!content.WorkflowBinding.IsAssigned || !content.WorkflowBinding.CurrentUserCanRemoveArticles)) { result = result.Where(b => b.ActionCode != ActionCode.MultiplePublishArticles); } if (!content.IsArticleChangingActionsAllowed(boundToExternal)) { result = result.Where(b => ActionCode.ArticleNonChangingActionCodes.Contains(b.ActionCode, StringComparer.InvariantCultureIgnoreCase)).ToArray(); } } else if (actionCode.Equals(ActionCode.ArticleVersions) || actionCode.Equals(ActionCode.PreviewArticleVersion)) { var article = ArticleRepository.GetById(parentEntityId); if (!article.IsArticleChangingActionsAllowed(boundToExternal)) { result = result.Where(b => ActionCode.ArticleVersionsNonChangingActionCodes.Contains(b.ActionCode, StringComparer.InvariantCultureIgnoreCase)).ToArray(); } } return(result); }
public static IEnumerable <BackendActionStatus> GetStatusesList(string actionCode, int entityId, int parentEntityId) => ResolveStatusForCustomActions(actionCode, entityId, parentEntityId, BackendActionRepository.GetStatusesList(actionCode, entityId));
public static BackendAction GetByAlias(string alias) => string.IsNullOrWhiteSpace(alias) ? null : BackendActionRepository.GetByAlias(alias);
public static BackendAction GetByCode(string actionCode) => string.IsNullOrWhiteSpace(actionCode) ? null : BackendActionRepository.GetByCode(actionCode);
public static string GetCodeById(int actionId) => BackendActionRepository.GetById(actionId)?.Code;
public static BackendAction GetById(int actionId) => BackendActionRepository.GetById(actionId);