Exemple #1
0
        bool IContentPathCache.ReorderPath(ContentPath path, bool moveUp)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            if (path == ContentPath.Root)
            {
                return(false);
            }

            EnsureCacheIsBuilt();

            var entryToMove = GetEntryByPath(path);

            ContentPathCacheEntry siblingEntry;

            if (moveUp)
            {
                siblingEntry = GetEntryByPathQuery(path.GetParent())
                               .SelectMany(p => p.Children)
                               .Where(p => p.SortOrder < entryToMove.SortOrder)
                               .OrderByDescending(p => p.SortOrder)
                               .FirstOrDefault();
            }
            else
            {
                siblingEntry = GetEntryByPathQuery(path.GetParent())
                               .SelectMany(p => p.Children)
                               .Where(p => p.SortOrder > entryToMove.SortOrder)
                               .OrderBy(p => p.SortOrder)
                               .FirstOrDefault();
            }

            if (siblingEntry != null)
            {
                var tmp = entryToMove.SortOrder;
                entryToMove.SortOrder  = siblingEntry.SortOrder;
                siblingEntry.SortOrder = tmp;

                _dbContext.SaveChanges();
                return(true);
            }

            return(false);
        }
Exemple #2
0
        public ActionResult Menu([ModelBinder(typeof(TypeConverterModelBinder))] ContentPath path, int level, int depth, IDictionary <string, object> htmlAttributes, string viewNamePrefix, Func <IContentInfo, bool> filter)
        {
            if (level < 1)
            {
                throw new ArgumentOutOfRangeException("level", "level must be positive");
            }

            var endLevel = level + depth;

            while (path.Count >= endLevel)
            {
                path = path.GetParent();
            }

            var currentLevelItemsQuery = _contentPathCache.GetChildEntriesOfPath(path)
                                         .Select(e => new MenuItemModel
            {
                ViewName = (viewNamePrefix ?? "") + e.ContentType.Name,
                Content  = GetContent(e),
            });

            var currentLevelItems = Filter(currentLevelItemsQuery, filter).ToList();

            while (path.Count >= level)
            {
                var childPath = path;
                path = path.GetParent();

                currentLevelItemsQuery = _contentPathCache.GetChildEntriesOfPath(path)
                                         .Select(e => new MenuItemModel
                {
                    ViewName       = (viewNamePrefix ?? "") + e.ContentType.Name,
                    Content        = GetContent(e),
                    ChildMenuItems = e.Path.Equals(childPath) ? currentLevelItems : null,
                });

                currentLevelItems = Filter(currentLevelItemsQuery, filter).ToList();
            }

            return(PartialView("Celes.Menu", new MenuModel
            {
                HtmlAttributes = htmlAttributes,
                MenuItems = currentLevelItems,
            }));
        }
        void IContentPathCache.AddPath(ContentPath path, int contentId, Type contentType)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            if (contentType == null)
            {
                throw new ArgumentNullException("contentType");
            }

            var parentEntry = path != ContentPath.Root
                ? GetEntryByPath(path.GetParent())
                : null;

            var sortOrder = parentEntry != null && parentEntry.Children.Any()
                ? parentEntry.Children.Max(e => e.SortOrder) + 1
                : 0;

            var cacheEntry = CreateCacheEntry(contentId, contentType, path, parentEntry, sortOrder);
            _dbContext.SaveChanges();
        }
Exemple #4
0
        void IContentPathCache.AddPath(ContentPath path, int contentId, Type contentType)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            if (contentType == null)
            {
                throw new ArgumentNullException("contentType");
            }

            var parentEntry = path != ContentPath.Root
                                ? GetEntryByPath(path.GetParent())
                                : null;

            var sortOrder = parentEntry != null && parentEntry.Children.Any()
                                ? parentEntry.Children.Max(e => e.SortOrder) + 1
                                : 0;

            var cacheEntry = CreateCacheEntry(contentId, contentType, path, parentEntry, sortOrder);

            _dbContext.SaveChanges();
        }
        bool IContentPathCache.ReorderPath(ContentPath path, bool moveUp)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            if (path == ContentPath.Root)
            {
                return false;
            }

            EnsureCacheIsBuilt();

            var entryToMove = GetEntryByPath(path);

            ContentPathCacheEntry siblingEntry;
            if (moveUp)
            {
                siblingEntry = GetEntryByPathQuery(path.GetParent())
                    .SelectMany(p => p.Children)
                    .Where(p => p.SortOrder < entryToMove.SortOrder)
                    .OrderByDescending(p => p.SortOrder)
                    .FirstOrDefault();
            }
            else
            {
                siblingEntry = GetEntryByPathQuery(path.GetParent())
                    .SelectMany(p => p.Children)
                    .Where(p => p.SortOrder > entryToMove.SortOrder)
                    .OrderBy(p => p.SortOrder)
                    .FirstOrDefault();
            }

            if (siblingEntry != null)
            {
                var tmp = entryToMove.SortOrder;
                entryToMove.SortOrder = siblingEntry.SortOrder;
                siblingEntry.SortOrder = tmp;

                _dbContext.SaveChanges();
                return true;
            }

            return false;
        }