Example #1
0
 private void EnsureDefaultValues(SPListItem newFileItem, PublishingPageDefinition publishingPageModel)
 {
     foreach (var defaultValue in publishingPageModel.DefaultValues)
     {
         if (!string.IsNullOrEmpty(defaultValue.FieldName))
         {
             if (newFileItem.Fields.ContainsFieldWithStaticName(defaultValue.FieldName))
             {
                 if (newFileItem[defaultValue.FieldName] == null)
                 {
                     newFileItem[defaultValue.FieldName] = defaultValue.Value;
                 }
             }
         }
         else if (defaultValue.FieldId.HasValue && defaultValue.FieldId != default(Guid))
         {
             if (newFileItem.Fields.OfType <SPField>().Any(f => f.Id == defaultValue.FieldId.Value))
             {
                 if (newFileItem[defaultValue.FieldId.Value] == null)
                 {
                     newFileItem[defaultValue.FieldId.Value] = defaultValue.Value;
                 }
             }
         }
     }
 }
Example #2
0
        protected string GetSafePublishingPageFileName(PublishingPageDefinition pageModel)
        {
            var webPartPageName = pageModel.FileName;

            if (!webPartPageName.EndsWith(".aspx"))
            {
                webPartPageName += ".aspx";
            }

            return(webPartPageName);
        }
Example #3
0
        protected ListItem FindPublishingPage(List list, Folder folder, PublishingPageDefinition definition)
        {
            var pageName = GetSafePageFileName(definition);
            var file     = GetCurrentPage(list, folder, pageName);

            if (file != null)
            {
                return(file.ListItemAllFields);
            }

            return(null);
        }
Example #4
0
        private SPListItem CreatePublishingPage(object modelHost, SPFolder folder, PublishingPageDefinition publishingPageModel)
        {
            var pageName    = GetSafePublishingPageFileName(publishingPageModel);
            var fileContent = Encoding.UTF8.GetBytes(PublishingPageTemplates.RedirectionPageMarkup);

            ModuleFileModelHandler.DeployModuleFile(folder,
                                                    SPUrlUtility.CombineUrl(folder.ServerRelativeUrl, pageName),
                                                    pageName,
                                                    fileContent,
                                                    true,
                                                    null,
                                                    null);

            return(FindPublishingPage(folder, publishingPageModel));
        }
Example #5
0
        protected SPListItem FindPublishingPage(SPFolder folder, PublishingPageDefinition webpartPageModel)
        {
            var webPartPageName = GetSafePublishingPageFileName(webpartPageModel);

            if (!webPartPageName.EndsWith(".aspx"))
            {
                webPartPageName += ".aspx";
            }

            foreach (SPFile file in folder.Files)
            {
                if (file.Name.ToUpper() == webPartPageName.ToUpper())
                {
                    return(file.Item);
                }
            }

            return(null);
        }
Example #6
0
 private static void EnsureDefaultValues(ListItem newFileItem, PublishingPageDefinition publishingPageModel)
 {
     foreach (var defaultValue in publishingPageModel.DefaultValues)
     {
         if (!string.IsNullOrEmpty(defaultValue.FieldName))
         {
             if (newFileItem.FieldValues.ContainsKey(defaultValue.FieldName))
             {
                 if (newFileItem[defaultValue.FieldName] == null)
                 {
                     newFileItem[defaultValue.FieldName] = defaultValue.Value;
                 }
             }
         }
         else if (defaultValue.FieldId.HasValue && defaultValue.FieldId != default(Guid))
         {
             // unsupported by CSOM API yet
         }
     }
 }
Example #7
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeployPublishingPageWithCustomeLayout()
        {
            // PageLayoutFileName allows you to setup your own publishing page layout file name
            // it should be a file name of the file inside 'master page' gallery

            var customPublishing = new PublishingPageDefinition
            {
                Title              = "Custom publishing",
                FileName           = "Custom-publishing.aspx",
                PageLayoutFileName = "__ specify a publishing page layout file name here ___"
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web.AddHostList(BuiltInListDefinitions.Pages, list =>
                {
                    list
                    .AddPublishingPage(customPublishing);
                });
            });

            DeployModel(model);
        }
