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
+
+ -
+ <%= Html.LabelFor(x=>x.AllowAnonymousEdits) %>
+ <%= Html.EditorFor(x=>x.AllowAnonymousEdits) %>
+ <%= Html.ValidationMessage("AllowAnonymousEdits", "*")%>
+
+ -
+ <%= Html.LabelFor(x => x.WikiEditTheme)%>
+ <%= Html.EditorFor(x=>x.WikiEditTheme) %>
+ <%= Html.ValidationMessage("WikiEditTheme", "*")%>
+
+
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 @@
+