diff --git a/src/Orchard.Web/Modules/TinyMce/Settings/EditorEvents.cs b/src/Orchard.Web/Modules/TinyMce/Settings/EditorEvents.cs index f27f69727..dc9e78947 100644 --- a/src/Orchard.Web/Modules/TinyMce/Settings/EditorEvents.cs +++ b/src/Orchard.Web/Modules/TinyMce/Settings/EditorEvents.cs @@ -29,7 +29,7 @@ namespace TinyMce.Settings { } public override IEnumerable PartFieldEditorUpdate(ContentPartFieldDefinitionBuilder builder, IUpdateModel updateModel) { - if (!_contentLinksDependenciesEnabled || !_htmlFields.Any(x => x.Equals(builder.Name, StringComparison.InvariantCultureIgnoreCase))) + if (!_contentLinksDependenciesEnabled || !_htmlFields.Any(x => x.Equals(builder.FieldType, StringComparison.InvariantCultureIgnoreCase))) yield break; var model = new ContentLinksSettings(); @@ -56,4 +56,4 @@ namespace TinyMce.Settings { yield return DefinitionTemplate(model); } } -} \ No newline at end of file +} diff --git a/src/Orchard/Data/MapAsRecordAttribute.cs b/src/Orchard/Data/MapAsRecordAttribute.cs new file mode 100644 index 000000000..2ef6abecd --- /dev/null +++ b/src/Orchard/Data/MapAsRecordAttribute.cs @@ -0,0 +1,18 @@ +using System; + +namespace Orchard.Data { + /// + /// Marks whether a class should be mapped as an NHibernate record + /// + public class MapAsRecordAttribute : Attribute { + private readonly bool _enabled; + + public MapAsRecordAttribute() : this(true) { } + + public MapAsRecordAttribute(bool enabled) { + _enabled = enabled; + } + + public bool Enabled => _enabled; + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/ShellBuilders/CompositionStrategy.cs b/src/Orchard/Environment/ShellBuilders/CompositionStrategy.cs index 332d70964..5a4e48480 100644 --- a/src/Orchard/Environment/ShellBuilders/CompositionStrategy.cs +++ b/src/Orchard/Environment/ShellBuilders/CompositionStrategy.cs @@ -6,6 +6,7 @@ using System.Web.Mvc; using Autofac.Core; using Orchard.ContentManagement; using Orchard.ContentManagement.Records; +using Orchard.Data; using Orchard.Environment.Configuration; using Orchard.Environment.Descriptor.Models; using Orchard.Environment.Extensions; @@ -96,7 +97,7 @@ namespace Orchard.Environment.ShellBuilders { } var feature = availableFeatures[shellFeature]; - + foreach (var childDependency in ExpandDependenciesInternal(availableFeatures, feature.Dependencies, dependentFeatureDescriptor: feature)) yield return childDependency; @@ -197,7 +198,12 @@ namespace Orchard.Environment.ShellBuilders { } private static bool IsRecord(Type type) { - return ((type.Namespace ?? "").EndsWith(".Models") || (type.Namespace ?? "").EndsWith(".Records")) && + var mapAsRecordAttr = type.GetCustomAttributes(typeof(MapAsRecordAttribute), false) + .OfType() + .FirstOrDefault(); + + return ((type.Namespace ?? "").EndsWith(".Models") || (type.Namespace ?? "").EndsWith(".Records") || mapAsRecordAttr?.Enabled == true) && + mapAsRecordAttr?.Enabled != false && type.GetProperty("Id") != null && (type.GetProperty("Id").GetAccessors()).All(x => x.IsVirtual) && !type.IsSealed && diff --git a/src/Orchard/Localization/Services/DefaultCultureManager.cs b/src/Orchard/Localization/Services/DefaultCultureManager.cs index 49344b987..16c6ade47 100644 --- a/src/Orchard/Localization/Services/DefaultCultureManager.cs +++ b/src/Orchard/Localization/Services/DefaultCultureManager.cs @@ -62,12 +62,36 @@ namespace Orchard.Localization.Services { return _workContextAccessor.GetContext().CurrentCulture; } + protected Dictionary GetAllCulturesById() { + return _cacheManager.Get("all_culture_records_by_id", true, context => { + context.Monitor(_signals.When("culturesChanged")); + + return _cultureRepository.Table + .ToDictionary(cr => cr.Id); + }); + } public CultureRecord GetCultureById(int id) { - return _cultureRepository.Get(id); + var cultures = GetAllCulturesById(); + CultureRecord result; + cultures.TryGetValue(id, out result); + + return result; } + protected Dictionary GetAllCulturesByName() { + return _cacheManager.Get("all_culture_records_by_name", true, context => { + context.Monitor(_signals.When("culturesChanged")); + + return _cultureRepository.Table + .ToDictionary(cr => cr.Culture); + }); + } public CultureRecord GetCultureByName(string cultureName) { - return _cultureRepository.Get(cr => cr.Culture == cultureName); + var cultures = GetAllCulturesByName(); + CultureRecord result; + cultures.TryGetValue(cultureName, out result); + + return result; } public string GetSiteCulture() { diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 1a783d209..d2698b5db 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -157,6 +157,7 @@ +