public static bool IsWebPartDefault(ModelWebPart wp)
        {
            var wpcomparer = WebPartSchemaComparer.CreateTypedComparer(wp);
            bool result = (null != wpcomparer) && wpcomparer.IsDefaultWebPart(wp);

            return result;
        }
        // private ProvisioningTemplate GetFileContents(Web web, ProvisioningTemplate template, string welcomePageUrl, ProvisioningTemplateCreationInformation creationInfo, PnPMonitoredScope scope)
        //#

        private ProvisioningTemplate GetFileContents(ProvisioningTemplate template, Microsoft.SharePoint.Client.File file, ProvisioningTemplateCreationInformation creationInfo, PnPMonitoredScope scope)
        {
            var listItem   = file.EnsureProperty(p => p.ListItemAllFields);
            var fileUrl    = file.ServerRelativeUrl;
            var folderPath = fileUrl.Substring(0, fileUrl.LastIndexOf("/"));

            var homeFile = new OfficeDevPnP.Core.Framework.Provisioning.Model.File()
            {
                Folder    = folderPath.TokenizeUrl(web.Url),
                Src       = file.ServerRelativeUrl,
                Overwrite = true,
            };

            // Add field values to file
            if (listItem != null && listItem.FieldValues != null)
            {
                homeFile.Properties = listItem.ToProvisioningValues();
            }
            // Add WebParts to file, if it is a page.
            if (System.IO.Path.GetExtension(file.ServerRelativeUrl) == ".aspx")
            {
                var webParts = web.GetWebParts(file.ServerRelativeUrl);

                foreach (var webPart in webParts)
                {
                    var webPartxml = TokenizeWebPartXml(web, web.GetWebPartXml(webPart.Id, file.ServerRelativeUrl));

                    var newWp = new OfficeDevPnP.Core.Framework.Provisioning.Model.WebPart()
                    {
                        Title    = webPart.WebPart.Title,
                        Row      = (uint)webPart.WebPart.ZoneIndex,
                        Order    = (uint)webPart.WebPart.ZoneIndex,
                        Contents = webPartxml
                    };
#if !SP2016
                    // As long as we've no CSOM library that has the ZoneID we can't use the version check as things don't compile...
                    if (web.Context.HasMinimalServerLibraryVersion(Constants.MINIMUMZONEIDREQUIREDSERVERVERSION))
                    {
                        newWp.Zone = webPart.ZoneId;
                    }
#endif
                    homeFile.WebParts.Add(newWp);
                }
            }
            template.Files.Add(homeFile);
            creationInfo.PersistFile(folderPath, file.Name, web, scope);
            return(template);
        }
Esempio n. 3
0
        public void CanProvisionObjects()
        {
            var template = new ProvisioningTemplate();

            Page page = new Page();

            page.Layout    = WikiPageLayout.TwoColumns;
            page.Overwrite = true;
            page.Url       = "~site/sitepages/pagetest.aspx";


            var webPart = new WebPart();

            webPart.Column   = 1;
            webPart.Row      = 1;
            webPart.Contents = webpartcontents;
            webPart.Title    = "Script Test";

            page.WebParts.Add(webPart);


            template.Pages.Add(page);

            using (var ctx = TestCommon.CreateClientContext())
            {
                var parser = new TokenParser(ctx.Web, template);
                new ObjectPages().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation());

                ctx.Load(ctx.Web, w => w.ServerRelativeUrl);
                ctx.ExecuteQueryRetry();

                var file = ctx.Web.GetFileByServerRelativeUrl(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx"));
                ctx.Load(file, f => f.Exists);
                ctx.ExecuteQueryRetry();

                Assert.IsTrue(file.Exists);
                var wps = ctx.Web.GetWebParts(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx"));
                Assert.IsTrue(wps.Any());
            }
        }
Esempio n. 4
0
        public void CanProvisionObjects()
        {
            var template = new ProvisioningTemplate();
            
            Page page = new Page();
            page.Layout = WikiPageLayout.TwoColumns;
            page.Overwrite = true;
            page.Url = "~site/sitepages/pagetest.aspx";

           
            var webPart = new WebPart();
            webPart.Column = 1;
            webPart.Row = 1;
            webPart.Contents = webpartcontents;
            webPart.Title = "Script Test";

            page.WebParts.Add(webPart);


            template.Pages.Add(page);

            using (var ctx = TestCommon.CreateClientContext())
            {
                TokenParser.Initialize(ctx.Web, template);
                new ObjectPages().ProvisionObjects(ctx.Web, template, new ProvisioningTemplateApplyingInformation());

                ctx.Load(ctx.Web, w => w.ServerRelativeUrl);
                ctx.ExecuteQueryRetry();

                var file = ctx.Web.GetFileByServerRelativeUrl(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx"));
                ctx.Load(file, f => f.Exists);
                ctx.ExecuteQueryRetry();

                Assert.IsTrue(file.Exists);
                var wps = ctx.Web.GetWebParts(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx"));
                Assert.IsTrue(wps.Any());
            }
        }
        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 Core.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);
            }
        }
        public List<ModelWebPart> Retrieve(string pageUrl, TokenParser parser)
        {
            if (parser == null) {
                parser = new TokenParser(this.Web, new Model.ProvisioningTemplate());
            }
            var xml = Web.GetWebPartsXml(pageUrl);
            var pageContent = Web.GetPageContent(pageUrl);
            var result = new List<ModelWebPart>();
            if (string.IsNullOrEmpty(xml)) return result;
            var maches = GetWebPartXmlReqex.Matches(xml);

            var webPartDefinitions = this.GetWebPartDefinitionsWithServiceCall(pageUrl);

            foreach (var match in maches)
            {
                var webPartXml = match.ToString();
                var zone = this.GetZone(webPartXml);
                var wpId = this.GetWebPartId(webPartXml);

                var definition = webPartDefinitions.FirstOrDefault(d => d.Id == wpId);
                var webPart = definition.WebPart;
                webPartXml = this.WrapToV3Format(webPartXml);
                var pcLower = pageContent.ToLower();
                //TODO: refactor getting webpartId2 make separate method, probably use regex or another approach
                var contentBoxIndex = pcLower.IndexOf("<div id=\"contentbox\"");
                var indexOfIdStartIndex = contentBoxIndex != -1
                    ? pcLower.IndexOf(wpId.ToString().ToLower(), contentBoxIndex)
                    : -1;
                var indexOfId = indexOfIdStartIndex != -1 ? pcLower.IndexOf("webpartid2", indexOfIdStartIndex) : -1;
                var wpExportId = definition.Id;
                var wpControlId = GetWebPartControlId(webPartXml);
                if (indexOfId != -1 && string.IsNullOrEmpty(wpControlId))
                {
                    var wpId2 = pageContent.Substring(indexOfId + "webpartid2=\"".Length, 36);
                    wpExportId = Guid.Parse(wpId2);
                }

                webPartXml = this.SetWebPartIdToXml(wpExportId, webPartXml);
                webPartXml = this.TokenizeWebPartXml(webPartXml, parser);
                var entity = new ModelWebPart
                {
                    Contents = webPartXml,
                    Order = (uint)webPart.ZoneIndex,
                    Zone = zone,
                    Title = webPart.Title
                };

                result.Add(entity);
            }

            return result;
        }