Example #8
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeployPublishingPage()
        {
            var aboutPublishing = new PublishingPageDefinition
            {
                Title              = "About publishing",
                FileName           = "About-publishing.aspx",
                PageLayoutFileName = BuiltInPublishingPageLayoutNames.ArticleLeft
            };

            var howToPublising = new PublishingPageDefinition
            {
                Title              = "How to publish",
                FileName           = "How-to-publish.aspx",
                PageLayoutFileName = BuiltInPublishingPageLayoutNames.ArticleRight
            };

            var publishingLinks = new PublishingPageDefinition
            {
                Title              = "Publishing links",
                FileName           = "Publishing-links.aspx",
                PageLayoutFileName = BuiltInPublishingPageLayoutNames.ArticleLinks
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web.AddHostList(BuiltInListDefinitions.Pages, list =>
                {
                    list
                    .AddPublishingPage(aboutPublishing)
                    .AddPublishingPage(howToPublising)
                    .AddPublishingPage(publishingLinks);
                });
            });

            DeployModel(model);
        }
        protected ListItem FindPublishingPage(List list, Folder folder, PublishingPageDefinition definition)
        {
            var pageName = GetSafePageFileName(definition);
            var file = GetCurrentPage(list, folder, pageName);

            if (file != null)
                return file.ListItemAllFields;

            return null;
        }
        private void DeployPublishingPage(object modelHost, SPList list, SPFolder folder, PublishingPageDefinition publishingPageModel)
        {
            var targetPage = FindPublishingPage(folder, publishingPageModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioning,
                Object = targetPage == null ? null : targetPage.File,
                ObjectType = typeof(SPFile),
                ObjectDefinition = publishingPageModel,
                ModelHost = modelHost
            });

            if (targetPage == null)
                targetPage = CreatePublishingPage(modelHost, folder, publishingPageModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioned,
                Object = targetPage.File,
                ObjectType = typeof(SPFile),
                ObjectDefinition = publishingPageModel,
                ModelHost = modelHost
            });

            ModuleFileModelHandler.WithSafeFileOperation(list, folder,
                targetPage.Url,
                GetSafePublishingPageFileName(publishingPageModel),
                Encoding.UTF8.GetBytes(PublishingPageTemplates.RedirectionPageMarkup),
                false,
                null,
                afterFile =>
                {
                    var web = list.ParentWeb;
                    var currentPageLayoutItem = FindPageLayoutItem(web, publishingPageModel.PageLayoutFileName);

                    var pageItem = afterFile.Item;

                    // settig up dfault values if there is PublishingPageLayout setup
                    FieldLookupService.EnsureDefaultValues(pageItem, publishingPageModel.DefaultValues);

                    pageItem[BuiltInFieldId.Title] = publishingPageModel.Title;
                    pageItem[BuiltInPublishingFieldId.Description] = publishingPageModel.Description;

                    pageItem[BuiltInPublishingFieldId.ExpiryDate] = NeverEndDate;
                    pageItem[BuiltInPublishingFieldId.StartDate] = ImmediateDate;

                    pageItem[BuiltInFieldId.ContentTypeId] = BuiltInPublishingContentTypeId.Page;

                    pageItem[BuiltInPublishingFieldId.Contact] = list.ParentWeb.CurrentUser;

                    if (!string.IsNullOrEmpty(publishingPageModel.Content))
                        pageItem[BuiltInPublishingFieldId.PublishingPageContent] = publishingPageModel.Content;

                    var contentTypeStringValue = ConvertUtils.ToString(currentPageLayoutItem[BuiltInPublishingFieldId.AssociatedContentType]);

                    if (!string.IsNullOrEmpty(contentTypeStringValue))
                    {
                        var contentTypeValues = contentTypeStringValue.Split(new string[] { ";#" }, StringSplitOptions.None);
                        var contentTypeName = contentTypeValues[1];
                        var contentTypeId = contentTypeValues[2];

                        pageItem[BuiltInInternalFieldNames.ContentTypeId] = contentTypeId;
                    }

                    // overrideing with custom one
                    if (!string.IsNullOrEmpty(publishingPageModel.ContentTypeName))
                    {
                        var listContentType = FindListContentType(list, publishingPageModel.ContentTypeName);

                        if (listContentType == null)
                        {
                            throw new ArgumentNullException(
                                string.Format("Cannot find content type with Name:[{0}] in List:[{1}]",
                                    new string[]
                                    {
                                        publishingPageModel.ContentTypeName,
                                        list.Title
                                    }));
                        }

                        pageItem[BuiltInFieldId.ContentTypeId] = listContentType.Id.ToString();
                    }

                    pageItem[BuiltInPublishingFieldId.PageLayout] = new SPFieldUrlValue()
                    {
                        Url = currentPageLayoutItem.File.ServerRelativeUrl,
                        Description = currentPageLayoutItem.Title
                    };

                    pageItem.Properties["PublishingPageLayoutName"] = currentPageLayoutItem.Name;

                    FieldLookupService.EnsureValues(pageItem, publishingPageModel.Values, true);

                    pageItem.SystemUpdate();
                });
        }
        protected SPListItem FindPublishingPage(SPFolder folder, PublishingPageDefinition webpartPageModel)
        {
            var webPartPageName = GetSafePublishingPageFileName(webpartPageModel);

            if (!webPartPageName.EndsWith(".aspx"))
                webPartPageName += ".aspx";

            foreach (SPFile file in folder.Files)
                if (file.Name.ToUpper() == webPartPageName.ToUpper())
                    return file.Item;

            return null;
        }
        protected string GetSafePublishingPageFileName(PublishingPageDefinition pageModel)
        {
            var webPartPageName = pageModel.FileName;

            if (!webPartPageName.EndsWith(".aspx"))
                webPartPageName += ".aspx";

            return webPartPageName;
        }
        private SPListItem CreatePublishingPage(object modelHost, SPFolder folder, PublishingPageDefinition publishingPageModel)
        {
            var pageName = GetSafePublishingPageFileName(publishingPageModel);
            var fileContent = Encoding.UTF8.GetBytes(PublishingPageTemplates.RedirectionPageMarkup);

            ModuleFileModelHandler.DeployModuleFile(folder,
                  SPUrlUtility.CombineUrl(folder.ServerRelativeUrl, pageName),
                  pageName,
                  fileContent,
                  true,
                  null,
                  null);

            return FindPublishingPage(folder, publishingPageModel);
        }
 private static void EnsureDefaultValues(ListItem newFileItem, PublishingPageDefinition publishingPageModel)
 {
     foreach (var defaultValue in publishingPageModel.DefaultValues)
     {
         if (!string.IsNullOrEmpty(defaultValue.FieldName))
         {
             if (newFileItem.FieldValues.ContainsKey(defaultValue.FieldName))
             {
                 if (newFileItem[defaultValue.FieldName] == null)
                     newFileItem[defaultValue.FieldName] = defaultValue.Value;
             }
         }
         else if (defaultValue.FieldId.HasValue && defaultValue.FieldId != default(Guid))
         {
             // unsupported by CSOM API yet
         }
     }
 }
