private void RefineTemplate(ClientContext context, ProvisioningTemplate template, ProvisioningTemplateApplyingInformation ptai)
        {
            var web       = context.Web;
            var isSubSite = web.IsSubSite();

            if (isSubSite)
            {
                var tokenParser = new TokenParser(web, template);
                if (template.SiteFields.Any())
                {
                    var columnProvisionManager = new SiteColumnProvisionManager();
                    columnProvisionManager.Provision(web, template, tokenParser, ptai);
                }
                if (template.ContentTypes.Any())
                {
                    var contentTypeProvisionManager = new ContentTypeProvisionManager();
                    contentTypeProvisionManager.Provision(web, template, tokenParser, ptai);
                }
                template.Files.RemoveAll(
                    f => f.Src.EndsWith(".master", StringComparison.InvariantCultureIgnoreCase));
            }
            var pageLib = context.Web.GetPagesLibrary();

            if (template.Files.Any())
            {
                foreach (var file in template.Files)
                {
                    if (file.Src.EndsWith(".aspx"))
                    {
                        file.Src = $"{pageLib.Title}\\{file.Src}";
                    }
                }
            }
        }
        public PnPFileInfo GetPnPTemplateFileFromSite(CreatePnPTemplateRequest request)
        {
            var pnpPackageInfo = new PnPFileInfo();

            try
            {
                using (var context = TokenHelper.GetClientContextWithAccessToken(request.SiteUrl, request.AccessToken))
                {
                    var web = context.Web;
                    context.Load(web, w => w.Title, w => w.ServerRelativeUrl, w => w.Url);
                    context.ExecuteQuery();

                    var siteUrl = new Uri(request.SiteUrl);

                    var pnpFileName = "";

                    if (string.IsNullOrEmpty(request.PnpPackageName))
                    {
                        pnpFileName = BuildPnPPackageName(siteUrl);
                    }
                    else
                    {
                        pnpFileName = request.PnpPackageName;
                        if (pnpFileName.ToLower().EndsWith(".pnp"))
                        {
                            pnpFileName = pnpFileName.Substring(0, pnpFileName.Length - 4);
                        }
                    }
                    var pnpTemplatePath = HostingEnvironment.MapPath($"~/{TemplateFolder}");

                    var ptci = new ProvisioningTemplateCreationInformation(context.Web);
                    var fileSystemConnector = new FileSystemConnector(pnpTemplatePath, "");

                    ptci.PersistBrandingFiles          = true;
                    ptci.PersistPublishingFiles        = true;
                    ptci.PersistMultiLanguageResources = true;
                    ptci.FileConnector = new OpenXMLConnector($"{pnpFileName}.pnp", fileSystemConnector);

                    ptci.ProgressDelegate = delegate(String message, Int32 progress, Int32 total)
                    {
                        Console.WriteLine(@"{0:00}/{1:00} - {2}", progress, total, message);
                    };
                    ProvisioningTemplate template = new ProvisioningTemplate();
                    try
                    {
                        template = web.GetProvisioningTemplate(ptci);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("PnP engine failed to extract template. Error: {0}", ex.Message);
                    }

                    try
                    {
                        PageProvisionManager pageProvisionManager = new PageProvisionManager();
                        var pagesTemplate = pageProvisionManager.Extract(context, ptci);
                        foreach (var theFile in pagesTemplate.Files)
                        {
                            var existingFile =
                                template.Files.FirstOrDefault(
                                    f => f.Src.Equals(theFile.Src, StringComparison.InvariantCultureIgnoreCase));
                            if (existingFile == null)
                            {
                                template.Files.Add(theFile);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to extract Pages. Error: {0}", ex.Message);
                    }
                    if (web.IsSubSite())
                    {
                        try
                        {
                            var siteColumnsTemplate = new SiteColumnProvisionManager().Extract(web, ptci);
                            foreach (var col in siteColumnsTemplate.SiteFields)
                            {
                                if (!template.SiteFields.Contains(col))
                                {
                                    template.SiteFields.Add(col);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Failed to extract Site Columns. Error: {0}", ex.Message);
                        }
                        try
                        {
                            var siteCTTemplate = new ContentTypeProvisionManager().Extract(web, ptci);
                            foreach (var ct in siteCTTemplate.ContentTypes)
                            {
                                if (!template.ContentTypes.Contains(ct))
                                {
                                    template.ContentTypes.Add(ct);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Failed to extract Site Content Types. Error: {0}", ex.Message);
                        }
                    }

                    XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider((OpenXMLConnector)ptci.FileConnector);
                    provider.SaveAs(template, $"{pnpFileName}.xml");
                    string fileLocation = $"{pnpTemplatePath}\\{pnpFileName}.pnp";
                    var    file         = new FileInfo(fileLocation);

                    fileStorageManager.SaveFile($"{TemplateFolder}\\{pnpFileName}.pnp", System.IO.File.ReadAllBytes(fileLocation));

                    pnpPackageInfo = new PnPFileInfo()
                    {
                        Name = $"{pnpFileName}.pnp",
                        Size = file.Length / 1024.0m
                    };
                    if (file.Exists)
                    {
                        file.Delete();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(pnpPackageInfo);
        }
Exemplo n.º 3
0
        private void RefineTemplate(ClientContext context, ProvisioningTemplate template, ProvisioningTemplateApplyingInformation ptai, string type = "NotSet", string docIdPrefix = "")
        {
            try
            {
                switch (type?.ToUpper())
                {
                case "PRE":
                    template.Files.RemoveAll(x => true);
                    template.Navigation = null;
                    break;

                case "POST":
                    template.Lists.RemoveAll(x => true);
                    template.SiteFields.RemoveAll(x => true);
                    template.ContentTypes.RemoveAll(x => true);
                    break;

                case "INIT":
                    template.Files.RemoveAll(x => true);
                    template.Lists.RemoveAll(x => true);
                    template.Navigation = null;
                    break;

                case "LISTS":
                    template.Files.RemoveAll(x => true);
                    template.Navigation = null;
                    break;

                case "FILES":
                    template.Lists.RemoveAll(x => true);
                    template.Navigation = null;
                    break;

                case "NAVIGATION":
                    template.Files.RemoveAll(x => true);
                    template.Lists.RemoveAll(x => true);
                    break;
                }
                var web = context.Web;
                if (!string.IsNullOrEmpty(docIdPrefix))
                {
                    SetDocumentId(context, web, docIdPrefix);
                }
                var isSubSite = web.IsSubSite();
                if (isSubSite)
                {
                    var tokenParser = new TokenParser(web, template);
                    if (template.SiteFields.Any())
                    {
                        var columnProvisionManager = new SiteColumnProvisionManager();
                        columnProvisionManager.Provision(web, template, tokenParser, ptai);
                    }
                    if (template.ContentTypes.Any())
                    {
                        var contentTypeProvisionManager = new ContentTypeProvisionManager();
                        contentTypeProvisionManager.Provision(web, template, tokenParser, ptai);
                    }
                    template.Files.RemoveAll(
                        f => f.Src.EndsWith(".master", StringComparison.InvariantCultureIgnoreCase));
                }
                var pageLib = context.Web.GetPagesLibrary();

                if (template.Files.Any())
                {
                    foreach (var file in template.Files)
                    {
                        if (file.Src.EndsWith(".aspx"))
                        {
                            file.Src = $"{pageLib.Title}\\{file.Src}";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 4
0
        private void btnExtract_Click(object sender, EventArgs e)
        {
            try
            {
                DebugMonitor.Start();
                DebugMonitor.OnOutputDebugString += DebugMonitor_OnOutputDebugString;



                var web = Context.Web;
                Context.Load(web, w => w.Title, w => w.ServerRelativeUrl, w => w.Url);
                Context.ExecuteQuery();

                var siteUrl = new Uri(SiteUrl);

                var pnpFileName = "";

                pnpFileName = BuildPnPPackageName(siteUrl);

                var pnpTemplatePath     = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\PnPTemplates";
                var ptci                = new ProvisioningTemplateCreationInformation(web);
                var fileSystemConnector = new FileSystemConnector(pnpTemplatePath, "");
                ptci.PersistBrandingFiles          = true;
                ptci.PersistPublishingFiles        = true;
                ptci.PersistMultiLanguageResources = true;
                ptci.FileConnector    = new OpenXMLConnector($"{pnpFileName}.pnp", fileSystemConnector);
                ptci.ProgressDelegate = delegate(String message, Int32 progress, Int32 total)
                {
                    Console.WriteLine(@"{0:00}/{1:00} - {2}", progress, total, message);
                };
                ProvisioningTemplate template = new ProvisioningTemplate();

                try
                {
                    template = web.GetProvisioningTemplate(ptci);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("PnP engine failed to extract template. Error: {0}", ex.Message);
                }

                try
                {
                    PageProvisionManager pageProvisionManager = new PageProvisionManager();
                    var pagesTemplate = pageProvisionManager.Extract(Context, ptci);
                    foreach (var theFile in pagesTemplate.Files)
                    {
                        var existingFile =
                            template.Files.FirstOrDefault(
                                f => f.Src.Equals(theFile.Src, StringComparison.InvariantCultureIgnoreCase));
                        if (existingFile == null)
                        {
                            template.Files.Add(theFile);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed to extract Pages. Error: {0}", ex.Message);
                }
                if (web.IsSubSite())
                {
                    try
                    {
                        var siteColumnsTemplate = new SiteColumnProvisionManager().Extract(web, ptci);
                        foreach (var col in siteColumnsTemplate.SiteFields)
                        {
                            if (!template.SiteFields.Contains(col))
                            {
                                template.SiteFields.Add(col);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to extract Site Columns. Error: {0}", ex.Message);
                    }
                    try
                    {
                        var siteCTTemplate = new ContentTypeProvisionManager().Extract(web, ptci);
                        foreach (var ct in siteCTTemplate.ContentTypes)
                        {
                            if (!template.ContentTypes.Contains(ct))
                            {
                                template.ContentTypes.Add(ct);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to extract Site Content Types. Error: {0}", ex.Message);
                    }
                }
                pgTemplate.SelectedObject = template;
                DebugMonitor.Stop();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemplo n.º 5
0
        private void RefineTemplate(ClientContext context, ProvisioningTemplate template, ProvisioningTemplateApplyingInformation ptai, ApplyRambollTemplateRequest request)
        {
            try
            {
                string type = request.ApplyComponent ?? "NotSet";
                ptai.HandlersToProcess = Handlers.All;
                switch (type?.ToUpper())
                {
                /*case "PRE":
                 *  template.Files.RemoveAll(x => true);
                 *  template.Navigation = null;
                 *  break;
                 * case "POST":
                 *  template.Lists.RemoveAll(x => true);
                 *  template.SiteFields.RemoveAll(x => true);
                 *  template.ContentTypes.RemoveAll(x => true);
                 *  break;
                 * case "INIT":
                 *  template.Files.RemoveAll(x => true);
                 *  template.Lists.RemoveAll(x => true);
                 *  template.Navigation = null;
                 *  break;
                 * case "LISTS":
                 *  template.Files.RemoveAll(x => true);
                 *  template.Navigation = null;
                 *  break;
                 * case "FILES":
                 *  template.Lists.RemoveAll(x => true);
                 *  template.Navigation = null;
                 *  break;
                 * case "NAVIGATION":
                 *  template.Files.RemoveAll(x => true);
                 *  template.Lists.RemoveAll(x => true);
                 *  break;*/
                case "PRE":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.Files & ~Handlers.Navigation;
                    break;

                case "POST":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.Lists & ~Handlers.Fields & ~Handlers.ContentTypes;
                    break;

                case "INIT":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Files & ~Handlers.Lists & ~Handlers.Navigation;
                    break;

                case "PROPERTYBAGENTRIES":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.Features & ~Handlers.Files & ~Handlers.Lists & ~Handlers.Navigation;
                    break;

                case "FEATURES":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Files & ~Handlers.Lists & ~Handlers.Navigation;
                    break;

                case "LISTS":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Files & ~Handlers.Navigation;
                    break;

                case "FILES":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Lists & ~Handlers.Navigation;
                    break;

                case "NAVIGATION":
                    ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Files & ~Handlers.Lists;
                    break;
                }
                var web = context.Web;
                if (type?.ToUpper() == "PROPERTYBAGENTRIES")
                {
                    string docIdPrefix = "";
                    docIdPrefix = GetMetadataValue(new Guid(request.WebId), "Project number")?.ToString();
                    if (!string.IsNullOrEmpty(docIdPrefix))
                    {
                        SetDocumentId(context, web, docIdPrefix);
                    }
                }
                else if (type?.ToUpper() == "FILES")
                {
                    var    defaultPage = "default.aspx";
                    var    siteUri     = new Uri(request.SiteUrl);
                    string tenantUrl   = $"{siteUri.Scheme}://{siteUri.Host}";
                    if (!siteUri.IsDefaultPort)
                    {
                        tenantUrl = $"{tenantUrl}:{siteUri.Port}";
                    }
                    context.Load(context.Web, w => w.CurrentUser);
                    context.ExecuteQueryRetry();
                    var loginName = context.Web?.CurrentUser?.LoginName; //?.Split('|').LastOrDefault();

                    foreach (var file in template.Files)
                    {
                        if (file.Src.Equals(defaultPage, StringComparison.InvariantCultureIgnoreCase))
                        {
                            string projectName = "";
                            projectName = GetMetadataValue(new Guid(request.WebId), "Project name")?.ToString();
                            file.Properties["Title"] = projectName;
                        }

                        if (file.Properties.ContainsKey("_dlc_DocIdUrl"))
                        {
                            var docIdUrl = file.Properties["_dlc_DocIdUrl"];
                            if (!string.IsNullOrEmpty(docIdUrl))
                            {
                                file.Properties["_dlc_DocIdUrl"] = docIdUrl.Replace("{tenant}", tenantUrl);
                            }
                        }
                        if (!string.IsNullOrEmpty(loginName))
                        {
                            if (file.Properties.ContainsKey("PublishingContact"))
                            {
                                file.Properties["PublishingContact"] = loginName;
                            }
                            else
                            {
                                file.Properties.Add("PublishingContact", loginName);
                            }
                        }
                    }
                }
                var isSubSite = web.IsSubSite();
                if (isSubSite)
                {
                    var tokenParser = new TokenParser(web, template);
                    if (template.SiteFields.Any())
                    {
                        var columnProvisionManager = new SiteColumnProvisionManager();
                        columnProvisionManager.Provision(web, template, tokenParser, ptai);
                    }
                    if (template.ContentTypes.Any())
                    {
                        var contentTypeProvisionManager = new ContentTypeProvisionManager();
                        contentTypeProvisionManager.Provision(web, template, tokenParser, ptai);
                    }
                    template.Files.RemoveAll(
                        f => f.Src.EndsWith(".master", StringComparison.InvariantCultureIgnoreCase));
                }
                var pageLib = context.Web.GetPagesLibrary();

                if (template.Files.Any())
                {
                    foreach (var file in template.Files)
                    {
                        if (file.Src.EndsWith(".aspx"))
                        {
                            file.Src = $"{pageLib.Title}\\{file.Src}";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }