diff --git a/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs b/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs index 61e072a35..9d185b392 100644 --- a/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs +++ b/src/Orchard.Tests.Packages/Users/Controllers/AdminControllerTests.cs @@ -26,7 +26,7 @@ namespace Orchard.Tests.Packages.Users.Controllers { public override void Register(ContainerBuilder builder) { builder.Register(); - builder.Register().As(); + builder.Register().As(); builder.Register().As(); builder.Register().As(); builder.Register(new Mock().Object); @@ -34,14 +34,14 @@ namespace Orchard.Tests.Packages.Users.Controllers { protected override IEnumerable DatabaseTypes { get { - return new[] { typeof(UserRecord), typeof(ModelRecord), typeof(ModelTypeRecord) }; + return new[] { typeof(UserRecord), typeof(ContentItemRecord), typeof(ContentTypeRecord) }; } } public override void Init() { base.Init(); - var manager = _container.Resolve(); + var manager = _container.Resolve(); var userOne = manager.New("user").As(); userOne.Record = new UserRecord { UserName = "one" }; @@ -83,7 +83,7 @@ namespace Orchard.Tests.Packages.Users.Controllers { var redirect = (RedirectToRouteResult)result; var id = Convert.ToInt32(redirect.RouteValues["id"]); - var manager = _container.Resolve(); + var manager = _container.Resolve(); var user = manager.Get(id).As(); Assert.That(user.UserName, Is.EqualTo("four")); } diff --git a/src/Orchard.Tests.Packages/Users/Services/MembershipServiceTests.cs b/src/Orchard.Tests.Packages/Users/Services/MembershipServiceTests.cs index 4445558de..1070ea08e 100644 --- a/src/Orchard.Tests.Packages/Users/Services/MembershipServiceTests.cs +++ b/src/Orchard.Tests.Packages/Users/Services/MembershipServiceTests.cs @@ -43,8 +43,8 @@ namespace Orchard.Tests.Packages.Users.Services { _sessionFactory = DataUtility.CreateSessionFactory( databaseFileName, typeof(UserRecord), - typeof(ModelRecord), - typeof(ModelTypeRecord)); + typeof(ContentItemRecord), + typeof(ContentTypeRecord)); } [TestFixtureTearDown] @@ -57,7 +57,7 @@ namespace Orchard.Tests.Packages.Users.Services { var builder = new ContainerBuilder(); builder.RegisterModule(new ImplicitCollectionSupportModule()); builder.Register().As(); - builder.Register().As(); + builder.Register().As(); builder.Register().As(); builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); _session = _sessionFactory.OpenSession(); diff --git a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs index b96dc0485..13081be31 100644 --- a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs +++ b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs @@ -15,6 +15,8 @@ using Orchard.Environment; using Orchard.Mvc; using Orchard.Mvc.ModelBinders; using Orchard.Mvc.Routes; +using Orchard.Packages; +using Orchard.Tests.Mvc.Routes; using Orchard.Tests.Stubs; namespace Orchard.Tests.Environment { @@ -42,9 +44,21 @@ namespace Orchard.Tests.Environment { builder.Register(_controllerBuilder); builder.Register(_routeCollection); builder.Register(_modelBinderDictionary); + builder.Register(new ViewEngineCollection()); + builder.Register(new StuPackageManager()).As(); }); } + public class StuPackageManager : IPackageManager { + public IEnumerable AvailablePackages() { + return Enumerable.Empty(); + } + + public IEnumerable ActivePackages() { + return Enumerable.Empty(); + } + } + [Test] public void HostShouldSetControllerFactory() { var host = _container.Resolve(); diff --git a/src/Orchard.Tests/Models/DefaultModelManagerTests.cs b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs index 667b659b2..706c3bee8 100644 --- a/src/Orchard.Tests/Models/DefaultModelManagerTests.cs +++ b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs @@ -14,7 +14,7 @@ namespace Orchard.Tests.Models { [TestFixture] public class DefaultModelManagerTests { private IContainer _container; - private IModelManager _manager; + private IContentManager _manager; private ISessionFactory _sessionFactory; private ISession _session; @@ -24,8 +24,8 @@ namespace Orchard.Tests.Models { _sessionFactory = DataUtility.CreateSessionFactory( databaseFileName, typeof(GammaRecord), - typeof(ModelRecord), - typeof(ModelTypeRecord)); + typeof(ContentItemRecord), + typeof(ContentTypeRecord)); } [TestFixtureTearDown] @@ -37,7 +37,7 @@ namespace Orchard.Tests.Models { public void Init() { var builder = new ContainerBuilder(); builder.RegisterModule(new ImplicitCollectionSupportModule()); - builder.Register().As(); + builder.Register().As(); builder.Register().As(); builder.Register().As(); builder.Register().As(); @@ -50,7 +50,7 @@ namespace Orchard.Tests.Models { builder.Register(new TestSessionLocator(_session)).As(); _container = builder.Build(); - _manager = _container.Resolve(); + _manager = _container.Resolve(); } public class TestSessionLocator : ISessionLocator { @@ -103,7 +103,7 @@ namespace Orchard.Tests.Models { var modelRecord = CreateModelRecord("alpha"); var model = _manager.Get(modelRecord.Id); - Assert.That(model.ModelType, Is.EqualTo("alpha")); + Assert.That(model.ContentType, Is.EqualTo("alpha")); Assert.That(model.Id, Is.EqualTo(modelRecord.Id)); } @@ -119,7 +119,7 @@ namespace Orchard.Tests.Models { // create a gamma record var gamma = new GammaRecord { - Model = _container.Resolve>().Get(model.Id), + ContentItem = _container.Resolve>().Get(model.Id), Frap = "foo" }; @@ -130,11 +130,11 @@ namespace Orchard.Tests.Models { // re-fetch from database model = _manager.Get(modelRecord.Id); - Assert.That(model.ModelType, Is.EqualTo("gamma")); + Assert.That(model.ContentType, Is.EqualTo("gamma")); Assert.That(model.Id, Is.EqualTo(modelRecord.Id)); Assert.That(model.Is(), Is.True); Assert.That(model.As().Record, Is.Not.Null); - Assert.That(model.As().Record.Model.Id, Is.EqualTo(model.Id)); + Assert.That(model.As().Record.ContentItem.Id, Is.EqualTo(model.Id)); } @@ -143,17 +143,17 @@ namespace Orchard.Tests.Models { var beta = _manager.New("beta"); _manager.Create(beta); - var modelRecord = _container.Resolve>().Get(beta.Id); + var modelRecord = _container.Resolve>().Get(beta.Id); Assert.That(modelRecord, Is.Not.Null); - Assert.That(modelRecord.ModelType.Name, Is.EqualTo("beta")); + Assert.That(modelRecord.ContentType.Name, Is.EqualTo("beta")); } - private ModelRecord CreateModelRecord(string modelType) { - var modelRepository = _container.Resolve>(); - var modelTypeRepository = _container.Resolve>(); + private ContentItemRecord CreateModelRecord(string modelType) { + var modelRepository = _container.Resolve>(); + var modelTypeRepository = _container.Resolve>(); - var modelRecord = new ModelRecord { ModelType = new ModelTypeRecord { Name = modelType } }; - modelTypeRepository.Create(modelRecord.ModelType); + var modelRecord = new ContentItemRecord { ContentType = new ContentTypeRecord { Name = modelType } }; + modelTypeRepository.Create(modelRecord.ContentType); modelRepository.Create(modelRecord); _session.Flush(); diff --git a/src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs b/src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs index 25ad63a24..7aff74539 100644 --- a/src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs +++ b/src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; +using Orchard.Models; using Orchard.Models.Driver; using Orchard.Tests.Models.Stubs; @@ -11,21 +12,21 @@ namespace Orchard.Tests.Models.Drivers { public class ModelBuilderTests { [Test] public void BuilderShouldReturnWorkingModelWithTypeAndId() { - var builder = new ModelBuilder("foo"); + var builder = new ContentItemBuilder("foo"); var model = builder.Build(); - Assert.That(model.ModelType, Is.EqualTo("foo")); + Assert.That(model.ContentType, Is.EqualTo("foo")); } [Test] public void IdShouldDefaultToZero() { - var builder = new ModelBuilder("foo"); + var builder = new ContentItemBuilder("foo"); var model = builder.Build(); Assert.That(model.Id, Is.EqualTo(0)); } [Test] public void WeldShouldAddPartToModel() { - var builder = new ModelBuilder("foo"); + var builder = new ContentItemBuilder("foo"); builder.Weld(); var model = builder.Build(); diff --git a/src/Orchard.Tests/Models/Drivers/ModelDriverTests.cs b/src/Orchard.Tests/Models/Drivers/ModelDriverTests.cs index cddfb03d6..6c0a592a5 100644 --- a/src/Orchard.Tests/Models/Drivers/ModelDriverTests.cs +++ b/src/Orchard.Tests/Models/Drivers/ModelDriverTests.cs @@ -10,8 +10,11 @@ namespace Orchard.Tests.Models.Drivers { public void ModelDriverShouldUsePersistenceFilterToDelegateCreateAndLoad() { var modelDriver = new TestModelDriver(); + var contentItem = new ContentItem(); var part = new TestModelPart(); - ((IModelDriver)modelDriver).Creating(new CreateModelContext { Instance = part }); + contentItem.Weld(part); + + ((IModelDriver)modelDriver).Creating(new CreateModelContext { ContentItem = contentItem }); Assert.That(part.CreatingCalled, Is.True); } @@ -19,14 +22,14 @@ namespace Orchard.Tests.Models.Drivers { public void PartShouldBeAddedBasedOnSimplePredicate() { var modelDriver = new TestModelDriver(); - var builder = new ModelBuilder("testing"); + var builder = new ContentItemBuilder("testing"); ((IModelDriver)modelDriver).Activating(new ActivatingModelContext { Builder = builder, ModelType = "testing" }); var model = builder.Build(); Assert.That(model.Is(), Is.True); Assert.That(model.As(), Is.Not.Null); } - public class TestModelPart : ModelPart { + public class TestModelPart : ContentItemPart { public bool CreatingCalled { get; set; } } diff --git a/src/Orchard.Tests/Models/Stubs/Alpha.cs b/src/Orchard.Tests/Models/Stubs/Alpha.cs index c3ea47c52..a0d1958d8 100644 --- a/src/Orchard.Tests/Models/Stubs/Alpha.cs +++ b/src/Orchard.Tests/Models/Stubs/Alpha.cs @@ -1,6 +1,6 @@ using Orchard.Models; namespace Orchard.Tests.Models.Stubs { - public class Alpha : ModelPart { + public class Alpha : ContentItemPart { } } \ No newline at end of file diff --git a/src/Orchard.Tests/Models/Stubs/Beta.cs b/src/Orchard.Tests/Models/Stubs/Beta.cs index 6d3a43150..7f2f41d3b 100644 --- a/src/Orchard.Tests/Models/Stubs/Beta.cs +++ b/src/Orchard.Tests/Models/Stubs/Beta.cs @@ -1,6 +1,6 @@ using Orchard.Models; namespace Orchard.Tests.Models.Stubs { - public class Beta : ModelPart { + public class Beta : ContentItemPart { } } \ No newline at end of file diff --git a/src/Orchard.Tests/Models/Stubs/Flavored.cs b/src/Orchard.Tests/Models/Stubs/Flavored.cs index 07e6dcd94..f36d52c34 100644 --- a/src/Orchard.Tests/Models/Stubs/Flavored.cs +++ b/src/Orchard.Tests/Models/Stubs/Flavored.cs @@ -5,6 +5,6 @@ using System.Text; using Orchard.Models; namespace Orchard.Tests.Models.Stubs { - class Flavored : ModelPart { + class Flavored : ContentItemPart { } } diff --git a/src/Orchard.Tests/Models/Stubs/Gamma.cs b/src/Orchard.Tests/Models/Stubs/Gamma.cs index 1a09c247f..7a25c2ece 100644 --- a/src/Orchard.Tests/Models/Stubs/Gamma.cs +++ b/src/Orchard.Tests/Models/Stubs/Gamma.cs @@ -4,10 +4,10 @@ using Orchard.Models.Driver; using Orchard.Models.Records; namespace Orchard.Tests.Models.Stubs { - public class Gamma : ModelPartWithRecord { + public class Gamma : ContentItemPartWithRecord { } - public class GammaRecord : ModelPartRecord { + public class GammaRecord : ContentPartRecordBase { public virtual string Frap { get; set; } } diff --git a/src/Orchard.Tests/Models/Stubs/Styled.cs b/src/Orchard.Tests/Models/Stubs/Styled.cs index 5d3b0da53..5ca1accaa 100644 --- a/src/Orchard.Tests/Models/Stubs/Styled.cs +++ b/src/Orchard.Tests/Models/Stubs/Styled.cs @@ -5,6 +5,6 @@ using System.Text; using Orchard.Models; namespace Orchard.Tests.Models.Stubs { - public class Styled : ModelPart { + public class Styled : ContentItemPart { } } diff --git a/src/Orchard.Web/Core/Common/Models/CommonDriver.cs b/src/Orchard.Web/Core/Common/Models/CommonDriver.cs index 836720597..c6ce06d69 100644 --- a/src/Orchard.Web/Core/Common/Models/CommonDriver.cs +++ b/src/Orchard.Web/Core/Common/Models/CommonDriver.cs @@ -9,17 +9,17 @@ namespace Orchard.Core.Common.Models { public class CommonDriver : ModelDriver { private readonly IClock _clock; private readonly IAuthenticationService _authenticationService; - private readonly IModelManager _modelManager; + private readonly IContentManager _contentManager; public CommonDriver( IRepository repository, IClock clock, IAuthenticationService authenticationService, - IModelManager modelManager) { + IContentManager contentManager) { _clock = clock; _authenticationService = authenticationService; - _modelManager = modelManager; + _contentManager = contentManager; AddOnCreating(SetCreateTimesAndAuthor); Filters.Add(new StorageFilterForRecord(repository)); @@ -42,7 +42,7 @@ namespace Orchard.Core.Common.Models { void LoadOwnerModel(LoadModelContext context, CommonModel instance) { if (instance.Record.OwnerId != 0) { - instance.Owner = _modelManager.Get(instance.Record.OwnerId).As(); + instance.Owner = _contentManager.Get(instance.Record.OwnerId).As(); } } } diff --git a/src/Orchard.Web/Core/Common/Models/CommonModel.cs b/src/Orchard.Web/Core/Common/Models/CommonModel.cs index 37538eff1..e15ec16db 100644 --- a/src/Orchard.Web/Core/Common/Models/CommonModel.cs +++ b/src/Orchard.Web/Core/Common/Models/CommonModel.cs @@ -3,7 +3,7 @@ using Orchard.Models; using Orchard.Security; namespace Orchard.Core.Common.Models { - public class CommonModel : ModelPartWithRecord { + public class CommonModel : ContentItemPartWithRecord { public IUser Owner { get; set; } } } diff --git a/src/Orchard.Web/Core/Common/Models/ContentModel.cs b/src/Orchard.Web/Core/Common/Models/ContentModel.cs index dc52d7028..4d21cc8e9 100644 --- a/src/Orchard.Web/Core/Common/Models/ContentModel.cs +++ b/src/Orchard.Web/Core/Common/Models/ContentModel.cs @@ -1,7 +1,7 @@ using Orchard.Models; namespace Orchard.Core.Common.Models { - public class ContentModel : ModelPart { + public class ContentModel : ContentItemPart { public string Body { get; set; } public string Format { get; set; } } diff --git a/src/Orchard.Web/Core/Common/Models/RoutableModel.cs b/src/Orchard.Web/Core/Common/Models/RoutableModel.cs index 09f8519e5..15cca7261 100644 --- a/src/Orchard.Web/Core/Common/Models/RoutableModel.cs +++ b/src/Orchard.Web/Core/Common/Models/RoutableModel.cs @@ -2,6 +2,6 @@ using Orchard.Core.Common.Records; using Orchard.Models; namespace Orchard.Core.Common.Models { - public class RoutableModel : ModelPartWithRecord { + public class RoutableModel : ContentItemPartWithRecord { } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Records/CommonRecord.cs b/src/Orchard.Web/Core/Common/Records/CommonRecord.cs index 63193a8f8..171f3a124 100644 --- a/src/Orchard.Web/Core/Common/Records/CommonRecord.cs +++ b/src/Orchard.Web/Core/Common/Records/CommonRecord.cs @@ -2,7 +2,7 @@ using Orchard.Models.Records; namespace Orchard.Core.Common.Records { - public class CommonRecord : ModelPartRecord { + public class CommonRecord : ContentPartRecordBase { public virtual int OwnerId { get; set; } public virtual DateTime? CreatedUtc { get; set; } public virtual DateTime? ModifiedUtc { get; set; } diff --git a/src/Orchard.Web/Core/Common/Records/RoutableRecord.cs b/src/Orchard.Web/Core/Common/Records/RoutableRecord.cs index f28c4d5fb..67da026e9 100644 --- a/src/Orchard.Web/Core/Common/Records/RoutableRecord.cs +++ b/src/Orchard.Web/Core/Common/Records/RoutableRecord.cs @@ -1,7 +1,7 @@ using Orchard.Models.Records; namespace Orchard.Core.Common.Records { - public class RoutableRecord : ModelPartRecord { + public class RoutableRecord : ContentPartRecordBase { public virtual string Title { get; set; } public virtual string Slug { get; set; } } diff --git a/src/Orchard.Web/Core/Settings/Models/SiteModel.cs b/src/Orchard.Web/Core/Settings/Models/SiteModel.cs index 12d2d3212..bdc4808f0 100644 --- a/src/Orchard.Web/Core/Settings/Models/SiteModel.cs +++ b/src/Orchard.Web/Core/Settings/Models/SiteModel.cs @@ -3,7 +3,7 @@ using Orchard.Models; using Orchard.Settings; namespace Orchard.Core.Settings.Models { - public sealed class SiteModel : ModelPartWithRecord, ISite { + public sealed class SiteModel : ContentItemPartWithRecord, ISite { public string SiteName { get { return Record.SiteName; } set { Record.SiteName = value; } diff --git a/src/Orchard.Web/Core/Settings/Records/SiteSettingsRecord.cs b/src/Orchard.Web/Core/Settings/Records/SiteSettingsRecord.cs index 8733cf22f..218c8a219 100644 --- a/src/Orchard.Web/Core/Settings/Records/SiteSettingsRecord.cs +++ b/src/Orchard.Web/Core/Settings/Records/SiteSettingsRecord.cs @@ -1,7 +1,7 @@ using Orchard.Models.Records; namespace Orchard.Core.Settings.Records { - public class SiteSettingsRecord : ModelPartRecord { + public class SiteSettingsRecord : ContentPartRecordBase { public virtual string SiteUrl { get; set; } public virtual string SiteName { get; set; } public virtual string SuperUser { get; set; } diff --git a/src/Orchard.Web/Core/Settings/Services/SiteService.cs b/src/Orchard.Web/Core/Settings/Services/SiteService.cs index e309724f2..068af3cf5 100644 --- a/src/Orchard.Web/Core/Settings/Services/SiteService.cs +++ b/src/Orchard.Web/Core/Settings/Services/SiteService.cs @@ -9,11 +9,11 @@ using System.Web; namespace Orchard.Core.Settings.Services { public class SiteService : ISiteService { private readonly IRepository _siteSettingsRepository; - private readonly IModelManager _modelManager; + private readonly IContentManager _contentManager; - public SiteService(IRepository siteSettingsRepository, IModelManager modelManager) { + public SiteService(IRepository siteSettingsRepository, IContentManager contentManager) { _siteSettingsRepository = siteSettingsRepository; - _modelManager = modelManager; + _contentManager = contentManager; Logger = NullLogger.Instance; } @@ -25,12 +25,12 @@ namespace Orchard.Core.Settings.Services { string applicationName = HttpContext.Current.Request.ApplicationPath; SiteSettingsRecord record = _siteSettingsRepository.Get(x => x.SiteUrl == applicationName); if (record == null) { - SiteModel site = _modelManager.New("site").As(); + SiteModel site = _contentManager.New("site").As(); site.Record.SiteUrl = applicationName; - _modelManager.Create(site); + _contentManager.Create(site); return site; } - return _modelManager.Get(record.Id).As(); + return _contentManager.Get(record.Id).As(); } #endregion diff --git a/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs b/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs index 6286d8fb8..a86b4822a 100644 --- a/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs +++ b/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs @@ -1,5 +1,6 @@ using System.Linq; using Orchard.Data; +using Orchard.Models; using Orchard.Models.Driver; using Orchard.Roles.Models.NoRecord; using Orchard.Roles.Records; @@ -28,21 +29,21 @@ namespace Orchard.Roles.Models { } protected override void Creating(CreateModelContext context) { - var userRoles = context.Instance.As(); + var userRoles = context.ContentItem.As(); if (userRoles != null) { } } protected override void Loading(LoadModelContext context) { - var userRoles = context.Instance.As(); + var userRoles = context.ContentItem.As(); if (userRoles != null) { - userRoles.Roles = _userRolesRepository.Fetch(x => x.UserId == userRoles.Id) + userRoles.Roles = _userRolesRepository.Fetch(x => x.UserId == context.ContentItem.Id) .Select(x => x.Role.Name).ToList(); } } protected override void GetEditors(GetModelEditorsContext context) { - var userRoles = context.Instance.As(); + var userRoles = context.ContentItem.As(); if (userRoles != null) { var roles = _roleService.GetRoles().Select( @@ -63,18 +64,18 @@ namespace Orchard.Roles.Models { } protected override void UpdateEditors(UpdateModelContext context) { - var userRoles = context.Instance.As(); + var userRoles = context.ContentItem.As(); if (userRoles != null) { var viewModel = new UserRolesViewModel(); if (context.Updater.TryUpdateModel(viewModel, "UserRoles", null, null)) { - var currentUserRoleRecords = _userRolesRepository.Fetch(x => x.UserId == userRoles.Id); + var currentUserRoleRecords = _userRolesRepository.Fetch(x => x.UserId == context.ContentItem.Id); var currentRoleRecords = currentUserRoleRecords.Select(x => x.Role); var targetRoleRecords = viewModel.Roles.Where(x => x.Granted).Select(x => _roleService.GetRole(x.RoleId)); foreach (var addingRole in targetRoleRecords.Where(x => !currentRoleRecords.Contains(x))) { _notifier.Warning(string.Format("Adding role {0} to user {1}", addingRole.Name, userRoles.As().UserName)); - _userRolesRepository.Create(new UserRolesRecord { UserId = userRoles.Id, Role = addingRole }); + _userRolesRepository.Create(new UserRolesRecord { UserId = context.ContentItem.Id, Role = addingRole }); } foreach (var removingRole in currentUserRoleRecords.Where(x => !targetRoleRecords.Contains(x.Role))) { diff --git a/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesModel.cs b/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesModel.cs index f16e3f3e4..56bae26bc 100644 --- a/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesModel.cs +++ b/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesModel.cs @@ -2,11 +2,11 @@ using System.Collections.Generic; using Orchard.Models; namespace Orchard.Roles.Models.NoRecord { - public interface IUserRoles : IModel { + public interface IUserRoles : IContentItemPart { IList Roles { get; } } - public class UserRolesModel : ModelPart, IUserRoles { + public class UserRolesModel : ContentItemPart, IUserRoles { public UserRolesModel() { Roles = new List(); } diff --git a/src/Orchard.Web/Packages/Orchard.Roles/Services/RolesBasedAuthorizationService.cs b/src/Orchard.Web/Packages/Orchard.Roles/Services/RolesBasedAuthorizationService.cs index 96c6d7872..671018ce6 100644 --- a/src/Orchard.Web/Packages/Orchard.Roles/Services/RolesBasedAuthorizationService.cs +++ b/src/Orchard.Web/Packages/Orchard.Roles/Services/RolesBasedAuthorizationService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Orchard.Logging; +using Orchard.Models; using Orchard.Roles.Models.NoRecord; using Orchard.Roles.Records; using Orchard.Security; diff --git a/src/Orchard.Web/Packages/Orchard.Users/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.Users/Controllers/AdminController.cs index 3f91966d5..82fe33885 100644 --- a/src/Orchard.Web/Packages/Orchard.Users/Controllers/AdminController.cs +++ b/src/Orchard.Web/Packages/Orchard.Users/Controllers/AdminController.cs @@ -14,17 +14,17 @@ namespace Orchard.Users.Controllers { public class AdminController : Controller, IModelUpdater { private readonly IMembershipService _membershipService; - private readonly IModelManager _modelManager; + private readonly IContentManager _contentManager; private readonly IRepository _userRepository; private readonly INotifier _notifier; public AdminController( IMembershipService membershipService, - IModelManager modelManager, + IContentManager contentManager, IRepository userRepository, INotifier notifier) { _membershipService = membershipService; - _modelManager = modelManager; + _contentManager = contentManager; _userRepository = userRepository; _notifier = notifier; T = NullLocalizer.Instance; @@ -38,7 +38,7 @@ namespace Orchard.Users.Controllers { var model = new UsersIndexViewModel(); model.Rows = _userRepository.Fetch(x => x.UserName != null) .Select(x => new UsersIndexViewModel.Row { - User = _modelManager.Get(x.Id).As() + User = _contentManager.Get(x.Id).As() }) .ToList(); @@ -67,15 +67,15 @@ namespace Orchard.Users.Controllers { } public ActionResult Edit(int id) { - var model = new UserEditViewModel { User = _modelManager.Get(id) }; - model.Editors = _modelManager.GetEditors(model.User); + var model = new UserEditViewModel { User = _contentManager.Get(id) }; + model.Editors = _contentManager.GetEditors(model.User.ContentItem); return View(model); } [HttpPost] public ActionResult Edit(int id, FormCollection input) { - var model = new UserEditViewModel { User = _modelManager.Get(id) }; - model.Editors = _modelManager.UpdateEditors(model.User, this); + var model = new UserEditViewModel { User = _contentManager.Get(id) }; + model.Editors = _contentManager.UpdateEditors(model.User.ContentItem, this); if (!TryUpdateModel(model, input.ToValueProvider())) { return View(model); diff --git a/src/Orchard.Web/Packages/Orchard.Users/Models/UserModel.cs b/src/Orchard.Web/Packages/Orchard.Users/Models/UserModel.cs index ee6abfb92..0393dc345 100644 --- a/src/Orchard.Web/Packages/Orchard.Users/Models/UserModel.cs +++ b/src/Orchard.Web/Packages/Orchard.Users/Models/UserModel.cs @@ -2,8 +2,19 @@ using Orchard.Security; namespace Orchard.Users.Models { - public sealed class UserModel : ModelPartWithRecord, IUser { - string IUser.UserName {get { return Record.UserName; }} - string IUser.Email {get { return Record.Email; }} + public sealed class UserModel : ContentItemPartWithRecord, IUser { + public int Id { + get { return ContentItem.Id; } + } + + public string UserName { + get { return Record.UserName; } + set { Record.UserName = value; } + } + + public string Email { + get { return Record.Email; } + set { Record.Email = value; } + } } } diff --git a/src/Orchard.Web/Packages/Orchard.Users/Models/UserRecord.cs b/src/Orchard.Web/Packages/Orchard.Users/Models/UserRecord.cs index a7dd9faba..66b120267 100644 --- a/src/Orchard.Web/Packages/Orchard.Users/Models/UserRecord.cs +++ b/src/Orchard.Web/Packages/Orchard.Users/Models/UserRecord.cs @@ -2,7 +2,7 @@ using System.Web.Security; using Orchard.Models.Records; namespace Orchard.Users.Models { - public class UserRecord : ModelPartRecord { + public class UserRecord : ContentPartRecordBase { public virtual string UserName { get; set; } public virtual string Email { get; set; } diff --git a/src/Orchard.Web/Packages/Orchard.Users/Services/MembershipService.cs b/src/Orchard.Web/Packages/Orchard.Users/Services/MembershipService.cs index 066644d3a..0a1995651 100644 --- a/src/Orchard.Web/Packages/Orchard.Users/Services/MembershipService.cs +++ b/src/Orchard.Web/Packages/Orchard.Users/Services/MembershipService.cs @@ -11,11 +11,11 @@ using Orchard.Users.Models; namespace Orchard.Users.Services { public class MembershipService : IMembershipService { - private readonly IModelManager _modelManager; + private readonly IContentManager _contentManager; private readonly IRepository _userRepository; - public MembershipService(IModelManager modelManager, IRepository userRepository) { - _modelManager = modelManager; + public MembershipService(IContentManager contentManager, IRepository userRepository) { + _contentManager = contentManager; _userRepository = userRepository; Logger = NullLogger.Instance; } @@ -36,9 +36,9 @@ namespace Orchard.Users.Services { }; SetPassword(record, createUserParams.Password); - var user = _modelManager.New("user"); + var user = _contentManager.New("user"); user.As().Record = record; - _modelManager.Create(user); + _contentManager.Create(user); return user.As(); } @@ -47,7 +47,7 @@ namespace Orchard.Users.Services { if (userRecord == null) { return null; } - return _modelManager.Get(userRecord.Id).As(); + return _contentManager.Get(userRecord.Id).As(); } public IUser ValidateUser(string username, string password) { @@ -55,7 +55,7 @@ namespace Orchard.Users.Services { if (userRecord == null || ValidatePassword(userRecord, password) == false) return null; - return _modelManager.Get(userRecord.Id).As(); + return _contentManager.Get(userRecord.Id).As(); } diff --git a/src/Orchard.Web/Packages/Orchard.Users/ViewModels/UserEditViewModel.cs b/src/Orchard.Web/Packages/Orchard.Users/ViewModels/UserEditViewModel.cs index e7d83ad04..e1112adfd 100644 --- a/src/Orchard.Web/Packages/Orchard.Users/ViewModels/UserEditViewModel.cs +++ b/src/Orchard.Web/Packages/Orchard.Users/ViewModels/UserEditViewModel.cs @@ -8,7 +8,7 @@ using Orchard.Users.Models; namespace Orchard.Users.ViewModels { public class UserEditViewModel : AdminViewModel { - public IModel User { get; set; } + public UserModel User { get; set; } public IEnumerable Editors { get; set; } [HiddenInput(DisplayValue = false)] diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.Wikis/Controllers/AdminController.cs index a2da3c3aa..ec3cef4d7 100644 --- a/src/Orchard.Web/Packages/Orchard.Wikis/Controllers/AdminController.cs +++ b/src/Orchard.Web/Packages/Orchard.Wikis/Controllers/AdminController.cs @@ -6,10 +6,10 @@ using Orchard.Security; namespace Orchard.Wikis.Controllers { public class AdminController : Controller { - private readonly IModelManager _modelManager; + private readonly IContentManager _contentManager; - public AdminController(IModelManager modelManager) { - _modelManager = modelManager; + public AdminController(IContentManager contentManager) { + _contentManager = contentManager; } public ActionResult Index() { @@ -19,14 +19,14 @@ namespace Orchard.Wikis.Controllers { public IUser CurrentUser { get; set; } public ActionResult Create() { - var page = _modelManager.New("wikipage"); - _modelManager.Create(page); + var page = _contentManager.New("wikipage"); + _contentManager.Create(page); return RedirectToAction("View", new{page.Id}); } public ActionResult View(int id) { - var page = _modelManager.Get(id).As(); + var page = _contentManager.Get(id).As(); return View(page); } } diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs index eba3f1449..e6c6d6b9c 100644 --- a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs +++ b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs @@ -6,10 +6,10 @@ using Orchard.Models.Records; using Orchard.UI.Models; namespace Orchard.Wikis.Models { - public class WikiSettings : ModelPartWithRecord { + public class WikiSettings : ContentItemPartWithRecord { } - public class WikiSettingsRecord : ModelPartRecord { + public class WikiSettingsRecord : ContentPartRecordBase { public virtual bool AllowAnonymousEdits { get; set; } [Required] @@ -26,7 +26,7 @@ namespace Orchard.Wikis.Models { } protected override void GetEditors(GetModelEditorsContext context) { - var model = context.Instance.As(); + var model = context.ContentItem.As(); if (model == null) return; @@ -34,7 +34,7 @@ namespace Orchard.Wikis.Models { } protected override void UpdateEditors(UpdateModelContext context) { - var model = context.Instance.As(); + var model = context.ContentItem.As(); if (model == null) return; diff --git a/src/Orchard/Controllers/AccountController.cs b/src/Orchard/Controllers/AccountController.cs index 0a1e870ff..ef5426a81 100644 --- a/src/Orchard/Controllers/AccountController.cs +++ b/src/Orchard/Controllers/AccountController.cs @@ -101,7 +101,10 @@ namespace Orchard.Controllers { } try { - if (true/*MembershipService.ChangePassword(User.Identity.Name, currentPassword, newPassword)*/) { + var validated = _membershipService.ValidateUser(User.Identity.Name, currentPassword); + + if (validated != null) { + _membershipService.SetPassword(validated, newPassword); return RedirectToAction("ChangePasswordSuccess"); } else { diff --git a/src/Orchard/Data/HackSessionLocator.cs b/src/Orchard/Data/HackSessionLocator.cs index 0295b194e..998034de1 100644 --- a/src/Orchard/Data/HackSessionLocator.cs +++ b/src/Orchard/Data/HackSessionLocator.cs @@ -64,7 +64,7 @@ namespace Orchard.Data { type.GetProperty("Id") != null && !type.IsSealed && !type.IsAbstract && - !typeof(IModel).IsAssignableFrom(type); + !typeof(IContentItemPart).IsAssignableFrom(type); } public ISession For(Type entityType) { diff --git a/src/Orchard/Models/ContentExtensions.cs b/src/Orchard/Models/ContentExtensions.cs new file mode 100644 index 000000000..53bea2f50 --- /dev/null +++ b/src/Orchard/Models/ContentExtensions.cs @@ -0,0 +1,50 @@ +using System; + +namespace Orchard.Models { + + public static class ContentExtensions { + public static T New(this IContentManager manager, string contentType) where T : class, IContentItemPart { + var contentItem = manager.New(contentType); + if (contentItem == null) + return null; + + var part = contentItem.Get(); + if (part == null) + throw new InvalidCastException(); + + return part; + } + + public static T Get(this IContentManager manager, int id) where T : class, IContentItemPart { + return manager.Get(id).Get(); + } + + public static void Create(this IContentManager manager, IContentItemPart part) { + manager.Create(part.ContentItem); + } + + public static bool Has(this IContentItemPart part) { + return part.ContentItem.Has(); + } + + public static T Get(this IContentItemPart part) { + return part.ContentItem.Get(); + } + + public static bool Is(this IContentItemPart part) { + return part.ContentItem.Has(); + } + + public static T As(this IContentItemPart part) { + return part.ContentItem.Get(); + } + + public static bool Is(this ContentItem contentItem) { + return contentItem.Has(); + } + public static T As(this ContentItem contentItem) { + return contentItem.Get(); + } + + } +} diff --git a/src/Orchard/Models/ContentItemPart.cs b/src/Orchard/Models/ContentItemPart.cs new file mode 100644 index 000000000..c5c22da07 --- /dev/null +++ b/src/Orchard/Models/ContentItemPart.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Orchard.Models { + public class ContentItem { + public ContentItem() { + _parts = new List(); + } + + private readonly IList _parts; + + public int Id { get; set; } + + public string ContentType { get; set; } + + public bool Has() { + return _parts.Any(part => part is TPart); + } + + public TPart Get() { + return _parts.OfType().FirstOrDefault(); + } + + public void Weld(IContentItemPart part) { + part.ContentItem = this; + _parts.Add(part); + } + } + + public abstract class ContentItemPart : IContentItemPart { + public ContentItem ContentItem { get; set; } + } +} diff --git a/src/Orchard/Models/ContentItemPartWithRecord.cs b/src/Orchard/Models/ContentItemPartWithRecord.cs new file mode 100644 index 000000000..75348fed5 --- /dev/null +++ b/src/Orchard/Models/ContentItemPartWithRecord.cs @@ -0,0 +1,5 @@ +namespace Orchard.Models { + public abstract class ContentItemPartWithRecord : ContentItemPart { + public TRecord Record { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard/Models/DefaultModelManager.cs b/src/Orchard/Models/DefaultContentManager.cs similarity index 51% rename from src/Orchard/Models/DefaultModelManager.cs rename to src/Orchard/Models/DefaultContentManager.cs index 71b2c7421..0563bfd0a 100644 --- a/src/Orchard/Models/DefaultModelManager.cs +++ b/src/Orchard/Models/DefaultContentManager.cs @@ -8,18 +8,18 @@ using Orchard.Models.Records; using Orchard.UI.Models; namespace Orchard.Models { - public class DefaultModelManager : IModelManager { + public class DefaultContentManager : IContentManager { private readonly IContext _context; - private readonly IRepository _modelRepository; - private readonly IRepository _modelTypeRepository; + private readonly IRepository _contentItemRepository; + private readonly IRepository _contentTypeRepository; - public DefaultModelManager( + public DefaultContentManager( IContext context, - IRepository modelRepository, - IRepository modelTypeRepository) { + IRepository contentItemRepository, + IRepository contentTypeRepository) { _context = context; - _modelRepository = modelRepository; - _modelTypeRepository = modelTypeRepository; + _contentItemRepository = contentItemRepository; + _contentTypeRepository = contentTypeRepository; } private IEnumerable _drivers; @@ -31,12 +31,12 @@ namespace Orchard.Models { } } - public virtual IModel New(string modelType) { + public virtual ContentItem New(string modelType) { // create a new kernel for the model instance var context = new ActivatingModelContext { ModelType = modelType, - Builder = new ModelBuilder(modelType) + Builder = new ContentItemBuilder(modelType) }; // invoke drivers to weld aspects onto kernel @@ -44,31 +44,31 @@ namespace Orchard.Models { driver.Activating(context); } var context2 = new ActivatedModelContext { - ModelType = modelType, - Instance = context.Builder.Build() + ContentType = modelType, + ContentItem = context.Builder.Build() }; foreach (var driver in Drivers) { driver.Activated(context2); } // composite result is returned - return context2.Instance; + return context2.ContentItem; } - public virtual IModel Get(int id) { + public virtual ContentItem Get(int id) { // obtain root record to determine the model type - var modelRecord = _modelRepository.Get(id); + var contentItemRecord = _contentItemRepository.Get(id); // create a context with a new instance to load var context = new LoadModelContext { - Id = modelRecord.Id, - ModelType = modelRecord.ModelType.Name, - ModelRecord = modelRecord, - Instance = New(modelRecord.ModelType.Name) + Id = contentItemRecord.Id, + ModelType = contentItemRecord.ContentType.Name, + ContentItemRecord = contentItemRecord, + ContentItem = New(contentItemRecord.ContentType.Name) }; // set the id - context.Instance.As().Id = context.Id; + context.ContentItem.Id = context.Id; // invoke drivers to acquire state, or at least establish lazy loading callbacks foreach (var driver in Drivers) { @@ -78,24 +78,24 @@ namespace Orchard.Models { driver.Loaded(context); } - return context.Instance; + return context.ContentItem; } - public void Create(IModel model) { + public void Create(ContentItem contentItem) { // produce root record to determine the model id - var modelRecord = new ModelRecord { ModelType = AcquireModelTypeRecord(model.ModelType) }; - _modelRepository.Create(modelRecord); + var modelRecord = new ContentItemRecord { ContentType = AcquireContentTypeRecord(contentItem.ContentType) }; + _contentItemRepository.Create(modelRecord); // build a context with the initialized instance to create var context = new CreateModelContext { Id = modelRecord.Id, - ModelType = modelRecord.ModelType.Name, - ModelRecord = modelRecord, - Instance = model.As().Welded + ModelType = modelRecord.ContentType.Name, + ContentItemRecord = modelRecord, + ContentItem = contentItem }; // set the id - context.Instance.As().Id = context.Id; + context.ContentItem.Id = context.Id; // invoke drivers to add information to persistent stores @@ -107,28 +107,28 @@ namespace Orchard.Models { } } - public IEnumerable GetEditors(IModel model) { - var context = new GetModelEditorsContext(model); + public IEnumerable GetEditors(ContentItem contentItem) { + var context = new GetModelEditorsContext(contentItem); foreach (var driver in Drivers) { driver.GetEditors(context); } return context.Editors; } - public IEnumerable UpdateEditors(IModel model, IModelUpdater updater) { - var context = new UpdateModelContext(model, updater); + public IEnumerable UpdateEditors(ContentItem contentItem, IModelUpdater updater) { + var context = new UpdateModelContext(contentItem, updater); foreach (var driver in Drivers) { driver.UpdateEditors(context); } return context.Editors; } - private ModelTypeRecord AcquireModelTypeRecord(string modelType) { - var modelTypeRecord = _modelTypeRepository.Get(x => x.Name == modelType); + private ContentTypeRecord AcquireContentTypeRecord(string contentType) { + var modelTypeRecord = _contentTypeRepository.Get(x => x.Name == contentType); if (modelTypeRecord == null) { - //TEMP: this is not safe... Model types could be created concurrently? - modelTypeRecord = new ModelTypeRecord { Name = modelType }; - _modelTypeRepository.Create(modelTypeRecord); + //TEMP: this is not safe... ContentItem types could be created concurrently? + modelTypeRecord = new ContentTypeRecord { Name = contentType }; + _contentTypeRepository.Create(modelTypeRecord); } return modelTypeRecord; } diff --git a/src/Orchard/Models/Driver/ActivatedModelContext.cs b/src/Orchard/Models/Driver/ActivatedModelContext.cs index d4c1d1576..dc23b2f4a 100644 --- a/src/Orchard/Models/Driver/ActivatedModelContext.cs +++ b/src/Orchard/Models/Driver/ActivatedModelContext.cs @@ -1,6 +1,6 @@ namespace Orchard.Models.Driver { public class ActivatedModelContext { - public string ModelType { get; set; } - public IModel Instance { get; set; } + public string ContentType { get; set; } + public ContentItem ContentItem { get; set; } } } \ No newline at end of file diff --git a/src/Orchard/Models/Driver/ActivatingFilter.cs b/src/Orchard/Models/Driver/ActivatingFilter.cs index 04bdbc889..cd4a883d8 100644 --- a/src/Orchard/Models/Driver/ActivatingFilter.cs +++ b/src/Orchard/Models/Driver/ActivatingFilter.cs @@ -2,7 +2,7 @@ using System; using System.Linq; namespace Orchard.Models.Driver { - public class ActivatingFilter : IModelActivatingFilter where TPart : class, IModel, new() { + public class ActivatingFilter : IModelActivatingFilter where TPart : class, IContentItemPart, new() { private readonly Func _predicate; public ActivatingFilter(Func predicate) { diff --git a/src/Orchard/Models/Driver/ActivatingModelContext.cs b/src/Orchard/Models/Driver/ActivatingModelContext.cs index 3d82bdcb4..82ab11071 100644 --- a/src/Orchard/Models/Driver/ActivatingModelContext.cs +++ b/src/Orchard/Models/Driver/ActivatingModelContext.cs @@ -1,6 +1,6 @@ namespace Orchard.Models.Driver { public class ActivatingModelContext { public string ModelType { get; set; } - public ModelBuilder Builder { get; set; } + public ContentItemBuilder Builder { get; set; } } } diff --git a/src/Orchard/Models/Driver/ContentItemBuilder.cs b/src/Orchard/Models/Driver/ContentItemBuilder.cs new file mode 100644 index 000000000..91d436c05 --- /dev/null +++ b/src/Orchard/Models/Driver/ContentItemBuilder.cs @@ -0,0 +1,21 @@ +using System; + +namespace Orchard.Models.Driver { + public class ContentItemBuilder { + private ContentItem _item; + + public ContentItemBuilder(string contentType) { + _item = new ContentItem { ContentType = contentType }; + } + + public ContentItem Build() { + return _item; + } + + public ContentItemBuilder Weld() where TPart : class, IContentItemPart, new() { + var part = new TPart(); + _item.Weld(part); + return this; + } + } +} diff --git a/src/Orchard/Models/Driver/CreateModelContext.cs b/src/Orchard/Models/Driver/CreateModelContext.cs index d95855051..c9644e546 100644 --- a/src/Orchard/Models/Driver/CreateModelContext.cs +++ b/src/Orchard/Models/Driver/CreateModelContext.cs @@ -4,7 +4,7 @@ namespace Orchard.Models.Driver { public class CreateModelContext { public int Id { get; set; } public string ModelType { get; set; } - public ModelRecord ModelRecord { get; set; } - public IModel Instance { get; set; } + public ContentItemRecord ContentItemRecord { get; set; } + public ContentItem ContentItem { get; set; } } } \ No newline at end of file diff --git a/src/Orchard/Models/Driver/GetModelEditorsContext.cs b/src/Orchard/Models/Driver/GetModelEditorsContext.cs index 0bd374c2f..f6f4deb48 100644 --- a/src/Orchard/Models/Driver/GetModelEditorsContext.cs +++ b/src/Orchard/Models/Driver/GetModelEditorsContext.cs @@ -3,11 +3,11 @@ using Orchard.UI.Models; namespace Orchard.Models.Driver { public class GetModelEditorsContext { - public GetModelEditorsContext(IModel model) { - Instance = model; + public GetModelEditorsContext(ContentItem part) { + ContentItem = part; Editors= new List(); } - public IModel Instance { get; set; } + public ContentItem ContentItem { get; set; } public IList Editors { get; set; } } } \ No newline at end of file diff --git a/src/Orchard/Models/Driver/LoadModelContext.cs b/src/Orchard/Models/Driver/LoadModelContext.cs index c4ae6b3a1..82f997244 100644 --- a/src/Orchard/Models/Driver/LoadModelContext.cs +++ b/src/Orchard/Models/Driver/LoadModelContext.cs @@ -5,7 +5,7 @@ namespace Orchard.Models.Driver { public class LoadModelContext { public int Id { get; set; } public string ModelType { get; set; } - public ModelRecord ModelRecord { get; set; } - public IModel Instance { get; set; } + public ContentItemRecord ContentItemRecord { get; set; } + public ContentItem ContentItem { get; set; } } } \ No newline at end of file diff --git a/src/Orchard/Models/Driver/ModelBuilder.cs b/src/Orchard/Models/Driver/ModelBuilder.cs deleted file mode 100644 index add9c3b1c..000000000 --- a/src/Orchard/Models/Driver/ModelBuilder.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Orchard.Models.Driver { - public class ModelBuilder { - private IModel _instance; - - public ModelBuilder(string modelType) { - _instance = new ModelRoot(modelType); - } - - public IModel Build() { - return _instance; - } - - public ModelBuilder Weld() where TPart : class, IModel, new() { - var part = new TPart(); - part.Weld(_instance); - _instance = part; - return this; - } - } -} diff --git a/src/Orchard/Models/Driver/ModelDriver.cs b/src/Orchard/Models/Driver/ModelDriver.cs index 165e6761a..53782eae6 100644 --- a/src/Orchard/Models/Driver/ModelDriver.cs +++ b/src/Orchard/Models/Driver/ModelDriver.cs @@ -13,17 +13,17 @@ namespace Orchard.Models.Driver { public List Filters { get; set; } public ILogger Logger { get; set; } - public void AddOnActivated(Action handler) where TPart : class, IModel { + public void AddOnActivated(Action handler) where TPart : class, IContentItemPart { Filters.Add(new InlineStorageFilter { OnActivated = handler }); } - public void AddOnCreating(Action handler) where TPart : class, IModel { + public void AddOnCreating(Action handler) where TPart : class, IContentItemPart { Filters.Add(new InlineStorageFilter { OnCreating = handler }); } - public void AddOnLoaded(Action handler) where TPart : class, IModel { + public void AddOnLoaded(Action handler) where TPart : class, IContentItemPart { Filters.Add(new InlineStorageFilter { OnLoaded = handler }); } - class InlineStorageFilter : StorageFilterBase where TPart : class, IModel { + class InlineStorageFilter : StorageFilterBase where TPart : class, IContentItemPart { public Action OnActivated { get; set; } public Action OnCreating { get; set; } public Action OnCreated { get; set; } diff --git a/src/Orchard/Models/Driver/NewModelContext.cs b/src/Orchard/Models/Driver/NewModelContext.cs deleted file mode 100644 index 2470478a5..000000000 --- a/src/Orchard/Models/Driver/NewModelContext.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Orchard.Models.Driver { - public class NewModelContext { - public string ModelType { get; set; } - public ModelBuilder Builder { get; set; } - } - public class NewedModelContext { - public string ModelType { get; set; } - public IModel Instance { get; set; } - } -} diff --git a/src/Orchard/Models/Driver/StorageFilterBase.cs b/src/Orchard/Models/Driver/StorageFilterBase.cs index 6ba3d289d..7addec48f 100644 --- a/src/Orchard/Models/Driver/StorageFilterBase.cs +++ b/src/Orchard/Models/Driver/StorageFilterBase.cs @@ -1,5 +1,5 @@ namespace Orchard.Models.Driver { - public abstract class StorageFilterBase : IModelStorageFilter where TPart : class, IModel { + public abstract class StorageFilterBase : IModelStorageFilter where TPart : class, IContentItemPart { protected virtual void Activated(ActivatedModelContext context, TPart instance) { } protected virtual void Creating(CreateModelContext context, TPart instance) { } @@ -9,28 +9,28 @@ namespace Orchard.Models.Driver { void IModelStorageFilter.Activated(ActivatedModelContext context) { - if (context.Instance.Is()) - Activated(context, context.Instance.As()); + if (context.ContentItem.Is()) + Activated(context, context.ContentItem.As()); } void IModelStorageFilter.Creating(CreateModelContext context) { - if (context.Instance.Is()) - Creating(context, context.Instance.As()); + if (context.ContentItem.Is()) + Creating(context, context.ContentItem.As()); } void IModelStorageFilter.Created(CreateModelContext context) { - if (context.Instance.Is()) - Created(context, context.Instance.As()); + if (context.ContentItem.Is()) + Created(context, context.ContentItem.As()); } void IModelStorageFilter.Loading(LoadModelContext context) { - if (context.Instance.Is()) - Loading(context, context.Instance.As()); + if (context.ContentItem.Is()) + Loading(context, context.ContentItem.As()); } void IModelStorageFilter.Loaded(LoadModelContext context) { - if (context.Instance.Is()) - Loaded(context, context.Instance.As()); + if (context.ContentItem.Is()) + Loaded(context, context.ContentItem.As()); } } } diff --git a/src/Orchard/Models/Driver/StorageFilterForRecord.cs b/src/Orchard/Models/Driver/StorageFilterForRecord.cs index 797767859..fc2730986 100644 --- a/src/Orchard/Models/Driver/StorageFilterForRecord.cs +++ b/src/Orchard/Models/Driver/StorageFilterForRecord.cs @@ -2,7 +2,7 @@ using Orchard.Data; using Orchard.Models.Records; namespace Orchard.Models.Driver { - public class StorageFilterForRecord : StorageFilterBase> where TRecord : ModelPartRecord,new() { + public class StorageFilterForRecord : StorageFilterBase> where TRecord : ContentPartRecordBase,new() { private readonly IRepository _repository; public StorageFilterForRecord(IRepository repository) { @@ -11,19 +11,19 @@ namespace Orchard.Models.Driver { public bool AutomaticallyCreateMissingRecord { get; set; } - protected override void Activated(ActivatedModelContext context, ModelPartWithRecord instance) { + protected override void Activated(ActivatedModelContext context, ContentItemPartWithRecord instance) { instance.Record = new TRecord(); } - protected override void Creating(CreateModelContext context, ModelPartWithRecord instance) { - instance.Record.Model = context.ModelRecord; + protected override void Creating(CreateModelContext context, ContentItemPartWithRecord instance) { + instance.Record.ContentItem = context.ContentItemRecord; _repository.Create(instance.Record); } - protected override void Loading(LoadModelContext context, ModelPartWithRecord instance) { - instance.Record = _repository.Get(instance.Id); + protected override void Loading(LoadModelContext context, ContentItemPartWithRecord instance) { + instance.Record = _repository.Get(instance.ContentItem.Id); if (instance.Record == null && AutomaticallyCreateMissingRecord) { - instance.Record = new TRecord {Model = context.ModelRecord}; + instance.Record = new TRecord {ContentItem = context.ContentItemRecord}; _repository.Create(instance.Record); } } diff --git a/src/Orchard/Models/Driver/UpdateModelContext.cs b/src/Orchard/Models/Driver/UpdateModelContext.cs index 6bd4564f7..7b0bb0a97 100644 --- a/src/Orchard/Models/Driver/UpdateModelContext.cs +++ b/src/Orchard/Models/Driver/UpdateModelContext.cs @@ -1,6 +1,6 @@ namespace Orchard.Models.Driver { public class UpdateModelContext : GetModelEditorsContext { - public UpdateModelContext(IModel model, IModelUpdater updater) : base(model) { + public UpdateModelContext(ContentItem contentItem, IModelUpdater updater) : base(contentItem) { Updater = updater; } diff --git a/src/Orchard/Models/IContentItemPart.cs b/src/Orchard/Models/IContentItemPart.cs new file mode 100644 index 000000000..56f8bc348 --- /dev/null +++ b/src/Orchard/Models/IContentItemPart.cs @@ -0,0 +1,12 @@ +namespace Orchard.Models { + public interface IContentItemPart { + ContentItem ContentItem { get; set; } + //int Id { get; } + //string ModelType { get; } + + //bool Is() where T : class, IContentItemPart; + //T As() where T : class, IContentItemPart; + + //void Weld(IContentItemPart part); + } +} diff --git a/src/Orchard/Models/IContentManager.cs b/src/Orchard/Models/IContentManager.cs new file mode 100644 index 000000000..4ceb06f3b --- /dev/null +++ b/src/Orchard/Models/IContentManager.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Orchard.Models.Driver; +using Orchard.UI.Models; + +namespace Orchard.Models { + public interface IContentManager : IDependency { + ContentItem New(string contentType); + ContentItem Get(int id); + void Create(ContentItem contentItem); + + IEnumerable GetEditors(ContentItem contentItem); + IEnumerable UpdateEditors(ContentItem contentItem, IModelUpdater updater); + } +} diff --git a/src/Orchard/Models/IModel.cs b/src/Orchard/Models/IModel.cs deleted file mode 100644 index c698bcccb..000000000 --- a/src/Orchard/Models/IModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Orchard.Models { - public interface IModel { - int Id { get; } - string ModelType { get; } - - bool Is() where T : class, IModel; - T As() where T : class, IModel; - - void Weld(IModel model); - } -} diff --git a/src/Orchard/Models/IModelManager.cs b/src/Orchard/Models/IModelManager.cs deleted file mode 100644 index a199fdb70..000000000 --- a/src/Orchard/Models/IModelManager.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections.Generic; -using Orchard.Models.Driver; -using Orchard.UI.Models; - -namespace Orchard.Models { - public interface IModelManager : IDependency { - IModel New(string modelType); - IModel Get(int id); - void Create(IModel model); - IEnumerable GetEditors(IModel model); - IEnumerable UpdateEditors(IModel model, IModelUpdater updater); - } -} diff --git a/src/Orchard/Models/ModelExtensions.cs b/src/Orchard/Models/ModelExtensions.cs deleted file mode 100644 index ddedbcd22..000000000 --- a/src/Orchard/Models/ModelExtensions.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace Orchard.Models { - public static class ModelExtensions { - public static T New(this IModelManager manager, string modelType) where T : class, IModel { - var t = manager.New(modelType).As(); - if (t == null) - throw new InvalidCastException(); - return t; - } - - } -} diff --git a/src/Orchard/Models/ModelPart.cs b/src/Orchard/Models/ModelPart.cs deleted file mode 100644 index 8aa34b540..000000000 --- a/src/Orchard/Models/ModelPart.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; - -namespace Orchard.Models { - public abstract class ModelPart : IModel { - protected IModel Next { get; set; } - protected ModelRoot Root { get; set; } - - void IModel.Weld(IModel model) { - Next = model; - Root = model.As(); - Root.Welded = this; - } - - public int Id { get { return Root.Id; } } - public string ModelType { get { return Root.ModelType; } } - - bool IModel.Is() { - return this is T ? true : Next.Is(); - } - - T IModel.As() { - return this is T ? this as T : Next.As(); - } - - public bool Is() where T : class, IModel { - return Root.WeldedIs(); - } - - public T As() where T : class, IModel { - return Root.WeldedAs(); - } - } -} diff --git a/src/Orchard/Models/ModelPartWithRecord.cs b/src/Orchard/Models/ModelPartWithRecord.cs deleted file mode 100644 index 17a58a515..000000000 --- a/src/Orchard/Models/ModelPartWithRecord.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Orchard.Models { - public abstract class ModelPartWithRecord : ModelPart { - public TRecord Record { get; set; } - } -} \ No newline at end of file diff --git a/src/Orchard/Models/ModelRoot.cs b/src/Orchard/Models/ModelRoot.cs index ae5a8cc47..745f9f256 100644 --- a/src/Orchard/Models/ModelRoot.cs +++ b/src/Orchard/Models/ModelRoot.cs @@ -1,35 +1,4 @@ using System; namespace Orchard.Models { - public sealed class ModelRoot : IModel { - public ModelRoot(string modelType) { - Welded = this; - ModelType = modelType; - } - - public IModel Welded { get; set; } - - public int Id { get; set; } - public string ModelType { get; set; } - - bool IModel.Is() { - return this is T; - } - - T IModel.As() { - return this as T; - } - - public bool WeldedIs() where T : class, IModel { - return Welded.Is(); - } - - public T WeldedAs() where T : class, IModel { - return Welded.As(); - } - - void IModel.Weld(IModel model) { - // this method is not called on root - } - } } \ No newline at end of file diff --git a/src/Orchard/Models/Records/ContentItemRecord.cs b/src/Orchard/Models/Records/ContentItemRecord.cs new file mode 100644 index 000000000..b512c4704 --- /dev/null +++ b/src/Orchard/Models/Records/ContentItemRecord.cs @@ -0,0 +1,6 @@ +namespace Orchard.Models.Records { + public class ContentItemRecord { + public virtual int Id { get; set; } + public virtual ContentTypeRecord ContentType { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard/Models/Records/ContentPartRecordBase.cs b/src/Orchard/Models/Records/ContentPartRecordBase.cs new file mode 100644 index 000000000..d21f92b46 --- /dev/null +++ b/src/Orchard/Models/Records/ContentPartRecordBase.cs @@ -0,0 +1,42 @@ +using System; +using System.Linq; +using FluentNHibernate.Automapping; +using FluentNHibernate.Automapping.Alterations; + +namespace Orchard.Models.Records { + public abstract class ContentPartRecordBase { + public virtual int Id { get; set; } + public virtual ContentItemRecord ContentItem { get; set; } + } + + + public class ModelPartRecordAlteration : IAutoMappingAlteration { + public void Alter(AutoPersistenceModel model) { + + model.OverrideAll(mapping => { + var genericArguments = mapping.GetType().GetGenericArguments(); + if (!genericArguments.Single().IsSubclassOf(typeof(ContentPartRecordBase))) { + return; + } + + var type = typeof(Alteration<>).MakeGenericType(genericArguments); + var alteration = (IAlteration)Activator.CreateInstance(type); + alteration.Override(mapping); + }); + + } + + interface IAlteration { + void Override(object mapping); + } + + class Alteration : IAlteration where T : ContentPartRecordBase { + public void Override(object o) { + var mapping = (AutoMapping)o; + mapping.Id(x => x.Id).GeneratedBy.Foreign("ContentItem"); + mapping.HasOne(x => x.ContentItem); + } + } + } + +} diff --git a/src/Orchard/Models/Records/ContentTypeRecord.cs b/src/Orchard/Models/Records/ContentTypeRecord.cs new file mode 100644 index 000000000..f0bbebcc7 --- /dev/null +++ b/src/Orchard/Models/Records/ContentTypeRecord.cs @@ -0,0 +1,6 @@ +namespace Orchard.Models.Records { + public class ContentTypeRecord { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } +} diff --git a/src/Orchard/Orchard.csproj b/src/Orchard/Orchard.csproj index 3996ef6f5..2bef51029 100644 --- a/src/Orchard/Orchard.csproj +++ b/src/Orchard/Orchard.csproj @@ -139,25 +139,25 @@ - + - + - + - - - - + + + + - - - + + + diff --git a/src/Orchard/Security/IUser.cs b/src/Orchard/Security/IUser.cs index cf63320bf..51d45dd36 100644 --- a/src/Orchard/Security/IUser.cs +++ b/src/Orchard/Security/IUser.cs @@ -4,7 +4,8 @@ namespace Orchard.Security { /// /// Interface provided by the "user" model. /// - public interface IUser : IModel { + public interface IUser : IContentItemPart { + int Id { get; } string UserName { get; } string Email { get; } } diff --git a/src/Orchard/Security/Providers/FormsAuthenticationService.cs b/src/Orchard/Security/Providers/FormsAuthenticationService.cs index 42ed95240..383d2eb97 100644 --- a/src/Orchard/Security/Providers/FormsAuthenticationService.cs +++ b/src/Orchard/Security/Providers/FormsAuthenticationService.cs @@ -8,12 +8,12 @@ using Orchard.Services; namespace Orchard.Security.Providers { public class FormsAuthenticationService : IAuthenticationService { private readonly IClock _clock; - private readonly IModelManager _modelManager; + private readonly IContentManager _contentManager; private readonly HttpContextBase _httpContext; - public FormsAuthenticationService(IClock clock, IModelManager modelManager, HttpContextBase httpContext) { + public FormsAuthenticationService(IClock clock, IContentManager contentManager, HttpContextBase httpContext) { _clock = clock; - _modelManager = modelManager; + _contentManager = contentManager; _httpContext = httpContext; Logger = NullLogger.Instance; @@ -67,7 +67,7 @@ namespace Orchard.Security.Providers { Logger.Fatal("User id not a parsable integer"); return null; } - return _modelManager.Get(userId).As(); + return _contentManager.Get(userId).As(); } } } diff --git a/src/Orchard/Settings/ISite.cs b/src/Orchard/Settings/ISite.cs index 8c50c13bc..988e05f54 100644 --- a/src/Orchard/Settings/ISite.cs +++ b/src/Orchard/Settings/ISite.cs @@ -4,7 +4,7 @@ namespace Orchard.Settings { /// /// Interface provided by the "settings" model. /// - public interface ISite : IModel { + public interface ISite : IContentItemPart { string SiteName { get; } string SuperUser { get; } }