internal static ProvisioningTemplate GetTemplate(Guid templateId) { HttpContentHeaders headers = null; // Get the template via HTTP REST var templateStream = HttpHelper.MakeGetRequestForStreamWithResponseHeaders($"{BaseTemplateGalleryUrl}/api/DownloadTemplate?templateId={templateId}", "application/octet-stream", out headers); // If we have any result if (templateStream != null) { XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider(new OpenXMLConnector(templateStream)); var cd = new ContentDisposition(headers.ContentDisposition.ToString()); var openXMLFileName = cd.FileName; // Determine the name of the XML file inside the PNP Open XML file var xmlTemplateFile = openXMLFileName.ToLower().Replace(".pnp", ".xml"); // Get the template var result = provider.GetTemplate(xmlTemplateFile); result.Connector = provider.Connector; templateStream.Close(); return result; } return null; }
internal static void SaveTemplate(Guid templateId, string path, Func<string, bool> overWriteFileAction = null, Action<string> itemSavedAction = null) { HttpContentHeaders headers = null; // Get the template via HTTP REST var templateStream = HttpHelper.MakeGetRequestForStreamWithResponseHeaders( $"{BaseTemplateGalleryUrl}/api/DownloadTemplate?templateId={templateId}", "application/octet-stream", out headers); // If we have any result if (templateStream != null) { XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider(new OpenXMLConnector(templateStream)); var cd = new ContentDisposition(headers.ContentDisposition.ToString()); var openXMLFileName = cd.FileName; if (path != null) { if (System.IO.Directory.Exists(path)) { var fileName = System.IO.Path.Combine(path, openXMLFileName); bool doSave = false; if (System.IO.File.Exists(fileName)) { if (overWriteFileAction != null) { doSave = overWriteFileAction(fileName); } else { doSave = true; } } else { doSave = true; } if (doSave) { // Save the template to the path using (var fileStream = System.IO.File.Create(fileName)) { templateStream.Seek(0, SeekOrigin.Begin); templateStream.CopyTo(fileStream); } itemSavedAction?.Invoke(fileName); } } } else { // Determine the name of the XML file inside the PNP Open XML file var xmlTemplateFile = openXMLFileName.ToLower().Replace(".pnp", ".xml"); // Get the template var result = provider.GetTemplate(xmlTemplateFile); result.Connector = provider.Connector; templateStream.Close(); } } }
protected override void ExecuteCmdlet() { SelectedWeb.EnsureProperty(w => w.Url); if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } if (!string.IsNullOrEmpty(ResourceFolder)) { if (!System.IO.Path.IsPathRooted(ResourceFolder)) { ResourceFolder = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, ResourceFolder); } } FileInfo fileInfo = new FileInfo(Path); XMLTemplateProvider provider = null; ProvisioningTemplate provisioningTemplate = null; var isOpenOfficeFile = IsOpenOfficeFile(Path); if (isOpenOfficeFile) { var fileSystemconnector = new FileSystemConnector(fileInfo.DirectoryName, ""); provider = new XMLOpenXMLTemplateProvider(new OpenXMLConnector(fileInfo.Name, fileSystemconnector)); var fileName = fileInfo.Name.Substring(0, fileInfo.Name.LastIndexOf(".")) + ".xml"; provisioningTemplate = provider.GetTemplate(fileName); } else { provider = new XMLFileSystemTemplateProvider(fileInfo.DirectoryName, ""); provisioningTemplate = provider.GetTemplate(fileInfo.Name); } if (provisioningTemplate != null) { if (isOpenOfficeFile) { provisioningTemplate.Connector = provider.Connector; } else { FileSystemConnector fileSystemConnector = null; if (ResourceFolder != null) { fileSystemConnector = new FileSystemConnector(ResourceFolder, ""); provisioningTemplate.Connector = fileSystemConnector; } else { provisioningTemplate.Connector = provider.Connector; } } if (Parameters != null) { foreach (var parameter in Parameters.Keys) { if (provisioningTemplate.Parameters.ContainsKey(parameter.ToString())) { provisioningTemplate.Parameters[parameter.ToString()] = Parameters[parameter].ToString(); } else { provisioningTemplate.Parameters.Add(parameter.ToString(), Parameters[parameter].ToString()); } } } var applyingInformation = new ProvisioningTemplateApplyingInformation(); if (this.MyInvocation.BoundParameters.ContainsKey("Handlers")) { applyingInformation.HandlersToProcess = Handlers; } if (this.MyInvocation.BoundParameters.ContainsKey("ExcludeHandlers")) { foreach (var handler in (OfficeDevPnP.Core.Framework.Provisioning.Model.Handlers[])Enum.GetValues(typeof(Handlers))) { if (!ExcludeHandlers.Has(handler) && handler != Handlers.All) { Handlers = Handlers | handler; } } applyingInformation.HandlersToProcess = Handlers; } if (ExtensibilityHandlers != null) { applyingInformation.ExtensibilityHandlers = ExtensibilityHandlers.ToList<ExtensibilityHandler>(); } applyingInformation.ProgressDelegate = (message, step, total) => { WriteProgress(new ProgressRecord(0, string.Format("Applying template to {0}", SelectedWeb.Url), message) { PercentComplete = (100 / total) * step }); }; applyingInformation.MessagesDelegate = (message, type) => { if (type == ProvisioningMessageType.Warning) { WriteWarning(message); } }; applyingInformation.OverwriteSystemPropertyBagValues = OverwriteSystemPropertyBagValues; SelectedWeb.ApplyProvisioningTemplate(provisioningTemplate, applyingInformation); } }