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); }
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(); }
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; }