Example #15
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeployPublishingPageToFolders()
        {
            var archive = new FolderDefinition()
            {
                Name = "Archive"
            };

            var year2014 = new FolderDefinition()
            {
                Name = "2014"
            };

            var year2015 = new FolderDefinition()
            {
                Name = "2015"
            };

            var oct2014Article = new PublishingPageDefinition
            {
                Title              = "October 2014",
                FileName           = "october-2014.aspx",
                PageLayoutFileName = BuiltInPublishingPageLayoutNames.ArticleLeft
            };

            var dec2014Article = new PublishingPageDefinition
            {
                Title              = "December 2014",
                FileName           = "december-2014.aspx",
                PageLayoutFileName = BuiltInPublishingPageLayoutNames.ArticleLeft
            };

            var oct2015Article = new PublishingPageDefinition
            {
                Title              = "October 2015",
                FileName           = "october-2015.aspx",
                PageLayoutFileName = BuiltInPublishingPageLayoutNames.ArticleLeft
            };

            var dec2015Article = new PublishingPageDefinition
            {
                Title              = "December 2015",
                FileName           = "december-2015.aspx",
                PageLayoutFileName = BuiltInPublishingPageLayoutNames.ArticleLeft
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web.AddHostList(BuiltInListDefinitions.Pages, list =>
                {
                    list.AddFolder(archive, folder =>
                    {
                        folder
                        .AddFolder(year2014, archive2014 =>
                        {
                            archive2014
                            .AddPublishingPage(oct2014Article)
                            .AddPublishingPage(dec2014Article);
                        })
                        .AddFolder(year2015, archive2015 =>
                        {
                            archive2015
                            .AddPublishingPage(oct2015Article)
                            .AddPublishingPage(dec2015Article);
                        });
                    });
                });
            });

            DeployModel(model);
        }
