mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-19 01:57:55 +08:00
Continuing to refactor ModelDriver concept into ContentHandler
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041352
This commit is contained in:
@@ -28,7 +28,7 @@ namespace Orchard.Tests.Packages.Users.Controllers {
|
|||||||
builder.Register<AdminController>();
|
builder.Register<AdminController>();
|
||||||
builder.Register<DefaultContentManager>().As<IContentManager>();
|
builder.Register<DefaultContentManager>().As<IContentManager>();
|
||||||
builder.Register<MembershipService>().As<IMembershipService>();
|
builder.Register<MembershipService>().As<IMembershipService>();
|
||||||
builder.Register<UserDriver>().As<IModelDriver>();
|
builder.Register<UserDriver>().As<IContentHandler>();
|
||||||
builder.Register(new Mock<INotifier>().Object);
|
builder.Register(new Mock<INotifier>().Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -58,7 +58,7 @@ namespace Orchard.Tests.Packages.Users.Services {
|
|||||||
builder.RegisterModule(new ImplicitCollectionSupportModule());
|
builder.RegisterModule(new ImplicitCollectionSupportModule());
|
||||||
builder.Register<MembershipService>().As<IMembershipService>();
|
builder.Register<MembershipService>().As<IMembershipService>();
|
||||||
builder.Register<DefaultContentManager>().As<IContentManager>();
|
builder.Register<DefaultContentManager>().As<IContentManager>();
|
||||||
builder.Register<UserDriver>().As<IModelDriver>();
|
builder.Register<UserDriver>().As<IContentHandler>();
|
||||||
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
|
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
|
||||||
_session = _sessionFactory.OpenSession();
|
_session = _sessionFactory.OpenSession();
|
||||||
builder.Register(new TestSessionLocator(_session)).As<ISessionLocator>();
|
builder.Register(new TestSessionLocator(_session)).As<ISessionLocator>();
|
||||||
|
@@ -38,11 +38,11 @@ namespace Orchard.Tests.Models {
|
|||||||
var builder = new ContainerBuilder();
|
var builder = new ContainerBuilder();
|
||||||
builder.RegisterModule(new ImplicitCollectionSupportModule());
|
builder.RegisterModule(new ImplicitCollectionSupportModule());
|
||||||
builder.Register<DefaultContentManager>().As<IContentManager>();
|
builder.Register<DefaultContentManager>().As<IContentManager>();
|
||||||
builder.Register<AlphaDriver>().As<IModelDriver>();
|
builder.Register<AlphaDriver>().As<IContentHandler>();
|
||||||
builder.Register<BetaDriver>().As<IModelDriver>();
|
builder.Register<BetaDriver>().As<IContentHandler>();
|
||||||
builder.Register<GammaDriver>().As<IModelDriver>();
|
builder.Register<GammaDriver>().As<IContentHandler>();
|
||||||
builder.Register<FlavoredDriver>().As<IModelDriver>();
|
builder.Register<FlavoredDriver>().As<IContentHandler>();
|
||||||
builder.Register<StyledDriver>().As<IModelDriver>();
|
builder.Register<StyledDriver>().As<IContentHandler>();
|
||||||
|
|
||||||
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
|
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ namespace Orchard.Tests.Models {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void CreateShouldMakeModelAndModelTypeRecords() {
|
public void CreateShouldMakeModelAndContentTypeRecords() {
|
||||||
var beta = _manager.New("beta");
|
var beta = _manager.New("beta");
|
||||||
_manager.Create(beta);
|
_manager.Create(beta);
|
||||||
|
|
||||||
@@ -148,13 +148,13 @@ namespace Orchard.Tests.Models {
|
|||||||
Assert.That(modelRecord.ContentType.Name, Is.EqualTo("beta"));
|
Assert.That(modelRecord.ContentType.Name, Is.EqualTo("beta"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ContentItemRecord CreateModelRecord(string modelType) {
|
private ContentItemRecord CreateModelRecord(string contentType) {
|
||||||
var modelRepository = _container.Resolve<IRepository<ContentItemRecord>>();
|
var contentItemRepository = _container.Resolve<IRepository<ContentItemRecord>>();
|
||||||
var modelTypeRepository = _container.Resolve<IRepository<ContentTypeRecord>>();
|
var contentTypeRepository = _container.Resolve<IRepository<ContentTypeRecord>>();
|
||||||
|
|
||||||
var modelRecord = new ContentItemRecord { ContentType = new ContentTypeRecord { Name = modelType } };
|
var modelRecord = new ContentItemRecord { ContentType = new ContentTypeRecord { Name = contentType } };
|
||||||
modelTypeRepository.Create(modelRecord.ContentType);
|
contentTypeRepository.Create(modelRecord.ContentType);
|
||||||
modelRepository.Create(modelRecord);
|
contentItemRepository.Create(modelRecord);
|
||||||
|
|
||||||
_session.Flush();
|
_session.Flush();
|
||||||
_session.Clear();
|
_session.Clear();
|
||||||
|
@@ -14,7 +14,7 @@ namespace Orchard.Tests.Models.Drivers {
|
|||||||
var part = new TestModelPart();
|
var part = new TestModelPart();
|
||||||
contentItem.Weld(part);
|
contentItem.Weld(part);
|
||||||
|
|
||||||
((IModelDriver)modelDriver).Creating(new CreateModelContext { ContentItem = contentItem });
|
((IContentHandler)modelDriver).Creating(new CreateContentContext { ContentItem = contentItem });
|
||||||
Assert.That(part.CreatingCalled, Is.True);
|
Assert.That(part.CreatingCalled, Is.True);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ namespace Orchard.Tests.Models.Drivers {
|
|||||||
var modelDriver = new TestModelDriver();
|
var modelDriver = new TestModelDriver();
|
||||||
|
|
||||||
var builder = new ContentItemBuilder("testing");
|
var builder = new ContentItemBuilder("testing");
|
||||||
((IModelDriver)modelDriver).Activating(new ActivatingModelContext { Builder = builder, ModelType = "testing" });
|
((IContentHandler)modelDriver).Activating(new ActivatingContentContext { Builder = builder, ContentType = "testing" });
|
||||||
var model = builder.Build();
|
var model = builder.Build();
|
||||||
Assert.That(model.Is<TestModelPart>(), Is.True);
|
Assert.That(model.Is<TestModelPart>(), Is.True);
|
||||||
Assert.That(model.As<TestModelPart>(), Is.Not.Null);
|
Assert.That(model.As<TestModelPart>(), Is.Not.Null);
|
||||||
@@ -34,7 +34,7 @@ namespace Orchard.Tests.Models.Drivers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class TestModelDriver : ModelDriver {
|
public class TestModelDriver : ContentHandler {
|
||||||
public TestModelDriver() {
|
public TestModelDriver() {
|
||||||
Filters.Add(new ActivatingFilter<TestModelPart>(x => x == "testing"));
|
Filters.Add(new ActivatingFilter<TestModelPart>(x => x == "testing"));
|
||||||
Filters.Add(new TestModelStorageFilter());
|
Filters.Add(new TestModelStorageFilter());
|
||||||
@@ -42,7 +42,7 @@ namespace Orchard.Tests.Models.Drivers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class TestModelStorageFilter : StorageFilterBase<TestModelPart> {
|
public class TestModelStorageFilter : StorageFilterBase<TestModelPart> {
|
||||||
protected override void Creating(CreateModelContext context, TestModelPart instance) {
|
protected override void Creating(CreateContentContext context, TestModelPart instance) {
|
||||||
instance.CreatingCalled = true;
|
instance.CreatingCalled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Tests.Models.Stubs {
|
namespace Orchard.Tests.Models.Stubs {
|
||||||
public class AlphaDriver : ModelDriver {
|
public class AlphaDriver : ContentHandler {
|
||||||
protected override void Activating(ActivatingModelContext context) {
|
protected override void Activating(ActivatingContentContext context) {
|
||||||
if (context.ModelType == "alpha") {
|
if (context.ContentType == "alpha") {
|
||||||
context.Builder.Weld<Alpha>();
|
context.Builder.Weld<Alpha>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,9 +5,9 @@ using System.Text;
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Tests.Models.Stubs {
|
namespace Orchard.Tests.Models.Stubs {
|
||||||
public class BetaDriver : ModelDriver {
|
public class BetaDriver : ContentHandler {
|
||||||
protected override void Activating(ActivatingModelContext context) {
|
protected override void Activating(ActivatingContentContext context) {
|
||||||
if (context.ModelType == "beta") {
|
if (context.ContentType == "beta") {
|
||||||
context.Builder.Weld<Beta>();
|
context.Builder.Weld<Beta>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Tests.Models.Stubs {
|
namespace Orchard.Tests.Models.Stubs {
|
||||||
public class FlavoredDriver : ModelDriver {
|
public class FlavoredDriver : ContentHandler {
|
||||||
protected override void Activating(ActivatingModelContext context) {
|
protected override void Activating(ActivatingContentContext context) {
|
||||||
if (context.ModelType == "beta" || context.ModelType == "alpha") {
|
if (context.ContentType == "beta" || context.ContentType == "alpha") {
|
||||||
context.Builder.Weld<Flavored>();
|
context.Builder.Weld<Flavored>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@ namespace Orchard.Tests.Models.Stubs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class GammaDriver : ModelDriver {
|
public class GammaDriver : ContentHandler {
|
||||||
public GammaDriver(IRepository<GammaRecord> repository){
|
public GammaDriver(IRepository<GammaRecord> repository){
|
||||||
Filters.Add(new ActivatingFilter<Gamma>(x => x == "gamma"));
|
Filters.Add(new ActivatingFilter<Gamma>(x => x == "gamma"));
|
||||||
Filters.Add(new StorageFilterForRecord<GammaRecord>(repository));
|
Filters.Add(new StorageFilterForRecord<GammaRecord>(repository));
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Tests.Models.Stubs {
|
namespace Orchard.Tests.Models.Stubs {
|
||||||
public class StyledDriver : ModelDriver {
|
public class StyledDriver : ContentHandler {
|
||||||
protected override void Activating(ActivatingModelContext context) {
|
protected override void Activating(ActivatingContentContext context) {
|
||||||
if (context.ModelType == "alpha") {
|
if (context.ContentType == "alpha") {
|
||||||
context.Builder.Weld<Styled>();
|
context.Builder.Weld<Styled>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,7 @@ using Orchard.Security;
|
|||||||
using Orchard.Services;
|
using Orchard.Services;
|
||||||
|
|
||||||
namespace Orchard.Core.Common.Models {
|
namespace Orchard.Core.Common.Models {
|
||||||
public class CommonDriver : ModelDriver {
|
public class CommonDriver : Orchard.Models.Driver.ContentHandler {
|
||||||
private readonly IClock _clock;
|
private readonly IClock _clock;
|
||||||
private readonly IAuthenticationService _authenticationService;
|
private readonly IAuthenticationService _authenticationService;
|
||||||
private readonly IContentManager _contentManager;
|
private readonly IContentManager _contentManager;
|
||||||
@@ -26,7 +26,7 @@ namespace Orchard.Core.Common.Models {
|
|||||||
AddOnLoaded<CommonModel>(LoadOwnerModel);
|
AddOnLoaded<CommonModel>(LoadOwnerModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetCreateTimesAndAuthor(CreateModelContext context, CommonModel instance) {
|
void SetCreateTimesAndAuthor(CreateContentContext context, CommonModel instance) {
|
||||||
if (instance.Record.CreatedUtc == null) {
|
if (instance.Record.CreatedUtc == null) {
|
||||||
instance.Record.CreatedUtc = _clock.UtcNow;
|
instance.Record.CreatedUtc = _clock.UtcNow;
|
||||||
}
|
}
|
||||||
@@ -40,7 +40,7 @@ namespace Orchard.Core.Common.Models {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadOwnerModel(LoadModelContext context, CommonModel instance) {
|
void LoadOwnerModel(LoadContentContext context, CommonModel instance) {
|
||||||
if (instance.Record.OwnerId != 0) {
|
if (instance.Record.OwnerId != 0) {
|
||||||
instance.Owner = _contentManager.Get(instance.Record.OwnerId).As<IUser>();
|
instance.Owner = _contentManager.Get(instance.Record.OwnerId).As<IUser>();
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Core.Common.Models {
|
namespace Orchard.Core.Common.Models {
|
||||||
public class ContentDriver : ModelDriver {
|
public class ContentDriver : Orchard.Models.Driver.ContentHandler {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -3,7 +3,7 @@ using Orchard.Data;
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Core.Common.Models {
|
namespace Orchard.Core.Common.Models {
|
||||||
public class RoutableDriver : ModelDriver {
|
public class RoutableDriver : Orchard.Models.Driver.ContentHandler {
|
||||||
public RoutableDriver(IRepository<RoutableRecord> repository) {
|
public RoutableDriver(IRepository<RoutableRecord> repository) {
|
||||||
Filters.Add(new StorageFilterForRecord<RoutableRecord>(repository));
|
Filters.Add(new StorageFilterForRecord<RoutableRecord>(repository));
|
||||||
}
|
}
|
||||||
|
@@ -9,7 +9,7 @@ using Orchard.Models.Driver;
|
|||||||
|
|
||||||
namespace Orchard.Core.Settings.Controllers {
|
namespace Orchard.Core.Settings.Controllers {
|
||||||
[ValidateInput(false)]
|
[ValidateInput(false)]
|
||||||
public class AdminController : Controller, IModelUpdater {
|
public class AdminController : Controller, IUpdateModel {
|
||||||
private readonly ISiteService _siteService;
|
private readonly ISiteService _siteService;
|
||||||
private readonly IContentManager _modelManager;
|
private readonly IContentManager _modelManager;
|
||||||
private readonly INotifier _notifier;
|
private readonly INotifier _notifier;
|
||||||
@@ -43,9 +43,9 @@ namespace Orchard.Core.Settings.Controllers {
|
|||||||
return RedirectToAction("Index");
|
return RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IModelUpdater Members
|
#region IUpdateModel Members
|
||||||
|
|
||||||
bool IModelUpdater.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
|
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
|
||||||
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
|
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@ using Orchard.Data;
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Core.Settings.Models {
|
namespace Orchard.Core.Settings.Models {
|
||||||
public class SiteDriver : ModelDriver {
|
public class SiteDriver : ContentHandler {
|
||||||
public SiteDriver(IRepository<SiteSettingsRecord> repository){
|
public SiteDriver(IRepository<SiteSettingsRecord> repository){
|
||||||
Filters.Add(new ActivatingFilter<SiteModel>("site"));
|
Filters.Add(new ActivatingFilter<SiteModel>("site"));
|
||||||
Filters.Add(new StorageFilterForRecord<SiteSettingsRecord>(repository));
|
Filters.Add(new StorageFilterForRecord<SiteSettingsRecord>(repository));
|
||||||
|
@@ -12,13 +12,13 @@ namespace Orchard.Media.Models {
|
|||||||
public virtual string RootMediaFolder { get; set; }
|
public virtual string RootMediaFolder { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MediaSettingsDriver : ModelDriver {
|
public class MediaSettingsDriver : ContentHandler {
|
||||||
public MediaSettingsDriver(IRepository<MediaSettingsRecord> repository) {
|
public MediaSettingsDriver(IRepository<MediaSettingsRecord> repository) {
|
||||||
Filters.Add(new ActivatingFilter<MediaSettings>("site"));
|
Filters.Add(new ActivatingFilter<MediaSettings>("site"));
|
||||||
Filters.Add(new StorageFilterForRecord<MediaSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
|
Filters.Add(new StorageFilterForRecord<MediaSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void GetEditors(GetModelEditorsContext context) {
|
protected override void GetEditors(GetContentEditorsContext context) {
|
||||||
var model = context.ContentItem.As<MediaSettings>();
|
var model = context.ContentItem.As<MediaSettings>();
|
||||||
if (model == null)
|
if (model == null)
|
||||||
return;
|
return;
|
||||||
@@ -26,7 +26,7 @@ namespace Orchard.Media.Models {
|
|||||||
context.Editors.Add(ModelTemplate.For(model.Record, "MediaSettings"));
|
context.Editors.Add(ModelTemplate.For(model.Record, "MediaSettings"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateEditors(UpdateModelContext context) {
|
protected override void UpdateEditors(UpdateContentContext context) {
|
||||||
var model = context.ContentItem.As<MediaSettings>();
|
var model = context.ContentItem.As<MediaSettings>();
|
||||||
if (model == null)
|
if (model == null)
|
||||||
return;
|
return;
|
||||||
|
@@ -11,7 +11,7 @@ using Orchard.UI.Models;
|
|||||||
using Orchard.UI.Notify;
|
using Orchard.UI.Notify;
|
||||||
|
|
||||||
namespace Orchard.Roles.Models {
|
namespace Orchard.Roles.Models {
|
||||||
public class UserRolesDriver : ModelDriver {
|
public class UserRolesDriver : ContentHandler {
|
||||||
private readonly IRepository<UserRolesRecord> _userRolesRepository;
|
private readonly IRepository<UserRolesRecord> _userRolesRepository;
|
||||||
private readonly IRoleService _roleService;
|
private readonly IRoleService _roleService;
|
||||||
private readonly INotifier _notifier;
|
private readonly INotifier _notifier;
|
||||||
@@ -22,19 +22,19 @@ namespace Orchard.Roles.Models {
|
|||||||
_notifier = notifier;
|
_notifier = notifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Activating(ActivatingModelContext context) {
|
protected override void Activating(ActivatingContentContext context) {
|
||||||
if (context.ModelType == "user") {
|
if (context.ContentType == "user") {
|
||||||
context.Builder.Weld<UserRolesModel>();
|
context.Builder.Weld<UserRolesModel>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Creating(CreateModelContext context) {
|
protected override void Creating(CreateContentContext context) {
|
||||||
var userRoles = context.ContentItem.As<UserRolesModel>();
|
var userRoles = context.ContentItem.As<UserRolesModel>();
|
||||||
if (userRoles != null) {
|
if (userRoles != null) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Loading(LoadModelContext context) {
|
protected override void Loading(LoadContentContext context) {
|
||||||
var userRoles = context.ContentItem.As<UserRolesModel>();
|
var userRoles = context.ContentItem.As<UserRolesModel>();
|
||||||
if (userRoles != null) {
|
if (userRoles != null) {
|
||||||
userRoles.Roles = _userRolesRepository.Fetch(x => x.UserId == context.ContentItem.Id)
|
userRoles.Roles = _userRolesRepository.Fetch(x => x.UserId == context.ContentItem.Id)
|
||||||
@@ -42,7 +42,7 @@ namespace Orchard.Roles.Models {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void GetEditors(GetModelEditorsContext context) {
|
protected override void GetEditors(GetContentEditorsContext context) {
|
||||||
var userRoles = context.ContentItem.As<UserRolesModel>();
|
var userRoles = context.ContentItem.As<UserRolesModel>();
|
||||||
if (userRoles != null) {
|
if (userRoles != null) {
|
||||||
var roles =
|
var roles =
|
||||||
@@ -63,7 +63,7 @@ namespace Orchard.Roles.Models {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateEditors(UpdateModelContext context) {
|
protected override void UpdateEditors(UpdateContentContext context) {
|
||||||
var userRoles = context.ContentItem.As<UserRolesModel>();
|
var userRoles = context.ContentItem.As<UserRolesModel>();
|
||||||
if (userRoles != null) {
|
if (userRoles != null) {
|
||||||
var viewModel = new UserRolesViewModel();
|
var viewModel = new UserRolesViewModel();
|
||||||
|
@@ -12,7 +12,7 @@ using Orchard.Users.ViewModels;
|
|||||||
|
|
||||||
namespace Orchard.Users.Controllers {
|
namespace Orchard.Users.Controllers {
|
||||||
|
|
||||||
public class AdminController : Controller, IModelUpdater {
|
public class AdminController : Controller, IUpdateModel {
|
||||||
private readonly IMembershipService _membershipService;
|
private readonly IMembershipService _membershipService;
|
||||||
private readonly IContentManager _contentManager;
|
private readonly IContentManager _contentManager;
|
||||||
private readonly IRepository<UserRecord> _userRepository;
|
private readonly IRepository<UserRecord> _userRepository;
|
||||||
@@ -86,7 +86,7 @@ namespace Orchard.Users.Controllers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool IModelUpdater.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
|
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
|
||||||
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
|
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Users.Models {
|
namespace Orchard.Users.Models {
|
||||||
public class UserDriver : ModelDriver {
|
public class UserDriver : ContentHandler {
|
||||||
public UserDriver(IRepository<UserRecord> repository) {
|
public UserDriver(IRepository<UserRecord> repository) {
|
||||||
Filters.Add(new ActivatingFilter<UserModel>("user"));
|
Filters.Add(new ActivatingFilter<UserModel>("user"));
|
||||||
Filters.Add(new StorageFilterForRecord<UserRecord>(repository));
|
Filters.Add(new StorageFilterForRecord<UserRecord>(repository));
|
||||||
|
@@ -6,9 +6,9 @@ using Orchard.Core.Common.Models;
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Wikis.Models {
|
namespace Orchard.Wikis.Models {
|
||||||
public class WikiPageDriver : ModelDriver {
|
public class WikiPageDriver : ContentHandler {
|
||||||
protected override void Activating(ActivatingModelContext context) {
|
protected override void Activating(ActivatingContentContext context) {
|
||||||
if (context.ModelType == "wikipage") {
|
if (context.ContentType == "wikipage") {
|
||||||
context.Builder
|
context.Builder
|
||||||
.Weld<CommonModel>()
|
.Weld<CommonModel>()
|
||||||
.Weld<RoutableModel>()
|
.Weld<RoutableModel>()
|
||||||
|
@@ -16,7 +16,7 @@ namespace Orchard.Wikis.Models {
|
|||||||
public virtual string WikiEditTheme { get; set; }
|
public virtual string WikiEditTheme { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WikiSettingsDriver : ModelDriver {
|
public class WikiSettingsDriver : ContentHandler {
|
||||||
public WikiSettingsDriver(IRepository<WikiSettingsRecord> repository) {
|
public WikiSettingsDriver(IRepository<WikiSettingsRecord> repository) {
|
||||||
Filters.Add(new ActivatingFilter<WikiSettings>("site"));
|
Filters.Add(new ActivatingFilter<WikiSettings>("site"));
|
||||||
Filters.Add(new StorageFilterForRecord<WikiSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
|
Filters.Add(new StorageFilterForRecord<WikiSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
|
||||||
@@ -25,7 +25,7 @@ namespace Orchard.Wikis.Models {
|
|||||||
Filters.Add(new ActivatingFilter<WikiSettings>("user"));
|
Filters.Add(new ActivatingFilter<WikiSettings>("user"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void GetEditors(GetModelEditorsContext context) {
|
protected override void GetEditors(GetContentEditorsContext context) {
|
||||||
var model = context.ContentItem.As<WikiSettings>();
|
var model = context.ContentItem.As<WikiSettings>();
|
||||||
if (model == null)
|
if (model == null)
|
||||||
return;
|
return;
|
||||||
@@ -33,7 +33,7 @@ namespace Orchard.Wikis.Models {
|
|||||||
context.Editors.Add(ModelTemplate.For(model.Record, "WikiSettings"));
|
context.Editors.Add(ModelTemplate.For(model.Record, "WikiSettings"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateEditors(UpdateModelContext context) {
|
protected override void UpdateEditors(UpdateContentContext context) {
|
||||||
var model = context.ContentItem.As<WikiSettings>();
|
var model = context.ContentItem.As<WikiSettings>();
|
||||||
if (model == null)
|
if (model == null)
|
||||||
return;
|
return;
|
||||||
|
@@ -22,29 +22,29 @@ namespace Orchard.Models {
|
|||||||
_contentTypeRepository = contentTypeRepository;
|
_contentTypeRepository = contentTypeRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<IModelDriver> _drivers;
|
private IEnumerable<IContentHandler> _drivers;
|
||||||
public IEnumerable<IModelDriver> Drivers {
|
public IEnumerable<IContentHandler> Drivers {
|
||||||
get {
|
get {
|
||||||
if (_drivers == null)
|
if (_drivers == null)
|
||||||
_drivers = _context.Resolve<IEnumerable<IModelDriver>>();
|
_drivers = _context.Resolve<IEnumerable<IContentHandler>>();
|
||||||
return _drivers;
|
return _drivers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual ContentItem New(string modelType) {
|
public virtual ContentItem New(string contentType) {
|
||||||
|
|
||||||
// create a new kernel for the model instance
|
// create a new kernel for the model instance
|
||||||
var context = new ActivatingModelContext {
|
var context = new ActivatingContentContext {
|
||||||
ModelType = modelType,
|
ContentType = contentType,
|
||||||
Builder = new ContentItemBuilder(modelType)
|
Builder = new ContentItemBuilder(contentType)
|
||||||
};
|
};
|
||||||
|
|
||||||
// invoke drivers to weld aspects onto kernel
|
// invoke drivers to weld aspects onto kernel
|
||||||
foreach (var driver in Drivers) {
|
foreach (var driver in Drivers) {
|
||||||
driver.Activating(context);
|
driver.Activating(context);
|
||||||
}
|
}
|
||||||
var context2 = new ActivatedModelContext {
|
var context2 = new ActivatedContentContext {
|
||||||
ContentType = modelType,
|
ContentType = contentType,
|
||||||
ContentItem = context.Builder.Build()
|
ContentItem = context.Builder.Build()
|
||||||
};
|
};
|
||||||
foreach (var driver in Drivers) {
|
foreach (var driver in Drivers) {
|
||||||
@@ -60,9 +60,9 @@ namespace Orchard.Models {
|
|||||||
var contentItemRecord = _contentItemRepository.Get(id);
|
var contentItemRecord = _contentItemRepository.Get(id);
|
||||||
|
|
||||||
// create a context with a new instance to load
|
// create a context with a new instance to load
|
||||||
var context = new LoadModelContext {
|
var context = new LoadContentContext {
|
||||||
Id = contentItemRecord.Id,
|
Id = contentItemRecord.Id,
|
||||||
ModelType = contentItemRecord.ContentType.Name,
|
ContentType = contentItemRecord.ContentType.Name,
|
||||||
ContentItemRecord = contentItemRecord,
|
ContentItemRecord = contentItemRecord,
|
||||||
ContentItem = New(contentItemRecord.ContentType.Name)
|
ContentItem = New(contentItemRecord.ContentType.Name)
|
||||||
};
|
};
|
||||||
@@ -87,9 +87,9 @@ namespace Orchard.Models {
|
|||||||
_contentItemRepository.Create(modelRecord);
|
_contentItemRepository.Create(modelRecord);
|
||||||
|
|
||||||
// build a context with the initialized instance to create
|
// build a context with the initialized instance to create
|
||||||
var context = new CreateModelContext {
|
var context = new CreateContentContext {
|
||||||
Id = modelRecord.Id,
|
Id = modelRecord.Id,
|
||||||
ModelType = modelRecord.ContentType.Name,
|
ContentType = modelRecord.ContentType.Name,
|
||||||
ContentItemRecord = modelRecord,
|
ContentItemRecord = modelRecord,
|
||||||
ContentItem = contentItem
|
ContentItem = contentItem
|
||||||
};
|
};
|
||||||
@@ -108,15 +108,15 @@ namespace Orchard.Models {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem) {
|
public IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem) {
|
||||||
var context = new GetModelEditorsContext(contentItem);
|
var context = new GetContentEditorsContext(contentItem);
|
||||||
foreach (var driver in Drivers) {
|
foreach (var driver in Drivers) {
|
||||||
driver.GetEditors(context);
|
driver.GetEditors(context);
|
||||||
}
|
}
|
||||||
return context.Editors;
|
return context.Editors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IModelUpdater updater) {
|
public IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IUpdateModel updater) {
|
||||||
var context = new UpdateModelContext(contentItem, updater);
|
var context = new UpdateContentContext(contentItem, updater);
|
||||||
foreach (var driver in Drivers) {
|
foreach (var driver in Drivers) {
|
||||||
driver.UpdateEditors(context);
|
driver.UpdateEditors(context);
|
||||||
}
|
}
|
||||||
@@ -124,13 +124,13 @@ namespace Orchard.Models {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ContentTypeRecord AcquireContentTypeRecord(string contentType) {
|
private ContentTypeRecord AcquireContentTypeRecord(string contentType) {
|
||||||
var modelTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType);
|
var contentTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType);
|
||||||
if (modelTypeRecord == null) {
|
if (contentTypeRecord == null) {
|
||||||
//TEMP: this is not safe... ContentItem types could be created concurrently?
|
//TEMP: this is not safe... ContentItem types could be created concurrently?
|
||||||
modelTypeRecord = new ContentTypeRecord { Name = contentType };
|
contentTypeRecord = new ContentTypeRecord { Name = contentType };
|
||||||
_contentTypeRepository.Create(modelTypeRecord);
|
_contentTypeRepository.Create(contentTypeRecord);
|
||||||
}
|
}
|
||||||
return modelTypeRecord;
|
return contentTypeRecord;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public class ActivatedModelContext {
|
public class ActivatedContentContext {
|
||||||
public string ContentType { get; set; }
|
public string ContentType { get; set; }
|
||||||
public ContentItem ContentItem { get; set; }
|
public ContentItem ContentItem { get; set; }
|
||||||
}
|
}
|
@@ -1,6 +1,6 @@
|
|||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public class ActivatingModelContext {
|
public class ActivatingContentContext {
|
||||||
public string ModelType { get; set; }
|
public string ContentType { get; set; }
|
||||||
public ContentItemBuilder Builder { get; set; }
|
public ContentItemBuilder Builder { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -2,19 +2,19 @@ using System;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public class ActivatingFilter<TPart> : IModelActivatingFilter where TPart : class, IContentItemPart, new() {
|
public class ActivatingFilter<TPart> : IContentActivatingFilter where TPart : class, IContentItemPart, new() {
|
||||||
private readonly Func<string, bool> _predicate;
|
private readonly Func<string, bool> _predicate;
|
||||||
|
|
||||||
public ActivatingFilter(Func<string, bool> predicate) {
|
public ActivatingFilter(Func<string, bool> predicate) {
|
||||||
_predicate = predicate;
|
_predicate = predicate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActivatingFilter(params string[] modelTypes)
|
public ActivatingFilter(params string[] contentTypes)
|
||||||
: this(modelType => modelTypes.Contains(modelType)) {
|
: this(contentType => contentTypes.Contains(contentType)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Activating(ActivatingModelContext context) {
|
public void Activating(ActivatingContentContext context) {
|
||||||
if (_predicate(context.ModelType))
|
if (_predicate(context.ContentType))
|
||||||
context.Builder.Weld<TPart>();
|
context.Builder.Weld<TPart>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
89
src/Orchard/Models/Driver/ContentHandler.cs
Normal file
89
src/Orchard/Models/Driver/ContentHandler.cs
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Orchard.Logging;
|
||||||
|
|
||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public abstract class ContentHandler : IContentHandler {
|
||||||
|
protected ContentHandler() {
|
||||||
|
Filters = new List<IContentFilter>();
|
||||||
|
Logger = NullLogger.Instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<IContentFilter> Filters { get; set; }
|
||||||
|
public ILogger Logger { get; set; }
|
||||||
|
|
||||||
|
public void AddOnActivated<TPart>(Action<ActivatedContentContext, TPart> handler) where TPart : class, IContentItemPart {
|
||||||
|
Filters.Add(new InlineStorageFilter<TPart> { OnActivated = handler });
|
||||||
|
}
|
||||||
|
public void AddOnCreating<TPart>(Action<CreateContentContext, TPart> handler) where TPart : class, IContentItemPart {
|
||||||
|
Filters.Add(new InlineStorageFilter<TPart> { OnCreating = handler });
|
||||||
|
}
|
||||||
|
public void AddOnLoaded<TPart>(Action<LoadContentContext, TPart> handler) where TPart : class, IContentItemPart {
|
||||||
|
Filters.Add(new InlineStorageFilter<TPart> { OnLoaded = handler });
|
||||||
|
}
|
||||||
|
|
||||||
|
class InlineStorageFilter<TPart> : StorageFilterBase<TPart> where TPart : class, IContentItemPart {
|
||||||
|
public Action<ActivatedContentContext, TPart> OnActivated { get; set; }
|
||||||
|
public Action<CreateContentContext, TPart> OnCreating { get; set; }
|
||||||
|
public Action<CreateContentContext, TPart> OnCreated { get; set; }
|
||||||
|
public Action<LoadContentContext, TPart> OnLoading { get; set; }
|
||||||
|
public Action<LoadContentContext, TPart> OnLoaded { get; set; }
|
||||||
|
protected override void Activated(ActivatedContentContext context, TPart instance) { if (OnActivated != null) OnActivated(context, instance); }
|
||||||
|
protected override void Creating(CreateContentContext context, TPart instance) { if (OnCreating != null) OnCreating(context, instance); }
|
||||||
|
protected override void Loaded(LoadContentContext context, TPart instance) { if (OnLoaded != null) OnLoaded(context, instance); }
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.Activating(ActivatingContentContext context) {
|
||||||
|
foreach (var filter in Filters.OfType<IContentActivatingFilter>())
|
||||||
|
filter.Activating(context);
|
||||||
|
Activating(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.Activated(ActivatedContentContext context) {
|
||||||
|
foreach (var filter in Filters.OfType<IContentStorageFilter>())
|
||||||
|
filter.Activated(context);
|
||||||
|
Activated(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.Creating(CreateContentContext context) {
|
||||||
|
foreach (var filter in Filters.OfType<IContentStorageFilter>())
|
||||||
|
filter.Creating(context);
|
||||||
|
Creating(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.Created(CreateContentContext context) {
|
||||||
|
foreach (var filter in Filters.OfType<IContentStorageFilter>())
|
||||||
|
filter.Created(context);
|
||||||
|
Created(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.Loading(LoadContentContext context) {
|
||||||
|
foreach (var filter in Filters.OfType<IContentStorageFilter>())
|
||||||
|
filter.Loading(context);
|
||||||
|
Loading(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.Loaded(LoadContentContext context) {
|
||||||
|
foreach (var filter in Filters.OfType<IContentStorageFilter>())
|
||||||
|
filter.Loaded(context);
|
||||||
|
Loaded(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IContentHandler.GetEditors(GetContentEditorsContext context) { GetEditors(context); }
|
||||||
|
void IContentHandler.UpdateEditors(UpdateContentContext context) { UpdateEditors(context); }
|
||||||
|
|
||||||
|
protected virtual void Activating(ActivatingContentContext context) { }
|
||||||
|
protected virtual void Activated(ActivatedContentContext context) { }
|
||||||
|
|
||||||
|
protected virtual void Loading(LoadContentContext context) { }
|
||||||
|
protected virtual void Loaded(LoadContentContext context) { }
|
||||||
|
|
||||||
|
protected virtual void Creating(CreateContentContext context) { }
|
||||||
|
protected virtual void Created(CreateContentContext context) { }
|
||||||
|
|
||||||
|
protected virtual void GetEditors(GetContentEditorsContext context) {}
|
||||||
|
|
||||||
|
protected virtual void UpdateEditors(UpdateContentContext context) {}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,9 +1,9 @@
|
|||||||
using Orchard.Models.Records;
|
using Orchard.Models.Records;
|
||||||
|
|
||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public class CreateModelContext {
|
public class CreateContentContext {
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string ModelType { get; set; }
|
public string ContentType { get; set; }
|
||||||
public ContentItemRecord ContentItemRecord { get; set; }
|
public ContentItemRecord ContentItemRecord { get; set; }
|
||||||
public ContentItem ContentItem { get; set; }
|
public ContentItem ContentItem { get; set; }
|
||||||
}
|
}
|
@@ -2,8 +2,8 @@ using System.Collections.Generic;
|
|||||||
using Orchard.UI.Models;
|
using Orchard.UI.Models;
|
||||||
|
|
||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public class GetModelEditorsContext {
|
public class GetContentEditorsContext {
|
||||||
public GetModelEditorsContext(ContentItem part) {
|
public GetContentEditorsContext(ContentItem part) {
|
||||||
ContentItem = part;
|
ContentItem = part;
|
||||||
Editors= new List<ModelTemplate>();
|
Editors= new List<ModelTemplate>();
|
||||||
}
|
}
|
5
src/Orchard/Models/Driver/IContentActivatingFilter.cs
Normal file
5
src/Orchard/Models/Driver/IContentActivatingFilter.cs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public interface IContentActivatingFilter : IContentFilter {
|
||||||
|
void Activating(ActivatingContentContext context);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public interface IModelFilter {
|
public interface IContentFilter {
|
||||||
}
|
}
|
||||||
}
|
}
|
13
src/Orchard/Models/Driver/IContentHandler.cs
Normal file
13
src/Orchard/Models/Driver/IContentHandler.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public interface IContentHandler : IDependency {
|
||||||
|
void Activating(ActivatingContentContext context);
|
||||||
|
void Activated(ActivatedContentContext context);
|
||||||
|
void Creating(CreateContentContext context);
|
||||||
|
void Created(CreateContentContext context);
|
||||||
|
void Loading(LoadContentContext context);
|
||||||
|
void Loaded(LoadContentContext context);
|
||||||
|
|
||||||
|
void GetEditors(GetContentEditorsContext context);
|
||||||
|
void UpdateEditors(UpdateContentContext context);
|
||||||
|
}
|
||||||
|
}
|
9
src/Orchard/Models/Driver/IContentStorageFilter.cs
Normal file
9
src/Orchard/Models/Driver/IContentStorageFilter.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public interface IContentStorageFilter : IContentFilter {
|
||||||
|
void Activated(ActivatedContentContext context);
|
||||||
|
void Creating(CreateContentContext context);
|
||||||
|
void Created(CreateContentContext context);
|
||||||
|
void Loading(LoadContentContext context);
|
||||||
|
void Loaded(LoadContentContext context);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +0,0 @@
|
|||||||
namespace Orchard.Models.Driver {
|
|
||||||
public interface IModelActivatingFilter : IModelFilter {
|
|
||||||
void Activating(ActivatingModelContext context);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,13 +0,0 @@
|
|||||||
namespace Orchard.Models.Driver {
|
|
||||||
public interface IModelDriver : IDependency {
|
|
||||||
void Activating(ActivatingModelContext context);
|
|
||||||
void Activated(ActivatedModelContext context);
|
|
||||||
void Creating(CreateModelContext context);
|
|
||||||
void Created(CreateModelContext context);
|
|
||||||
void Loading(LoadModelContext context);
|
|
||||||
void Loaded(LoadModelContext context);
|
|
||||||
|
|
||||||
void GetEditors(GetModelEditorsContext context);
|
|
||||||
void UpdateEditors(UpdateModelContext context);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,9 +0,0 @@
|
|||||||
namespace Orchard.Models.Driver {
|
|
||||||
public interface IModelStorageFilter : IModelFilter {
|
|
||||||
void Activated(ActivatedModelContext context);
|
|
||||||
void Creating(CreateModelContext context);
|
|
||||||
void Created(CreateModelContext context);
|
|
||||||
void Loading(LoadModelContext context);
|
|
||||||
void Loaded(LoadModelContext context);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,5 +1,5 @@
|
|||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public interface IModelUpdater {
|
public interface IUpdateModel {
|
||||||
bool TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class;
|
bool TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -2,9 +2,9 @@ using System;
|
|||||||
using Orchard.Models.Records;
|
using Orchard.Models.Records;
|
||||||
|
|
||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public class LoadModelContext {
|
public class LoadContentContext {
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string ModelType { get; set; }
|
public string ContentType { get; set; }
|
||||||
public ContentItemRecord ContentItemRecord { get; set; }
|
public ContentItemRecord ContentItemRecord { get; set; }
|
||||||
public ContentItem ContentItem { get; set; }
|
public ContentItem ContentItem { get; set; }
|
||||||
}
|
}
|
@@ -1,89 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Orchard.Logging;
|
|
||||||
|
|
||||||
namespace Orchard.Models.Driver {
|
|
||||||
public abstract class ModelDriver : IModelDriver {
|
|
||||||
protected ModelDriver() {
|
|
||||||
Filters = new List<IModelFilter>();
|
|
||||||
Logger = NullLogger.Instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<IModelFilter> Filters { get; set; }
|
|
||||||
public ILogger Logger { get; set; }
|
|
||||||
|
|
||||||
public void AddOnActivated<TPart>(Action<ActivatedModelContext, TPart> handler) where TPart : class, IContentItemPart {
|
|
||||||
Filters.Add(new InlineStorageFilter<TPart> { OnActivated = handler });
|
|
||||||
}
|
|
||||||
public void AddOnCreating<TPart>(Action<CreateModelContext, TPart> handler) where TPart : class, IContentItemPart {
|
|
||||||
Filters.Add(new InlineStorageFilter<TPart> { OnCreating = handler });
|
|
||||||
}
|
|
||||||
public void AddOnLoaded<TPart>(Action<LoadModelContext, TPart> handler) where TPart : class, IContentItemPart {
|
|
||||||
Filters.Add(new InlineStorageFilter<TPart> { OnLoaded = handler });
|
|
||||||
}
|
|
||||||
|
|
||||||
class InlineStorageFilter<TPart> : StorageFilterBase<TPart> where TPart : class, IContentItemPart {
|
|
||||||
public Action<ActivatedModelContext, TPart> OnActivated { get; set; }
|
|
||||||
public Action<CreateModelContext, TPart> OnCreating { get; set; }
|
|
||||||
public Action<CreateModelContext, TPart> OnCreated { get; set; }
|
|
||||||
public Action<LoadModelContext, TPart> OnLoading { get; set; }
|
|
||||||
public Action<LoadModelContext, TPart> OnLoaded { get; set; }
|
|
||||||
protected override void Activated(ActivatedModelContext context, TPart instance) { if (OnActivated != null) OnActivated(context, instance); }
|
|
||||||
protected override void Creating(CreateModelContext context, TPart instance) { if (OnCreating != null) OnCreating(context, instance); }
|
|
||||||
protected override void Loaded(LoadModelContext context, TPart instance) { if (OnLoaded != null) OnLoaded(context, instance); }
|
|
||||||
}
|
|
||||||
|
|
||||||
void IModelDriver.Activating(ActivatingModelContext context) {
|
|
||||||
foreach (var filter in Filters.OfType<IModelActivatingFilter>())
|
|
||||||
filter.Activating(context);
|
|
||||||
Activating(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IModelDriver.Activated(ActivatedModelContext context) {
|
|
||||||
foreach (var filter in Filters.OfType<IModelStorageFilter>())
|
|
||||||
filter.Activated(context);
|
|
||||||
Activated(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IModelDriver.Creating(CreateModelContext context) {
|
|
||||||
foreach (var filter in Filters.OfType<IModelStorageFilter>())
|
|
||||||
filter.Creating(context);
|
|
||||||
Creating(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IModelDriver.Created(CreateModelContext context) {
|
|
||||||
foreach (var filter in Filters.OfType<IModelStorageFilter>())
|
|
||||||
filter.Created(context);
|
|
||||||
Created(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IModelDriver.Loading(LoadModelContext context) {
|
|
||||||
foreach (var filter in Filters.OfType<IModelStorageFilter>())
|
|
||||||
filter.Loading(context);
|
|
||||||
Loading(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IModelDriver.Loaded(LoadModelContext context) {
|
|
||||||
foreach (var filter in Filters.OfType<IModelStorageFilter>())
|
|
||||||
filter.Loaded(context);
|
|
||||||
Loaded(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
void IModelDriver.GetEditors(GetModelEditorsContext context) { GetEditors(context); }
|
|
||||||
void IModelDriver.UpdateEditors(UpdateModelContext context) { UpdateEditors(context); }
|
|
||||||
|
|
||||||
protected virtual void Activating(ActivatingModelContext context) { }
|
|
||||||
protected virtual void Activated(ActivatedModelContext context) { }
|
|
||||||
|
|
||||||
protected virtual void Loading(LoadModelContext context) { }
|
|
||||||
protected virtual void Loaded(LoadModelContext context) { }
|
|
||||||
|
|
||||||
protected virtual void Creating(CreateModelContext context) { }
|
|
||||||
protected virtual void Created(CreateModelContext context) { }
|
|
||||||
|
|
||||||
protected virtual void GetEditors(GetModelEditorsContext context) {}
|
|
||||||
|
|
||||||
protected virtual void UpdateEditors(UpdateModelContext context) {}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,34 +1,34 @@
|
|||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public abstract class StorageFilterBase<TPart> : IModelStorageFilter where TPart : class, IContentItemPart {
|
public abstract class StorageFilterBase<TPart> : IContentStorageFilter where TPart : class, IContentItemPart {
|
||||||
|
|
||||||
protected virtual void Activated(ActivatedModelContext context, TPart instance) { }
|
protected virtual void Activated(ActivatedContentContext context, TPart instance) { }
|
||||||
protected virtual void Creating(CreateModelContext context, TPart instance) { }
|
protected virtual void Creating(CreateContentContext context, TPart instance) { }
|
||||||
protected virtual void Created(CreateModelContext context, TPart instance) { }
|
protected virtual void Created(CreateContentContext context, TPart instance) { }
|
||||||
protected virtual void Loading(LoadModelContext context, TPart instance) { }
|
protected virtual void Loading(LoadContentContext context, TPart instance) { }
|
||||||
protected virtual void Loaded(LoadModelContext context, TPart instance) { }
|
protected virtual void Loaded(LoadContentContext context, TPart instance) { }
|
||||||
|
|
||||||
|
|
||||||
void IModelStorageFilter.Activated(ActivatedModelContext context) {
|
void IContentStorageFilter.Activated(ActivatedContentContext context) {
|
||||||
if (context.ContentItem.Is<TPart>())
|
if (context.ContentItem.Is<TPart>())
|
||||||
Activated(context, context.ContentItem.As<TPart>());
|
Activated(context, context.ContentItem.As<TPart>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void IModelStorageFilter.Creating(CreateModelContext context) {
|
void IContentStorageFilter.Creating(CreateContentContext context) {
|
||||||
if (context.ContentItem.Is<TPart>())
|
if (context.ContentItem.Is<TPart>())
|
||||||
Creating(context, context.ContentItem.As<TPart>());
|
Creating(context, context.ContentItem.As<TPart>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void IModelStorageFilter.Created(CreateModelContext context) {
|
void IContentStorageFilter.Created(CreateContentContext context) {
|
||||||
if (context.ContentItem.Is<TPart>())
|
if (context.ContentItem.Is<TPart>())
|
||||||
Created(context, context.ContentItem.As<TPart>());
|
Created(context, context.ContentItem.As<TPart>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void IModelStorageFilter.Loading(LoadModelContext context) {
|
void IContentStorageFilter.Loading(LoadContentContext context) {
|
||||||
if (context.ContentItem.Is<TPart>())
|
if (context.ContentItem.Is<TPart>())
|
||||||
Loading(context, context.ContentItem.As<TPart>());
|
Loading(context, context.ContentItem.As<TPart>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void IModelStorageFilter.Loaded(LoadModelContext context) {
|
void IContentStorageFilter.Loaded(LoadContentContext context) {
|
||||||
if (context.ContentItem.Is<TPart>())
|
if (context.ContentItem.Is<TPart>())
|
||||||
Loaded(context, context.ContentItem.As<TPart>());
|
Loaded(context, context.ContentItem.As<TPart>());
|
||||||
}
|
}
|
||||||
|
@@ -11,16 +11,16 @@ namespace Orchard.Models.Driver {
|
|||||||
|
|
||||||
public bool AutomaticallyCreateMissingRecord { get; set; }
|
public bool AutomaticallyCreateMissingRecord { get; set; }
|
||||||
|
|
||||||
protected override void Activated(ActivatedModelContext context, ContentItemPartWithRecord<TRecord> instance) {
|
protected override void Activated(ActivatedContentContext context, ContentItemPartWithRecord<TRecord> instance) {
|
||||||
instance.Record = new TRecord();
|
instance.Record = new TRecord();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Creating(CreateModelContext context, ContentItemPartWithRecord<TRecord> instance) {
|
protected override void Creating(CreateContentContext context, ContentItemPartWithRecord<TRecord> instance) {
|
||||||
instance.Record.ContentItem = context.ContentItemRecord;
|
instance.Record.ContentItem = context.ContentItemRecord;
|
||||||
_repository.Create(instance.Record);
|
_repository.Create(instance.Record);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Loading(LoadModelContext context, ContentItemPartWithRecord<TRecord> instance) {
|
protected override void Loading(LoadContentContext context, ContentItemPartWithRecord<TRecord> instance) {
|
||||||
instance.Record = _repository.Get(instance.ContentItem.Id);
|
instance.Record = _repository.Get(instance.ContentItem.Id);
|
||||||
if (instance.Record == null && AutomaticallyCreateMissingRecord) {
|
if (instance.Record == null && AutomaticallyCreateMissingRecord) {
|
||||||
instance.Record = new TRecord {ContentItem = context.ContentItemRecord};
|
instance.Record = new TRecord {ContentItem = context.ContentItemRecord};
|
||||||
|
9
src/Orchard/Models/Driver/UpdateContentContext.cs
Normal file
9
src/Orchard/Models/Driver/UpdateContentContext.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public class UpdateContentContext : GetContentEditorsContext {
|
||||||
|
public UpdateContentContext(ContentItem contentItem, IUpdateModel updater) : base(contentItem) {
|
||||||
|
Updater = updater;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IUpdateModel Updater { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -1,9 +0,0 @@
|
|||||||
namespace Orchard.Models.Driver {
|
|
||||||
public class UpdateModelContext : GetModelEditorsContext {
|
|
||||||
public UpdateModelContext(ContentItem contentItem, IModelUpdater updater) : base(contentItem) {
|
|
||||||
Updater = updater;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IModelUpdater Updater { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,12 +1,5 @@
|
|||||||
namespace Orchard.Models {
|
namespace Orchard.Models {
|
||||||
public interface IContentItemPart {
|
public interface IContentItemPart {
|
||||||
ContentItem ContentItem { get; set; }
|
ContentItem ContentItem { get; set; }
|
||||||
//int Id { get; }
|
|
||||||
//string ModelType { get; }
|
|
||||||
|
|
||||||
//bool Is<T>() where T : class, IContentItemPart;
|
|
||||||
//T As<T>() where T : class, IContentItemPart;
|
|
||||||
|
|
||||||
//void Weld(IContentItemPart part);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,6 @@ namespace Orchard.Models {
|
|||||||
void Create(ContentItem contentItem);
|
void Create(ContentItem contentItem);
|
||||||
|
|
||||||
IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem);
|
IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem);
|
||||||
IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IModelUpdater updater);
|
IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IUpdateModel updater);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -124,12 +124,12 @@
|
|||||||
<Compile Include="Localization\Localizer.cs" />
|
<Compile Include="Localization\Localizer.cs" />
|
||||||
<Compile Include="Localization\LocalizedString.cs" />
|
<Compile Include="Localization\LocalizedString.cs" />
|
||||||
<Compile Include="Localization\NullLocalizer.cs" />
|
<Compile Include="Localization\NullLocalizer.cs" />
|
||||||
<Compile Include="Models\Driver\ActivatedModelContext.cs" />
|
<Compile Include="Models\Driver\ActivatedContentContext.cs" />
|
||||||
<Compile Include="Models\Driver\ActivatingFilter.cs" />
|
<Compile Include="Models\Driver\ActivatingFilter.cs" />
|
||||||
<Compile Include="Models\Driver\IModelActivatingFilter.cs" />
|
<Compile Include="Models\Driver\IContentActivatingFilter.cs" />
|
||||||
<Compile Include="Models\Driver\IModelFilter.cs" />
|
<Compile Include="Models\Driver\IContentFilter.cs" />
|
||||||
<Compile Include="Models\Driver\IModelStorageFilter.cs" />
|
<Compile Include="Models\Driver\IContentStorageFilter.cs" />
|
||||||
<Compile Include="Models\Driver\IModelUpdater.cs" />
|
<Compile Include="Models\Driver\IUpdateModel.cs" />
|
||||||
<Compile Include="Environment\ServiceLocator.cs" />
|
<Compile Include="Environment\ServiceLocator.cs" />
|
||||||
<Compile Include="Logging\CastleLogger.cs" />
|
<Compile Include="Logging\CastleLogger.cs" />
|
||||||
<Compile Include="Logging\CastleLoggerFactory.cs" />
|
<Compile Include="Logging\CastleLoggerFactory.cs" />
|
||||||
@@ -140,16 +140,16 @@
|
|||||||
<Compile Include="Logging\NullLogger.cs" />
|
<Compile Include="Logging\NullLogger.cs" />
|
||||||
<Compile Include="Logging\NullLoggerFactory.cs" />
|
<Compile Include="Logging\NullLoggerFactory.cs" />
|
||||||
<Compile Include="Models\DefaultContentManager.cs" />
|
<Compile Include="Models\DefaultContentManager.cs" />
|
||||||
<Compile Include="Models\Driver\CreateModelContext.cs" />
|
<Compile Include="Models\Driver\CreateContentContext.cs" />
|
||||||
<Compile Include="Models\Driver\LoadModelContext.cs" />
|
<Compile Include="Models\Driver\LoadContentContext.cs" />
|
||||||
<Compile Include="Models\Driver\ContentItemBuilder.cs" />
|
<Compile Include="Models\Driver\ContentItemBuilder.cs" />
|
||||||
<Compile Include="Models\Driver\ModelDriver.cs" />
|
<Compile Include="Models\Driver\ContentHandler.cs" />
|
||||||
<Compile Include="Models\Driver\ActivatingModelContext.cs" />
|
<Compile Include="Models\Driver\ActivatingContentContext.cs" />
|
||||||
<Compile Include="Models\Driver\GetModelEditorsContext.cs" />
|
<Compile Include="Models\Driver\GetContentEditorsContext.cs" />
|
||||||
<Compile Include="Models\Driver\StorageFilterForRecord.cs" />
|
<Compile Include="Models\Driver\StorageFilterForRecord.cs" />
|
||||||
<Compile Include="Models\Driver\StorageFilterBase.cs" />
|
<Compile Include="Models\Driver\StorageFilterBase.cs" />
|
||||||
<Compile Include="Models\IContentManager.cs" />
|
<Compile Include="Models\IContentManager.cs" />
|
||||||
<Compile Include="Models\Driver\IModelDriver.cs" />
|
<Compile Include="Models\Driver\IContentHandler.cs" />
|
||||||
<Compile Include="Models\ContentExtensions.cs" />
|
<Compile Include="Models\ContentExtensions.cs" />
|
||||||
<Compile Include="Models\ContentItemPart.cs" />
|
<Compile Include="Models\ContentItemPart.cs" />
|
||||||
<Compile Include="Models\IContentItemPart.cs" />
|
<Compile Include="Models\IContentItemPart.cs" />
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
<Compile Include="Models\Records\ContentPartRecordBase.cs" />
|
<Compile Include="Models\Records\ContentPartRecordBase.cs" />
|
||||||
<Compile Include="Models\Records\ContentTypeRecord.cs" />
|
<Compile Include="Models\Records\ContentTypeRecord.cs" />
|
||||||
<Compile Include="Models\Records\ContentItemRecord.cs" />
|
<Compile Include="Models\Records\ContentItemRecord.cs" />
|
||||||
<Compile Include="Models\Driver\UpdateModelContext.cs" />
|
<Compile Include="Models\Driver\UpdateContentContext.cs" />
|
||||||
<Compile Include="Mvc\Html\HtmlHelperExtensions.cs" />
|
<Compile Include="Mvc\Html\HtmlHelperExtensions.cs" />
|
||||||
<Compile Include="Mvc\Filters\FilterProvider.cs" />
|
<Compile Include="Mvc\Filters\FilterProvider.cs" />
|
||||||
<Compile Include="Mvc\Filters\FilterResolvingActionInvoker.cs" />
|
<Compile Include="Mvc\Filters\FilterResolvingActionInvoker.cs" />
|
||||||
|
Reference in New Issue
Block a user