/// <summary> /// Deletes the specified composed look. /// </summary> /// <param name="web">The web.</param> /// <param name="entity">The entity.</param> public void Delete(SPWeb web, ComposedLook entity) { var designCatalog = web.GetCatalog(SPListTemplateType.DesignCatalog); var item = designCatalog.GetItemById(entity.Id); item.Delete(); }
protected override void ExecuteCmdlet() { SelectedWeb.ApplyTheme(ColorPaletteUrl, FontSchemeUrl, BackgroundImageUrl, ShareGenerated); ClientContext.ExecuteQueryRetry(); ComposedLook composedLook; // Set the corresponding property bag value which is used by the provisioning engine if (SelectedWeb.PropertyBagContainsKey(PROPBAGKEY)) { composedLook = JsonConvert.DeserializeObject <ComposedLook>(SelectedWeb.GetPropertyBagValueString(PROPBAGKEY, "")); } else { composedLook = new ComposedLook(); composedLook.BackgroundFile = ""; SelectedWeb.EnsureProperty(w => w.AlternateCssUrl); composedLook.ColorFile = ""; SelectedWeb.EnsureProperty(w => w.MasterUrl); composedLook.FontFile = ""; SelectedWeb.EnsureProperty(w => w.SiteLogoUrl); } composedLook.Name = composedLook.Name ?? "Custom by PnP PowerShell"; composedLook.ColorFile = ColorPaletteUrl ?? composedLook.ColorFile; composedLook.FontFile = FontSchemeUrl ?? composedLook.FontFile; composedLook.BackgroundFile = BackgroundImageUrl ?? composedLook.BackgroundFile; var composedLookJson = JsonConvert.SerializeObject(composedLook); SelectedWeb.SetPropertyBagValue(PROPBAGKEY, composedLookJson); }
public bool Validate(ComposedLook source, ComposedLook target) { if (!source.BackgroundFile.Trim().ToLower().Equals(target.BackgroundFile.Trim().ToLower())) { return(false); } if (!source.ColorFile.Trim().ToLower().Equals(target.ColorFile.Trim().ToLower())) { return(false); } if (!source.FontFile.Trim().ToLower().Equals(target.FontFile.Trim().ToLower())) { return(false); } if (!source.Name.Trim().ToLower().Equals(target.Name.Trim().ToLower())) { return(false); } if (!source.Version.Equals(target.Version)) { return(false); } return(true); }
private static void UpdateCurrentComposedLookItem(SPWeb web, ComposedLook composedLook) { var catalog = web.GetCatalog(SPListTemplateType.DesignCatalog); var items = catalog.GetItems(new SPQuery { RowLimit = 1u, Query = "<Where><Eq><FieldRef Name='DisplayOrder'/><Value Type='Number'>0</Value></Eq></Where>", ViewFields = "<FieldRef Name='DisplayOrder'/>", ViewFieldsOnly = true }); // Delete current composed look item if (items.Count == 1) { items[0].Delete(); } // Create the new composed look item var item = catalog.AddItem(); item[BuiltInFields.DisplayOrderName] = 0; item[SPBuiltInFieldId.Name] = SPResource.GetString(web.UICulture, "DesignGalleryCurrentItemName"); item[SPBuiltInFieldId.Title] = SPResource.GetString(web.UICulture, "DesignGalleryCurrentItemName"); item[BuiltInFields.MasterPageUrlName] = HttpUtility.UrlDecode(new Uri(composedLook.MasterPagePath.Url).AbsolutePath); item[BuiltInFields.ThemeUrlName] = HttpUtility.UrlDecode(new Uri(composedLook.ThemePath.Url).AbsolutePath); item[BuiltInFields.ImageUrlName] = composedLook.ImagePath == null ? string.Empty : HttpUtility.UrlDecode(new Uri(composedLook.ImagePath.Url).AbsolutePath); item[BuiltInFields.FontSchemeUrlName] = HttpUtility.UrlDecode(new Uri(composedLook.FontSchemePath.Url).AbsolutePath); item.Update(); }
/// <summary> /// Applies a composed look to a web. /// </summary> /// <param name="web">The web.</param> /// <param name="composedLook">The name of the composed look.</param> public static void ApplyComposedLook(this SPWeb web, ComposedLook composedLook) { using (var elevatedWeb = web.Site.OpenWeb(web.ID)) { // Set Master Page elevatedWeb.CustomMasterUrl = HttpUtility.UrlDecode(new Uri(composedLook.MasterPagePath.Url).AbsolutePath); elevatedWeb.MasterUrl = HttpUtility.UrlDecode(new Uri(composedLook.MasterPagePath.Url).AbsolutePath); elevatedWeb.Properties["DesignPreviewLayoutUrl"] = HttpUtility.UrlDecode(new Uri(composedLook.MasterPagePath.Url).AbsolutePath); elevatedWeb.Update(); // Set theme elevatedWeb.ApplyTheme( new Uri(composedLook.ThemePath.Url).AbsolutePath, composedLook.FontSchemePath == null ? string.Empty : HttpUtility.UrlDecode(new Uri(composedLook.FontSchemePath.Url).AbsolutePath), composedLook.ImagePath == null ? string.Empty : HttpUtility.UrlDecode(new Uri(composedLook.ImagePath.Url).AbsolutePath), false); elevatedWeb.Update(); // Update current selected composed look if (web.IsRootWeb) { UpdateCurrentComposedLookItem(web, composedLook); } } }
protected override void ExecuteCmdlet() { var rootWebServerRelativeUrl = (CurrentWeb.Context as ClientContext).Site.RootWeb.EnsureProperty(r => r.ServerRelativeUrl); var serverRelativeUrl = CurrentWeb.EnsureProperty(w => w.ServerRelativeUrl); if (ColorPaletteUrl == null) { ColorPaletteUrl = "/_catalogs/theme/15/palette001.spcolor"; } if (!ColorPaletteUrl.ToLower().StartsWith(rootWebServerRelativeUrl.ToLower())) { ColorPaletteUrl = UrlUtility.Combine(rootWebServerRelativeUrl, ColorPaletteUrl); } if (!string.IsNullOrEmpty(FontSchemeUrl) && !FontSchemeUrl.ToLower().StartsWith(rootWebServerRelativeUrl.ToLower())) { FontSchemeUrl = UrlUtility.Combine(rootWebServerRelativeUrl, FontSchemeUrl); } if (!string.IsNullOrEmpty(BackgroundImageUrl) && BackgroundImageUrl.ToLower().StartsWith(rootWebServerRelativeUrl.ToLower())) { BackgroundImageUrl = UrlUtility.Combine(rootWebServerRelativeUrl, BackgroundImageUrl); } CurrentWeb.SetThemeByUrl(ColorPaletteUrl, FontSchemeUrl, BackgroundImageUrl, ResetSubwebsToInherit, UpdateRootWebOnly); ClientContext.ExecuteQueryRetry(); if (!CurrentWeb.IsNoScriptSite()) { ComposedLook composedLook; // Set the corresponding property bag value which is used by the provisioning engine if (CurrentWeb.PropertyBagContainsKey(PROPBAGKEY)) { composedLook = JsonSerializer.Deserialize <ComposedLook>(CurrentWeb.GetPropertyBagValueString(PROPBAGKEY, "")); } else { composedLook = new ComposedLook { BackgroundFile = "" }; CurrentWeb.EnsureProperty(w => w.AlternateCssUrl); composedLook.ColorFile = ""; CurrentWeb.EnsureProperty(w => w.MasterUrl); composedLook.FontFile = ""; CurrentWeb.EnsureProperty(w => w.SiteLogoUrl); } composedLook.Name = composedLook.Name ?? "Custom by PnP PowerShell"; composedLook.ColorFile = ColorPaletteUrl ?? composedLook.ColorFile; composedLook.FontFile = FontSchemeUrl ?? composedLook.FontFile; composedLook.BackgroundFile = BackgroundImageUrl ?? composedLook.BackgroundFile; var composedLookJson = JsonSerializer.Serialize(composedLook); CurrentWeb.SetPropertyBagValue(PROPBAGKEY, composedLookJson); } }
/// <summary> /// Updates the specified composed look. /// </summary> /// <param name="web">The web.</param> /// <param name="entity">The entity.</param> public void Update(SPWeb web, ComposedLook entity) { var designCatalog = web.GetCatalog(SPListTemplateType.DesignCatalog); var item = designCatalog.Items.GetItemById(entity.Id); this._binder.FromEntity(entity, item); item.Update(); }
private static void ReportOnComposedLook(string name, ComposedLook composedLook) { Console.WriteLine(string.Format("Composed Look")); Console.WriteLine(string.Format("{0} - {1}", "AlternateCSS", composedLook.AlternateCSS)); Console.WriteLine(string.Format("{0} - {1}", "BackgroundFile", composedLook.BackgroundFile)); Console.WriteLine(string.Format("{0} - {1}", "MasterPage", composedLook.MasterPage)); Console.WriteLine(string.Format("{0} - {1}", "MasterPage", composedLook.SiteLogo)); }
/// <summary> /// Creates the specified composed look. /// </summary> /// <param name="web">The web.</param> /// <param name="entity">The entity.</param> /// <returns> /// The newly created composed look. /// </returns> public ComposedLook Create(SPWeb web, ComposedLook entity) { var designCatalog = web.GetCatalog(SPListTemplateType.DesignCatalog); var item = designCatalog.Items.Add(); this._binder.FromEntity(entity, item); item.Update(); return(this._binder.Get <ComposedLook>(item)); }
protected override void ExecuteCmdlet() { var serverRelativeUrl = SelectedWeb.EnsureProperty(w => w.ServerRelativeUrl); if (ColorPaletteUrl == null) { ColorPaletteUrl = "/_catalogs/theme/15/palette001.spcolor"; } if (!ColorPaletteUrl.ToLower().StartsWith(serverRelativeUrl.ToLower())) { ColorPaletteUrl = ColorPaletteUrl = UrlUtility.Combine(serverRelativeUrl, "/_catalogs/theme/15/palette001.spcolor"); } SelectedWeb.SetThemeByUrl(ColorPaletteUrl, FontSchemeUrl, BackgroundImageUrl); // SelectedWeb.ApplyTheme(ColorPaletteUrl, FontSchemeUrl, BackgroundImageUrl, ShareGenerated); ClientContext.ExecuteQueryRetry(); ComposedLook composedLook; // Set the corresponding property bag value which is used by the provisioning engine if (SelectedWeb.PropertyBagContainsKey(PROPBAGKEY)) { composedLook = JsonConvert.DeserializeObject <ComposedLook>(SelectedWeb.GetPropertyBagValueString(PROPBAGKEY, "")); } else { composedLook = new ComposedLook(); composedLook.BackgroundFile = ""; SelectedWeb.EnsureProperty(w => w.AlternateCssUrl); composedLook.ColorFile = ""; SelectedWeb.EnsureProperty(w => w.MasterUrl); composedLook.FontFile = ""; SelectedWeb.EnsureProperty(w => w.SiteLogoUrl); } composedLook.Name = composedLook.Name ?? "Custom by PnP PowerShell"; composedLook.ColorFile = ColorPaletteUrl ?? composedLook.ColorFile; composedLook.FontFile = FontSchemeUrl ?? composedLook.FontFile; composedLook.BackgroundFile = BackgroundImageUrl ?? composedLook.BackgroundFile; var composedLookJson = JsonConvert.SerializeObject(composedLook); SelectedWeb.SetPropertyBagValue(PROPBAGKEY, composedLookJson); }
private static ComposedLook DecodeUrls(ComposedLook composedLook) { if (composedLook.ImagePath != null) { composedLook.ImagePath.Url = HttpUtility.UrlDecode(composedLook.ImagePath.Url); } if (composedLook.MasterPagePath != null) { composedLook.MasterPagePath.Url = HttpUtility.UrlDecode(composedLook.MasterPagePath.Url); } if (composedLook.ThemePath != null) { composedLook.ThemePath.Url = HttpUtility.UrlDecode(composedLook.ThemePath.Url); } return(composedLook); }