Example #16
0
        private void DeployPublishingPage(object modelHost, SPList list, SPFolder folder, PublishingPageDefinition publishingPageModel)
        {
            var targetPage = FindPublishingPage(folder, publishingPageModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = targetPage == null ? null : targetPage.File,
                ObjectType       = typeof(SPFile),
                ObjectDefinition = publishingPageModel,
                ModelHost        = modelHost
            });

            if (targetPage == null)
            {
                targetPage = CreatePublishingPage(modelHost, folder, publishingPageModel);
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = targetPage.File,
                ObjectType       = typeof(SPFile),
                ObjectDefinition = publishingPageModel,
                ModelHost        = modelHost
            });

            ModuleFileModelHandler.WithSafeFileOperation(list, folder,
                                                         targetPage.Url,
                                                         GetSafePublishingPageFileName(publishingPageModel),
                                                         Encoding.UTF8.GetBytes(PublishingPageTemplates.RedirectionPageMarkup),
                                                         false,
                                                         null,
                                                         afterFile =>
            {
                var web = list.ParentWeb;
                var currentPageLayoutItem = FindPageLayoutItem(web, publishingPageModel.PageLayoutFileName);

                var pageItem = afterFile.Item;

                // settig up dfault values if there is PublishingPageLayout setup
                FieldLookupService.EnsureDefaultValues(pageItem, publishingPageModel.DefaultValues);

                pageItem[BuiltInFieldId.Title] = publishingPageModel.Title;
                pageItem[BuiltInPublishingFieldId.Description] = publishingPageModel.Description;

                pageItem[BuiltInPublishingFieldId.ExpiryDate] = NeverEndDate;
                pageItem[BuiltInPublishingFieldId.StartDate]  = ImmediateDate;

                pageItem[BuiltInFieldId.ContentTypeId] = BuiltInPublishingContentTypeId.Page;

                pageItem[BuiltInPublishingFieldId.Contact] = list.ParentWeb.CurrentUser;

                if (!string.IsNullOrEmpty(publishingPageModel.Content))
                {
                    pageItem[BuiltInPublishingFieldId.PublishingPageContent] = publishingPageModel.Content;
                }

                var contentTypeStringValue = ConvertUtils.ToString(currentPageLayoutItem[BuiltInPublishingFieldId.AssociatedContentType]);

                if (!string.IsNullOrEmpty(contentTypeStringValue))
                {
                    var contentTypeValues = contentTypeStringValue.Split(new string[] { ";#" }, StringSplitOptions.None);
                    var contentTypeName   = contentTypeValues[1];
                    var contentTypeId     = contentTypeValues[2];

                    pageItem[BuiltInInternalFieldNames.ContentTypeId] = contentTypeId;
                }

                // overrideing with custom one
                if (!string.IsNullOrEmpty(publishingPageModel.ContentTypeName))
                {
                    var listContentType = FindListContentType(list, publishingPageModel.ContentTypeName);

                    if (listContentType == null)
                    {
                        throw new ArgumentNullException(
                            string.Format("Cannot find content type with Name:[{0}] in List:[{1}]",
                                          new string[]
                        {
                            publishingPageModel.ContentTypeName,
                            list.Title
                        }));
                    }

                    pageItem[BuiltInFieldId.ContentTypeId] = listContentType.Id.ToString();
                }

                pageItem[BuiltInPublishingFieldId.PageLayout] = new SPFieldUrlValue()
                {
                    Url         = currentPageLayoutItem.File.ServerRelativeUrl,
                    Description = currentPageLayoutItem.Title
                };

                pageItem.Properties["PublishingPageLayoutName"] = currentPageLayoutItem.Name;

                FieldLookupService.EnsureValues(pageItem, publishingPageModel.Values, true);

                pageItem.SystemUpdate();
            });
        }
 public static ModelNode AddPublishingPage(this ModelNode model, PublishingPageDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNode(definition, action));
 }
 public static TModelNode AddHostPublishingPage <TModelNode>(this TModelNode model, PublishingPageDefinition definition)
     where TModelNode : ModelNode, IListItemHostModelNode, new()
 {
     return(AddHostPublishingPage(model, definition, null));
 }
 public static ModelNode AddHostPublishingPage(this ModelNode model, PublishingPageDefinition definition)
 {
     return(AddHostPublishingPage(model, definition, null));
 }
