diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs new file mode 100644 index 000000000..02c446374 --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using Orchard.Data; +using Orchard.Models; +using Orchard.Models.Driver; +using Orchard.Models.Records; + +namespace Orchard.Wikis.Models { + public class WikiSettingsRecord : ContentPartRecord { + public virtual bool AllowAnonymousEdits { get; set; } + + [Required] + public virtual string WikiEditTheme { get; set; } + } + + public class WikiSettingsHandler : ContentHandler { + public WikiSettingsHandler(IRepository repository) { + Filters.Add(new ActivatingFilter>("site")); + Filters.Add(new StorageFilterForRecord(repository) { AutomaticallyCreateMissingRecord = true }); + Filters.Add(new TemplateFilterForRecord("WikiSettings")); + } + } + +} diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettingsHandler.cs b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettingsHandler.cs deleted file mode 100644 index 1b29e3821..000000000 --- a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettingsHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Orchard.Data; -using Orchard.Models; -using Orchard.Models.Driver; -using Orchard.UI.Models; - -namespace Orchard.Wikis.Models { - public class WikiSettingsHandler : ContentHandler { - public WikiSettingsHandler(IRepository repository) { - Filters.Add(new ActivatingFilter>("site")); - Filters.Add(new StorageFilterForRecord(repository) { AutomaticallyCreateMissingRecord = true }); - } - - protected override void GetEditors(GetContentEditorsContext context) { - var part = context.ContentItem.As>(); - if (part == null) - return; - - context.Editors.Add(ModelTemplate.For(part.Record, "WikiSettings")); - } - - protected override void UpdateEditors(UpdateContentContext context) { - var part = context.ContentItem.As>(); - if (part == null) - return; - - context.Updater.TryUpdateModel(part.Record, "WikiSettings", null, null); - context.Editors.Add(ModelTemplate.For(part.Record, "WikiSettings")); - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettingsRecord.cs b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettingsRecord.cs deleted file mode 100644 index 71243fc0d..000000000 --- a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettingsRecord.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Orchard.Models.Records; - -namespace Orchard.Wikis.Models { - public class WikiSettingsRecord : ContentPartRecord { - public virtual bool AllowAnonymousEdits { get; set; } - - [Required] - public virtual string WikiEditTheme { get; set; } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj b/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj index 14d7ce063..c5a35f857 100644 --- a/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj +++ b/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj @@ -64,8 +64,7 @@ - - + diff --git a/src/Orchard/Models/Driver/ContentHandler.cs b/src/Orchard/Models/Driver/ContentHandler.cs index 18e2ae743..1da6c5797 100644 --- a/src/Orchard/Models/Driver/ContentHandler.cs +++ b/src/Orchard/Models/Driver/ContentHandler.cs @@ -70,8 +70,16 @@ namespace Orchard.Models.Driver { Loaded(context); } - void IContentHandler.GetEditors(GetContentEditorsContext context) { GetEditors(context); } - void IContentHandler.UpdateEditors(UpdateContentContext context) { UpdateEditors(context); } + void IContentHandler.GetEditors(GetContentEditorsContext context) { + foreach (var filter in Filters.OfType()) + filter.GetEditors(context); + GetEditors(context); + } + void IContentHandler.UpdateEditors(UpdateContentContext context) { + foreach (var filter in Filters.OfType()) + filter.UpdateEditors(context); + UpdateEditors(context); + } protected virtual void Activating(ActivatingContentContext context) { } protected virtual void Activated(ActivatedContentContext context) { } diff --git a/src/Orchard/Models/Driver/IContentTemplateFilter.cs b/src/Orchard/Models/Driver/IContentTemplateFilter.cs new file mode 100644 index 000000000..899b6f0de --- /dev/null +++ b/src/Orchard/Models/Driver/IContentTemplateFilter.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Orchard.Models.Driver { + interface IContentTemplateFilter : IContentFilter { + void GetEditors(GetContentEditorsContext context); + void UpdateEditors(UpdateContentContext context); + } +} diff --git a/src/Orchard/Models/Driver/TemplateFilterBase.cs b/src/Orchard/Models/Driver/TemplateFilterBase.cs new file mode 100644 index 000000000..74f9a0626 --- /dev/null +++ b/src/Orchard/Models/Driver/TemplateFilterBase.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Orchard.Models.Driver { + public abstract class TemplateFilterBase : IContentTemplateFilter where TPart : class, IContentItemPart { + + protected virtual void GetEditors(GetContentEditorsContext context, TPart instance) { } + protected virtual void UpdateEditors(UpdateContentContext context, TPart instance) { } + + void IContentTemplateFilter.GetEditors(GetContentEditorsContext context) { + if (context.ContentItem.Is()) + GetEditors(context, context.ContentItem.As()); + } + + void IContentTemplateFilter.UpdateEditors(UpdateContentContext context) { + if (context.ContentItem.Is()) + UpdateEditors(context, context.ContentItem.As()); + } + + } +} diff --git a/src/Orchard/Models/Driver/TemplateFilterForRecord.cs b/src/Orchard/Models/Driver/TemplateFilterForRecord.cs new file mode 100644 index 000000000..199f27a8e --- /dev/null +++ b/src/Orchard/Models/Driver/TemplateFilterForRecord.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Orchard.Models.Records; +using Orchard.UI.Models; + +namespace Orchard.Models.Driver { + public class TemplateFilterForRecord : TemplateFilterBase> where TRecord : ContentPartRecord, new() { + private readonly string _prefix; + + public TemplateFilterForRecord(string prefix) { + _prefix = prefix; + } + + protected override void GetEditors(GetContentEditorsContext context, ContentPartForRecord part) { + context.Editors.Add(ModelTemplate.For(part.Record, _prefix)); + } + + protected override void UpdateEditors(UpdateContentContext context, ContentPartForRecord part) { + context.Updater.TryUpdateModel(part.Record, _prefix, null, null); + context.Editors.Add(ModelTemplate.For(part.Record, _prefix)); + } + } +} diff --git a/src/Orchard/Orchard.csproj b/src/Orchard/Orchard.csproj index 5a783c363..4b68a75ed 100644 --- a/src/Orchard/Orchard.csproj +++ b/src/Orchard/Orchard.csproj @@ -130,6 +130,7 @@ + @@ -149,6 +150,8 @@ + +