mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-11-09 19:14:48 +08:00
Adding simple package.txt manifest files. Adding user record/model/driver to package. Wiring create user in through asp.net membership provider.
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4039401
This commit is contained in:
@@ -28,7 +28,8 @@ namespace Orchard.Tests {
|
|||||||
private static void AddAlterations(AutoMappingAlterationCollection alterations, Type[] types) {
|
private static void AddAlterations(AutoMappingAlterationCollection alterations, Type[] types) {
|
||||||
foreach (var assembly in types.Select(t => t.Assembly).Distinct()) {
|
foreach (var assembly in types.Select(t => t.Assembly).Distinct()) {
|
||||||
alterations.Add(new AutoMappingOverrideAlteration(assembly));
|
alterations.Add(new AutoMappingOverrideAlteration(assembly));
|
||||||
}
|
}
|
||||||
|
alterations.AddFromAssemblyOf<DataModule>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ISessionFactory CreateSessionFactory(params Type[] types) {
|
public static ISessionFactory CreateSessionFactory(params Type[] types) {
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ namespace Orchard.Tests.Models {
|
|||||||
var databaseFileName = System.IO.Path.GetTempFileName();
|
var databaseFileName = System.IO.Path.GetTempFileName();
|
||||||
_sessionFactory = DataUtility.CreateSessionFactory(
|
_sessionFactory = DataUtility.CreateSessionFactory(
|
||||||
databaseFileName,
|
databaseFileName,
|
||||||
|
typeof(GammaRecord),
|
||||||
typeof(ModelRecord),
|
typeof(ModelRecord),
|
||||||
typeof(ModelTypeRecord),
|
typeof(ModelTypeRecord));
|
||||||
typeof(GammaRecord));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestFixtureTearDown]
|
[TestFixtureTearDown]
|
||||||
@@ -111,6 +111,8 @@ namespace Orchard.Tests.Models {
|
|||||||
[Test]
|
[Test]
|
||||||
public void ModelPartWithRecordShouldCallRepositoryToPopulate() {
|
public void ModelPartWithRecordShouldCallRepositoryToPopulate() {
|
||||||
|
|
||||||
|
CreateModelRecord("gamma");
|
||||||
|
CreateModelRecord("gamma");
|
||||||
var modelRecord = CreateModelRecord("gamma");
|
var modelRecord = CreateModelRecord("gamma");
|
||||||
|
|
||||||
var model = _manager.Get(modelRecord.Id);
|
var model = _manager.Get(modelRecord.Id);
|
||||||
|
|||||||
@@ -7,27 +7,21 @@ using Orchard.Models.Driver;
|
|||||||
using Orchard.Models.Records;
|
using Orchard.Models.Records;
|
||||||
|
|
||||||
namespace Orchard.Tests.Models.Stubs {
|
namespace Orchard.Tests.Models.Stubs {
|
||||||
public class Gamma : ModelPart<GammaRecord> {
|
public class Gamma : ModelPartWithRecord<GammaRecord> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GammaRecord {
|
public class GammaRecord : ModelPartRecord {
|
||||||
public virtual int Id { get; set; }
|
|
||||||
public virtual ModelRecord Model { get; set; }
|
|
||||||
public virtual string Frap { get; set; }
|
public virtual string Frap { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GammaRecordOverride : IAutoMappingOverride<GammaRecord> {
|
|
||||||
public void Override(AutoMapping<GammaRecord> mapping) {
|
|
||||||
mapping.HasOne(x => x.Model);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class GammaDriver : ModelDriver<GammaRecord> {
|
public class GammaDriver : ModelDriverWithRecord<GammaRecord> {
|
||||||
public GammaDriver(IRepository<GammaRecord> repository) : base(repository) {
|
public GammaDriver(IRepository<GammaRecord> repository)
|
||||||
|
: base(repository) {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void New(NewModelContext context) {
|
protected override void New(NewModelContext context) {
|
||||||
if(context.ModelType == "gamma") {
|
if (context.ModelType == "gamma") {
|
||||||
WeldModelPart<Gamma>(context);
|
WeldModelPart<Gamma>(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
src/Orchard.Web/Packages/Orchard.CmsPages/Package.txt
Normal file
1
src/Orchard.Web/Packages/Orchard.CmsPages/Package.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
name: Pages
|
||||||
1
src/Orchard.Web/Packages/Orchard.Media/Package.txt
Normal file
1
src/Orchard.Web/Packages/Orchard.Media/Package.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
name: Media
|
||||||
@@ -1,7 +1,11 @@
|
|||||||
using Orchard.Models.Driver;
|
using Orchard.Data;
|
||||||
|
using Orchard.Models.Driver;
|
||||||
|
|
||||||
namespace Orchard.Users.Models {
|
namespace Orchard.Users.Models {
|
||||||
public class UserDriver : ModelDriver {
|
public class UserDriver : ModelDriverWithRecord<UserRecord> {
|
||||||
|
public UserDriver(IRepository<UserRecord> repository) : base(repository) {
|
||||||
|
}
|
||||||
|
|
||||||
protected override void New(NewModelContext context) {
|
protected override void New(NewModelContext context) {
|
||||||
if (context.ModelType == "user") {
|
if (context.ModelType == "user") {
|
||||||
WeldModelPart<UserModel>(context);
|
WeldModelPart<UserModel>(context);
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using Orchard.Models;
|
using Orchard.Models;
|
||||||
using Orchard.Security;
|
using Orchard.Security;
|
||||||
|
|
||||||
namespace Orchard.Users.Models {
|
namespace Orchard.Users.Models {
|
||||||
public class UserModel : ModelPart, IUser {
|
public sealed class UserModel : ModelPartWithRecord<UserRecord>, IUser {
|
||||||
public string UserName { get; set; }
|
string IUser.UserName {get { return Record.UserName; }}
|
||||||
|
string IUser.Email {get { return Record.Email; }}
|
||||||
public string Email { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using Orchard.Models.Records;
|
||||||
|
|
||||||
|
namespace Orchard.Users.Models {
|
||||||
|
public class UserRecord : ModelPartRecord {
|
||||||
|
public virtual string UserName { get; set; }
|
||||||
|
public virtual string Email { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -65,6 +65,7 @@
|
|||||||
<Compile Include="Controllers\HomeController.cs" />
|
<Compile Include="Controllers\HomeController.cs" />
|
||||||
<Compile Include="Models\UserModel.cs" />
|
<Compile Include="Models\UserModel.cs" />
|
||||||
<Compile Include="Models\UserDriver.cs" />
|
<Compile Include="Models\UserDriver.cs" />
|
||||||
|
<Compile Include="Models\UserRecord.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Services\MembershipService.cs" />
|
<Compile Include="Services\MembershipService.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
1
src/Orchard.Web/Packages/Orchard.Users/Package.txt
Normal file
1
src/Orchard.Web/Packages/Orchard.Users/Package.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
name: Users
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using Orchard.Logging;
|
||||||
using System.Linq;
|
|
||||||
using System.Web;
|
|
||||||
using Orchard.Models;
|
using Orchard.Models;
|
||||||
using Orchard.Security;
|
using Orchard.Security;
|
||||||
using Orchard.Users.Models;
|
using Orchard.Users.Models;
|
||||||
@@ -12,18 +10,24 @@ namespace Orchard.Users.Services {
|
|||||||
|
|
||||||
public MembershipService(IModelManager modelManager) {
|
public MembershipService(IModelManager modelManager) {
|
||||||
_modelManager = modelManager;
|
_modelManager = modelManager;
|
||||||
|
Logger = NullLogger.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ILogger Logger { get; set; }
|
||||||
|
|
||||||
public void ReadSettings(MembershipSettings settings) {
|
public void ReadSettings(MembershipSettings settings) {
|
||||||
// accepting defaults
|
// accepting defaults
|
||||||
}
|
}
|
||||||
|
|
||||||
public IUser CreateUser(CreateUserParams createUserParams) {
|
public IUser CreateUser(CreateUserParams createUserParams) {
|
||||||
var user = _modelManager.New("user").As<UserModel>();
|
Logger.Information("CreateUser {0} {1}", createUserParams.Username, createUserParams.Email);
|
||||||
user.UserName = createUserParams.Username;
|
var user = _modelManager.New("user");
|
||||||
user.Email = createUserParams.Email;
|
user.As<UserModel>().Record = new UserRecord {
|
||||||
|
UserName = createUserParams.Username,
|
||||||
|
Email = createUserParams.Email
|
||||||
|
};
|
||||||
_modelManager.Create(user);
|
_modelManager.Create(user);
|
||||||
return user;
|
return user.As<IUser>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IUser GetUser(string username) {
|
public IUser GetUser(string username) {
|
||||||
|
|||||||
1
src/Orchard.Web/Packages/Orchard.XmlRpc/Package.txt
Normal file
1
src/Orchard.Web/Packages/Orchard.XmlRpc/Package.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
name: XmlRpc
|
||||||
1
src/Orchard.Web/Packages/TinyMce/Package.txt
Normal file
1
src/Orchard.Web/Packages/TinyMce/Package.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
name: TinyMce
|
||||||
@@ -26,8 +26,10 @@ namespace Orchard.Data {
|
|||||||
var database =
|
var database =
|
||||||
SQLiteConfiguration.Standard.UsingFile(HttpContext.Current.Server.MapPath("~/App_Data/hack.db"));
|
SQLiteConfiguration.Standard.UsingFile(HttpContext.Current.Server.MapPath("~/App_Data/hack.db"));
|
||||||
|
|
||||||
var automaps = new AutoPersistenceModel[] {
|
var automaps = new[] {
|
||||||
CreatePersistenceModel(Assembly.Load("Orchard.CmsPages")),
|
CreatePersistenceModel(Assembly.Load("Orchard.CmsPages")),
|
||||||
|
CreatePersistenceModel(Assembly.Load("Orchard.Users")),
|
||||||
|
CreatePersistenceModel(Assembly.Load("Orchard")),
|
||||||
};
|
};
|
||||||
|
|
||||||
return _sessionFactory ??
|
return _sessionFactory ??
|
||||||
@@ -36,23 +38,32 @@ namespace Orchard.Data {
|
|||||||
Fluently.Configure()
|
Fluently.Configure()
|
||||||
.Database(database)
|
.Database(database)
|
||||||
.Mappings(m => {
|
.Mappings(m => {
|
||||||
foreach (var automap in automaps) {
|
foreach (var automap in automaps) {
|
||||||
m.AutoMappings.Add(automap);
|
m.AutoMappings.Add(automap);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.ExposeConfiguration(
|
.ExposeConfiguration(
|
||||||
c => new SchemaUpdate(c).Execute(false /*script*/, true /*doUpdate*/))
|
c => new SchemaUpdate(c).Execute(false /*script*/, true /*doUpdate*/))
|
||||||
.BuildSessionFactory(), null) ?? _sessionFactory;
|
.BuildSessionFactory(), null) ?? _sessionFactory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private AutoPersistenceModel CreatePersistenceModel(Assembly assembly) {
|
private static AutoPersistenceModel CreatePersistenceModel(Assembly assembly) {
|
||||||
return AutoMap.Assembly(assembly)
|
return AutoMap.Assembly(assembly)
|
||||||
.Where(t => t.Namespace.EndsWith(".Models") && t.GetProperty("Id") != null)
|
.Where(IsModelType)
|
||||||
.Alterations(alt => alt.Add(new AutoMappingOverrideAlteration(assembly)))
|
.Alterations(alt => alt
|
||||||
|
.Add(new AutoMappingOverrideAlteration(assembly))
|
||||||
|
.AddFromAssemblyOf<DataModule>())
|
||||||
.Conventions.AddFromAssemblyOf<DataModule>();
|
.Conventions.AddFromAssemblyOf<DataModule>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsModelType(Type type) {
|
||||||
|
return (type.Namespace.EndsWith(".Models") || type.Namespace.EndsWith(".Records")) &&
|
||||||
|
type.GetProperty("Id") != null &&
|
||||||
|
!type.IsSealed &&
|
||||||
|
!type.IsAbstract;
|
||||||
|
}
|
||||||
|
|
||||||
public ISession For(Type entityType) {
|
public ISession For(Type entityType) {
|
||||||
return _session ?? Interlocked.CompareExchange(ref _session, SessionFactory.OpenSession(), null) ?? _session;
|
return _session ?? Interlocked.CompareExchange(ref _session, SessionFactory.OpenSession(), null) ?? _session;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ namespace Orchard.Models {
|
|||||||
var context = new LoadModelContext {
|
var context = new LoadModelContext {
|
||||||
Id = modelRecord.Id,
|
Id = modelRecord.Id,
|
||||||
ModelType = modelRecord.ModelType.Name,
|
ModelType = modelRecord.ModelType.Name,
|
||||||
|
Record = modelRecord,
|
||||||
Instance = New(modelRecord.ModelType.Name)
|
Instance = New(modelRecord.ModelType.Name)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -60,13 +61,14 @@ namespace Orchard.Models {
|
|||||||
|
|
||||||
public void Create(IModel model) {
|
public void Create(IModel model) {
|
||||||
// produce root record to determine the model id
|
// produce root record to determine the model id
|
||||||
var modelRecord = new ModelRecord {ModelType = AcquireModelTypeRecord(model.ModelType)};
|
var modelRecord = new ModelRecord { ModelType = AcquireModelTypeRecord(model.ModelType) };
|
||||||
_modelRepository.Create(modelRecord);
|
_modelRepository.Create(modelRecord);
|
||||||
|
|
||||||
// build a context with the initialized instance to create
|
// build a context with the initialized instance to create
|
||||||
var context = new CreateModelContext {
|
var context = new CreateModelContext {
|
||||||
Id = modelRecord.Id,
|
Id = modelRecord.Id,
|
||||||
ModelType = modelRecord.ModelType.Name,
|
ModelType = modelRecord.ModelType.Name,
|
||||||
|
Record = modelRecord,
|
||||||
Instance = model.As<ModelRoot>().Welded
|
Instance = model.As<ModelRoot>().Welded
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -84,7 +86,7 @@ namespace Orchard.Models {
|
|||||||
var modelTypeRecord = _modelTypeRepository.Get(x => x.Name == modelType);
|
var modelTypeRecord = _modelTypeRepository.Get(x => x.Name == modelType);
|
||||||
if (modelTypeRecord == null) {
|
if (modelTypeRecord == null) {
|
||||||
//TEMP: this is not safe... Model types could be created concurrently?
|
//TEMP: this is not safe... Model types could be created concurrently?
|
||||||
modelTypeRecord = new ModelTypeRecord {Name = modelType};
|
modelTypeRecord = new ModelTypeRecord { Name = modelType };
|
||||||
_modelTypeRepository.Create(modelTypeRecord);
|
_modelTypeRepository.Create(modelTypeRecord);
|
||||||
}
|
}
|
||||||
return modelTypeRecord;
|
return modelTypeRecord;
|
||||||
|
|||||||
10
src/Orchard/Models/Driver/CreateModelContext.cs
Normal file
10
src/Orchard/Models/Driver/CreateModelContext.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using Orchard.Models.Records;
|
||||||
|
|
||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public class CreateModelContext {
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string ModelType { get; set; }
|
||||||
|
public ModelRecord Record { get; set; }
|
||||||
|
public IModel Instance { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
11
src/Orchard/Models/Driver/LoadModelContext.cs
Normal file
11
src/Orchard/Models/Driver/LoadModelContext.cs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
using Orchard.Models.Records;
|
||||||
|
|
||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public class LoadModelContext {
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string ModelType { get; set; }
|
||||||
|
public ModelRecord Record { get; set; }
|
||||||
|
public IModel Instance { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using Orchard.Data;
|
|
||||||
using Orchard.Logging;
|
using Orchard.Logging;
|
||||||
|
|
||||||
namespace Orchard.Models.Driver {
|
namespace Orchard.Models.Driver {
|
||||||
public class ModelDriver : IModelDriver {
|
public abstract class ModelDriver : IModelDriver {
|
||||||
protected ModelDriver() {
|
protected ModelDriver() {
|
||||||
Logger = NullLogger.Instance;
|
Logger = NullLogger.Instance;
|
||||||
}
|
}
|
||||||
@@ -29,20 +28,4 @@ namespace Orchard.Models.Driver {
|
|||||||
context.Instance = newPart;
|
context.Instance = newPart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ModelDriver<TRecord> : ModelDriver {
|
|
||||||
private readonly IRepository<TRecord> _repository;
|
|
||||||
|
|
||||||
public ModelDriver(IRepository<TRecord> repository) {
|
|
||||||
_repository = repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Load(LoadModelContext context) {
|
|
||||||
var instance = context.Instance.As<ModelPart<TRecord>>();
|
|
||||||
if (instance != null)
|
|
||||||
instance.Record = _repository.Get(context.Id);
|
|
||||||
|
|
||||||
base.Load(context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
28
src/Orchard/Models/Driver/ModelDriverWithRecord.cs
Normal file
28
src/Orchard/Models/Driver/ModelDriverWithRecord.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using Orchard.Data;
|
||||||
|
using Orchard.Models.Records;
|
||||||
|
|
||||||
|
namespace Orchard.Models.Driver {
|
||||||
|
public abstract class ModelDriverWithRecord<TRecord> : ModelDriver where TRecord : ModelPartRecord {
|
||||||
|
private readonly IRepository<TRecord> _repository;
|
||||||
|
|
||||||
|
public ModelDriverWithRecord(IRepository<TRecord> repository) {
|
||||||
|
_repository = repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Create(CreateModelContext context) {
|
||||||
|
var instance = context.Instance.As<ModelPartWithRecord<TRecord>>();
|
||||||
|
if (instance != null && instance.Record != null) {
|
||||||
|
instance.Record.Model = context.Record;
|
||||||
|
_repository.Create(instance.Record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Load(LoadModelContext context) {
|
||||||
|
var instance = context.Instance.As<ModelPartWithRecord<TRecord>>();
|
||||||
|
if (instance != null) {
|
||||||
|
instance.Record = _repository.Get(context.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,14 +3,4 @@ namespace Orchard.Models.Driver {
|
|||||||
public string ModelType { get; set; }
|
public string ModelType { get; set; }
|
||||||
public IModel Instance { get; set; }
|
public IModel Instance { get; set; }
|
||||||
}
|
}
|
||||||
public class LoadModelContext {
|
|
||||||
public int Id { get; set; }
|
|
||||||
public string ModelType { get; set; }
|
|
||||||
public IModel Instance { get; set; }
|
|
||||||
}
|
|
||||||
public class CreateModelContext {
|
|
||||||
public int Id { get; set; }
|
|
||||||
public string ModelType { get; set; }
|
|
||||||
public IModel Instance { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Orchard.Security;
|
using Orchard.Security;
|
||||||
|
|
||||||
namespace Orchard.Models {
|
namespace Orchard.Models {
|
||||||
public interface IModelManager {
|
public interface IModelManager : IDependency {
|
||||||
IModel New(string modelType);
|
IModel New(string modelType);
|
||||||
IModel Get(int id);
|
IModel Get(int id);
|
||||||
void Create(IModel model);
|
void Create(IModel model);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Orchard.Models {
|
namespace Orchard.Models {
|
||||||
public class ModelPart : IModel {
|
public abstract class ModelPart : IModel {
|
||||||
protected IModel Next { get; set; }
|
protected IModel Next { get; set; }
|
||||||
protected ModelRoot Root { get; set; }
|
protected ModelRoot Root { get; set; }
|
||||||
|
|
||||||
@@ -30,14 +30,4 @@ namespace Orchard.Models {
|
|||||||
return Root.WeldedAs<T>();
|
return Root.WeldedAs<T>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ModelPart<TRecord> : ModelPart {
|
|
||||||
private TRecord _record;
|
|
||||||
|
|
||||||
public TRecord Record {
|
|
||||||
get { return _record; }
|
|
||||||
set {_record = value;}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
5
src/Orchard/Models/ModelPartWithRecord.cs
Normal file
5
src/Orchard/Models/ModelPartWithRecord.cs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
namespace Orchard.Models {
|
||||||
|
public abstract class ModelPartWithRecord<TRecord> : ModelPart {
|
||||||
|
public TRecord Record { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Orchard.Models {
|
namespace Orchard.Models {
|
||||||
public class ModelRoot : IModel {
|
public sealed class ModelRoot : IModel {
|
||||||
public ModelRoot(string modelType) {
|
public ModelRoot(string modelType) {
|
||||||
Welded = this;
|
Welded = this;
|
||||||
ModelType = modelType;
|
ModelType = modelType;
|
||||||
|
|||||||
42
src/Orchard/Models/Records/ModelPartRecord.cs
Normal file
42
src/Orchard/Models/Records/ModelPartRecord.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using FluentNHibernate.Automapping;
|
||||||
|
using FluentNHibernate.Automapping.Alterations;
|
||||||
|
|
||||||
|
namespace Orchard.Models.Records {
|
||||||
|
public abstract class ModelPartRecord {
|
||||||
|
public virtual int Id { get; set; }
|
||||||
|
public virtual ModelRecord Model { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class ModelPartRecordAlteration : IAutoMappingAlteration {
|
||||||
|
public void Alter(AutoPersistenceModel model) {
|
||||||
|
|
||||||
|
model.OverrideAll(mapping => {
|
||||||
|
var genericArguments = mapping.GetType().GetGenericArguments();
|
||||||
|
if (!genericArguments.Single().IsSubclassOf(typeof(ModelPartRecord))) {
|
||||||
|
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 : ModelPartRecord {
|
||||||
|
public void Override(object o) {
|
||||||
|
var mapping = (AutoMapping<T>)o;
|
||||||
|
mapping.Id(x => x.Id).GeneratedBy.Foreign("Model");
|
||||||
|
mapping.HasOne(x => x.Model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -131,14 +131,19 @@
|
|||||||
<Compile Include="Logging\NullLogger.cs" />
|
<Compile Include="Logging\NullLogger.cs" />
|
||||||
<Compile Include="Logging\NullLoggerFactory.cs" />
|
<Compile Include="Logging\NullLoggerFactory.cs" />
|
||||||
<Compile Include="Models\DefaultModelManager.cs" />
|
<Compile Include="Models\DefaultModelManager.cs" />
|
||||||
|
<Compile Include="Models\Driver\CreateModelContext.cs" />
|
||||||
|
<Compile Include="Models\Driver\LoadModelContext.cs" />
|
||||||
<Compile Include="Models\Driver\ModelDriver.cs" />
|
<Compile Include="Models\Driver\ModelDriver.cs" />
|
||||||
|
<Compile Include="Models\Driver\ModelDriverWithRecord.cs" />
|
||||||
<Compile Include="Models\Driver\NewModelContext.cs" />
|
<Compile Include="Models\Driver\NewModelContext.cs" />
|
||||||
<Compile Include="Models\IModelManager.cs" />
|
<Compile Include="Models\IModelManager.cs" />
|
||||||
<Compile Include="Models\Driver\IModelDriver.cs" />
|
<Compile Include="Models\Driver\IModelDriver.cs" />
|
||||||
<Compile Include="Models\IModel.cs" />
|
<Compile Include="Models\IModel.cs" />
|
||||||
<Compile Include="Models\ModelExtensions.cs" />
|
<Compile Include="Models\ModelExtensions.cs" />
|
||||||
<Compile Include="Models\ModelPart.cs" />
|
<Compile Include="Models\ModelPart.cs" />
|
||||||
|
<Compile Include="Models\ModelPartWithRecord.cs" />
|
||||||
<Compile Include="Models\ModelRoot.cs" />
|
<Compile Include="Models\ModelRoot.cs" />
|
||||||
|
<Compile Include="Models\Records\ModelPartRecord.cs" />
|
||||||
<Compile Include="Models\Records\ModelTypeRecord.cs" />
|
<Compile Include="Models\Records\ModelTypeRecord.cs" />
|
||||||
<Compile Include="Models\Records\ModelRecord.cs" />
|
<Compile Include="Models\Records\ModelRecord.cs" />
|
||||||
<Compile Include="Mvc\Html\HtmlHelperExtensions.cs" />
|
<Compile Include="Mvc\Html\HtmlHelperExtensions.cs" />
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ namespace Orchard.Security.Providers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override bool ValidateUser(string username, string password) {
|
public override bool ValidateUser(string username, string password) {
|
||||||
throw new NotImplementedException();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool UnlockUser(string userName) {
|
public override bool UnlockUser(string userName) {
|
||||||
|
|||||||
Reference in New Issue
Block a user