Esempio n. 7
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 Core.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);
            }
        }
Esempio n. 8
0
        private ProvisioningTemplate GetFileContents(Web web, ProvisioningTemplate template, string pageFullUrl, ProvisioningTemplateCreationInformation creationInfo, string pageUrl)
        {
            try
            {
                var fullUri = new Uri(UrlUtility.Combine(web.Url, pageUrl));

                var folderPath =
                    fullUri.Segments.Take(fullUri.Segments.Count() - 1)
                    .ToArray()
                    .Aggregate((i, x) => i + x)
                    .TrimEnd('/');
                var fileName = fullUri.Segments[fullUri.Segments.Count() - 1];

                var webParts = web.GetWebParts(pageFullUrl);

                var file = web.GetFileByServerRelativeUrl(pageFullUrl);

                var homeFile = new OfficeDevPnP.Core.Framework.Provisioning.Model.File()
                {
                    Folder    = Tokenize(folderPath, web.Url),
                    Src       = fileName,
                    Overwrite = true,
                };

                // Add field values to file

                RetrieveFieldValues(web, file, homeFile);

                // Add WebParts to file
                foreach (var webPart in webParts)
                {
                    var webPartxml = TokenizeWebPartXml(web, web.GetWebPartXml(webPart.Id, pageFullUrl));

                    OfficeDevPnP.Core.Framework.Provisioning.Model.WebPart newWp = new OfficeDevPnP.Core.Framework.
                                                                                   Provisioning.Model.WebPart()
                    {
                        Title    = webPart.WebPart.Title,
                        Row      = (uint)webPart.WebPart.ZoneIndex,
                        Order    = (uint)webPart.WebPart.ZoneIndex,
                        Contents = webPartxml
                    };
#if !SP2016
                    // As long as we've no CSOM library that has the ZoneID we can't use the version check as things don't compile...
                    if (web.Context.HasMinimalServerLibraryVersion(Constants.MINIMUMZONEIDREQUIREDSERVERVERSION))
                    {
                        newWp.Zone = webPart.ZoneId;
                    }
#endif
                    homeFile.WebParts.Add(newWp);
                }
                template.Files.Add(homeFile);

                // Persist file using connector
                if (creationInfo.PersistBrandingFiles)
                {
                    PersistFile(web, creationInfo, folderPath, fileName);
                }
                return(template);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Esempio n. 9
0
 private WebPartDefinition AddWebPart(Web web, WebPart webPart, File pageFile)
 {
     LimitedWebPartManager limitedWebPartManager = pageFile.GetLimitedWebPartManager(PersonalizationScope.Shared);
     WebPartDefinition oWebPartDefinition = limitedWebPartManager.ImportWebPart(webPart.Contents);
     WebPartDefinition wpdNew = limitedWebPartManager.AddWebPart(oWebPartDefinition.WebPart, webPart.Zone, (int)webPart.Order);
     web.Context.Load(wpdNew, x => x.Id);
     web.Context.ExecuteQueryRetry();
     return wpdNew;
 }