示例#1
0
        public static CheckIdResult <T> Create(int[] ids, string actionTypeCode)
        {
            var result = new CheckIdResult <T>();

            foreach (var id in ids)
            {
                var item         = EntityObjectRepository.GetById <T>(id);
                var lockableItem = item as LockableEntityObject;
                if (item == null)
                {
                    result._NotFoundIds.Add(id);
                }
                else if (item != null && !SecurityRepository.IsEntityAccessible(item.EntityTypeCode, id, actionTypeCode))
                {
                    result._NotAccessedIds.Add(id);
                }
                else if (lockableItem != null && lockableItem.LockedByAnyoneElse && !QPContext.CanUnlockItems)
                {
                    result._LockedItems.Add(item);
                }
                else
                {
                    result._ValidItems.Add(item);
                }
            }

            return(result);
        }
示例#2
0
 public void AutoUnlock()
 {
     if (LockedByYou && !PermanentLock)
     {
         EntityObjectRepository.UnLock(this);
     }
 }
示例#3
0
        public static void UnlockAllEntitiesLockedByCurrentUser()
        {
            var id = QPContext.CurrentUserId;

            if (id != 0)
            {
                EntityObjectRepository.UnlockAllEntitiesLockedByUser(id);
            }
        }
示例#4
0
        public void AutoLock()
        {
            if (!LockedByAnyone)
            {
                LockedBy = QPContext.CurrentUserId;

                // ReSharper disable once PossibleInvalidOperationException
                Locked = EntityObjectRepository.Lock(this).Value;
            }
        }
示例#5
0
        internal void MutateName()
        {
            var name  = Name;
            var index = 0;

            do
            {
                index++;
                Name = MutateHelper.MutateString(name, index);
            } while (EntityObjectRepository.CheckNameUniqueness(this));
        }
示例#6
0
        protected virtual RulesException ValidateUnique(RulesException errors)
        {
            if (!string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(EntityTypeCode))
            {
                if (EntityObjectRepository.CheckNameUniqueness(this))
                {
                    errors.Error(UniquePropertyName, Name, PropertyIsNotUniqueMessage);
                }
            }

            return(errors);
        }
示例#7
0
 private static Dictionary <string, Dictionary <int, string> > LoadDictionaries()
 {
     return(EntityObjectRepository.GetTranslations()
            .Select(r => new
     {
         PhraseId = Converter.ToInt32(r.Field <decimal>("PHRASE_ID")),
         Phrase = r.Field <string>("PHRASE_TEXT"),
         LanguageId = Converter.ToInt32(r.Field <decimal>("LANGUAGE_ID")),
         Translation = r.Field <string>("PHRASE_TRANSLATION")
     })
            .GroupBy(d => d.Phrase.ToLowerInvariant())
            .ToDictionary(g => g.Key, g => g.ToDictionary(r => r.LanguageId, r => r.Translation)));
 }
示例#8
0
        public void CaptureLockTemplateObject(int id)
        {
            var obj = ObjectRepository.GetObjectPropertiesById(id);

            if (obj == null)
            {
                throw new Exception(string.Format(TemplateStrings.ObjectNotFound, id));
            }

            if (obj.CanBeUnlocked)
            {
                EntityObjectRepository.CaptureLock(obj);
            }
        }
示例#9
0
        public void CaptureLockTemplate(int id)
        {
            var template = PageTemplateRepository.GetPageTemplatePropertiesById(id);

            if (template == null)
            {
                throw new Exception(string.Format(TemplateStrings.TemplateNotFound, id));
            }

            if (template.CanBeUnlocked)
            {
                EntityObjectRepository.CaptureLock(template);
            }
        }
示例#10
0
        public void CaptureLockPageObjectFormat(int id)
        {
            var format = ObjectFormatRepository.ReadObjectFormat(id, false);

            if (format == null)
            {
                throw new Exception(string.Format(TemplateStrings.FormatNotFound, id));
            }

            if (format.CanBeUnlocked)
            {
                EntityObjectRepository.CaptureLock(format);
            }
        }
