Exemplo n.º 1
0
        private static void UpdateChildUrl(PageIndex pageIndex, PageIndexItem parent, int childOffset)
        {
            while (true)
            {
                var item = pageIndex.Items[childOffset];

                item.PageUrl = parent.PageUrl + item.UrlSegment + "/";

                if (item.HasChildren)
                {
                    UpdateChildUrl(pageIndex, item, item.FirstChild);
                }

                if (item.NextPage > 0)
                {
                    childOffset = item.NextPage;
                    continue;
                }
                break;
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        private static bool TryAsPageExtender(int i, string[] segments, PageIndexItem page)
        {
            var pageType = PageType.GetPageType(page.PageTypeId);

            if (pageType == null)
            {
                return(false);
            }

            var valueSupport = pageType.Instance as IPageExtender;

            if (valueSupport == null)
            {
                return(false);
            }

            var remainingSegments = new string[segments.Length - i];

            Array.Copy(segments, i, remainingSegments, 0, remainingSegments.Length);

            return(valueSupport.HandleRequest(page.PageId, remainingSegments));
        }
Exemplo n.º 4
0
        internal static void UpdatePageIndex(PageInstanceEntity pageInstance, Guid parentId, Guid rootId, int treeLevel, int pageTypeId, int sortOrder)
        {
            if (_pageLanguageIndex == null)
            {
                IndexSite();
            }

            var pageIndex = GetPageIndex(pageInstance.LanguageId);
            var page      = pageIndex.GetPageIndexItem(pageInstance.PageId);

            if (page != null)
            {
                page.CurrentVersion     = pageInstance.CurrentVersion;
                page.PageName           = pageInstance.PageName;
                page.UpdateDate         = pageInstance.UpdateDate;
                page.StartPublish       = pageInstance.StartPublish;
                page.StopPublish        = pageInstance.StopPublish;
                page.VisibleInMenu      = pageInstance.VisibleInMenu;
                page.VisibleInSiteMap   = pageInstance.VisibleInSitemap;
                page.SortOrder          = sortOrder;
                page.Status             = pageInstance.Status;
                page.ChildSortDirection = pageInstance.ChildSortDirection;
                page.ChildSortOrder     = pageInstance.ChildSortOrder;

                // Update if page URL segment was changed
                if (page.UrlSegment != pageInstance.PageUrl)
                {
                    page.UrlSegment     = pageInstance.PageUrl;
                    page.UrlSegmentHash = page.UrlSegment.GetHashCode();
                    page.PageUrl        = BuildPageUrl(pageInstance, parentId);
                    if (page.HasChildren)
                    {
                        UpdateChildUrl(pageIndex, page, page.FirstChild);
                    }
                }

                pageIndex.SavePageIndexItem(page);
            }
            else
            {
                page = new PageIndexItem {
                    Author             = pageInstance.Author,
                    ChildSortDirection = pageInstance.ChildSortDirection,
                    ChildSortOrder     = pageInstance.ChildSortOrder,
                    CreatedDate        = pageInstance.CreatedDate,
                    CurrentVersion     = pageInstance.CurrentVersion,
                    DeletedDate        = pageInstance.DeletedDate,
                    FirstChild         = -1,
                    NextPage           = -1,
                    PageId             = pageInstance.PageId,
                    PageInstanceId     = pageInstance.PageInstanceId,
                    PageName           = pageInstance.PageName,
                    PageTypeId         = pageTypeId,
                    PageUrl            = BuildPageUrl(pageInstance, parentId),
                    ParentId           = parentId,
                    RootId             = rootId,
                    SortOrder          = sortOrder,
                    StartPublish       = pageInstance.StartPublish,
                    Status             = pageInstance.Status,
                    StopPublish        = pageInstance.StopPublish,
                    VisibleInMenu      = pageInstance.VisibleInMenu,
                    VisibleInSiteMap   = pageInstance.VisibleInSitemap,
                    UpdateDate         = pageInstance.UpdateDate,
                    UrlSegment         = pageInstance.PageUrl
                };
                page.UrlSegmentHash = page.UrlSegment.GetHashCode();
                page.TreeLevel      = treeLevel;

                pageIndex.InsertPageIndexItem(page);
            }
        }
Exemplo n.º 5
0
        public static bool FindPage(string pageUrl, IRequestManager requestManager)
        {
            if (_pageLanguageIndex == null)
            {
                IndexSite();
            }

            var pageIndex = GetPageIndex(Language.CurrentLanguageId);

            if (pageIndex.Items.Count == 0)
            {
                return(false);
            }

            var segments = GetUrlSegments(pageUrl);
            var position = 0;
            var lastPage = new PageIndexItem();

            for (var i = 0; i < segments.Length; i++)
            {
                var segment     = segments[i];
                var segmentHash = segment.GetHashCode();

                while (true)
                {
                    var page = pageIndex.Items[position];
                    if ((page.UrlSegmentHash == segmentHash) && (page.UrlSegment == segment))
                    {
                        if (i == segments.Length - 1)
                        {
                            requestManager.HandlePage(page);
                            return(true);
                        }

                        lastPage = page;
                        position = page.FirstChild;

                        if (position == -1)
                        {
                            if (TryAsPageExtender(i + 1, segments, lastPage))
                            {
                                return(true);
                            }
                            if (requestManager.TryMvcSupport(i + 1, segments, lastPage))
                            {
                                return(true);
                            }
                            if (TryAsRedirect(pageUrl))
                            {
                                return(true);
                            }

                            return(false);
                        }

                        // Continue to next segment
                        break;
                    }

                    position = page.NextPage;

                    if (position == -1)
                    {
                        if (TryAsPageExtender(i, segments, lastPage))
                        {
                            return(true);
                        }
                        if (requestManager.TryMvcSupport(i, segments, lastPage))
                        {
                            return(true);
                        }
                        if (TryAsRedirect(pageUrl))
                        {
                            return(true);
                        }

                        return(false);
                    }
                }
            }



            return(false);
        }
Exemplo n.º 6
0
 public bool TryMvcSupport(int segmentPosition, string[] segments, PageIndexItem page) {
     return false;
 }
Exemplo n.º 7
0
 public void HandlePage(PageIndexItem page) {
     var templateUrl = RequestModule.GetTemplateUrl(page.IsAvailable, page.PageId, page.PageTypeId);
     RequestModule.RedirectToTemplate(templateUrl);
 }
Exemplo n.º 8
0
 public bool TryMvcSupport(int segmentPosition, string[] segments, PageIndexItem page)
 {
     return(false);
 }
Exemplo n.º 9
0
        public void HandlePage(PageIndexItem page)
        {
            var templateUrl = RequestModule.GetTemplateUrl(page.IsAvailable, page.PageId, page.PageTypeId);

            RequestModule.RedirectToTemplate(templateUrl);
        }
Exemplo n.º 10
0
        public void HandlePage(PageIndexItem page)
        {
            var cmsPage = new CmsPage(page, Language.CurrentLanguageId);

            RequestModule.RedirectToController(cmsPage);
        }