private int DetachPageFromRoot(int i, PageIndexItem pageIndexItem)
 {
     if (i == 0)
     {
         var firstSiblingPosition = pageIndexItem.NextPage;
         var firstSibling         = _pageIndex[firstSiblingPosition];
         var temporaryItem        = new PageIndexItem {
             PageId = new Guid("ffffffff-ffff-ffff-ffff-ffffffffffff")
         };
         _pageIndex[0] = temporaryItem;
         _pageIndex[firstSiblingPosition] = pageIndexItem;
         _pageIndex[0] = firstSibling;
         i             = firstSiblingPosition;
     }
     else
     {
         var childId = 0;
         while (childId != -1)
         {
             var childPage = _pageIndex[childId];
             if (childPage.NextPage == i)
             {
                 childPage.NextPage = pageIndexItem.NextPage;
                 break;
             }
             childId = childPage.NextPage;
         }
     }
     return(i);
 }
示例#2
0
 public CmsPage(PageIndexItem pageIndexItem, int languageId)
 {
     Author             = pageIndexItem.Author;
     ChildSortDirection = pageIndexItem.ChildSortDirection;
     ChildSortOrder     = pageIndexItem.ChildSortOrder;
     CreatedDate        = pageIndexItem.CreatedDate;
     LanguageId         = languageId;
     OriginalStatus     = pageIndexItem.Status;
     PageId             = pageIndexItem.PageId;
     PageInstanceId     = pageIndexItem.PageInstanceId;
     PageName           = pageIndexItem.PageName;
     PageTypeId         = pageIndexItem.PageTypeId;
     PageUrl            = new Uri(Utils.ApplicationPath + pageIndexItem.PageUrl, UriKind.Relative);
     ParentId           = pageIndexItem.ParentId;
     RootId             = pageIndexItem.RootId;
     SortIndex          = pageIndexItem.SortOrder;
     StartPublish       = pageIndexItem.StartPublish;
     Status             = pageIndexItem.Status;
     StopPublish        = pageIndexItem.StopPublish;
     TreeLevel          = pageIndexItem.TreeLevel;
     UpdateDate         = pageIndexItem.UpdateDate;
     UrlSegment         = pageIndexItem.UrlSegment;
     VisibleInMenu      = pageIndexItem.VisibleInMenu;
     VisibleInSiteMap   = pageIndexItem.VisibleInSiteMap;
     CurrentVersion     = pageIndexItem.CurrentVersion;
     FirstChild         = pageIndexItem.FirstChild;
     NextPage           = pageIndexItem.NextPage;
 }
        internal PageCollection GetPageTreeByCriteria(Guid pageId, Predicate <PageIndexItem> match)
        {
            var pageCollection = new PageCollection();
            var stack          = new Stack();
            int currentId;
            int index = 0;

            if (pageId == Guid.Empty)
            {
                currentId = 0;
            }
            else
            {
                PageIndexItem firstPage = GetPageIndexItem(pageId);
                if (firstPage == null)
                {
                    throw new ArgumentException("Page with id " + pageId + " not found!");
                }
                currentId = firstPage.FirstChild;
            }

            while (currentId > -1)
            {
                PageIndexItem item = _pageIndex[currentId];

                if (match(item))
                {
                    pageCollection.Add(item.PageId);

                    if (item.NextPage > -1)
                    {
                        stack.Push(item.NextPage);
                    }

                    currentId = item.FirstChild;
                }
                else
                {
                    currentId = item.NextPage;
                }

                if ((currentId == -1) && (stack.Count > 0))
                {
                    currentId = (int)stack.Pop();
                }

                if (index > _pageIndex.Count)
                {
                    // TODO: This should never happen, to be removed..
                    throw new Exception("Unending whileloop detected");
                }
                index++;
            }
            return(pageCollection);
        }
        private PageIndexItem GetRootPageIndexItem()
        {
            var rootPageIndexItem = new PageIndexItem {
                CreatedDate = DateTime.MinValue,
                FirstChild  = 0,
                NextPage    = -1,
                PageId      = SiteSettings.RootPage,
                PageName    = "Root",
            };

            return(rootPageIndexItem);
        }
        internal void SavePageIndexItem(PageIndexItem page)
        {
            var pageId = page.PageId;

            for (var i = 0; i < _pageIndex.Count; i++)
            {
                var pageIndexItem = _pageIndex[i];
                if (pageIndexItem.PageId == pageId)
                {
                    _pageIndex[i] = page;
                    break;
                }
            }
        }
        public bool TryMvcSupport(int segmentPosition, string[] segments, PageIndexItem page) {
            if (page.PageId == Guid.Empty) {
                return false;
            }

            try {
                var parametersCount = segments.Length - segmentPosition - 1;
                var parameters = new string[parametersCount];
                Array.Copy(segments, segmentPosition + 1, parameters, 0, parametersCount);
                var cmsPage = new CmsPage(page, Language.CurrentLanguageId);
                RequestModule.RedirectToControllerAction(cmsPage, parameters);

                return true;
            }
            catch (Exception exception) {
                Logger.Write(exception, Logger.Severity.Info);
                return false;
            }
        }
        private void DetachPage(PageIndexItem pageIndexItem, int i)
        {
            var parentPage = GetPageIndexItem(pageIndexItem.ParentId);

            if (parentPage.FirstChild == i)
            {
                parentPage.FirstChild = pageIndexItem.NextPage;
            }
            else
            {
                var childId = parentPage.FirstChild;
                while (childId != -1)
                {
                    var childPage = _pageIndex[childId];
                    if (childPage.NextPage == i)
                    {
                        childPage.NextPage = pageIndexItem.NextPage;
                        break;
                    }
                    childId = childPage.NextPage;
                }
            }
        }
        internal void InsertPageIndexItem(PageIndexItem page)
        {
            var item           = GetPageIndexItem(page.ParentId);
            var insertPosition = _pageIndex.Count;

            if (item != null)
            {
                var firstChild = item.FirstChild;

                item.FirstChild = insertPosition;
                page.NextPage   = firstChild;
            }
            else if (_pageIndex.Count > 0)
            {
                item = _pageIndex[0];
                var nextPage = item.NextPage;

                item.NextPage = insertPosition;
                page.NextPage = nextPage;
            }

            _pageIndex.Add(page);
        }
