diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index c3f4c0885..027136699 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -208,6 +208,7 @@ + diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj.rej b/src/Orchard.Web/Core/Orchard.Core.csproj.rej new file mode 100644 index 000000000..6e53a6bbe --- /dev/null +++ b/src/Orchard.Web/Core/Orchard.Core.csproj.rej @@ -0,0 +1,18 @@ +--- Orchard.Core.csproj ++++ Orchard.Core.csproj +@@ -18,6 +18,7 @@ + 3.5 + + ++ false + + + true +@@ -200,6 +201,7 @@ + + + ++ + + + diff --git a/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs b/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs index 52707ff5e..80a2256f8 100644 --- a/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs +++ b/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs @@ -1,4 +1,5 @@ -using JetBrains.Annotations; +using System; +using JetBrains.Annotations; using Orchard.Core.Settings.Models; using Orchard.Data; using Orchard.ContentManagement.Handlers; @@ -11,6 +12,14 @@ namespace Orchard.Core.Settings.Handlers { Filters.Add(new ActivatingFilter("Site")); Filters.Add(StorageFilter.For(repository)); Filters.Add(StorageFilter.For(repository2)); + + OnInitializing(InitializeSiteSettings); + } + + private static void InitializeSiteSettings(InitializingContentContext initializingContentContext, SiteSettingsPart siteSettingsPart) { + siteSettingsPart.Record.SiteSalt = Guid.NewGuid().ToString("N"); + siteSettingsPart.Record.SiteName = "My Orchard Project Application"; + siteSettingsPart.Record.PageTitleSeparator = " - "; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Settings/Models/SiteSettingsCache.cs b/src/Orchard.Web/Core/Settings/Models/SiteSettingsCache.cs new file mode 100644 index 000000000..b09a11ec4 --- /dev/null +++ b/src/Orchard.Web/Core/Settings/Models/SiteSettingsCache.cs @@ -0,0 +1,141 @@ +using Orchard.ContentManagement; +using Orchard.Settings; + +namespace Orchard.Core.Settings.Models { + public class SiteSettingsCache : ISite { + private readonly int _id; + + private SiteSettingsPart _siteSettingsPart; + + private string _pageTitleSeparator; + private string _siteName; + private string _siteSalt; + private string _superUser; + private string _homePage; + private string _siteCulture; + private ResourceDebugMode _resourceDebugMode; + private int _pageSize; + private string _baseUrl; + + public SiteSettingsCache(ISite site) { + _id = site.Id; + _pageTitleSeparator = site.PageTitleSeparator; + _siteName = site.SiteName; + _siteSalt = site.SiteSalt; + _superUser = site.SuperUser; + _homePage = site.HomePage; + _siteCulture = site.SiteCulture; + _resourceDebugMode = site.ResourceDebugMode; + _pageSize = site.PageSize; + _baseUrl = site.BaseUrl; + } + + public int Id { + get { return _id; } + } + + public string PageTitleSeparator { + get { return _pageTitleSeparator; } + + set { + _pageTitleSeparator = value; + SiteSettingsPart.PageTitleSeparator = value; + } + } + + public string SiteName { + get { return _siteName; } + + set { + _siteName = value; + SiteSettingsPart.SiteName = value; + } + } + + public string SiteSalt { + get { return _siteSalt; } + + set { + _siteSalt = value; + SiteSettingsPart.Record.SiteSalt = value; + } + } + + public string SuperUser { + get { return _superUser; } + + set { + _superUser = value; + SiteSettingsPart.SuperUser = value; + } + } + + public string HomePage { + get { return _homePage; } + + set { + _homePage = value; + SiteSettingsPart.HomePage = value; + } + } + + public string SiteCulture { + get { return _siteCulture; } + + set { + _siteCulture = value; + SiteSettingsPart.SiteCulture = value; + } + } + + public ResourceDebugMode ResourceDebugMode { + get { return _resourceDebugMode; } + + set { + _resourceDebugMode = value; + SiteSettingsPart.ResourceDebugMode = value; + } + } + + public int PageSize { + get { return _pageSize; } + + set { + _pageSize = value; + SiteSettingsPart.PageSize = value; + } + } + + public string BaseUrl { + get { return _baseUrl; } + + set { + _baseUrl = value; + SiteSettingsPart.BaseUrl = value; + } + } + + public ContentItem ContentItem { + get { return SiteSettingsPart.ContentItem; } + } + + private ISiteService SiteService { get; set; } + + private SiteSettingsPart SiteSettingsPart { + get { + if (_siteSettingsPart == null) { + _siteSettingsPart = SiteService.GetSiteSettingsPart() as SiteSettingsPart; + } + + return _siteSettingsPart; + } + + set { _siteSettingsPart = value; } + } + + public void ResetCache(ISiteService siteService) { + SiteService = siteService; + SiteSettingsPart = null; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Settings/Services/SiteService.cs b/src/Orchard.Web/Core/Settings/Services/SiteService.cs index e9a9f140f..1a697618f 100644 --- a/src/Orchard.Web/Core/Settings/Services/SiteService.cs +++ b/src/Orchard.Web/Core/Settings/Services/SiteService.cs @@ -20,23 +20,27 @@ namespace Orchard.Core.Settings.Services { ICacheManager cacheManager) { _contentManager = contentManager; _cacheManager = cacheManager; + Logger = NullLogger.Instance; } public ILogger Logger { get; set; } public ISite GetSiteSettings() { + SiteSettingsCache siteSettingsCache = _cacheManager.Get("SiteSettings", + ctx => new SiteSettingsCache(GetSiteSettingsPart())); + siteSettingsCache.ResetCache(this); + return siteSettingsCache; + } + + public ISite GetSiteSettingsPart() { var siteId = _cacheManager.Get("SiteId", ctx => { var site = _contentManager.Query("Site") .Slice(0, 1) .FirstOrDefault(); if (site == null) { - site = _contentManager.Create("Site", item => { - item.Record.SiteSalt = Guid.NewGuid().ToString("N"); - item.Record.SiteName = "My Orchard Project Application"; - item.Record.PageTitleSeparator = " - "; - }).ContentItem; + site = _contentManager.Create("Site").ContentItem; } return site.Id; diff --git a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs index 50ddb32f6..af3c32067 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs @@ -140,6 +140,10 @@ namespace Orchard.Setup { return site.As(); } + + public ISite GetSiteSettingsPart() { + return GetSiteSettings(); + } } class SafeModeSite : ContentPart, ISite { diff --git a/src/Orchard/Settings/ISiteService.cs b/src/Orchard/Settings/ISiteService.cs index cdd2c4888..e67d58ef0 100644 --- a/src/Orchard/Settings/ISiteService.cs +++ b/src/Orchard/Settings/ISiteService.cs @@ -1,5 +1,6 @@ namespace Orchard.Settings { public interface ISiteService : IDependency { ISite GetSiteSettings(); + ISite GetSiteSettingsPart(); } }