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);
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);
}
}
Top code. Thank you very much
ReplyDelete