示例#9
0
        private void UpdateNodeAfterMove(List<PageIndexItem> changedItems, string parentUrl, Guid rootId, int treeLevel, PageIndexItem pageIndexItem) {
            #if DEBUG
                Logger.Write(string.Format("Moving '{0}', {1}, '{2}'", pageIndexItem.PageUrl, pageIndexItem.TreeLevel, pageIndexItem.RootId));
            #endif
            
            pageIndexItem.RootId = rootId;
            pageIndexItem.TreeLevel = treeLevel + 1;
            pageIndexItem.PageUrl = parentUrl + pageIndexItem.UrlSegment + "/";

            changedItems.Add(pageIndexItem);

            if (pageIndexItem.HasChildren) {
                UpdateChildrenAfterMove(changedItems, pageIndexItem.PageUrl, pageIndexItem.FirstChild, pageIndexItem.RootId, pageIndexItem.TreeLevel);
            }
        }
示例#10
0
 private int DetachPageFromRoot(int i, PageIndexItem pageIndexItem) {
     if (i == 0) {
         var firstSiblingPosition = pageIndexItem.NextPage;
         var firstSibling = _pageIndex[firstSiblingPosition];
         var temporaryItem = new PageIndexItem {PageId = new Guid("ffffffff-ffff-ffff-ffff-ffffffffffff")};
         _pageIndex[0] = temporaryItem;
         _pageIndex[firstSiblingPosition] = pageIndexItem;
         _pageIndex[0] = firstSibling;
         i = firstSiblingPosition;
     }
     else {
         var childId = 0;
         while (childId != -1) {
             var childPage = _pageIndex[childId];
             if (childPage.NextPage == i) {
                 childPage.NextPage = pageIndexItem.NextPage;
                 break;
             }
             childId = childPage.NextPage;
         }
     }
     return i;
 }
示例#11
0
 private void DetachPage(PageIndexItem pageIndexItem, int i) {
     var parentPage = GetPageIndexItem(pageIndexItem.ParentId);
     if (parentPage.FirstChild == i) {
         parentPage.FirstChild = pageIndexItem.NextPage;
     }
     else {
         var childId = parentPage.FirstChild;
         while (childId != -1) {
             var childPage = _pageIndex[childId];
             if (childPage.NextPage == i) {
                 childPage.NextPage = pageIndexItem.NextPage;
                 break;
             }
             childId = childPage.NextPage;
         }
     }
 }
示例#12
0
 private PageIndexItem GetRootPageIndexItem() {
     var rootPageIndexItem = new PageIndexItem {
         CreatedDate = DateTime.MinValue,
         FirstChild = 0,
         NextPage = -1,
         PageId = SiteSettings.RootPage,
         PageName = "Root",
     };
     return rootPageIndexItem;
 }
示例#13
0
        internal void SavePageIndexItem(PageIndexItem page) {
            var pageId = page.PageId;

            for (var i = 0; i < _pageIndex.Count; i++) {
                var pageIndexItem = _pageIndex[i];
                if (pageIndexItem.PageId == pageId) {
                    _pageIndex[i] = page;
                    break;
                }
            }
        }
示例#14
0
        internal void InsertPageIndexItem(PageIndexItem page) {
            var item = GetPageIndexItem(page.ParentId);
            var insertPosition = _pageIndex.Count;

            if (item != null) {
                var firstChild = item.FirstChild;

                item.FirstChild = insertPosition;
                page.NextPage = firstChild;
            }
            else if (_pageIndex.Count > 0) {
                item = _pageIndex[0];
                var nextPage = item.NextPage;

                item.NextPage = insertPosition;
                page.NextPage = nextPage;
            }

            _pageIndex.Add(page);
        }
示例#15
0
 internal void Add(PageIndexItem p)
 {
     _pageIndex.Add(p);
 }
示例#16
0
 internal void Add(PageIndexItem p) {
     _pageIndex.Add(p);
 }
示例#17
0
        private void UpdateNodeAfterMove(List <PageIndexItem> changedItems, string parentUrl, Guid rootId, int treeLevel, PageIndexItem pageIndexItem)
        {
            #if DEBUG
            Logger.Write(string.Format("Moving '{0}', {1}, '{2}'", pageIndexItem.PageUrl, pageIndexItem.TreeLevel, pageIndexItem.RootId));
            #endif

            pageIndexItem.RootId    = rootId;
            pageIndexItem.TreeLevel = treeLevel + 1;
            pageIndexItem.PageUrl   = parentUrl + pageIndexItem.UrlSegment + "/";

            changedItems.Add(pageIndexItem);

            if (pageIndexItem.HasChildren)
            {
                UpdateChildrenAfterMove(changedItems, pageIndexItem.PageUrl, pageIndexItem.FirstChild, pageIndexItem.RootId, pageIndexItem.TreeLevel);
            }
        }
示例#18
0
 public void HandlePage(PageIndexItem page) {
     var cmsPage = new CmsPage(page, Language.CurrentLanguageId);
     RequestModule.RedirectToController(cmsPage);
 }