private static void ProvisionFeaturesImplementation <T>(T parent, IEnumerable <Feature> features, PnPMonitoredScope scope) { var activeFeatures = new List <Microsoft.SharePoint.Client.Feature>(); Web web = null; Site site = null; if (parent is Site) { site = parent as Site; site.Context.Load(site.Features, fs => fs.Include(f => f.DefinitionId)); site.Context.ExecuteQueryRetry(); activeFeatures = site.Features.ToList(); } else { web = parent as Web; web.Context.Load(web.Features, fs => fs.Include(f => f.DefinitionId)); web.Context.ExecuteQueryRetry(); activeFeatures = web.Features.ToList(); } if (features != null) { foreach (var feature in features) { if (!feature.Deactivate) { if (activeFeatures.FirstOrDefault(f => f.DefinitionId == feature.Id) == null) { scope.LogDebug(CoreResources.Provisioning_ObjectHandlers_Features_Activating__0__scoped_feature__1_, site != null ? "site" :"web", feature.Id); if (site != null) { site.ActivateFeature(feature.Id); } else { web.ActivateFeature(feature.Id); } } } else { if (activeFeatures.FirstOrDefault(f => f.DefinitionId == feature.Id) != null) { scope.LogDebug(CoreResources.Provisioning_ObjectHandlers_Features_Deactivating__0__scoped_feature__1_, site != null ? "site" : "web", feature.Id); if (site != null) { site.DeactivateFeature(feature.Id); } else { web.DeactivateFeature(feature.Id); } } } } } }
private static void ProvisionFeaturesImplementation <T>(T parent, List <Feature> features) { var activeFeatures = new List <Microsoft.SharePoint.Client.Feature>(); Web web = null; Site site = null; if (parent is Site) { site = parent as Site; site.Context.Load(site.Features, fs => fs.Include(f => f.DefinitionId)); site.Context.ExecuteQueryRetry(); activeFeatures = site.Features.ToList(); } else { web = parent as Web; web.Context.Load(web.Features, fs => fs.Include(f => f.DefinitionId)); web.Context.ExecuteQueryRetry(); activeFeatures = web.Features.ToList(); } if (features != null) { foreach (var feature in features) { if (!feature.Deactivate) { if (activeFeatures.FirstOrDefault(f => f.DefinitionId == feature.Id) == null) { if (site != null) { site.ActivateFeature(feature.Id); } else { web.ActivateFeature(feature.Id); } } } else { if (activeFeatures.FirstOrDefault(f => f.DefinitionId == feature.Id) != null) { if (site != null) { site.DeactivateFeature(feature.Id); } else { web.DeactivateFeature(feature.Id); } } } } } }
private static void ProvisionFeaturesImplementation(object parent, List <Feature> webFeatures) { Web web = null; Site site = null; if (parent is Site) { site = parent as Site; } else { web = parent as Web; } if (webFeatures != null) { foreach (var feature in webFeatures) { if (!feature.Deactivate) { if (site != null) { if (!site.IsFeatureActive(feature.ID)) { site.ActivateFeature(feature.ID); } } else { if (!web.IsFeatureActive(feature.ID)) { web.ActivateFeature(feature.ID); } } } else { if (site != null) { if (site.IsFeatureActive(feature.ID)) { site.DeactivateFeature(feature.ID); } } else { if (web.IsFeatureActive(feature.ID)) { web.DeactivateFeature(feature.ID); } } } } } }
private static void EnsureSpaces(Web web, ProvisioningTemplate template, PnPMonitoredScope scope) { var spacesPages = template.ClientSidePages.Where(p => p.Layout != null && p.Layout.Equals(Pages.ClientSidePageLayoutType.Spaces.ToString(), StringComparison.InvariantCultureIgnoreCase)); if (spacesPages.Any()) { try { // Enable the MUI feature web.ActivateFeature(ObjectClientSidePages.MixedRealityFeature); } catch (Exception ex) { scope.LogError($"Mixed reality feature could not be enabled: {ex.Message}"); throw; } } }
private static TokenParser ProvisionFeaturesImplementation <T>(T parent, IEnumerable <Feature> features, TokenParser parser, PnPMonitoredScope scope) { var activeFeatures = new List <Microsoft.SharePoint.Client.Feature>(); Web web = null; Site site = null; if (parent is Site) { site = parent as Site; site.Context.Load(site.Features, fs => fs.Include(f => f.DefinitionId)); site.Context.ExecuteQueryRetry(); activeFeatures = site.Features.ToList(); } else { web = parent as Web; web.Context.Load(web.Features, fs => fs.Include(f => f.DefinitionId)); web.Context.ExecuteQueryRetry(); activeFeatures = web.Features.ToList(); } if (features != null) { foreach (var feature in features) { if (!feature.Deactivate) { if (activeFeatures.FirstOrDefault(f => f.DefinitionId == feature.Id) == null) { scope.LogDebug(CoreResources.Provisioning_ObjectHandlers_Features_Activating__0__scoped_feature__1_, site != null ? "site" : "web", feature.Id); if (site != null) { try { site.ActivateFeature(feature.Id); } catch (ServerException ex) { scope.LogError("Error activating feature {0}: {1}", feature.Id, ex.Message); } } else { try { web.ActivateFeature(feature.Id); } catch (ServerException ex) { scope.LogError("Error activating feature {0}: {1}", feature.Id, ex.Message); } } } } else { if (activeFeatures.FirstOrDefault(f => f.DefinitionId == feature.Id) != null) { scope.LogDebug(CoreResources.Provisioning_ObjectHandlers_Features_Deactivating__0__scoped_feature__1_, site != null ? "site" : "web", feature.Id); if (site != null) { try { site.DeactivateFeature(feature.Id); } catch (ServerException ex) { scope.LogError("Error deactivating feature {0}: {1}", feature.Id, ex.Message); } } else { try { web.DeactivateFeature(feature.Id); } catch (ServerException ex) { scope.LogError("Error deactivating feature {0}: {1}", feature.Id, ex.Message); } } } } } } if (parent is Site) { parser.RebuildListTokens((parent as Site).RootWeb); } else { parser.RebuildListTokens(parent as Web); } return(parser); }
public override TokenParser ProvisionObjects(Web web, ProvisioningTemplate template, TokenParser parser, ProvisioningTemplateApplyingInformation applyingInformation) { using (var scope = new PnPMonitoredScope(this.Name)) { var site = (web.Context as ClientContext).Site; var webFeatureActive = web.IsFeatureActive(PUBLISHING_FEATURE_WEB); var siteFeatureActive = site.IsFeatureActive(PUBLISHING_FEATURE_SITE); if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.SkipIfNotCompliant && !webFeatureActive) { scope.LogDebug("Publishing Feature (Web Scoped) not active. Skipping provisioning of Publishing settings"); return parser; } else if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.MakeCompliant) { if (!siteFeatureActive) { scope.LogDebug("Making site compliant for publishing"); site.ActivateFeature(PUBLISHING_FEATURE_SITE); web.ActivateFeature(PUBLISHING_FEATURE_WEB); } else { if (!web.IsFeatureActive(PUBLISHING_FEATURE_WEB)) { scope.LogDebug("Making site compliant for publishing"); web.ActivateFeature(PUBLISHING_FEATURE_WEB); } } } else { throw new Exception("Publishing Feature not active. Provisioning failed"); } // Set allowed web templates var availableWebTemplates = template.Publishing.AvailableWebTemplates.Select(t => new WebTemplateEntity() { LanguageCode = t.LanguageCode.ToString(), TemplateName = t.TemplateName }).ToList(); if (availableWebTemplates.Any()) { web.SetAvailableWebTemplates(availableWebTemplates); } // Set allowed page layouts var availablePageLayouts = template.Publishing.PageLayouts.Select(p => p.Path); if (availablePageLayouts.Any()) { web.SetAvailablePageLayouts(site.RootWeb, availablePageLayouts); } // Set default page layout, if any var defaultPageLayout = template.Publishing.PageLayouts.FirstOrDefault(p => p.IsDefault); if (defaultPageLayout != null) { web.SetDefaultPageLayoutForSite(site.RootWeb, defaultPageLayout.Path); } if (template.Publishing.DesignPackage != null) { var package = template.Publishing.DesignPackage; var tempFileName = Path.Combine(Path.GetTempPath(), template.Connector.GetFilenamePart(package.DesignPackagePath)); scope.LogDebug("Saving {0} to temporary file: {1}", package.DesignPackagePath, tempFileName); using (var stream = template.Connector.GetFileStream(package.DesignPackagePath)) { using (var outstream = System.IO.File.Create(tempFileName)) { stream.CopyTo(outstream); } } scope.LogDebug("Installing design package"); site.InstallSolution(package.PackageGuid, tempFileName, package.MajorVersion, package.MinorVersion); System.IO.File.Delete(tempFileName); } return parser; } }
public override TokenParser ProvisionObjects(Web web, ProvisioningTemplate template, TokenParser parser, ProvisioningTemplateApplyingInformation applyingInformation) { using (var scope = new PnPMonitoredScope(this.Name)) { var context = web.Context as ClientContext; var site = (web.Context as ClientContext).Site; // Check if this is not a noscript site as publishing features are not supported if (web.IsNoScriptSite()) { scope.LogWarning(CoreResources.Provisioning_ObjectHandlers_Publishing_SkipProvisioning); return(parser); } var webFeatureActive = web.IsFeatureActive(Constants.FeatureId_Web_Publishing); var siteFeatureActive = site.IsFeatureActive(Constants.FeatureId_Site_Publishing); if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.SkipIfNotCompliant && !webFeatureActive) { scope.LogDebug("Publishing Feature (Web Scoped) not active. Skipping provisioning of Publishing Image Renditions"); return(parser); } else if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.MakeCompliant) { if (!siteFeatureActive) { scope.LogDebug("Making site compliant for publishing"); site.ActivateFeature(Constants.FeatureId_Site_Publishing); web.ActivateFeature(Constants.FeatureId_Web_Publishing); } else { if (!web.IsFeatureActive(Constants.FeatureId_Web_Publishing)) { scope.LogDebug("Making site compliant for publishing"); web.ActivateFeature(Constants.FeatureId_Web_Publishing); } } } else if (!webFeatureActive) { throw new Exception("Publishing Feature not active. Provisioning failed"); } if (template.Publishing != null && template.Publishing.ImageRenditions != null && template.Publishing.ImageRenditions.Count > 0) { var renditions = SiteImageRenditions.GetRenditions(context); context.ExecuteQueryRetry(); foreach (var r in template.Publishing.ImageRenditions) { var rendition = new Microsoft.SharePoint.Client.Publishing.ImageRendition(); rendition.Name = r.Name; rendition.Height = r.Height; rendition.Width = r.Width; if (!renditions.Any(rd => rd.Name == rendition.Name && rd.Height == rendition.Height && rd.Width == rendition.Width)) { renditions.Add(rendition); } } SiteImageRenditions.SetRenditions(context, renditions); context.ExecuteQueryRetry(); } } return(parser); }
public override TokenParser ProvisionObjects(Web web, ProvisioningTemplate template, TokenParser parser, ProvisioningTemplateApplyingInformation applyingInformation) { using (var scope = new PnPMonitoredScope(this.Name)) { var site = (web.Context as ClientContext).Site; var webFeatureActive = web.IsFeatureActive(PUBLISHING_FEATURE_WEB); var siteFeatureActive = site.IsFeatureActive(PUBLISHING_FEATURE_SITE); if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.SkipIfNotCompliant && !webFeatureActive) { scope.LogDebug("Publishing Feature (Web Scoped) not active. Skipping provisioning of Publishing settings"); return(parser); } else if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.MakeCompliant) { if (!siteFeatureActive) { scope.LogDebug("Making site compliant for publishing"); site.ActivateFeature(PUBLISHING_FEATURE_SITE); web.ActivateFeature(PUBLISHING_FEATURE_WEB); } else { if (!web.IsFeatureActive(PUBLISHING_FEATURE_WEB)) { scope.LogDebug("Making site compliant for publishing"); web.ActivateFeature(PUBLISHING_FEATURE_WEB); } } } else { throw new Exception("Publishing Feature not active. Provisioning failed"); } var availableWebTemplates = template.Publishing.AvailableWebTemplates.Select(t => new WebTemplateEntity() { LanguageCode = t.LanguageCode.ToString(), TemplateName = t.TemplateName }).ToList(); if (availableWebTemplates.Any()) { web.SetAvailableWebTemplates(availableWebTemplates); } var availablePageLayouts = template.Publishing.PageLayouts.Select(p => p.Path); if (availablePageLayouts.Any()) { web.SetAvailablePageLayouts(site.RootWeb, availablePageLayouts); } if (template.Publishing.DesignPackage != null) { var package = template.Publishing.DesignPackage; var tempFileName = Path.Combine(Path.GetTempPath(), template.Connector.GetFilenamePart(package.DesignPackagePath)); scope.LogDebug("Saving {0} to temporary file: {1}", package.DesignPackagePath, tempFileName); using (var stream = template.Connector.GetFileStream(package.DesignPackagePath)) { using (var outstream = System.IO.File.Create(tempFileName)) { stream.CopyTo(outstream); } } scope.LogDebug("Installing design package"); site.InstallSolution(package.PackageGuid, tempFileName, package.MajorVersion, package.MinorVersion); System.IO.File.Delete(tempFileName); } return(parser); } }
public override TokenParser ProvisionObjects(Web web, ProvisioningTemplate template, TokenParser parser, ProvisioningTemplateApplyingInformation applyingInformation) { using (var scope = new PnPMonitoredScope(this.Name)) { var site = (web.Context as ClientContext).Site; // Check if this is not a noscript site as publishing features are not supported if (web.IsNoScriptSite()) { scope.LogWarning(CoreResources.Provisioning_ObjectHandlers_Publishing_SkipProvisioning); return(parser); } var webFeatureActive = web.IsFeatureActive(Constants.FeatureId_Web_Publishing); var siteFeatureActive = site.IsFeatureActive(Constants.FeatureId_Site_Publishing); if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.SkipIfNotCompliant && !webFeatureActive) { scope.LogDebug("Publishing Feature (Web Scoped) not active. Skipping provisioning of Publishing settings"); return(parser); } else if (template.Publishing.AutoCheckRequirements == AutoCheckRequirementsOptions.MakeCompliant) { if (!siteFeatureActive) { scope.LogDebug("Making site compliant for publishing"); site.ActivateFeature(Constants.FeatureId_Site_Publishing); web.ActivateFeature(Constants.FeatureId_Web_Publishing); } else { if (!web.IsFeatureActive(Constants.FeatureId_Web_Publishing)) { scope.LogDebug("Making site compliant for publishing"); web.ActivateFeature(Constants.FeatureId_Web_Publishing); } } } else if (!webFeatureActive) { throw new Exception("Publishing Feature not active. Provisioning failed"); } // Set allowed web templates var availableWebTemplates = template.Publishing.AvailableWebTemplates.Select(t => new WebTemplateEntity() { LanguageCode = t.LanguageCode.ToString(), TemplateName = t.TemplateName }).ToList(); if (availableWebTemplates.Any()) { web.SetAvailableWebTemplates(availableWebTemplates); } if (template.Publishing.DesignPackage != null) { var package = template.Publishing.DesignPackage; var tempFileName = Path.Combine(Path.GetTempPath(), template.Connector.GetFilenamePart(package.DesignPackagePath)); scope.LogDebug("Saving {0} to temporary file: {1}", package.DesignPackagePath, tempFileName); using (var stream = template.Connector.GetFileStream(package.DesignPackagePath)) { using (var outstream = System.IO.File.Create(tempFileName)) { stream.CopyTo(outstream); } } scope.LogDebug("Installing design package"); site.InstallSolution(package.PackageGuid, tempFileName, package.MajorVersion, package.MinorVersion); System.IO.File.Delete(tempFileName); } // Set allowed page layouts var availablePageLayouts = template.Publishing.PageLayouts.Select(p => p.Path); if (availablePageLayouts.Any()) { web.SetAvailablePageLayouts(site.RootWeb, availablePageLayouts); } // Set default page layout, if any var defaultPageLayout = template.Publishing.PageLayouts.FirstOrDefault(p => p.IsDefault); if (defaultPageLayout != null) { web.SetDefaultPageLayoutForSite(site.RootWeb, defaultPageLayout.Path); } return(parser); } }
private static void EnsureWebLanguages(Web web, ProvisioningTemplate template, PnPMonitoredScope scope) { List <int> neededLanguages = new List <int>(); int neededSourceLanguage = 0; foreach (var page in template.ClientSidePages.Where(p => p.Translations.Any())) { if (neededSourceLanguage == 0) { neededSourceLanguage = page.LCID; } else { // Source language should be the same for all pages in the template if (neededSourceLanguage != page.LCID) { string error = "The pages in this template are based upon multiple source languages while all pages in a site must have the same source language"; scope.LogError(error); throw new Exception(error); } } foreach (var translatedPage in page.Translations) { if (!neededLanguages.Contains(translatedPage.LCID)) { neededLanguages.Add(translatedPage.LCID); } } } // No translations found, bail out if (neededLanguages.Count == 0) { return; } try { // Enable the MUI feature web.ActivateFeature(ObjectClientSidePages.MultilingualPagesFeature); } catch (Exception ex) { scope.LogError($"Multilingual pages feature could not be enabled: {ex.Message}"); throw; } // Check the "source" language web.EnsureProperties(p => p.Language, p => p.IsMultilingual); int sourceLanguage = Convert.ToInt32(web.Language); if (sourceLanguage != neededSourceLanguage) { string error = $"The web has source language {sourceLanguage} while the template expects {neededSourceLanguage}"; scope.LogError(error); throw new Exception(error); } // Ensure the needed languages are available on this site if (!web.IsMultilingual) { web.IsMultilingual = true; web.Context.Load(web, w => w.SupportedUILanguageIds); web.Update(); } else { web.Context.Load(web, w => w.SupportedUILanguageIds); } web.Context.ExecuteQueryRetry(); var supportedLanguages = web.SupportedUILanguageIds; bool languageAdded = false; foreach (var language in neededLanguages) { if (!supportedLanguages.Contains(language)) { web.AddSupportedUILanguage(language); languageAdded = true; } } if (languageAdded) { web.Update(); web.Context.ExecuteQueryRetry(); } }