Monday 23 April 2012

SharePoint 2010 THEMES - Retrieve, Upload and Apply programmatically



protected void Page_Load(object sender, EventArgs e)
{
 try
 {
  if (!(Page.IsPostBack))
  {
   SPSecurity.RunWithElevatedPrivileges(delegate()
   {
    using (SPSite pageLoadSite = new SPSite(SPContext.Current.Site.ID))
    {
     pageLoadSite.AllowUnsafeUpdates = true;

     using (SPWeb pageLoadWeb = pageLoadSite.OpenWeb())
     {
      pageLoadWeb.AllowUnsafeUpdates = true;

      GetThemes(pageLoadWeb);
      UploadThemeFileInThemeGallery(pageLoadWeb)
      SetTheme(pageLoadWeb);

      pageLoadWeb.AllowUnsafeUpdates = false;
     }
    pageLoadSite.AllowUnsafeUpdates = false;
    }
   });
  }
 }
 catch (Exception ex)
 {
  Throw ex;
 }
}


/// <summary>
/// Gets the list of themes from themes gallery.
/// </summary>
/// <param name="web"></param>
private void GetThemes(SPWeb web)
{
 try
 {
  SPWeb rootWeb = web;
  //Themes are available only at root-web level.
  if (!web.IsRootWeb)
    rootWeb = web.Site.RootWeb;

  SPDocumentLibrary themeGallery =  
        (SPDocumentLibrary)
                rootWeb.GetCatalog(SPListTemplateType.ThemeCatalog);

  if (themeGallery != null)
  {
   foreach (SPListItem themeItem in themeGallery.Items)
   {
     string themeName = themeItem.Name;
   }
  }
  else { // "No themes available for site " }

  //gets current applied theme Name
  string currentAppliedTheme = string.Empty;

  string themeurl = ThmxTheme.GetThemeUrlForWeb(web); //gets current 
                                                      // theme

  if (!string.IsNullOrEmpty(themeurl))
  {
   ThmxTheme theme = ThmxTheme.Open(web.Site, themeurl);
   currentAppliedTheme = theme.Name; //Gets the name of theme
  }
 }
 catch (Exception ex)
 {
  throw new Exception("Unable to get theme for site " + web.Title + ". Error: " + ex.Message);
 }
}


/// <summary>
/// Sets theme for the site.
/// </summary>
/// <param name="web">Website for which master page is to be set.</param>
private void SetTheme(SPWeb web)
{
 try
 {
  ThmxTheme theme = ThmxTheme.Open(web.Site, "_catalogs/theme/" + "MyTheme.thmx");
theme.ApplyTo(web, false);
web.Update();
 }
 catch (Exception ex)
 {
 throw new Exception("Unable to set theme for site " + web.Title + ". Error: " + ex.Message);
 }
}


/// <summary>
/// Uploads new theme file in theme gallery, overwrites, if already exists.
/// </summary>
/// <param name="web">Website for which master page is to be set.</param>
private void UploadThemeFileInThemeGallery(SPWeb web)
{
 try
 {
  //fuTheme is a fileupload control in my project
  SPDocumentLibrary themeGallery = (SPDocumentLibrary)web.GetCatalog(SPListTemplateType.ThemeCatalog);
  themeGallery.RootFolder.Files.Add(themeGallery.RootFolder.ServerRelativeUrl + "/" + fuTheme.FileName, fuTheme.FileBytes, true);
  themeGallery.Update();
 }
 catch (Exception ex)
 {
  throw new Exception("Unable to upload theme for site " + web.Title + ". Error: " + ex.Message);
 }
}






1 comment: