예제 #1
0
        private static string BuildPageUrl(PageInstanceEntity pageInstance, Guid parentId)
        {
            var parent          = GetPage(parentId);
            var parentUrl       = parent.PageUrl.ToString();
            var url             = string.Format("{0}{1}/", parentUrl, pageInstance.PageUrl);
            var applicationPath = Utils.ApplicationPath;

            return(url.Substring(applicationPath.Length));
        }
예제 #2
0
        private static string BuildPageUrl(PageInstanceEntity pageInstance, Guid parentId)
        {
            var parent    = GetPage(parentId);
            var parentUrl = parent.PageUrl.ToString();
            var url       = string.Format("{0}{1}/", parentUrl, pageInstance.PageUrl);

            url = url.TrimStart('/');

            return(url);
        }
예제 #3
0
        private static void PopulatePageFromPageInstance(CmsPage page, PageInstanceEntity pageInstance)
        {
            page.Author             = pageInstance.Author;
            page.ChildSortDirection = pageInstance.ChildSortDirection;
            page.ChildSortOrder     = pageInstance.ChildSortOrder;
            page.CurrentVersion     = pageInstance.CurrentVersion;
            page.OriginalStatus     = pageInstance.Status;
            page.PageInstanceId     = pageInstance.PageInstanceId;
            page.PageName           = pageInstance.PageName;
            page.StartPublish       = pageInstance.StartPublish;
            page.Status             = pageInstance.Status;
            page.StopPublish        = pageInstance.StopPublish;
            page.UpdateDate         = pageInstance.UpdateDate;
            page.UrlSegment         = pageInstance.PageUrl;
            page.VisibleInMenu      = pageInstance.VisibleInMenu;
            page.VisibleInSiteMap   = pageInstance.VisibleInSitemap;

            page.Property = Data.PropertyData.GetPropertiesForPage(page.PageId, page.LanguageId, page.PageTypeId, page.CurrentVersion, false);
        }
예제 #4
0
        public void Save()
        {
            using (var context = new DataContext()) {
                var pageEntity = context.Pages.SingleOrDefault(x => x.PageId == PageId);

                if (pageEntity == null)
                {
                    pageEntity = new PageEntity {
                        PageId     = PageId,
                        PageTypeId = PageTypeId,
                        ParentId   = ParentId,
                        RootId     = RootId,
                        SortOrder  = SortIndex,
                        TreeLevel  = TreeLevel
                    };

                    context.Add(pageEntity);
                    context.SaveChanges();
                }

                // ---------------

                var pageInstance = context.PageInstances.SingleOrDefault(x => x.PageInstanceId == PageInstanceId);

                if (pageInstance == null)
                {
                    CurrentVersion = context.PageInstances.Where(x => x.PageId == PageId && x.LanguageId == LanguageId).Max(x => x.CurrentVersion) + 1;

                    pageInstance = new PageInstanceEntity {
                        PageId         = PageId,
                        LanguageId     = LanguageId,
                        CreatedDate    = DateTime.Now.ToUniversalTime(),
                        CurrentVersion = CurrentVersion,
                        Status         = PageInstanceStatus.WorkingCopy
                    };

                    context.Add(pageInstance);
                }

                pageInstance.Author             = HttpContext.Current.User.Identity.Name;
                pageInstance.ChildSortDirection = ChildSortDirection;
                pageInstance.ChildSortOrder     = ChildSortOrder;
                pageInstance.PageName           = PageName;
                pageInstance.StartPublish       = StartPublish;
                pageInstance.StopPublish        = StopPublish;
                pageInstance.UpdateDate         = DateTime.Now.ToUniversalTime();
                pageInstance.VisibleInMenu      = VisibleInMenu;
                pageInstance.VisibleInSitemap   = VisibleInSiteMap;

                EnsurePageUrl();

                pageInstance.PageUrl = UrlSegment;

                context.SaveChanges();

                PageInstanceId = pageInstance.PageInstanceId;

                // ---------------

                var pagePropertiesForPage = context.PageProperties.Where(x => x.PageId == PageId && x.LanguageId == LanguageId && x.Version == CurrentVersion).ToList();

                foreach (var propertyItem in Property)
                {
                    var propertyEntity = pagePropertiesForPage.Find(c => c.PropertyId == propertyItem.PropertyId);

                    if (propertyEntity == null)
                    {
                        propertyEntity = new PagePropertyEntity {
                            LanguageId = LanguageId,
                            PageId     = PageId,
                            PropertyId = propertyItem.PropertyId,
                            Version    = CurrentVersion
                        };
                        context.Add(propertyEntity);
                        pagePropertiesForPage.Add(propertyEntity);
                    }

                    propertyEntity.PageData = GetSerializedPropertyValue(propertyItem);
                }

                context.SaveChanges();
            }

            // Allow property types to execute code when a property of that type is saved
            foreach (var propertyItem in Property)
            {
                if (propertyItem == null)
                {
                    continue;
                }

                var propertyData = propertyItem.PropertyData as IPageSavedHandler;
                if (propertyData != null)
                {
                    propertyData.PageSaved(this);
                }
            }

            if (CurrentVersion == 1)
            {
                Publish(true);
            }

            PageFactory.RaisePageSaved(PageId, LanguageId, CurrentVersion);
        }
