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();
}
}