Refactoring Model concepts into ContentItem based concepts.

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041350
This commit is contained in:
loudej
2009-11-19 05:17:02 +00:00
parent ca6566ef73
commit 3d867826c5
64 changed files with 406 additions and 319 deletions

View File

@@ -26,7 +26,7 @@ namespace Orchard.Tests.Packages.Users.Controllers {
public override void Register(ContainerBuilder builder) {
builder.Register<AdminController>();
builder.Register<DefaultModelManager>().As<IModelManager>();
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<MembershipService>().As<IMembershipService>();
builder.Register<UserDriver>().As<IModelDriver>();
builder.Register(new Mock<INotifier>().Object);
@@ -34,14 +34,14 @@ namespace Orchard.Tests.Packages.Users.Controllers {
protected override IEnumerable<Type> 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<IModelManager>();
var manager = _container.Resolve<IContentManager>();
var userOne = manager.New("user").As<UserModel>();
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<IModelManager>();
var manager = _container.Resolve<IContentManager>();
var user = manager.Get(id).As<IUser>();
Assert.That(user.UserName, Is.EqualTo("four"));
}

View File

@@ -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<MembershipService>().As<IMembershipService>();
builder.Register<DefaultModelManager>().As<IModelManager>();
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<UserDriver>().As<IModelDriver>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
_session = _sessionFactory.OpenSession();

View File

@@ -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<IPackageManager>();
});
}
public class StuPackageManager : IPackageManager {
public IEnumerable<PackageDescriptor> AvailablePackages() {
return Enumerable.Empty<PackageDescriptor>();
}
public IEnumerable<PackageEntry> ActivePackages() {
return Enumerable.Empty<PackageEntry>();
}
}
[Test]
public void HostShouldSetControllerFactory() {
var host = _container.Resolve<IOrchardHost>();

View File

@@ -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<DefaultModelManager>().As<IModelManager>();
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<AlphaDriver>().As<IModelDriver>();
builder.Register<BetaDriver>().As<IModelDriver>();
builder.Register<GammaDriver>().As<IModelDriver>();
@@ -50,7 +50,7 @@ namespace Orchard.Tests.Models {
builder.Register(new TestSessionLocator(_session)).As<ISessionLocator>();
_container = builder.Build();
_manager = _container.Resolve<IModelManager>();
_manager = _container.Resolve<IContentManager>();
}
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<IRepository<ModelRecord>>().Get(model.Id),
ContentItem = _container.Resolve<IRepository<ContentItemRecord>>().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<Gamma>(), Is.True);
Assert.That(model.As<Gamma>().Record, Is.Not.Null);
Assert.That(model.As<Gamma>().Record.Model.Id, Is.EqualTo(model.Id));
Assert.That(model.As<Gamma>().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<IRepository<ModelRecord>>().Get(beta.Id);
var modelRecord = _container.Resolve<IRepository<ContentItemRecord>>().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<IRepository<ModelRecord>>();
var modelTypeRepository = _container.Resolve<IRepository<ModelTypeRecord>>();
private ContentItemRecord CreateModelRecord(string modelType) {
var modelRepository = _container.Resolve<IRepository<ContentItemRecord>>();
var modelTypeRepository = _container.Resolve<IRepository<ContentTypeRecord>>();
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();

View File

@@ -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<Alpha>();
var model = builder.Build();

View File

@@ -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<TestModelPart>(), Is.True);
Assert.That(model.As<TestModelPart>(), Is.Not.Null);
}
public class TestModelPart : ModelPart {
public class TestModelPart : ContentItemPart {
public bool CreatingCalled { get; set; }
}

View File

@@ -1,6 +1,6 @@
using Orchard.Models;
namespace Orchard.Tests.Models.Stubs {
public class Alpha : ModelPart {
public class Alpha : ContentItemPart {
}
}

View File

@@ -1,6 +1,6 @@
using Orchard.Models;
namespace Orchard.Tests.Models.Stubs {
public class Beta : ModelPart {
public class Beta : ContentItemPart {
}
}

View File

@@ -5,6 +5,6 @@ using System.Text;
using Orchard.Models;
namespace Orchard.Tests.Models.Stubs {
class Flavored : ModelPart {
class Flavored : ContentItemPart {
}
}

View File

@@ -4,10 +4,10 @@ using Orchard.Models.Driver;
using Orchard.Models.Records;
namespace Orchard.Tests.Models.Stubs {
public class Gamma : ModelPartWithRecord<GammaRecord> {
public class Gamma : ContentItemPartWithRecord<GammaRecord> {
}
public class GammaRecord : ModelPartRecord {
public class GammaRecord : ContentPartRecordBase {
public virtual string Frap { get; set; }
}

View File

@@ -5,6 +5,6 @@ using System.Text;
using Orchard.Models;
namespace Orchard.Tests.Models.Stubs {
public class Styled : ModelPart {
public class Styled : ContentItemPart {
}
}

View File

@@ -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<CommonRecord> repository,
IClock clock,
IAuthenticationService authenticationService,
IModelManager modelManager) {
IContentManager contentManager) {
_clock = clock;
_authenticationService = authenticationService;
_modelManager = modelManager;
_contentManager = contentManager;
AddOnCreating<CommonModel>(SetCreateTimesAndAuthor);
Filters.Add(new StorageFilterForRecord<CommonRecord>(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<IUser>();
instance.Owner = _contentManager.Get(instance.Record.OwnerId).As<IUser>();
}
}
}

View File

@@ -3,7 +3,7 @@ using Orchard.Models;
using Orchard.Security;
namespace Orchard.Core.Common.Models {
public class CommonModel : ModelPartWithRecord<CommonRecord> {
public class CommonModel : ContentItemPartWithRecord<CommonRecord> {
public IUser Owner { get; set; }
}
}

View File

@@ -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; }
}

View File

@@ -2,6 +2,6 @@ using Orchard.Core.Common.Records;
using Orchard.Models;
namespace Orchard.Core.Common.Models {
public class RoutableModel : ModelPartWithRecord<RoutableRecord> {
public class RoutableModel : ContentItemPartWithRecord<RoutableRecord> {
}
}

View File

@@ -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; }

View File

@@ -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; }
}

View File

@@ -3,7 +3,7 @@ using Orchard.Models;
using Orchard.Settings;
namespace Orchard.Core.Settings.Models {
public sealed class SiteModel : ModelPartWithRecord<SiteSettingsRecord>, ISite {
public sealed class SiteModel : ContentItemPartWithRecord<SiteSettingsRecord>, ISite {
public string SiteName {
get { return Record.SiteName; }
set { Record.SiteName = value; }

View File

@@ -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; }

View File

@@ -9,11 +9,11 @@ using System.Web;
namespace Orchard.Core.Settings.Services {
public class SiteService : ISiteService {
private readonly IRepository<SiteSettingsRecord> _siteSettingsRepository;
private readonly IModelManager _modelManager;
private readonly IContentManager _contentManager;
public SiteService(IRepository<SiteSettingsRecord> siteSettingsRepository, IModelManager modelManager) {
public SiteService(IRepository<SiteSettingsRecord> 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>();
SiteModel site = _contentManager.New("site").As<SiteModel>();
site.Record.SiteUrl = applicationName;
_modelManager.Create(site);
_contentManager.Create(site);
return site;
}
return _modelManager.Get(record.Id).As<ISite>();
return _contentManager.Get(record.Id).As<ISite>();
}
#endregion

View File

@@ -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<UserRolesModel>();
var userRoles = context.ContentItem.As<UserRolesModel>();
if (userRoles != null) {
}
}
protected override void Loading(LoadModelContext context) {
var userRoles = context.Instance.As<UserRolesModel>();
var userRoles = context.ContentItem.As<UserRolesModel>();
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<UserRolesModel>();
var userRoles = context.ContentItem.As<UserRolesModel>();
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<UserRolesModel>();
var userRoles = context.ContentItem.As<UserRolesModel>();
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<IUser>().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))) {

View File

@@ -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<string> Roles { get; }
}
public class UserRolesModel : ModelPart, IUserRoles {
public class UserRolesModel : ContentItemPart, IUserRoles {
public UserRolesModel() {
Roles = new List<string>();
}

View File

@@ -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;

View File

@@ -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<UserRecord> _userRepository;
private readonly INotifier _notifier;
public AdminController(
IMembershipService membershipService,
IModelManager modelManager,
IContentManager contentManager,
IRepository<UserRecord> 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<UserModel>()
User = _contentManager.Get(x.Id).As<UserModel>()
})
.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<UserModel>(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<UserModel>(id) };
model.Editors = _contentManager.UpdateEditors(model.User.ContentItem, this);
if (!TryUpdateModel(model, input.ToValueProvider())) {
return View(model);

View File

@@ -2,8 +2,19 @@
using Orchard.Security;
namespace Orchard.Users.Models {
public sealed class UserModel : ModelPartWithRecord<UserRecord>, IUser {
string IUser.UserName {get { return Record.UserName; }}
string IUser.Email {get { return Record.Email; }}
public sealed class UserModel : ContentItemPartWithRecord<UserRecord>, 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; }
}
}
}

View File

@@ -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; }

View File

@@ -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<UserRecord> _userRepository;
public MembershipService(IModelManager modelManager, IRepository<UserRecord> userRepository) {
_modelManager = modelManager;
public MembershipService(IContentManager contentManager, IRepository<UserRecord> 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<UserModel>().Record = record;
_modelManager.Create(user);
_contentManager.Create(user);
return user.As<IUser>();
}
@@ -47,7 +47,7 @@ namespace Orchard.Users.Services {
if (userRecord == null) {
return null;
}
return _modelManager.Get(userRecord.Id).As<IUser>();
return _contentManager.Get(userRecord.Id).As<IUser>();
}
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<IUser>();
return _contentManager.Get(userRecord.Id).As<IUser>();
}

View File

@@ -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<ModelTemplate> Editors { get; set; }
[HiddenInput(DisplayValue = false)]

View File

@@ -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<CommonModel>();
var page = _contentManager.Get(id).As<CommonModel>();
return View(page);
}
}

View File

@@ -6,10 +6,10 @@ using Orchard.Models.Records;
using Orchard.UI.Models;
namespace Orchard.Wikis.Models {
public class WikiSettings : ModelPartWithRecord<WikiSettingsRecord> {
public class WikiSettings : ContentItemPartWithRecord<WikiSettingsRecord> {
}
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<WikiSettings>();
var model = context.ContentItem.As<WikiSettings>();
if (model == null)
return;
@@ -34,7 +34,7 @@ namespace Orchard.Wikis.Models {
}
protected override void UpdateEditors(UpdateModelContext context) {
var model = context.Instance.As<WikiSettings>();
var model = context.ContentItem.As<WikiSettings>();
if (model == null)
return;

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -0,0 +1,50 @@
using System;
namespace Orchard.Models {
public static class ContentExtensions {
public static T New<T>(this IContentManager manager, string contentType) where T : class, IContentItemPart {
var contentItem = manager.New(contentType);
if (contentItem == null)
return null;
var part = contentItem.Get<T>();
if (part == null)
throw new InvalidCastException();
return part;
}
public static T Get<T>(this IContentManager manager, int id) where T : class, IContentItemPart {
return manager.Get(id).Get<T>();
}
public static void Create(this IContentManager manager, IContentItemPart part) {
manager.Create(part.ContentItem);
}
public static bool Has<T>(this IContentItemPart part) {
return part.ContentItem.Has<T>();
}
public static T Get<T>(this IContentItemPart part) {
return part.ContentItem.Get<T>();
}
public static bool Is<T>(this IContentItemPart part) {
return part.ContentItem.Has<T>();
}
public static T As<T>(this IContentItemPart part) {
return part.ContentItem.Get<T>();
}
public static bool Is<T>(this ContentItem contentItem) {
return contentItem.Has<T>();
}
public static T As<T>(this ContentItem contentItem) {
return contentItem.Get<T>();
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Orchard.Models {
public class ContentItem {
public ContentItem() {
_parts = new List<IContentItemPart>();
}
private readonly IList<IContentItemPart> _parts;
public int Id { get; set; }
public string ContentType { get; set; }
public bool Has<TPart>() {
return _parts.Any(part => part is TPart);
}
public TPart Get<TPart>() {
return _parts.OfType<TPart>().FirstOrDefault();
}
public void Weld(IContentItemPart part) {
part.ContentItem = this;
_parts.Add(part);
}
}
public abstract class ContentItemPart : IContentItemPart {
public ContentItem ContentItem { get; set; }
}
}

View File

@@ -0,0 +1,5 @@
namespace Orchard.Models {
public abstract class ContentItemPartWithRecord<TRecord> : ContentItemPart {
public TRecord Record { get; set; }
}
}

View File

@@ -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<ModelRecord> _modelRepository;
private readonly IRepository<ModelTypeRecord> _modelTypeRepository;
private readonly IRepository<ContentItemRecord> _contentItemRepository;
private readonly IRepository<ContentTypeRecord> _contentTypeRepository;
public DefaultModelManager(
public DefaultContentManager(
IContext context,
IRepository<ModelRecord> modelRepository,
IRepository<ModelTypeRecord> modelTypeRepository) {
IRepository<ContentItemRecord> contentItemRepository,
IRepository<ContentTypeRecord> contentTypeRepository) {
_context = context;
_modelRepository = modelRepository;
_modelTypeRepository = modelTypeRepository;
_contentItemRepository = contentItemRepository;
_contentTypeRepository = contentTypeRepository;
}
private IEnumerable<IModelDriver> _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<ModelRoot>().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<ModelRoot>().Welded
ModelType = modelRecord.ContentType.Name,
ContentItemRecord = modelRecord,
ContentItem = contentItem
};
// set the id
context.Instance.As<ModelRoot>().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<ModelTemplate> GetEditors(IModel model) {
var context = new GetModelEditorsContext(model);
public IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem) {
var context = new GetModelEditorsContext(contentItem);
foreach (var driver in Drivers) {
driver.GetEditors(context);
}
return context.Editors;
}
public IEnumerable<ModelTemplate> UpdateEditors(IModel model, IModelUpdater updater) {
var context = new UpdateModelContext(model, updater);
public IEnumerable<ModelTemplate> 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;
}

View File

@@ -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; }
}
}

View File

@@ -2,7 +2,7 @@ using System;
using System.Linq;
namespace Orchard.Models.Driver {
public class ActivatingFilter<TPart> : IModelActivatingFilter where TPart : class, IModel, new() {
public class ActivatingFilter<TPart> : IModelActivatingFilter where TPart : class, IContentItemPart, new() {
private readonly Func<string, bool> _predicate;
public ActivatingFilter(Func<string, bool> predicate) {

View File

@@ -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; }
}
}

View File

@@ -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<TPart>() where TPart : class, IContentItemPart, new() {
var part = new TPart();
_item.Weld(part);
return this;
}
}
}

View File

@@ -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; }
}
}

View File

@@ -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<ModelTemplate>();
}
public IModel Instance { get; set; }
public ContentItem ContentItem { get; set; }
public IList<ModelTemplate> Editors { get; set; }
}
}

