/// <summary>
/// Handles the Click event of the btnSave control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
protected void btnSave_Click( object sender, EventArgs e )
{
Site site;
if ( Page.IsValid )
{
var rockContext = new RockContext();
SiteService siteService = new SiteService( rockContext );
SiteDomainService siteDomainService = new SiteDomainService( rockContext );
bool newSite = false;
int siteId = int.Parse( hfSiteId.Value );
if ( siteId == 0 )
{
newSite = true;
site = new Rock.Model.Site();
siteService.Add( site );
}
else
{
site = siteService.Get( siteId );
}
site.Name = tbSiteName.Text;
site.Description = tbDescription.Text;
site.Theme = ddlTheme.Text;
site.DefaultPageId = ppDefaultPage.PageId;
site.DefaultPageRouteId = ppDefaultPage.PageRouteId;
site.LoginPageId = ppLoginPage.PageId;
site.LoginPageRouteId = ppLoginPage.PageRouteId;
site.CommunicationPageId = ppCommunicationPage.PageId;
site.CommunicationPageRouteId = ppCommunicationPage.PageRouteId;
site.RegistrationPageId = ppRegistrationPage.PageId;
site.RegistrationPageRouteId = ppRegistrationPage.PageRouteId;
site.PageNotFoundPageId = ppPageNotFoundPage.PageId;
site.PageNotFoundPageRouteId = ppPageNotFoundPage.PageRouteId;
site.ErrorPage = tbErrorPage.Text;
site.GoogleAnalyticsCode = tbGoogleAnalytics.Text;
site.FacebookAppId = tbFacebookAppId.Text;
site.FacebookAppSecret = tbFacebookAppSecret.Text;
var currentDomains = tbSiteDomains.Text.SplitDelimitedValues().ToList<string>();
site.SiteDomains = site.SiteDomains ?? new List<SiteDomain>();
// Remove any deleted domains
foreach ( var domain in site.SiteDomains.Where( w => !currentDomains.Contains( w.Domain ) ).ToList() )
{
site.SiteDomains.Remove( domain );
siteDomainService.Delete( domain );
}
foreach ( string domain in currentDomains )
{
SiteDomain sd = site.SiteDomains.Where( d => d.Domain == domain ).FirstOrDefault();
if ( sd == null )
{
sd = new SiteDomain();
sd.Domain = domain;
sd.Guid = Guid.NewGuid();
site.SiteDomains.Add( sd );
}
}
if ( !site.DefaultPageId.HasValue && !newSite )
{
ppDefaultPage.ShowErrorMessage( "Default Page is required." );
return;
}
if ( !site.IsValid )
{
// Controls will render the error messages
return;
}
rockContext.WrapTransaction( () =>
{
rockContext.SaveChanges();
if ( newSite )
{
Rock.Security.Authorization.CopyAuthorization( RockPage.Layout.Site, site, rockContext );
}
} );
SiteCache.Flush( site.Id );
// Create the default page is this is a new site
if ( !site.DefaultPageId.HasValue && newSite )
{
var siteCache = SiteCache.Read( site.Id );
// Create the layouts for the site, and find the first one
LayoutService.RegisterLayouts( Request.MapPath( "~" ), siteCache );
var layoutService = new LayoutService( rockContext );
var layouts = layoutService.GetBySiteId( siteCache.Id );
Layout layout = layouts.FirstOrDefault( l => l.FileName.Equals( "FullWidth", StringComparison.OrdinalIgnoreCase ) );
if ( layout == null )
{
layout = layouts.FirstOrDefault();
}
if ( layout != null )
{
var pageService = new PageService( rockContext );
var page = new Page();
page.LayoutId = layout.Id;
page.PageTitle = siteCache.Name + " Home Page";
page.InternalName = page.PageTitle;
page.BrowserTitle = page.PageTitle;
page.EnableViewState = true;
page.IncludeAdminFooter = true;
page.MenuDisplayChildPages = true;
var lastPage = pageService.GetByParentPageId( null ).
OrderByDescending( b => b.Order ).FirstOrDefault();
page.Order = lastPage != null ? lastPage.Order + 1 : 0;
pageService.Add( page );
rockContext.SaveChanges();
site = siteService.Get( siteCache.Id );
site.DefaultPageId = page.Id;
rockContext.SaveChanges();
SiteCache.Flush( site.Id );
}
}
var qryParams = new Dictionary<string, string>();
qryParams["siteId"] = site.Id.ToString();
NavigateToPage( RockPage.Guid, qryParams );
}
}