示例#11
0
        public static void CaptureLock(int id)
        {
            var site = SiteRepository.GetById(id);

            if (site == null)
            {
                throw new Exception(string.Format(SiteStrings.SiteNotFound, id));
            }

            if (site.CanBeUnlocked)
            {
                EntityObjectRepository.CaptureLock(site);
            }
        }
示例#12
0
        public static void CaptureLock(int id)
        {
            var article = ArticleRepository.GetById(id);

            if (article == null)
            {
                throw new Exception(string.Format(ArticleStrings.ArticleNotFound, id));
            }

            if (article.CanBeUnlocked)
            {
                EntityObjectRepository.CaptureLock(article);
            }
        }
示例#13
0
        /// <summary>
        /// Возвращает цепочку сущностей для хлебных крошек
        /// </summary>
        /// <param name="entityTypeCode">код типа сущности</param>
        /// <param name="entityId">идентификатор сущности</param>
        /// <param name="parentEntityId">идентификатор родительской сущности</param>
        /// <param name="actionCode"></param>
        /// <returns>цепочка сущностей</returns>
        public static IEnumerable <EntityInfo> GetBreadCrumbsList(string entityTypeCode, long entityId, long?parentEntityId, string actionCode)
        {
            if (!string.IsNullOrWhiteSpace(actionCode))
            {
                if (actionCode.Equals(ActionCode.ChildContentPermissions, StringComparison.InvariantCultureIgnoreCase))
                {
                    entityTypeCode = EntityTypeCode.Content;
                }
                else if (actionCode.Equals(ActionCode.ChildArticlePermissions, StringComparison.InvariantCultureIgnoreCase))
                {
                    entityTypeCode = EntityTypeCode.Article;
                }
            }

            return(EntityObjectRepository.GetParentsChain(entityTypeCode, entityId, parentEntityId));
        }
示例#14
0
        public static CheckIdResult <Article> CreateForPublish(int contentId, int[] ids, bool disableSecurityCheck)
        {
            var result = new CheckIdResult <Article>();
            var list   = EntityObjectRepository.GetList(EntityTypeCode.Article, ids).Cast <Article>();

            if (list == null)
            {
                result._NotFoundIds.AddRange(ids);
            }
            else
            {
                result._NotFoundIds.AddRange(ids.Except(list.Select(n => n.Id)));
                var checkResult         = ArticleRepository.CheckSecurity(contentId, ids, false, disableSecurityCheck);
                var relationCheckResult = ArticleRepository.CheckRelationSecurity(contentId, ids, false);
                foreach (var article in list)
                {
                    if (article.StatusTypeId == article.ActualWorkflowBinding.MaxStatus.Id && !article.Splitted)
                    {
                        result._RedundantIds.Add(article.Id);
                    }
                    else if (article.LockedByAnyoneElse && !QPContext.CanUnlockItems)
                    {
                        result._LockedItems.Add(article);
                    }
                    else if (!checkResult[article.Id])
                    {
                        result._NotAccessedIds.Add(article.Id);
                    }
                    else if (!article.IsPublishableWithWorkflow)
                    {
                        result._BlockedByWorkflowIds.Add(article.Id);
                    }
                    else if (!relationCheckResult[article.Id])
                    {
                        result._BlockedByRelationSecurityIds.Add(article.Id);
                    }
                    else
                    {
                        result._ValidItems.Add(article);
                    }
                }
            }

            return(result);
        }
示例#15
0
        public static CheckIdResult <Article> CreateForRemove(int contentId, int[] ids, bool disableSecurityCheck)
        {
            var result = new CheckIdResult <Article>();
            var list   = EntityObjectRepository.GetList(EntityTypeCode.Article, ids).Cast <Article>();

            if (list == null)
            {
                result._NotFoundIds.AddRange(ids);
            }
            else
            {
                result._NotFoundIds.AddRange(ids.Except(list.Select(n => n.Id)));
                var checkResult         = ArticleRepository.CheckSecurity(contentId, ids, true, disableSecurityCheck);
                var relationCheckResult = ArticleRepository.CheckRelationSecurity(contentId, ids, true);

                foreach (var article in list)
                {
                    if (article.LockedByAnyoneElse)
                    {
                        result._LockedItems.Add(article);
                    }
                    else if (!checkResult[article.Id])
                    {
                        result._NotAccessedIds.Add(article.Id);
                    }
                    else if (!article.IsRemovableWithWorkflow)
                    {
                        result._BlockedByWorkflowIds.Add(article.Id);
                    }
                    else if (!relationCheckResult[article.Id])
                    {
                        result._BlockedByRelationSecurityIds.Add(article.Id);
                    }
                    else
                    {
                        result._ValidItems.Add(article);
                    }
                }
            }

            return(result);
        }
示例#16
0
 public IList<EntityTreeItem> Process()
 {
     var treeField = FieldRepository.GetById(ContentRepository.GetTreeFieldId(_contentId));
     return GetChildArticles(_entityId, _filter, EntityObjectRepository.GetTreeIdsToLoad(_entityTypeCode, treeField.ContentId, _selectedIdsString), treeField);
 }
示例#17
0
        public static IEnumerable <BackendActionStatus> ResolveStatus(string entityTypeCode, int entityId, int parentEntityId, BackendActionStatus[] statuses)
        {
            var testEntityTypeCode = entityTypeCode != EntityTypeCode.VirtualArticle ? entityTypeCode : EntityTypeCode.VirtualContent;
            var testEntityId       = entityTypeCode != EntityTypeCode.VirtualArticle ? entityId : parentEntityId;

            // Получить родительский контент и сайт
            IEnumerable <EntityInfo> bindableParentEntities =
                EntityObjectRepository.GetParentsChain(testEntityTypeCode, testEntityId)
                .Where(ei =>
                       ei.Id > 0 &&
                       (
                           ei.Code.Equals(EntityTypeCode.Site, StringComparison.InvariantCultureIgnoreCase) ||
                           ei.Code.Equals(EntityTypeCode.Content, StringComparison.InvariantCultureIgnoreCase) ||
                           ei.Code.Equals(EntityTypeCode.VirtualContent, StringComparison.InvariantCultureIgnoreCase)
                       )
                       )
                .ToArray();

            var customActions = CustomActionRepository.GetListByCodes(statuses.Select(s => s.Code).ToArray());

            // Если есть как минимум сайт - то проверяем
            if (customActions.Any())
            {
                if (bindableParentEntities.Any())
                {
                    var parentSiteInfo    = bindableParentEntities.FirstOrDefault(ei => ei.Code.Equals(EntityTypeCode.Site, StringComparison.InvariantCultureIgnoreCase));
                    var parentContentInfo = bindableParentEntities.FirstOrDefault(ei => ei.Code.Equals(EntityTypeCode.Content, StringComparison.InvariantCultureIgnoreCase) ||
                                                                                  ei.Code.Equals(EntityTypeCode.VirtualContent, StringComparison.InvariantCultureIgnoreCase)
                                                                                  );

                    foreach (var ca in customActions)
                    {
                        var status = statuses.Single(s => s.Code.Equals(ca.Action.Code, StringComparison.InvariantCultureIgnoreCase));
                        if (status.Visible)
                        {
                            var visibleBySite    = false;
                            var visibleByContent = false;

                            if (ca.Sites.Any(s => s.Id == parentSiteInfo.Id)) // сайт выбран для текущего Custom Action
                            {
                                visibleBySite = ca.SiteExcluded;
                            }
                            else
                            {
                                visibleBySite = !ca.SiteExcluded;
                            }

                            if (visibleBySite)
                            {
                                if (parentContentInfo != null)
                                {
                                    if (ca.Contents.Any(c => c.Id == parentContentInfo.Id)) // контент выбран для текущего Custom Action
                                    {
                                        visibleByContent = ca.ContentExcluded;
                                    }

                                    //else if (!ca.Contents.Any())
                                    //    visibleByContent = true;
                                    else
                                    {
                                        visibleByContent = !ca.ContentExcluded;
                                    }
                                }
                                else
                                {
                                    visibleByContent = visibleBySite;
                                }
                            }

                            // Побеждает всегда False если он есть
                            status.Visible = visibleBySite && visibleBySite == visibleByContent;

                            if (status.Visible && ca.Action.ExcludeCodes != null)
                            {
                                foreach (var code in ca.Action.ExcludeCodes)
                                {
                                    var excludedStatus = statuses.SingleOrDefault(s => s.Code.Equals(code, StringComparison.InvariantCultureIgnoreCase));
                                    if (excludedStatus != null)
                                    {
                                        excludedStatus.Visible = false;
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    foreach (var ca in customActions)
                    {
                        var status = statuses.Single(s => s.Code.Equals(ca.Action.Code, StringComparison.InvariantCultureIgnoreCase));
                        status.Visible = false;
                    }
                }
            }

            return(statuses);
        }
示例#18
0
        /// <summary>
        /// Возвращает поддерево меню от корня до ближайшего существующего нода для параметров
        /// </summary>
        /// <param name="entityTypeCode"></param>
        /// <param name="entityId"></param>
        /// <param name="parentEntityId"></param>
        /// <returns></returns>
        public static TreeNode GetSubTreeToEntity(string entityTypeCode, long entityId, long parentEntityId)
        {
            // положить в стек все ВОЗМОЖНЫЕ (Folder и Not Folder) tree menu nodes от корня до Entity
            var stack = new Stack <TreeNode>();

            EntityObjectRepository.GetParentsChain(entityTypeCode, entityId, parentEntityId).ToList()
            .ForEach(e =>
            {
                stack.Push(new TreeNode
                {
                    Code     = e.Code,
                    Id       = Converter.ToInt32(e.Id),
                    ParentId = Converter.ToInt32(e.ParentId),
                    IsFolder = false
                });

                if (StringComparer.InvariantCultureIgnoreCase.Equals(e.Code, EntityTypeCode.Content))
                {
                    var group = ContentRepository.GetContentGroup(Convert.ToInt32(e.Id));
                    if (group != null)
                    {
                        stack.Push(new TreeNode
                        {
                            Code          = group.EntityTypeCode,
                            Id            = Converter.ToInt32(group.Id),
                            ParentId      = Converter.ToInt32(group.ParentEntityId),
                            GroupItemCode = GroupItemCodes.ContentGroup,
                            IsGroup       = true
                        });
                    }
                }

                stack.Push(new TreeNode
                {
                    Code     = e.Code,
                    Id       = Converter.ToInt32(e.ParentId),
                    IsFolder = true
                });
            });

            // получить реальные nodes
            var nodeQueue = new Queue <TreeNode>(stack.Count);
            var nodes     = TreeMenuRepository.GetChildNodeList(null, null, false, false, null);

            while (stack.Count > 0)
            {
                var      paramNode = stack.Pop();
                TreeNode currentNode;
                if (paramNode.IsFolder)
                {
                    currentNode = nodes.SingleOrDefault(n => n.IsFolder && n.Code == paramNode.Code && n.ParentId == paramNode.Id);
                }
                else if (paramNode.IsGroup)
                {
                    currentNode = nodes.SingleOrDefault(n => n.IsGroup && n.Code == paramNode.Code && n.Id == paramNode.Id);
                }
                else
                {
                    currentNode = nodes.SingleOrDefault(n => !(n.IsFolder || n.IsGroup) && n.Code == paramNode.Code && n.Id == paramNode.Id);
                }
                if (currentNode != null)
                {
                    nodes = TreeMenuRepository.GetChildNodeList(paramNode.Code, paramNode.Id, paramNode.IsFolder, paramNode.IsGroup, paramNode.GroupItemCode);
                    currentNode.ChildNodes  = nodes;
                    currentNode.HasChildren = nodes.Any();
                    nodeQueue.Enqueue(currentNode);
                }
            }

            return(nodeQueue.Any() ? nodeQueue.Dequeue() : null);
        }
示例#19
0
 public static string GetNameById(int contentId) => EntityObjectRepository.GetName(EntityTypeCode.Content, contentId);
示例#20
0
 /// <summary>
 /// Проверяет уникальность имен
 /// </summary>
 /// <param name="item">сущность</param>
 /// <returns>true или false</returns>
 public static bool CheckNameUniqueness(EntityObject item) => EntityObjectRepository.CheckNameUniqueness(item);
示例#21
0
 public static int[] GetParentIdsForTree(string entityTypeCode, int[] ids) => EntityObjectRepository.GetParentIdsForTree(entityTypeCode, ids);
示例#22
0
 /// <summary>
 /// Возвращает информацию о текущей сущности и всех предках
 /// </summary>
 /// <param name="entityTypeCode">код типа сущности</param>
 /// <param name="entityId">идентификатор сущности</param>
 /// <param name="parentEntityId">идентификатор родительской сущности</param>
 /// <returns>информация о текущей и родительской сущности</returns>
 public static IEnumerable <EntityInfo> GetParentsChain(string entityTypeCode, long entityId, long?parentEntityId) => EntityObjectRepository.GetParentsChain(entityTypeCode, entityId, parentEntityId);
示例#23
0
 /// <summary>
 /// Возвращает идентификатор родительской сущности
 /// </summary>
 /// <param name="entityTypeCode">код типа сущности</param>
 /// <param name="entityId">идентификатор сущности</param>
 /// <returns>идентификатор родительской сущности</returns>
 public static int?GetParentId(string entityTypeCode, int entityId) => EntityObjectRepository.GetParentId(entityTypeCode, entityId);
示例#24
0
 public static int[] GetParentIdsForTree(ParentIdsForTreeQuery query) => EntityObjectRepository.GetParentIdsForTree(query);
示例#25
0
 /// <summary>
 /// Возвращает название сущности
 /// </summary>
 /// <param name="entityTypeCode">код типа сущности</param>
 /// <param name="entityId">идентификатор сущности</param>
 /// <param name="parentEntityId"></param>
 /// <returns>название сущности</returns>
 public static string GetName(string entityTypeCode, int entityId, int parentEntityId) => EntityObjectRepository.GetName(entityTypeCode, entityId, parentEntityId);
示例#26
0
 /// <summary>
 /// Проверяет сущность на наличие вариаций
 /// </summary>
 /// <param name="entityTypeCode">код типа сущности</param>
 /// <param name="entityId">идентификатор сущности</param>
 /// <returns>результат проверки (true - есть вариации; false - нет)</returns>
 public static bool CheckForVariations(string entityTypeCode, int entityId) => EntityObjectRepository.CheckForVariations(entityTypeCode, entityId);
示例#27
0
 /// <summary>
 /// Проверяет сущность на наличие рекурсивных связей
 /// </summary>
 /// <param name="entityTypeCode">код типа сущности</param>
 /// <param name="entityId">идентификатор сущности</param>
 /// <returns>результат проверки (true - есть рекурсивные связи; false - нет)</returns>
 public static bool CheckPresenceSelfRelations(string entityTypeCode, int entityId) => EntityObjectRepository.CheckPresenceSelfRelations(entityTypeCode, entityId);
示例#28
0
 /// <summary>
 /// Проверяет существование сущности
 /// </summary>
 /// <param name="entityTypeCode">код типа сущности</param>
 /// <param name="entityId">идентификатор сущности</param>
 /// <returns>результат проверки (true - существует; false - не существует)</returns>
 public static bool CheckExistence(string entityTypeCode, int entityId) => EntityObjectRepository.CheckExistence(entityTypeCode, entityId);
示例#29
0
 public static void UnlockAllEntitiesLockedByCurrentUser()
 {
     EntityObjectRepository.UnlockAllEntitiesLockedByUser(QPContext.CurrentUserId);
 }