View File

@@ -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; }
}
}

View File

@@ -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<TPart>() where TPart : class, IModel, new() {
var part = new TPart();
part.Weld(_instance);
_instance = part;
return this;
}
}
}

View File

@@ -13,17 +13,17 @@ namespace Orchard.Models.Driver {
public List<IModelFilter> Filters { get; set; }
public ILogger Logger { get; set; }
public void AddOnActivated<TPart>(Action<ActivatedModelContext, TPart> handler) where TPart : class, IModel {
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, IModel {
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, IModel {
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, IModel {
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; }

View File

@@ -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; }
}
}

View File

@@ -1,5 +1,5 @@
namespace Orchard.Models.Driver {
public abstract class StorageFilterBase<TPart> : IModelStorageFilter where TPart : class, IModel {
public abstract class StorageFilterBase<TPart> : 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<TPart>())
Activated(context, context.Instance.As<TPart>());
if (context.ContentItem.Is<TPart>())
Activated(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Creating(CreateModelContext context) {
if (context.Instance.Is<TPart>())
Creating(context, context.Instance.As<TPart>());
if (context.ContentItem.Is<TPart>())
Creating(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Created(CreateModelContext context) {
if (context.Instance.Is<TPart>())
Created(context, context.Instance.As<TPart>());
if (context.ContentItem.Is<TPart>())
Created(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Loading(LoadModelContext context) {
if (context.Instance.Is<TPart>())
Loading(context, context.Instance.As<TPart>());
if (context.ContentItem.Is<TPart>())
Loading(context, context.ContentItem.As<TPart>());
}
void IModelStorageFilter.Loaded(LoadModelContext context) {
if (context.Instance.Is<TPart>())
Loaded(context, context.Instance.As<TPart>());
if (context.ContentItem.Is<TPart>())
Loaded(context, context.ContentItem.As<TPart>());
}
}
}

View File

@@ -2,7 +2,7 @@ using Orchard.Data;
using Orchard.Models.Records;
namespace Orchard.Models.Driver {
public class StorageFilterForRecord<TRecord> : StorageFilterBase<ModelPartWithRecord<TRecord>> where TRecord : ModelPartRecord,new() {
public class StorageFilterForRecord<TRecord> : StorageFilterBase<ContentItemPartWithRecord<TRecord>> where TRecord : ContentPartRecordBase,new() {
private readonly IRepository<TRecord> _repository;
public StorageFilterForRecord(IRepository<TRecord> repository) {
@@ -11,19 +11,19 @@ namespace Orchard.Models.Driver {
public bool AutomaticallyCreateMissingRecord { get; set; }
protected override void Activated(ActivatedModelContext context, ModelPartWithRecord<TRecord> instance) {
protected override void Activated(ActivatedModelContext context, ContentItemPartWithRecord<TRecord> instance) {
instance.Record = new TRecord();
}
protected override void Creating(CreateModelContext context, ModelPartWithRecord<TRecord> instance) {
instance.Record.Model = context.ModelRecord;
protected override void Creating(CreateModelContext context, ContentItemPartWithRecord<TRecord> instance) {
instance.Record.ContentItem = context.ContentItemRecord;
_repository.Create(instance.Record);
}
protected override void Loading(LoadModelContext context, ModelPartWithRecord<TRecord> instance) {
instance.Record = _repository.Get(instance.Id);
protected override void Loading(LoadModelContext context, ContentItemPartWithRecord<TRecord> 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);
}
}

View File

@@ -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;
}

View File

@@ -0,0 +1,12 @@
namespace Orchard.Models {
public interface IContentItemPart {
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);
}
}

View File

@@ -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<ModelTemplate> GetEditors(ContentItem contentItem);
IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IModelUpdater updater);
}
}

View File

@@ -1,11 +0,0 @@
namespace Orchard.Models {
public interface IModel {
int Id { get; }
string ModelType { get; }
bool Is<T>() where T : class, IModel;
T As<T>() where T : class, IModel;
void Weld(IModel model);
}
}

View File

@@ -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<ModelTemplate> GetEditors(IModel model);
IEnumerable<ModelTemplate> UpdateEditors(IModel model, IModelUpdater updater);
}
}

View File

@@ -1,13 +0,0 @@
using System;
namespace Orchard.Models {
public static class ModelExtensions {
public static T New<T>(this IModelManager manager, string modelType) where T : class, IModel {
var t = manager.New(modelType).As<T>();
if (t == null)
throw new InvalidCastException();
return t;
}
}
}

View File

@@ -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<ModelRoot>();
Root.Welded = this;
}
public int Id { get { return Root.Id; } }
public string ModelType { get { return Root.ModelType; } }
bool IModel.Is<T>() {
return this is T ? true : Next.Is<T>();
}
T IModel.As<T>() {
return this is T ? this as T : Next.As<T>();
}
public bool Is<T>() where T : class, IModel {
return Root.WeldedIs<T>();
}
public T As<T>() where T : class, IModel {
return Root.WeldedAs<T>();
}
}
}

View File

@@ -1,5 +0,0 @@
namespace Orchard.Models {
public abstract class ModelPartWithRecord<TRecord> : ModelPart {
public TRecord Record { get; set; }
}
}

View File

@@ -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<T>() {
return this is T;
}
T IModel.As<T>() {
return this as T;
}
public bool WeldedIs<T>() where T : class, IModel {
return Welded.Is<T>();
}
public T WeldedAs<T>() where T : class, IModel {
return Welded.As<T>();
}
void IModel.Weld(IModel model) {
// this method is not called on root
}
}
}

