internal static void LocalizeWebParts(this File file, Web web, TokenParser parser, Microsoft.SharePoint.Client.File targetFile, PnPMonitoredScope scope) { var url = targetFile.ServerRelativeUrl; var webParts = file.WebParts; LocalizeParts(web, parser, url, webParts, scope); }
public bool Validate1605(ProvisioningTemplate template, Microsoft.SharePoint.Client.ClientContext ctx) { var directoryFiles = new List <PnP.Framework.Provisioning.Model.File>(); // Get all files from directories foreach (var directory in template.Directories) { var metadataProperties = directory.GetMetadataProperties(); directoryFiles = directory.GetDirectoryFiles(metadataProperties); // Add directory files to template file collection foreach (var dFile in directoryFiles) { var file = new PnP.Framework.Provisioning.Model.File { Src = dFile.Src.Replace(directory.Src + "\\", ""), Folder = directory.Folder }; template.Files.Add(file); } } // validate all files return(Validate(template.Files, ctx)); }
private void AddFileToTemplate(ProvisioningTemplate template, Stream fs, string folder, string fileName, string container) { var source = !string.IsNullOrEmpty(container) ? (container + "/" + fileName) : fileName; template.Connector.SaveFileStream(fileName, container, fs); if (template.Connector is ICommitableFileConnector connector) { connector.Commit(); } var existing = template.Files.FirstOrDefault(f => f.Src == $"{container}/{fileName}" && f.Folder == folder); if (existing != null) { template.Files.Remove(existing); } var newFile = new PnP.Framework.Provisioning.Model.File { Src = source, Folder = folder, Level = FileLevel, Overwrite = FileOverwrite, }; template.Files.Add(newFile); // Determine the output file name and path var outFileName = System.IO.Path.GetFileName(Path); var outPath = new FileInfo(Path).DirectoryName; var fileSystemConnector = new FileSystemConnector(outPath, ""); var formatter = XMLPnPSchemaFormatter.LatestFormatter; var extension = new FileInfo(Path).Extension.ToLowerInvariant(); if (extension == ".pnp") { var provider = new XMLOpenXMLTemplateProvider(template.Connector as OpenXMLConnector); var templateFileName = outFileName.Substring(0, outFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(template, templateFileName, formatter, TemplateProviderExtensions); } else { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(Path, ""); provider.SaveAs(template, Path, formatter, TemplateProviderExtensions); } }
private List <PnP.Framework.Provisioning.Model.File> EnumerateFiles(string folder, string ctid, Hashtable properties) { var files = new List <PnP.Framework.Provisioning.Model.File>(); DirectoryInfo dirInfo = new DirectoryInfo(folder); foreach (var directory in dirInfo.GetDirectories().Where(d => (d.Attributes & FileAttributes.Hidden) == 0)) { files.AddRange(EnumerateFiles(directory.FullName, ctid, properties)); } var fileInfo = dirInfo.GetFiles(Match); foreach (var file in fileInfo.Where(f => (f.Attributes & FileAttributes.Hidden) == 0)) { var unrootedPath = file.FullName.Substring(Folder.Length + 1); var targetFolder = Path.Combine(TargetFolder, unrootedPath.LastIndexOf("\\") > -1 ? unrootedPath.Substring(0, unrootedPath.LastIndexOf("\\")) : ""); targetFolder = targetFolder.Replace('\\', '/'); var modelFile = new PnP.Framework.Provisioning.Model.File() { Folder = targetFolder, Overwrite = true, Src = unrootedPath, }; if (ctid != null) { modelFile.Properties.Add("ContentTypeId", ctid); } if (properties != null && properties.Count > 0) { foreach (var key in properties.Keys) { modelFile.Properties.Add(key.ToString(), properties[key].ToString()); } } modelFile.Security = null; files.Add(modelFile); } return(files); }
public void CanAddWebPartsToForms() { var template = new ProvisioningTemplate(); FileSystemConnector connector = new FileSystemConnector(resourceFolder + @"\..", ""); template.Connector = connector; var webPart = new WebPart { Column = 1, Row = 1, Contents = webpartcontents, Title = "Script Editor", Order = 0, Zone = "Main" }; var myfile = new PnP.Framework.Provisioning.Model.File() { Overwrite = false, Src = "EditForm.aspx", Folder = "SitePages/Forms" }; myfile.WebParts.Add(webPart); template.Files.Add(myfile); using (var ctx = TestCommon.CreateClientContext()) { var parser = new TokenParser(ctx.Web, template); new ObjectFiles().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); ctx.Web.EnsureProperties(w => w.ServerRelativeUrl); var file = ctx.Web.GetFileByServerRelativeUrl( UrlUtility.Combine(ctx.Web.ServerRelativeUrl, UrlUtility.Combine("SitePages/Forms", "EditForm.aspx"))); ctx.Load(file, f => f.Exists); ctx.ExecuteQueryRetry(); // first of all do we even find the form ? Assert.IsTrue(file.Exists); var webParts = file.GetLimitedWebPartManager(PersonalizationScope.Shared).WebParts; ctx.Load(webParts, wp => wp.IncludeWithDefaultProperties(w => w.Id, w => w.WebPart, w => w.WebPart.Title)); ctx.ExecuteQueryRetry(); var webPartsArray = webParts.ToArray(); var webPartExists = false; foreach (var webPartDefinition in webPartsArray) { if (webPartDefinition.WebPart.Title == "Script Editor") { webPartExists = true; // cleanup after ourselves if we can find the webpart... webPartDefinition.DeleteWebPart(); } } ctx.ExecuteQueryRetry(); Assert.IsTrue(webPartExists); } }