예제 #5
0
        public void Save() {
            using (var context = new DataContext()) {
                var pageEntity = context.Pages.SingleOrDefault(x => x.PageId == PageId);

                if (pageEntity == null) {
                    pageEntity = new PageEntity {
                        PageId = PageId,
                        PageTypeId = PageTypeId,
                        ParentId = ParentId,
                        RootId = RootId,
                        SortOrder = SortIndex,
                        TreeLevel = TreeLevel
                    };

                    context.Add(pageEntity);
                    context.SaveChanges();
                }

                // ---------------

                var pageInstance = context.PageInstances.SingleOrDefault(x => x.PageInstanceId == PageInstanceId);

                if (pageInstance == null) {
                    CurrentVersion = context.PageInstances.Where(x => x.PageId == PageId && x.LanguageId == LanguageId).Max(x => x.CurrentVersion) + 1;

                    pageInstance = new PageInstanceEntity {
                        PageId = PageId,
                        LanguageId = LanguageId,
                        CreatedDate = DateTime.Now.ToUniversalTime(),
                        CurrentVersion = CurrentVersion,
                        Status = PageInstanceStatus.WorkingCopy
                    };

                    context.Add(pageInstance);
                }

                pageInstance.Author = HttpContext.Current.User.Identity.Name;
                pageInstance.ChildSortDirection = ChildSortDirection;
                pageInstance.ChildSortOrder = ChildSortOrder;
                pageInstance.PageName = PageName;
                pageInstance.StartPublish = StartPublish;
                pageInstance.StopPublish = StopPublish;
                pageInstance.UpdateDate = DateTime.Now.ToUniversalTime();
                pageInstance.VisibleInMenu = VisibleInMenu;
                pageInstance.VisibleInSitemap = VisibleInSiteMap;
                
                EnsurePageUrl();

                pageInstance.PageUrl = UrlSegment;

                context.SaveChanges();

                PageInstanceId = pageInstance.PageInstanceId;

                // ---------------

                var pagePropertiesForPage = context.PageProperties.Where(x => x.PageId == PageId && x.LanguageId == LanguageId && x.Version == CurrentVersion).ToList();

                foreach (var propertyItem in Property) {
                    var propertyEntity = pagePropertiesForPage.Find(c => c.PropertyId == propertyItem.PropertyId);

                    if (propertyEntity == null) {
                        propertyEntity = new PagePropertyEntity {
                            LanguageId = LanguageId,
                            PageId = PageId,
                            PropertyId = propertyItem.PropertyId,
                            Version = CurrentVersion
                        };
                        context.Add(propertyEntity);
                        pagePropertiesForPage.Add(propertyEntity);
                    }

                    propertyEntity.PageData = GetSerializedPropertyValue(propertyItem);
                }

                context.SaveChanges();
            }

            // Allow property types to execute code when a property of that type is saved
            foreach (var propertyItem in Property) {
                if (propertyItem == null) {
                    continue;
                }

                var propertyData = propertyItem.PropertyData as IPageSavedHandler;
                if (propertyData != null) {
                    propertyData.PageSaved(this);
                }
            }

            if (CurrentVersion == 1) {
                Publish(true);
            }

            PageFactory.RaisePageSaved(PageId, LanguageId, CurrentVersion);
        }
예제 #6
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);
            }
        }