View File

@@ -0,0 +1,6 @@
namespace Orchard.Models.Records {
public class ContentItemRecord {
public virtual int Id { get; set; }
public virtual ContentTypeRecord ContentType { get; set; }
}
}

View File

@@ -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<T> : IAlteration where T : ContentPartRecordBase {
public void Override(object o) {
var mapping = (AutoMapping<T>)o;
mapping.Id(x => x.Id).GeneratedBy.Foreign("ContentItem");
mapping.HasOne(x => x.ContentItem);
}
}
}
}

View File

@@ -0,0 +1,6 @@
namespace Orchard.Models.Records {
public class ContentTypeRecord {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
}

View File

@@ -139,25 +139,25 @@
<Compile Include="Logging\LoggingModule.cs" />
<Compile Include="Logging\NullLogger.cs" />
<Compile Include="Logging\NullLoggerFactory.cs" />
<Compile Include="Models\DefaultModelManager.cs" />
<Compile Include="Models\DefaultContentManager.cs" />
<Compile Include="Models\Driver\CreateModelContext.cs" />
<Compile Include="Models\Driver\LoadModelContext.cs" />
<Compile Include="Models\Driver\ModelBuilder.cs" />
<Compile Include="Models\Driver\ContentItemBuilder.cs" />
<Compile Include="Models\Driver\ModelDriver.cs" />
<Compile Include="Models\Driver\ActivatingModelContext.cs" />
<Compile Include="Models\Driver\GetModelEditorsContext.cs" />
<Compile Include="Models\Driver\StorageFilterForRecord.cs" />
<Compile Include="Models\Driver\StorageFilterBase.cs" />
<Compile Include="Models\IModelManager.cs" />
<Compile Include="Models\IContentManager.cs" />
<Compile Include="Models\Driver\IModelDriver.cs" />
<Compile Include="Models\IModel.cs" />
<Compile Include="Models\ModelExtensions.cs" />
<Compile Include="Models\ModelPart.cs" />
<Compile Include="Models\ModelPartWithRecord.cs" />
<Compile Include="Models\ContentExtensions.cs" />
<Compile Include="Models\ContentItemPart.cs" />
<Compile Include="Models\IContentItemPart.cs" />
<Compile Include="Models\ContentItemPartWithRecord.cs" />
<Compile Include="Models\ModelRoot.cs" />
<Compile Include="Models\Records\ModelPartRecord.cs" />
<Compile Include="Models\Records\ModelTypeRecord.cs" />
<Compile Include="Models\Records\ModelRecord.cs" />
<Compile Include="Models\Records\ContentPartRecordBase.cs" />
<Compile Include="Models\Records\ContentTypeRecord.cs" />
<Compile Include="Models\Records\ContentItemRecord.cs" />
<Compile Include="Models\Driver\UpdateModelContext.cs" />
<Compile Include="Mvc\Html\HtmlHelperExtensions.cs" />
<Compile Include="Mvc\Filters\FilterProvider.cs" />

View File

@@ -4,7 +4,8 @@ namespace Orchard.Security {
/// <summary>
/// Interface provided by the "user" model.
/// </summary>
public interface IUser : IModel {
public interface IUser : IContentItemPart {
int Id { get; }
string UserName { get; }
string Email { get; }
}

View File

@@ -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<IUser>();
return _contentManager.Get(userId).As<IUser>();
}
}
}

View File

@@ -4,7 +4,7 @@ namespace Orchard.Settings {
/// <summary>
/// Interface provided by the "settings" model.
/// </summary>
public interface ISite : IModel {
public interface ISite : IContentItemPart {
string SiteName { get; }
string SuperUser { get; }
}