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; } }
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 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)); }
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); } }
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); }
public bool TryMvcSupport(int segmentPosition, string[] segments, PageIndexItem page) { return false; }
public void HandlePage(PageIndexItem page) { var templateUrl = RequestModule.GetTemplateUrl(page.IsAvailable, page.PageId, page.PageTypeId); RequestModule.RedirectToTemplate(templateUrl); }
public bool TryMvcSupport(int segmentPosition, string[] segments, PageIndexItem page) { return(false); }
public void HandlePage(PageIndexItem page) { var templateUrl = RequestModule.GetTemplateUrl(page.IsAvailable, page.PageId, page.PageTypeId); RequestModule.RedirectToTemplate(templateUrl); }
public void HandlePage(PageIndexItem page) { var cmsPage = new CmsPage(page, Language.CurrentLanguageId); RequestModule.RedirectToController(cmsPage); }