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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
            }
        }