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; } } } } }
protected string GetSafePublishingPageFileName(PublishingPageDefinition pageModel) { var webPartPageName = pageModel.FileName; if (!webPartPageName.EndsWith(".aspx")) { webPartPageName += ".aspx"; } return(webPartPageName); }
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 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)); }
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); }
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 } } }
//[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); }
//[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 } } }
//[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); }
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)); }
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())); }