Example #20
0
        private void DeployPublishingPage(object modelHost, SPList list, SPFolder folder, PublishingPageDefinition publishingPageModel)
        {
            var targetPage = FindPublishingPage(folder, publishingPageModel);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = targetPage == null ? null : targetPage.File,
                ObjectType       = typeof(SPFile),
                ObjectDefinition = publishingPageModel,
                ModelHost        = modelHost
            });

            if (targetPage == null)
            {
                targetPage = CreatePublishingPage(modelHost, folder, publishingPageModel);
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = targetPage.File,
                ObjectType       = typeof(SPFile),
                ObjectDefinition = publishingPageModel,
                ModelHost        = modelHost
            });

            ModuleFileModelHandler.WithSafeFileOperation(list, folder,
                                                         targetPage.Url,
                                                         GetSafePublishingPageFileName(publishingPageModel),
                                                         Encoding.UTF8.GetBytes(PublishingPageTemplates.RedirectionPageMarkup),
                                                         false,
                                                         null,
                                                         afterFile =>
            {
                var web = list.ParentWeb;
                var currentPageLayoutItem = FindPageLayoutItem(web, publishingPageModel.PageLayoutFileName);

                var pageItem = afterFile.Item;

                pageItem[BuiltInFieldId.Title] = publishingPageModel.Title;
                pageItem[BuiltInPublishingFieldId.Description] = publishingPageModel.Description;

                pageItem[BuiltInPublishingFieldId.ExpiryDate] = NeverEndDate;
                pageItem[BuiltInPublishingFieldId.StartDate]  = ImmediateDate;

                pageItem[BuiltInPublishingFieldId.Contact] = list.ParentWeb.CurrentUser;

                pageItem[BuiltInPublishingFieldId.PublishingPageContent] = publishingPageModel.Content;

                var contentTypeStringValue = ConvertUtils.ToString(currentPageLayoutItem[BuiltInPublishingFieldId.AssociatedContentType]);

                if (!string.IsNullOrEmpty(contentTypeStringValue))
                {
                    var contentTypeValues = contentTypeStringValue.Split(new string[] { ";#" }, StringSplitOptions.None);
                    var contentTypeName   = contentTypeValues[1];
                    var contentTypeId     = contentTypeValues[2];

                    pageItem[BuiltInInternalFieldNames.ContentTypeId] = contentTypeId;
                }

                pageItem[BuiltInPublishingFieldId.PageLayout] = new SPFieldUrlValue()
                {
                    Url         = currentPageLayoutItem.File.ServerRelativeUrl,
                    Description = currentPageLayoutItem.Title
                };

                pageItem.Properties["PublishingPageLayoutName"] = currentPageLayoutItem.Name;

                pageItem.SystemUpdate();
            });
        }
 public static TModelNode AddHostPublishingPage <TModelNode>(this TModelNode model, PublishingPageDefinition definition,
                                                             Action <PublishingPageModelNode> action)
     where TModelNode : ModelNode, IListItemHostModelNode, new()
 {
     return(model.AddTypedDefinitionNodeWithOptions(definition, action, ModelNodeOptions.New().NoSelfProcessing()));
 }
 private void EnsureDefaultValues(SPListItem newFileItem, PublishingPageDefinition publishingPageModel)
 {
     foreach (var defaultValue in publishingPageModel.DefaultValues)
     {
         if (!string.IsNullOrEmpty(defaultValue.FieldName))
         {
             if (newFileItem.Fields.ContainsFieldWithStaticName(defaultValue.FieldName))
             {
                 if (newFileItem[defaultValue.FieldName] == null)
                     newFileItem[defaultValue.FieldName] = defaultValue.Value;
             }
         }
         else if (defaultValue.FieldId.HasValue && defaultValue.FieldId != default(Guid))
         {
             if (newFileItem.Fields.OfType<SPField>().Any(f => f.Id == defaultValue.FieldId.Value))
             {
                 if (newFileItem[defaultValue.FieldId.Value] == null)
                     newFileItem[defaultValue.FieldId.Value] = defaultValue.Value;
             }
         }
     }
 }
 public static TModelNode AddPublishingPage <TModelNode>(this TModelNode model, PublishingPageDefinition definition,
                                                         Action <PublishingPageModelNode> action)
     where TModelNode : ModelNode, IListItemHostModelNode, new()
 {
     return(model.AddTypedDefinitionNode(definition, action));
 }
 public static ModelNode AddHostPublishingPage(this ModelNode model, PublishingPageDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNodeWithOptions(definition, action, ModelNodeOptions.New().NoSelfProcessing()));
 }