diff --git a/src/Orchard.Web/Orchard.Web.csproj b/src/Orchard.Web/Orchard.Web.csproj index e8718224a..bbdcb30e6 100644 --- a/src/Orchard.Web/Orchard.Web.csproj +++ b/src/Orchard.Web/Orchard.Web.csproj @@ -165,6 +165,7 @@ + diff --git a/src/Orchard.Web/Packages/Orchard.Roles/ViewModels/UserRolesViewModel.cs b/src/Orchard.Web/Packages/Orchard.Roles/ViewModels/UserRolesViewModel.cs index 399c80fcd..600936fff 100644 --- a/src/Orchard.Web/Packages/Orchard.Roles/ViewModels/UserRolesViewModel.cs +++ b/src/Orchard.Web/Packages/Orchard.Roles/ViewModels/UserRolesViewModel.cs @@ -4,6 +4,10 @@ using Orchard.Security; namespace Orchard.Roles.ViewModels { public class UserRolesViewModel { + public UserRolesViewModel() { + Roles = new List(); + } + public IUser User { get; set; } public IUserRoles UserRoles { get; set; } public IList Roles { get; set; } diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs new file mode 100644 index 000000000..eba3f1449 --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Wikis/Models/WikiSettings.cs @@ -0,0 +1,46 @@ +using System.ComponentModel.DataAnnotations; +using Orchard.Data; +using Orchard.Models; +using Orchard.Models.Driver; +using Orchard.Models.Records; +using Orchard.UI.Models; + +namespace Orchard.Wikis.Models { + public class WikiSettings : ModelPartWithRecord { + } + + public class WikiSettingsRecord : ModelPartRecord { + public virtual bool AllowAnonymousEdits { get; set; } + + [Required] + public virtual string WikiEditTheme { get; set; } + } + + public class WikiSettingsDriver : ModelDriver { + public WikiSettingsDriver(IRepository repository) { + Filters.Add(new ActivatingFilter("site")); + Filters.Add(new StorageFilterForRecord(repository) { AutomaticallyCreateMissingRecord = true }); + + //add to user... just for fun + Filters.Add(new ActivatingFilter("user")); + } + + protected override void GetEditors(GetModelEditorsContext context) { + var model = context.Instance.As(); + if (model == null) + return; + + context.Editors.Add(ModelTemplate.For(model.Record, "WikiSettings")); + } + + protected override void UpdateEditors(UpdateModelContext context) { + var model = context.Instance.As(); + if (model == null) + return; + + context.Updater.TryUpdateModel(model.Record, "WikiSettings", null, null); + context.Editors.Add(ModelTemplate.For(model.Record, "WikiSettings")); + } + } +} + diff --git a/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj b/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj index 98a03ff27..4f54fe3ec 100644 --- a/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj +++ b/src/Orchard.Web/Packages/Orchard.Wikis/Orchard.Wikis.csproj @@ -64,6 +64,7 @@ + diff --git a/src/Orchard.Web/Views/Admin/EditorTemplates/WikiSettingsRecord.ascx b/src/Orchard.Web/Views/Admin/EditorTemplates/WikiSettingsRecord.ascx new file mode 100644 index 000000000..7cb39f823 --- /dev/null +++ b/src/Orchard.Web/Views/Admin/EditorTemplates/WikiSettingsRecord.ascx @@ -0,0 +1,14 @@ +<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> +

Wiki

+
    +
  1. + <%= Html.LabelFor(x=>x.AllowAnonymousEdits) %> + <%= Html.EditorFor(x=>x.AllowAnonymousEdits) %> + <%= Html.ValidationMessage("AllowAnonymousEdits", "*")%> +
  2. +
  3. + <%= Html.LabelFor(x => x.WikiEditTheme)%> + <%= Html.EditorFor(x=>x.WikiEditTheme) %> + <%= Html.ValidationMessage("WikiEditTheme", "*")%> +
  4. +
diff --git a/src/Orchard/Data/HackSessionLocator.cs b/src/Orchard/Data/HackSessionLocator.cs index e1ea6a331..74bc396e8 100644 --- a/src/Orchard/Data/HackSessionLocator.cs +++ b/src/Orchard/Data/HackSessionLocator.cs @@ -30,6 +30,7 @@ namespace Orchard.Data { CreatePersistenceModel(Assembly.Load("Orchard.Roles")), CreatePersistenceModel(Assembly.Load("Orchard")), CreatePersistenceModel(Assembly.Load("Orchard.Core")), + CreatePersistenceModel(Assembly.Load("Orchard.Wikis")), }; return _sessionFactory ?? diff --git a/src/Orchard/Models/DefaultModelManager.cs b/src/Orchard/Models/DefaultModelManager.cs index b4599b514..71b2c7421 100644 --- a/src/Orchard/Models/DefaultModelManager.cs +++ b/src/Orchard/Models/DefaultModelManager.cs @@ -63,7 +63,7 @@ namespace Orchard.Models { var context = new LoadModelContext { Id = modelRecord.Id, ModelType = modelRecord.ModelType.Name, - Record = modelRecord, + ModelRecord = modelRecord, Instance = New(modelRecord.ModelType.Name) }; @@ -90,7 +90,7 @@ namespace Orchard.Models { var context = new CreateModelContext { Id = modelRecord.Id, ModelType = modelRecord.ModelType.Name, - Record = modelRecord, + ModelRecord = modelRecord, Instance = model.As().Welded }; diff --git a/src/Orchard/Models/Driver/ActivatingModelContext.cs b/src/Orchard/Models/Driver/ActivatingModelContext.cs index f166770d5..3d82bdcb4 100644 --- a/src/Orchard/Models/Driver/ActivatingModelContext.cs +++ b/src/Orchard/Models/Driver/ActivatingModelContext.cs @@ -3,8 +3,4 @@ namespace Orchard.Models.Driver { public string ModelType { get; set; } public ModelBuilder Builder { get; set; } } - public class ActivatedModelContext { - public string ModelType { get; set; } - public IModel Instance { get; set; } - } } diff --git a/src/Orchard/Models/Driver/CreateModelContext.cs b/src/Orchard/Models/Driver/CreateModelContext.cs index 9acb9d0df..d95855051 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 Record { get; set; } + public ModelRecord ModelRecord { get; set; } public IModel Instance { 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 268c9730e..c4ae6b3a1 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 Record { get; set; } + public ModelRecord ModelRecord { get; set; } public IModel Instance { get; set; } } } \ No newline at end of file diff --git a/src/Orchard/Models/Driver/StorageFilterForRecord.cs b/src/Orchard/Models/Driver/StorageFilterForRecord.cs index 435a718fb..797767859 100644 --- a/src/Orchard/Models/Driver/StorageFilterForRecord.cs +++ b/src/Orchard/Models/Driver/StorageFilterForRecord.cs @@ -9,17 +9,23 @@ namespace Orchard.Models.Driver { _repository = repository; } + public bool AutomaticallyCreateMissingRecord { get; set; } + protected override void Activated(ActivatedModelContext context, ModelPartWithRecord instance) { instance.Record = new TRecord(); } protected override void Creating(CreateModelContext context, ModelPartWithRecord instance) { - instance.Record.Model = context.Record; + instance.Record.Model = context.ModelRecord; _repository.Create(instance.Record); } protected override void Loading(LoadModelContext context, ModelPartWithRecord instance) { instance.Record = _repository.Get(instance.Id); + if (instance.Record == null && AutomaticallyCreateMissingRecord) { + instance.Record = new TRecord {Model = context.ModelRecord}; + _repository.Create(instance.Record); + } } } } diff --git a/src/Orchard/Models/Driver/UpdateModelContext.cs b/src/Orchard/Models/Driver/UpdateModelContext.cs index 7e7fc0b62..6bd4564f7 100644 --- a/src/Orchard/Models/Driver/UpdateModelContext.cs +++ b/src/Orchard/Models/Driver/UpdateModelContext.cs @@ -1,8 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Web.Mvc; -using Orchard.UI.Models; - namespace Orchard.Models.Driver { public class UpdateModelContext : GetModelEditorsContext { public UpdateModelContext(IModel model, IModelUpdater updater) : base(model) { diff --git a/src/Orchard/Orchard.csproj b/src/Orchard/Orchard.csproj index 351ef5390..3996ef6f5 100644 --- a/src/Orchard/Orchard.csproj +++ b/src/Orchard/Orchard.csproj @@ -124,6 +124,7 @@ +