protected override void ExecuteCmdlet() { //Fix loading of modernization framework FixAssemblyResolving(); // Configure folder to export string folderToExportTo = Environment.CurrentDirectory; if (!string.IsNullOrEmpty(this.Folder)) { if (!Directory.Exists(this.Folder)) { throw new Exception($"Folder '{this.Folder}' does not exist"); } folderToExportTo = this.Folder; } // Export built in web part mapping if (this.BuiltInWebPartMapping) { string fileName = Path.Combine(folderToExportTo, "webpartmapping.xml"); if (System.IO.File.Exists(fileName) && !Overwrite) { Console.WriteLine($"Skipping the export from the built-in webpart mapping file {fileName} as this already exists. Use the -Overwrite flag to overwrite if needed."); } else { // Load the default one from resources into a model, no need for persisting this file string webpartMappingFileContents = WebPartMappingLoader.LoadFile("SharePointPnP.PowerShell.Commands.ClientSidePages.webpartmapping.xml"); System.IO.File.WriteAllText(fileName, webpartMappingFileContents); } } // Export built in page layout mapping if (this.BuiltInPageLayoutMapping) { string fileName = Path.Combine(folderToExportTo, "pagelayoutmapping.xml"); if (System.IO.File.Exists(fileName) && !Overwrite) { Console.WriteLine($"Skipping the export from the built-in pagelayout mapping file {fileName} as this already exists. Use the -Overwrite flag to overwrite if needed."); } else { // Load the default one from resources into a model, no need for persisting this file string pageLayoutMappingFileContents = WebPartMappingLoader.LoadFile("SharePointPnP.PowerShell.Commands.ClientSidePages.pagelayoutmapping.xml"); System.IO.File.WriteAllText(fileName, pageLayoutMappingFileContents); } } // Export custom page layout mapping if (this.CustomPageLayoutMapping) { if (!this.ClientContext.Web.IsPublishingWeb()) { throw new Exception("The -CustomPageLayoutMapping parameter only works for publishing sites."); } Guid siteId = this.ClientContext.Site.EnsureProperty(p => p.Id); string fileName = $"custompagelayoutmapping-{siteId.ToString()}.xml"; if (System.IO.File.Exists(Path.Combine(folderToExportTo, fileName)) && !Overwrite) { Console.WriteLine($"Skipping the export from the custom pagelayout mapping file {Path.Combine(folderToExportTo, fileName)} as this already exists. Use the -Overwrite flag to overwrite if needed."); } else { var analyzer = new PageLayoutAnalyser(this.ClientContext); analyzer.AnalyseAll(); analyzer.GenerateMappingFile(folderToExportTo, fileName); } } }
protected override void ExecuteCmdlet() { string tempPath = null; try { //Fix loading of modernization framework FixAssemblyResolving(); // Load the page to transform var page = Identity.GetPage(this.ClientContext.Web); if (page == null) { throw new Exception($"Page '{Identity?.Name}' does not exist"); } if (string.IsNullOrEmpty(this.WebPartMappingFile)) { // Load the default one from resources string webpartMappingFileContents = WebPartMappingLoader.LoadFile("SharePointPnP.PowerShell.Commands.ClientSidePages.webpartmapping.xml"); // Save the file to a temp location tempPath = System.IO.Path.GetTempFileName(); System.IO.File.WriteAllText(tempPath, webpartMappingFileContents); this.WebPartMappingFile = tempPath; this.WriteVerbose("Using embedded webpartmapping file (https://github.com/SharePoint/PnP-PowerShell/blob/master/Commands/ClientSidePages/webpartmapping.xml)"); } // Validate webpartmappingfile if (!string.IsNullOrEmpty(this.WebPartMappingFile)) { if (!System.IO.File.Exists(this.WebPartMappingFile)) { throw new Exception($"Provided webpartmapping file {this.WebPartMappingFile} does not exist"); } } // Create transformator instance PageTransformator pageTransformator = new PageTransformator(this.ClientContext, this.WebPartMappingFile); // Setup Transformation information PageTransformationInformation pti = new PageTransformationInformation(page) { Overwrite = this.Overwrite, TargetPageTakesSourcePageName = this.TakeSourcePageName, ReplaceHomePageWithDefaultHomePage = this.ReplaceHomePageWithDefault, ModernizationCenterInformation = new ModernizationCenterInformation() { AddPageAcceptBanner = this.AddPageAcceptBanner }, }; string serverRelativeClientPageUrl = pageTransformator.Transform(pti); ClientSidePagePipeBind cpb = new ClientSidePagePipeBind(System.IO.Path.GetFileName(serverRelativeClientPageUrl)); var clientSidePage = cpb.GetPage(this.ClientContext); if (clientSidePage != null) { WriteObject(clientSidePage); } } finally { if (!string.IsNullOrEmpty(tempPath) && System.IO.File.Exists(tempPath)) { System.IO.File.Delete(tempPath); } } }
protected override void ExecuteCmdlet() { //Fix loading of modernization framework FixAssemblyResolving(); // Load the page to transform var page = Identity.GetPage(this.ClientContext.Web); if (page == null) { throw new Exception($"Page '{Identity?.Name}' does not exist"); } PageTransformation webPartMappingModel = null; if (string.IsNullOrEmpty(this.WebPartMappingFile)) { // Load xml mapping data XmlSerializer xmlMapping = new XmlSerializer(typeof(PageTransformation)); // Load the default one from resources into a model, no need for persisting this file string webpartMappingFileContents = WebPartMappingLoader.LoadFile("SharePointPnP.PowerShell.Commands.ClientSidePages.webpartmapping.xml"); using (var stream = GenerateStreamFromString(webpartMappingFileContents)) { webPartMappingModel = (PageTransformation)xmlMapping.Deserialize(stream); } this.WriteVerbose("Using embedded webpartmapping file (https://github.com/SharePoint/PnP-PowerShell/blob/master/Commands/ClientSidePages/webpartmapping.xml)"); } // Validate webpartmappingfile if (!string.IsNullOrEmpty(this.WebPartMappingFile)) { if (!System.IO.File.Exists(this.WebPartMappingFile)) { throw new Exception($"Provided webpartmapping file {this.WebPartMappingFile} does not exist"); } } // Create target client context (when needed) ClientContext targetContext = null; if (!string.IsNullOrEmpty(TargetWebUrl)) { targetContext = this.ClientContext.Clone(TargetWebUrl); } // Create transformator instance PageTransformator pageTransformator = null; if (!string.IsNullOrEmpty(this.WebPartMappingFile)) { // Use web part mapping file pageTransformator = new PageTransformator(this.ClientContext, targetContext, this.WebPartMappingFile); } else { // Use web part mapping model loaded from embedded mapping file pageTransformator = new PageTransformator(this.ClientContext, targetContext, webPartMappingModel); } // Setup Transformation information PageTransformationInformation pti = new PageTransformationInformation(page) { Overwrite = this.Overwrite, TargetPageTakesSourcePageName = this.TakeSourcePageName, ReplaceHomePageWithDefaultHomePage = this.ReplaceHomePageWithDefault, KeepPageSpecificPermissions = !this.SkipItemLevelPermissionCopyToClientSidePage, CopyPageMetadata = this.CopyPageMetadata, ModernizationCenterInformation = new ModernizationCenterInformation() { AddPageAcceptBanner = this.AddPageAcceptBanner }, }; // Set mapping properties pti.MappingProperties["SummaryLinksToQuickLinks"] = (!SummaryLinksToHtml).ToString().ToLower(); pti.MappingProperties["UseCommunityScriptEditor"] = UseCommunityScriptEditor.ToString().ToLower(); // Clear the client side component cache if (this.ClearCache) { CacheManager.Instance.ClearAllCaches(); } string serverRelativeClientPageUrl = pageTransformator.Transform(pti); // Output the server relative url to the newly created page if (!string.IsNullOrEmpty(serverRelativeClientPageUrl)) { WriteObject(serverRelativeClientPageUrl); } }
protected override void ExecuteCmdlet() { //Fix loading of modernization framework FixLocalAssemblyResolving(); // Load the page to transform Identity.Library = this.Library; Identity.Folder = this.Folder; ListItem page = null; if (this.PublishingPage) { page = Identity.GetPage(this.ClientContext.Web, CacheManager.Instance.GetPublishingPagesLibraryName(this.ClientContext)); } else { if (this.Folder == null || !this.Folder.Equals(rootFolder, StringComparison.InvariantCultureIgnoreCase)) { page = Identity.GetPage(this.ClientContext.Web, "sitepages"); } } if (page == null && !this.Folder.Equals(rootFolder, StringComparison.InvariantCultureIgnoreCase)) { throw new Exception($"Page '{Identity?.Name}' does not exist"); } // Publishing specific validation if (this.PublishingPage && string.IsNullOrEmpty(this.TargetWebUrl) && TargetConnection == null) { throw new Exception($"Publishing page transformation is only supported when transformating into another site collection. Use the -TargetWebUrl to specify a modern target site."); } // Load transformation models PageTransformation webPartMappingModel = null; if (string.IsNullOrEmpty(this.WebPartMappingFile)) { // Load xml mapping data XmlSerializer xmlMapping = new XmlSerializer(typeof(PageTransformation)); // Load the default one from resources into a model, no need for persisting this file string webpartMappingFileContents = WebPartMappingLoader.LoadFile("SharePointPnP.PowerShell.Commands.ClientSidePages.webpartmapping.xml"); using (var stream = GenerateStreamFromString(webpartMappingFileContents)) { webPartMappingModel = (PageTransformation)xmlMapping.Deserialize(stream); } this.WriteVerbose("Using embedded webpartmapping file. Use Export-PnPClientSidePageMapping to get that file in case you want to base your version of the embedded version."); } // Validate webpartmappingfile if (!string.IsNullOrEmpty(this.WebPartMappingFile)) { if (!System.IO.File.Exists(this.WebPartMappingFile)) { throw new Exception($"Provided webpartmapping file {this.WebPartMappingFile} does not exist"); } } if (this.PublishingPage && !string.IsNullOrEmpty(this.PageLayoutMapping) && !System.IO.File.Exists(this.PageLayoutMapping)) { throw new Exception($"Provided pagelayout mapping file {this.PageLayoutMapping} does not exist"); } // Create target client context (when needed) ClientContext targetContext = null; if (TargetConnection == null) { if (!string.IsNullOrEmpty(TargetWebUrl)) { targetContext = this.ClientContext.Clone(TargetWebUrl); } } else { targetContext = TargetConnection.Context; } // Create transformator instance PageTransformator pageTransformator = null; PublishingPageTransformator publishingPageTransformator = null; if (!string.IsNullOrEmpty(this.WebPartMappingFile)) { // Using custom web part mapping file if (this.PublishingPage) { if (!string.IsNullOrEmpty(this.PageLayoutMapping)) { // Using custom page layout mapping file + default one (they're merged together) publishingPageTransformator = new PublishingPageTransformator(this.ClientContext, targetContext, this.WebPartMappingFile, this.PageLayoutMapping); } else { // Using default page layout mapping file publishingPageTransformator = new PublishingPageTransformator(this.ClientContext, targetContext, this.WebPartMappingFile, null); } } else { // Use web part mapping file pageTransformator = new PageTransformator(this.ClientContext, targetContext, this.WebPartMappingFile); } } else { // Using default web part mapping file if (this.PublishingPage) { if (!string.IsNullOrEmpty(this.PageLayoutMapping)) { // Load and validate the custom mapping file PageLayoutManager pageLayoutManager = new PageLayoutManager(); var pageLayoutMappingModel = pageLayoutManager.LoadPageLayoutMappingFile(this.PageLayoutMapping); // Using custom page layout mapping file + default one (they're merged together) publishingPageTransformator = new PublishingPageTransformator(this.ClientContext, targetContext, webPartMappingModel, pageLayoutMappingModel); } else { // Using default page layout mapping file publishingPageTransformator = new PublishingPageTransformator(this.ClientContext, targetContext, webPartMappingModel, null); } } else { // Use web part mapping model loaded from embedded mapping file pageTransformator = new PageTransformator(this.ClientContext, targetContext, webPartMappingModel); } } // Setup logging if (this.LogType == ClientSidePageTransformatorLogType.File) { if (this.PublishingPage) { publishingPageTransformator.RegisterObserver(new MarkdownObserver(folder: this.LogFolder, includeVerbose: this.LogVerbose, includeDebugEntries: this.LogVerbose)); } else { pageTransformator.RegisterObserver(new MarkdownObserver(folder: this.LogFolder, includeVerbose: this.LogVerbose, includeDebugEntries: this.LogVerbose)); } } else if (this.LogType == ClientSidePageTransformatorLogType.SharePoint) { if (this.PublishingPage) { publishingPageTransformator.RegisterObserver(new MarkdownToSharePointObserver(targetContext ?? this.ClientContext, includeVerbose: this.LogVerbose, includeDebugEntries: this.LogVerbose)); } else { pageTransformator.RegisterObserver(new MarkdownToSharePointObserver(targetContext ?? this.ClientContext, includeVerbose: this.LogVerbose, includeDebugEntries: this.LogVerbose)); } } // Clear the client side component cache if (this.ClearCache) { CacheManager.Instance.ClearAllCaches(); } string serverRelativeClientPageUrl = ""; if (this.PublishingPage) { // Setup Transformation information PublishingPageTransformationInformation pti = new PublishingPageTransformationInformation(page) { Overwrite = this.Overwrite, KeepPageSpecificPermissions = !this.SkipItemLevelPermissionCopyToClientSidePage, PublishCreatedPage = !this.DontPublish, DisablePageComments = this.DisablePageComments, TargetPageName = this.PublishingTargetPageName, SkipUrlRewrite = this.SkipUrlRewriting }; // Set mapping properties pti.MappingProperties["SummaryLinksToQuickLinks"] = (!SummaryLinksToHtml).ToString().ToLower(); pti.MappingProperties["UseCommunityScriptEditor"] = UseCommunityScriptEditor.ToString().ToLower(); serverRelativeClientPageUrl = publishingPageTransformator.Transform(pti); } else { Microsoft.SharePoint.Client.File fileToModernize = null; if (this.Folder != null && this.Folder.Equals(rootFolder, StringComparison.InvariantCultureIgnoreCase)) { // Load the page file from the site root folder var webServerRelativeUrl = this.ClientContext.Web.EnsureProperty(p => p.ServerRelativeUrl); fileToModernize = this.ClientContext.Web.GetFileByServerRelativeUrl($"{webServerRelativeUrl}/{this.Identity.Name}"); this.ClientContext.Load(fileToModernize); this.ClientContext.ExecuteQueryRetry(); } // Setup Transformation information PageTransformationInformation pti = new PageTransformationInformation(page) { SourceFile = fileToModernize, Overwrite = this.Overwrite, TargetPageTakesSourcePageName = this.TakeSourcePageName, ReplaceHomePageWithDefaultHomePage = this.ReplaceHomePageWithDefault, KeepPageSpecificPermissions = !this.SkipItemLevelPermissionCopyToClientSidePage, CopyPageMetadata = this.CopyPageMetadata, PublishCreatedPage = !this.DontPublish, DisablePageComments = this.DisablePageComments, SkipUrlRewrite = this.SkipUrlRewriting, ModernizationCenterInformation = new ModernizationCenterInformation() { AddPageAcceptBanner = this.AddPageAcceptBanner }, }; // Set mapping properties pti.MappingProperties["SummaryLinksToQuickLinks"] = (!SummaryLinksToHtml).ToString().ToLower(); pti.MappingProperties["UseCommunityScriptEditor"] = UseCommunityScriptEditor.ToString().ToLower(); serverRelativeClientPageUrl = pageTransformator.Transform(pti); } // Flush log if (this.LogType != ClientSidePageTransformatorLogType.None) { if (!this.LogSkipFlush) { if (this.PublishingPage) { publishingPageTransformator.FlushObservers(); } else { pageTransformator.FlushObservers(); } } } // Output the server relative url to the newly created page if (!string.IsNullOrEmpty(serverRelativeClientPageUrl)) { WriteObject(serverRelativeClientPageUrl); } }
protected override void ExecuteCmdlet() { string tempPath = null; try { //Fix loading of modernization framework FixAssemblyResolving(); // Load the page to transform var page = Identity.GetPage(this.ClientContext.Web); if (page == null) { throw new Exception($"Page '{Identity?.Name}' does not exist"); } if (string.IsNullOrEmpty(this.WebPartMappingFile)) { // Load the default one from resources string webpartMappingFileContents = WebPartMappingLoader.LoadFile("SharePointPnP.PowerShell.Commands.ClientSidePages.webpartmapping.xml"); // Save the file to a temp location tempPath = System.IO.Path.GetTempFileName(); System.IO.File.WriteAllText(tempPath, webpartMappingFileContents); this.WebPartMappingFile = tempPath; this.WriteVerbose("Using embedded webpartmapping file (https://github.com/SharePoint/PnP-PowerShell/blob/master/Commands/ClientSidePages/webpartmapping.xml)"); } // Validate webpartmappingfile if (!string.IsNullOrEmpty(this.WebPartMappingFile)) { if (!System.IO.File.Exists(this.WebPartMappingFile)) { throw new Exception($"Provided webpartmapping file {this.WebPartMappingFile} does not exist"); } } // Create transformator instance PageTransformator pageTransformator = new PageTransformator(this.ClientContext, this.WebPartMappingFile); // Setup Transformation information PageTransformationInformation pti = new PageTransformationInformation(page) { Overwrite = this.Overwrite, TargetPageTakesSourcePageName = this.TakeSourcePageName, ReplaceHomePageWithDefaultHomePage = this.ReplaceHomePageWithDefault, KeepPageSpecificPermissions = !this.SkipItemLevelPermissionCopyToClientSidePage, CopyPageMetadata = this.CopyPageMetadata, ModernizationCenterInformation = new ModernizationCenterInformation() { AddPageAcceptBanner = this.AddPageAcceptBanner }, }; // Clear the client side component cache if (this.ClearCache) { CacheManager.Instance.ClearClientSideComponents(); CacheManager.Instance.ClearFieldsToCopy(); CacheManager.Instance.ClearBaseTemplate(); } string serverRelativeClientPageUrl = pageTransformator.Transform(pti); // Output the server relative url to the newly created page if (!string.IsNullOrEmpty(serverRelativeClientPageUrl)) { WriteObject(serverRelativeClientPageUrl); } } finally { if (!string.IsNullOrEmpty(tempPath) && System.IO.File.Exists(tempPath)) { System.IO.File.Delete(tempPath); } } }