Another refinement of the content api.

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041636
This commit is contained in:
loudej
2009-11-21 09:17:22 +00:00
parent 4ada0e0996
commit 953c83fe78
67 changed files with 266 additions and 192 deletions

View File

@@ -28,7 +28,7 @@ namespace Orchard.Tests.Packages.Users.Controllers {
builder.Register<AdminController>();
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<MembershipService>().As<IMembershipService>();
builder.Register<UserHandler>().As<IContentHandler>();
builder.Register<UserProvider>().As<IContentProvider>();
builder.Register(new Mock<INotifier>().Object);
}

View File

@@ -58,7 +58,7 @@ namespace Orchard.Tests.Packages.Users.Services {
builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.Register<MembershipService>().As<IMembershipService>();
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<UserHandler>().As<IContentHandler>();
builder.Register<UserProvider>().As<IContentProvider>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
_session = _sessionFactory.OpenSession();
builder.Register(new TestSessionLocator(_session)).As<ISessionLocator>();

View File

@@ -38,11 +38,11 @@ namespace Orchard.Tests.Models {
var builder = new ContainerBuilder();
builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.Register<DefaultContentManager>().As<IContentManager>();
builder.Register<AlphaDriver>().As<IContentHandler>();
builder.Register<BetaDriver>().As<IContentHandler>();
builder.Register<GammaDriver>().As<IContentHandler>();
builder.Register<FlavoredDriver>().As<IContentHandler>();
builder.Register<StyledDriver>().As<IContentHandler>();
builder.Register<AlphaProvider>().As<IContentProvider>();
builder.Register<BetaProvider>().As<IContentProvider>();
builder.Register<GammaProvider>().As<IContentProvider>();
builder.Register<FlavoredProvider>().As<IContentProvider>();
builder.Register<StyledProvider>().As<IContentProvider>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
@@ -102,9 +102,9 @@ namespace Orchard.Tests.Models {
public void GetByIdShouldDetermineTypeAndLoadParts() {
var modelRecord = CreateModelRecord("alpha");
var model = _manager.Get(modelRecord.Id);
Assert.That(model.ContentType, Is.EqualTo("alpha"));
Assert.That(model.Id, Is.EqualTo(modelRecord.Id));
var contentItem = _manager.Get(modelRecord.Id).ContentItem;
Assert.That(contentItem.ContentType, Is.EqualTo("alpha"));
Assert.That(contentItem.Id, Is.EqualTo(modelRecord.Id));
}
@@ -119,7 +119,7 @@ namespace Orchard.Tests.Models {
// create a gamma record
var gamma = new GammaRecord {
ContentItem = _container.Resolve<IRepository<ContentItemRecord>>().Get(model.Id),
ContentItem = _container.Resolve<IRepository<ContentItemRecord>>().Get(model.ContentItem.Id),
Frap = "foo"
};
@@ -130,11 +130,11 @@ namespace Orchard.Tests.Models {
// re-fetch from database
model = _manager.Get(modelRecord.Id);
Assert.That(model.ContentType, Is.EqualTo("gamma"));
Assert.That(model.Id, Is.EqualTo(modelRecord.Id));
Assert.That(model.ContentItem.ContentType, Is.EqualTo("gamma"));
Assert.That(model.ContentItem.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.ContentItem.Id, Is.EqualTo(model.Id));
Assert.That(model.As<Gamma>().Record.ContentItem.Id, Is.EqualTo(model.ContentItem.Id));
}
@@ -143,7 +143,7 @@ namespace Orchard.Tests.Models {
var beta = _manager.New("beta");
_manager.Create(beta);
var modelRecord = _container.Resolve<IRepository<ContentItemRecord>>().Get(beta.Id);
var modelRecord = _container.Resolve<IRepository<ContentItemRecord>>().Get(beta.ContentItem.Id);
Assert.That(modelRecord, Is.Not.Null);
Assert.That(modelRecord.ContentType.Name, Is.EqualTo("beta"));
}

View File

@@ -8,34 +8,34 @@ namespace Orchard.Tests.Models.Drivers {
public class ModelDriverTests {
[Test]
public void ModelDriverShouldUsePersistenceFilterToDelegateCreateAndLoad() {
var modelDriver = new TestModelHandler();
var modelDriver = new TestModelProvider();
var contentItem = new ContentItem();
var part = new TestModelPart();
contentItem.Weld(part);
((IContentHandler)modelDriver).Creating(new CreateContentContext { ContentItem = contentItem });
((IContentProvider)modelDriver).Creating(new CreateContentContext { ContentItem = contentItem });
Assert.That(part.CreatingCalled, Is.True);
}
[Test]
public void PartShouldBeAddedBasedOnSimplePredicate() {
var modelDriver = new TestModelHandler();
var modelDriver = new TestModelProvider();
var builder = new ContentItemBuilder("testing");
((IContentHandler)modelDriver).Activating(new ActivatingContentContext { Builder = builder, ContentType = "testing" });
((IContentProvider)modelDriver).Activating(new ActivatingContentContext { Builder = builder, ContentType = "testing" });
var model = builder.Build();
Assert.That(model.Is<TestModelPart>(), Is.True);
Assert.That(model.As<TestModelPart>(), Is.Not.Null);
}
public class TestModelPart : ContentItemPart {
public class TestModelPart : ContentPart {
public bool CreatingCalled { get; set; }
}
public class TestModelHandler : ContentHandler {
public TestModelHandler() {
public class TestModelProvider : ContentProvider {
public TestModelProvider() {
Filters.Add(new ActivatingFilter<TestModelPart>(x => x == "testing"));
Filters.Add(new TestModelStorageFilter());
}

View File

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

View File

@@ -1,7 +1,7 @@
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class AlphaDriver : ContentHandler {
public class AlphaProvider : ContentProvider {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "alpha") {
context.Builder.Weld<Alpha>();

View File

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

View File

@@ -5,7 +5,7 @@ using System.Text;
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class BetaDriver : ContentHandler {
public class BetaProvider : ContentProvider {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "beta") {
context.Builder.Weld<Beta>();

View File

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

View File

@@ -1,7 +1,7 @@
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class FlavoredDriver : ContentHandler {
public class FlavoredProvider : ContentProvider {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "beta" || context.ContentType == "alpha") {
context.Builder.Weld<Flavored>();

View File

@@ -12,8 +12,8 @@ namespace Orchard.Tests.Models.Stubs {
}
public class GammaDriver : ContentHandler {
public GammaDriver(IRepository<GammaRecord> repository){
public class GammaProvider : ContentProvider {
public GammaProvider(IRepository<GammaRecord> repository){
Filters.Add(new ActivatingFilter<Gamma>(x => x == "gamma"));
Filters.Add(new StorageFilterForRecord<GammaRecord>(repository));
}

View File

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

View File

@@ -1,7 +1,7 @@
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class StyledDriver : ContentHandler {
public class StyledProvider : ContentProvider {
protected override void Activating(ActivatingContentContext context) {
if (context.ContentType == "alpha") {
context.Builder.Weld<Styled>();

View File

@@ -109,14 +109,14 @@
<Compile Include="Models\Drivers\ModelBuilderTests.cs" />
<Compile Include="Models\Drivers\ModelDriverTests.cs" />
<Compile Include="Models\Stubs\Alpha.cs" />
<Compile Include="Models\Stubs\AlphaDriver.cs" />
<Compile Include="Models\Stubs\AlphaProvider.cs" />
<Compile Include="Models\Stubs\Beta.cs" />
<Compile Include="Models\Stubs\BetaDriver.cs" />
<Compile Include="Models\Stubs\BetaProvider.cs" />
<Compile Include="Models\Stubs\Flavored.cs" />
<Compile Include="Models\Stubs\FlavoredDriver.cs" />
<Compile Include="Models\Stubs\FlavoredProvider.cs" />
<Compile Include="Models\Stubs\Gamma.cs" />
<Compile Include="Models\Stubs\Styled.cs" />
<Compile Include="Models\Stubs\StyledDriver.cs" />
<Compile Include="Models\Stubs\StyledProvider.cs" />
<Compile Include="Mvc\ModelBinders\KeyedListModelBinderTests.cs" />
<Compile Include="Mvc\OrchardControllerFactoryTests.cs" />
<Compile Include="Mvc\OrchardControllerIdentificationStrategyTests.cs" />

View File

@@ -1,7 +1,7 @@
using Orchard.Models;
namespace Orchard.Core.Common.Models {
public class ContentPart : ContentItemPart {
public class BodyPart : Orchard.Models.ContentPart {
public string Body { get; set; }
public string Format { get; set; }
}

View File

@@ -1,7 +1,7 @@
using Orchard.Models.Driver;
namespace Orchard.Core.Common.Models {
public class ContentPartHandler : ContentHandler {
public class BodyPartProvider : ContentProvider {
}
}

View File

@@ -6,14 +6,14 @@ using Orchard.Security;
namespace Orchard.Core.Common.Models {
public class CommonPart : ContentPartForRecord<CommonRecord> {
private readonly Lazy<IUser> _owner = new Lazy<IUser>();
private readonly Lazy<ContentItem> _container = new Lazy<ContentItem>();
private readonly Lazy<IContent> _container = new Lazy<IContent>();
public IUser Owner {
get { return _owner.Value; }
set { _owner.Value = value; }
}
public ContentItem Container {
public IContent Container {
get { return _container.Value; }
set { _container.Value = value; }
}
@@ -21,7 +21,7 @@ namespace Orchard.Core.Common.Models {
public void LoadOwner(Func<IUser> loader) {
_owner.Loader(loader);
}
public void LoadContainer(Func<ContentItem> loader) {
public void LoadContainer(Func<IContent> loader) {
_container.Loader(loader);
}
}

View File

@@ -6,12 +6,12 @@ using Orchard.Security;
using Orchard.Services;
namespace Orchard.Core.Common.Models {
public class CommonPartHandler : ContentHandler {
public class CommonPartProvider : ContentProvider {
private readonly IClock _clock;
private readonly IAuthenticationService _authenticationService;
private readonly IContentManager _contentManager;
public CommonPartHandler(
public CommonPartProvider(
IRepository<CommonRecord> repository,
IClock clock,
IAuthenticationService authenticationService,

View File

@@ -3,8 +3,8 @@ using Orchard.Data;
using Orchard.Models.Driver;
namespace Orchard.Core.Common.Models {
public class RoutablePartHandler : Orchard.Models.Driver.ContentHandler {
public RoutablePartHandler(IRepository<RoutableRecord> repository) {
public class RoutablePartProvider : ContentProvider {
public RoutablePartProvider(IRepository<RoutableRecord> repository) {
Filters.Add(new StorageFilterForRecord<RoutableRecord>(repository));
}
}

View File

@@ -61,18 +61,18 @@
<Reference Include="System.Web.Mobile" />
</ItemGroup>
<ItemGroup>
<Compile Include="Common\Models\CommonPartHandler.cs" />
<Compile Include="Common\Models\CommonPartProvider.cs" />
<Compile Include="Common\Models\CommonPart.cs" />
<Compile Include="Common\Models\ContentPartHandler.cs" />
<Compile Include="Common\Models\ContentPart.cs" />
<Compile Include="Common\Models\BodyPartProvider.cs" />
<Compile Include="Common\Models\BodyPart.cs" />
<Compile Include="Common\Models\RoutablePart.cs" />
<Compile Include="Common\Models\RoutablePartHandler.cs" />
<Compile Include="Common\Models\RoutablePartProvider.cs" />
<Compile Include="Common\Records\CommonRecord.cs" />
<Compile Include="Common\Records\RoutableRecord.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Settings\AdminMenu.cs" />
<Compile Include="Settings\Controllers\AdminController.cs" />
<Compile Include="Settings\Models\SiteSettingsHandler.cs" />
<Compile Include="Settings\Models\SiteSettingsProvider.cs" />
<Compile Include="Settings\Models\SiteSettings.cs" />
<Compile Include="Settings\Records\SiteSettingsRecord.cs" />
<Compile Include="Settings\Services\SiteService.cs" />

View File

@@ -3,8 +3,8 @@ using Orchard.Data;
using Orchard.Models.Driver;
namespace Orchard.Core.Settings.Models {
public class SiteSettingsHandler : ContentHandler {
public SiteSettingsHandler(IRepository<SiteSettingsRecord> repository){
public class SiteSettingsProvider : ContentProvider {
public SiteSettingsProvider(IRepository<SiteSettingsRecord> repository){
Filters.Add(new ActivatingFilter<SiteSettings>("site"));
Filters.Add(new StorageFilterForRecord<SiteSettingsRecord>(repository));
}

View File

@@ -2,8 +2,8 @@ using Orchard.Data;
using Orchard.Models.Driver;
namespace Orchard.Blogs.Models {
public class BlogPostHandler : ContentHandler {
public BlogPostHandler(IRepository<BlogPostRecord> repository) {
public class BlogPostProvider : ContentProvider {
public BlogPostProvider(IRepository<BlogPostRecord> repository) {
Filters.Add(new ActivatingFilter<BlogPost>("blogpost"));
Filters.Add(new StorageFilterForRecord<BlogPostRecord>(repository));
}

View File

@@ -2,8 +2,8 @@ using Orchard.Data;
using Orchard.Models.Driver;
namespace Orchard.Blogs.Models {
public class BlogHandler : ContentHandler {
public BlogHandler(IRepository<BlogRecord> repository) {
public class BlogProvider : ContentProvider {
public BlogProvider(IRepository<BlogRecord> repository) {
Filters.Add(new ActivatingFilter<Blog>("blog"));
Filters.Add(new StorageFilterForRecord<BlogRecord>(repository));
}

View File

@@ -68,9 +68,9 @@
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\BlogController.cs" />
<Compile Include="Models\Blog.cs" />
<Compile Include="Models\BlogHandler.cs" />
<Compile Include="Models\BlogProvider.cs" />
<Compile Include="Models\BlogPost.cs" />
<Compile Include="Models\BlogPostHandler.cs" />
<Compile Include="Models\BlogPostProvider.cs" />
<Compile Include="Models\BlogPostRecord.cs" />
<Compile Include="Models\BlogRecord.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@@ -16,9 +16,8 @@ namespace Orchard.Blogs.Services {
public BlogPost Get(Blog blog, string slug) {
BlogPostRecord record = _repository.Get(bpr => bpr.Blog.Id == blog.Record.Id && bpr.Blog.Enabled && bpr.Slug == slug);
ContentItem item = _contentManager.Get(record.Id);
return item != null ? item.As<BlogPost>() : null;
return _contentManager.Get<BlogPost>(record.Id);
}
public IEnumerable<BlogPost> Get(Blog blog) {

View File

@@ -16,9 +16,7 @@ namespace Orchard.Blogs.Services {
public Blog Get(string slug) {
BlogRecord record = _repository.Get(br => br.Slug == slug && br.Enabled);
ContentItem item = _contentManager.Get(record.Id);
return item != null ? item.As<Blog>() : null;
return _contentManager.Get<Blog>(record.Id);
}
public IEnumerable<Blog> Get() {
@@ -31,11 +29,11 @@ namespace Orchard.Blogs.Services {
BlogRecord record = new BlogRecord() {Name = parameters.Name, Slug = parameters.Slug, Enabled = parameters.Enabled};
//TODO: (erikpo) Need an extension method or something for this default behavior
ContentItem contentItem = _contentManager.New("blog");
contentItem.As<Blog>().Record = record;
_contentManager.Create(contentItem);
Blog blog = _contentManager.New<Blog>("blog");
blog.Record = record;
_contentManager.Create(blog);
return contentItem.As<Blog>();
return blog;
}
}
}

View File

@@ -16,8 +16,8 @@ namespace Orchard.Comments.Models {
public virtual string AkismetUrl { get; set; }
}
public class CommentSettingsHandler : ContentHandler {
public CommentSettingsHandler(IRepository<CommentSettingsRecord> repository) {
public class CommentSettingsProvider : ContentProvider {
public CommentSettingsProvider(IRepository<CommentSettingsRecord> repository) {
Filters.Add(new ActivatingFilter<CommentSettings>("site"));
Filters.Add(new StorageFilterForRecord<CommentSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
Filters.Add(new TemplateFilterForRecord<CommentSettingsRecord>("CommentSettings"));

View File

@@ -6,7 +6,7 @@ using Orchard.Models.Driver;
using Orchard.UI.Models;
namespace Orchard.Comments.Models {
public class HasComments : ContentItemPart {
public class HasComments : ContentPart {
public HasComments() {
Comments = new List<Comment>();
}
@@ -14,10 +14,10 @@ namespace Orchard.Comments.Models {
public IEnumerable<Comment> Comments { get; set; }
}
public class HasCommentsHandler : ContentHandler {
public class HasCommentsProvider : ContentProvider {
private readonly IRepository<Comment> _commentsRepository;
public HasCommentsHandler(IRepository<Comment> commentsRepository) {
public HasCommentsProvider(IRepository<Comment> commentsRepository) {
_commentsRepository = commentsRepository;
Filters.Add(new ActivatingFilter<HasComments>("wikipage"));
}

View File

@@ -13,7 +13,7 @@ namespace Orchard.Comments.Services {
IEnumerable<Comment> GetComments();
IEnumerable<Comment> GetComments(CommentStatus status);
Comment GetComment(int id);
IContentItemDisplay GetDisplayForCommentedContent(int id);
IContentDisplayInfo GetDisplayForCommentedContent(int id);
void CreateComment(Comment comment);
void MarkCommentAsSpam(int commentId);
void DeleteComment(int commentId);
@@ -56,8 +56,8 @@ namespace Orchard.Comments.Services {
return _commentRepository.Get(id);
}
public IContentItemDisplay GetDisplayForCommentedContent(int id) {
return _contentManager.Get(id).As<IContentItemDisplay>();
public IContentDisplayInfo GetDisplayForCommentedContent(int id) {
return _contentManager.Get(id).As<IContentDisplayInfo>();
}
public void CreateComment(Comment comment) {

View File

@@ -37,7 +37,7 @@ namespace Orchard.DevTools.Controllers
var model = new ContentDetailsViewModel {
Item = _contentManager.Get(id)
};
model.PartTypes = model.Item.Parts
model.PartTypes = model.Item.ContentItem.Parts
.Select(x => x.GetType())
.SelectMany(x => AllTypes(x))
.Distinct();
@@ -49,7 +49,7 @@ namespace Orchard.DevTools.Controllers
static IEnumerable<Type> AllTypes(Type type) {
var scan = type;
while(scan != null && scan != typeof(Object) && scan != typeof(ContentItemPart)) {
while(scan != null && scan != typeof(Object) && scan != typeof(ContentPart)) {
yield return scan;
scan = scan.BaseType;
}

View File

@@ -2,7 +2,7 @@
using Orchard.UI.Models;
namespace Orchard.DevTools.Models {
public class DebugLinkHandler : ContentHandler {
public class DebugLinkProvider : ContentProvider {
protected override void GetDisplays(GetDisplaysContext context) {
context.Displays.Add(new ModelTemplate { Model = new ShowDebugLink { ContentItem = context.ContentItem } });
}

View File

@@ -64,7 +64,7 @@
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\ContentController.cs" />
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Models\DebugLinkHandler.cs" />
<Compile Include="Models\DebugLinkProvider.cs" />
<Compile Include="Models\ShowDebugLink.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ViewModels\ContentIndexViewModel.cs" />

View File

@@ -9,7 +9,7 @@ using Orchard.UI.Models;
namespace Orchard.DevTools.ViewModels {
public class ContentDetailsViewModel : BaseViewModel {
public ContentItem Item { get; set; }
public IContent Item { get; set; }
public IEnumerable<Type> PartTypes { get; set; }
@@ -18,11 +18,7 @@ namespace Orchard.DevTools.ViewModels {
public IEnumerable<ModelTemplate> Editors { get; set; }
public object Locate(Type type) {
foreach(var part in Item.Parts) {
if (type.IsAssignableFrom(part.GetType()))
return (part);
}
return null;
return Item.ContentItem.Get(type);
}
}
}

View File

@@ -47,8 +47,8 @@
<%=Html.Encode(prop.Name) %>:
<%=Html.Encode(value) %>
<%var valueItem = value as ContentItem;
if (valueItem == null && value is IContentItemPart) {
valueItem = (value as IContentItemPart).ContentItem;
if (valueItem == null && value is IContent) {
valueItem = (value as IContent).ContentItem;
}
if (valueItem != null) {
%><%=Html.ActionLink(valueItem.ContentType + " #" + valueItem.Id, "details", new { valueItem.Id }, new { })%><%

View File

@@ -12,8 +12,8 @@ namespace Orchard.Media.Models {
public virtual string RootMediaFolder { get; set; }
}
public class MediaSettingsHandler : ContentHandler {
public MediaSettingsHandler(IRepository<MediaSettingsRecord> repository) {
public class MediaSettingsProvider : ContentProvider {
public MediaSettingsProvider(IRepository<MediaSettingsRecord> repository) {
Filters.Add(new ActivatingFilter<MediaSettings>("site"));
Filters.Add(new StorageFilterForRecord<MediaSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
}

View File

@@ -2,11 +2,11 @@ using System.Collections.Generic;
using Orchard.Models;
namespace Orchard.Roles.Models.NoRecord {
public interface IUserRoles : IContentItemPart {
public interface IUserRoles : IContent {
IList<string> Roles { get; }
}
public class UserRoles : ContentItemPart, IUserRoles {
public class UserRoles : ContentPart, IUserRoles {
public UserRoles() {
Roles = new List<string>();
}

View File

@@ -11,12 +11,12 @@ using Orchard.UI.Models;
using Orchard.UI.Notify;
namespace Orchard.Roles.Models {
public class UserRolesHandler : ContentHandler {
public class UserRolesProvider : ContentProvider {
private readonly IRepository<UserRolesRecord> _userRolesRepository;
private readonly IRoleService _roleService;
private readonly INotifier _notifier;
public UserRolesHandler(IRepository<UserRolesRecord> userRolesRepository, IRoleService roleService, INotifier notifier) {
public UserRolesProvider(IRepository<UserRolesRecord> userRolesRepository, IRoleService roleService, INotifier notifier) {
_userRolesRepository = userRolesRepository;
_roleService = roleService;
_notifier = notifier;

View File

@@ -66,7 +66,7 @@
<Compile Include="Records\PermissionRecord.cs" />
<Compile Include="Records\RoleRecord.cs" />
<Compile Include="Models\UserRoles.cs" />
<Compile Include="Models\UserRolesHandler.cs" />
<Compile Include="Models\UserRolesProvider.cs" />
<Compile Include="Records\RolesPermissions.cs" />
<Compile Include="Records\UserRolesRecord.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@@ -2,8 +2,8 @@
using Orchard.Models.Driver;
namespace Orchard.Users.Models {
public class UserHandler : ContentHandler {
public UserHandler(IRepository<UserRecord> repository) {
public class UserProvider : ContentProvider {
public UserProvider(IRepository<UserRecord> repository) {
Filters.Add(new ActivatingFilter<User>("user"));
Filters.Add(new StorageFilterForRecord<UserRecord>(repository));
}

View File

@@ -64,7 +64,7 @@
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Models\User.cs" />
<Compile Include="Models\UserHandler.cs" />
<Compile Include="Models\UserProvider.cs" />
<Compile Include="Models\UserRecord.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\MembershipService.cs" />

View File

@@ -2,17 +2,17 @@ using System.Web.Routing;
using Orchard.Models;
namespace Orchard.Wikis.Models {
public class WikiPage : ContentPartForRecord<WikiPageRecord>, IContentItemDisplay {
public class WikiPage : ContentPartForRecord<WikiPageRecord>, IContentDisplayInfo {
string IContentItemDisplay.DisplayText {
string IContentDisplayInfo.DisplayText {
get { return Record.Name; }
}
RouteValueDictionary IContentItemDisplay.DisplayRouteValues() {
RouteValueDictionary IContentDisplayInfo.DisplayRouteValues() {
return new RouteValueDictionary(new { area = "Orchard.Wikis", controller = "Page", action = "Show", id = ContentItem.Id });
}
RouteValueDictionary IContentItemDisplay.EditRouteValues() {
RouteValueDictionary IContentDisplayInfo.EditRouteValues() {
return new RouteValueDictionary(new { area = "Orchard.Wikis", controller = "Page", action = "Edit", id = ContentItem.Id });
}

View File

@@ -3,12 +3,12 @@ using Orchard.Data;
using Orchard.Models.Driver;
namespace Orchard.Wikis.Models {
public class WikiPageHandler : ContentHandler {
public WikiPageHandler(IRepository<WikiPageRecord> wikiPageRepository) {
public class WikiPageProvider : ContentProvider {
public WikiPageProvider(IRepository<WikiPageRecord> wikiPageRepository) {
Filters.Add(new ActivatingFilter<WikiPage>("wikipage"));
Filters.Add(new ActivatingFilter<CommonPart>("wikipage"));
Filters.Add(new ActivatingFilter<RoutablePart>("wikipage"));
Filters.Add(new ActivatingFilter<ContentPart>("wikipage"));
Filters.Add(new ActivatingFilter<BodyPart>("wikipage"));
Filters.Add(new StorageFilterForRecord<WikiPageRecord>(wikiPageRepository) { AutomaticallyCreateMissingRecord = true });
}
}

View File

@@ -12,8 +12,8 @@ namespace Orchard.Wikis.Models {
public virtual string WikiEditTheme { get; set; }
}
public class WikiSettingsHandler : ContentHandler {
public WikiSettingsHandler(IRepository<WikiSettingsRecord> repository) {
public class WikiSettingsProvider : ContentProvider {
public WikiSettingsProvider(IRepository<WikiSettingsRecord> repository) {
Filters.Add(new ActivatingFilter<ContentPartForRecord<WikiSettingsRecord>>("site"));
Filters.Add(new StorageFilterForRecord<WikiSettingsRecord>(repository) { AutomaticallyCreateMissingRecord = true });
Filters.Add(new TemplateFilterForRecord<WikiSettingsRecord>("WikiSettings"));

View File

@@ -66,7 +66,7 @@
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Controllers\PageController.cs" />
<Compile Include="Models\WikiPage.cs" />
<Compile Include="Models\WikiPageHandler.cs" />
<Compile Include="Models\WikiPageProvider.cs" />
<Compile Include="Models\WikiPageRecord.cs" />
<Compile Include="Models\WikiSettings.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@@ -68,7 +68,7 @@ namespace Orchard.Data {
type.GetProperty("Id").GetAccessors().All(x => x.IsVirtual) &&
!type.IsSealed &&
!type.IsAbstract &&
!typeof(IContentItemPart).IsAssignableFrom(type);
!typeof(IContent).IsAssignableFrom(type);
}
public ISession For(Type entityType) {

View File

@@ -3,7 +3,7 @@
namespace Orchard.Models {
public static class ContentExtensions {
public static T New<T>(this IContentManager manager, string contentType) where T : class, IContentItemPart {
public static T New<T>(this IContentManager manager, string contentType) where T : class, IContent {
var contentItem = manager.New(contentType);
if (contentItem == null)
return null;
@@ -15,12 +15,12 @@ namespace Orchard.Models {
return part;
}
public static T Get<T>(this IContentManager manager, int id) where T : class, IContentItemPart {
public static T Get<T>(this IContentManager manager, int id) where T : class, IContent {
var contentItem = manager.Get(id);
return contentItem == null ? null : contentItem.Get<T>();
}
public static void Create(this IContentManager manager, IContentItemPart part) {
public static void Create(this IContentManager manager, IContent part) {
manager.Create(part.ContentItem);
}
@@ -37,16 +37,16 @@ namespace Orchard.Models {
return contentItem == null ? null : (T)contentItem.Get(typeof(T));
}
public static bool Is<T>(this IContentItemPart part) {
public static bool Is<T>(this IContent part) {
return part == null ? false : part.ContentItem.Has(typeof(T));
}
public static bool Has<T>(this IContentItemPart part) {
public static bool Has<T>(this IContent part) {
return part == null ? false : part.ContentItem.Has(typeof(T));
}
public static T As<T>(this IContentItemPart part) where T : class {
public static T As<T>(this IContent part) where T : class {
return part == null ? null : (T)part.ContentItem.Get(typeof(T));
}
public static T Get<T>(this IContentItemPart part) where T : class {
public static T Get<T>(this IContent part) where T : class {
return part == null ? null : (T)part.ContentItem.Get(typeof(T));
}

View File

@@ -4,30 +4,31 @@ using System.Linq;
using Orchard.Models.Records;
namespace Orchard.Models {
public class ContentItem {
public class ContentItem : IContent {
public ContentItem() {
_parts = new List<IContentItemPart>();
_parts = new List<ContentPart>();
}
private readonly IList<IContentItemPart> _parts;
private readonly IList<ContentPart> _parts;
ContentItem IContent.ContentItem { get { return this; } }
public int Id { get; set; }
public string ContentType { get; set; }
public ContentItemRecord ContentItemRecord { get; set; }
public ContentItemRecord Record { get; set; }
public IEnumerable<IContentItemPart> Parts { get { return _parts; } }
public IEnumerable<ContentPart> Parts { get { return _parts; } }
public bool Has(Type partType) {
return _parts.Any(part => partType.IsAssignableFrom(part.GetType()));
}
public IContentItemPart Get(Type partType) {
public IContent Get(Type partType) {
return _parts.FirstOrDefault(part => partType.IsAssignableFrom(part.GetType()));
}
public void Weld(IContentItemPart part) {
public void Weld(ContentPart part) {
part.ContentItem = this;
_parts.Add(part);
}

View File

@@ -1,5 +1,5 @@
namespace Orchard.Models {
public abstract class ContentItemPart : IContentItemPart {
public abstract class ContentPart : IContent {
public ContentItem ContentItem { get; set; }
}
}

View File

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

View File

@@ -22,16 +22,16 @@ namespace Orchard.Models {
_contentTypeRepository = contentTypeRepository;
}
private IEnumerable<IContentHandler> _drivers;
public IEnumerable<IContentHandler> Drivers {
private IEnumerable<IContentProvider> _drivers;
public IEnumerable<IContentProvider> Drivers {
get {
if (_drivers == null)
_drivers = _context.Resolve<IEnumerable<IContentHandler>>();
_drivers = _context.Resolve<IEnumerable<IContentProvider>>();
return _drivers;
}
}
public virtual ContentItem New(string contentType) {
public virtual IContent New(string contentType) {
// create a new kernel for the model instance
var context = new ActivatingContentContext {
@@ -55,7 +55,7 @@ namespace Orchard.Models {
return context2.ContentItem;
}
public virtual ContentItem Get(int id) {
public virtual IContent Get(int id) {
// obtain root record to determine the model type
var contentItemRecord = _contentItemRepository.Get(id);
@@ -64,15 +64,15 @@ namespace Orchard.Models {
return null;
// allocate instance and set record property
var contentItem = New(contentItemRecord.ContentType.Name);
contentItem.ContentItemRecord = contentItemRecord;
var content = New(contentItemRecord.ContentType.Name);
content.ContentItem.Record = contentItemRecord;
// create a context with a new instance to load
var context = new LoadContentContext {
Id = contentItemRecord.Id,
ContentType = contentItemRecord.ContentType.Name,
ContentItemRecord = contentItemRecord,
ContentItem = contentItem
ContentItem = content.ContentItem
};
// set the id
@@ -89,18 +89,18 @@ namespace Orchard.Models {
return context.ContentItem;
}
public void Create(ContentItem contentItem) {
public void Create(IContent content) {
// produce root record to determine the model id
var modelRecord = new ContentItemRecord { ContentType = AcquireContentTypeRecord(contentItem.ContentType) };
var modelRecord = new ContentItemRecord { ContentType = AcquireContentTypeRecord(content.ContentItem.ContentType) };
_contentItemRepository.Create(modelRecord);
contentItem.ContentItemRecord = modelRecord;
content.ContentItem.Record = modelRecord;
// build a context with the initialized instance to create
var context = new CreateContentContext {
Id = modelRecord.Id,
ContentType = modelRecord.ContentType.Name,
ContentItemRecord = modelRecord,
ContentItem = contentItem
ContentItem = content.ContentItem
};
// set the id
@@ -117,24 +117,24 @@ namespace Orchard.Models {
}
public IEnumerable<ModelTemplate> GetDisplays(ContentItem contentItem) {
var context = new GetDisplaysContext(contentItem);
public IEnumerable<ModelTemplate> GetDisplays(IContent content) {
var context = new GetDisplaysContext(content);
foreach (var driver in Drivers) {
driver.GetDisplays(context);
}
return context.Displays;
}
public IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem) {
var context = new GetEditorsContext(contentItem);
public IEnumerable<ModelTemplate> GetEditors(IContent content) {
var context = new GetEditorsContext(content);
foreach (var driver in Drivers) {
driver.GetEditors(context);
}
return context.Editors;
}
public IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IUpdateModel updater) {
var context = new UpdateContentContext(contentItem, updater);
public IEnumerable<ModelTemplate> UpdateEditors(IContent content, IUpdateModel updater) {
var context = new UpdateContentContext(content, updater);
foreach (var driver in Drivers) {
driver.UpdateEditors(context);
}

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="Orchard.Models.ContentItem">
<Position X="0.5" Y="1.25" Width="2.5" />
<Members>
<Property Name="IContent.ContentItem" Hidden="true" />
</Members>
<TypeIdentifier>
<HashCode>AAACAAAAAAACAAhAABAAAAAAAAAAQAAAAAAQAAAEBAA=</HashCode>
<FileName>Models\ContentItem.cs</FileName>
</TypeIdentifier>
<ShowAsAssociation>
<Property Name="Record" />
</ShowAsAssociation>
<ShowAsCollectionAssociation>
<Property Name="Parts" />
</ShowAsCollectionAssociation>
<Lollipop Position="0.2" />
</Class>
<Class Name="Orchard.Models.ContentPart">
<Position X="5.75" Y="2.25" Width="1.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAA=</HashCode>
<FileName>Models\ContentPart.cs</FileName>
</TypeIdentifier>
<ShowAsAssociation>
<Property Name="ContentItem" />
</ShowAsAssociation>
<Lollipop Position="0.2" />
</Class>
<Class Name="Orchard.Models.ContentPartForRecord&lt;TRecord&gt;">
<Position X="5.25" Y="4" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA=</HashCode>
<FileName>Models\ContentPartForRecord.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="Orchard.Models.Records.ContentItemRecord">
<Position X="0.5" Y="4.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAA=</HashCode>
<FileName>Models\Records\ContentItemRecord.cs</FileName>
</TypeIdentifier>
<ShowAsAssociation>
<Property Name="ContentType" />
</ShowAsAssociation>
</Class>
<Class Name="Orchard.Models.Records.ContentTypeRecord">
<Position X="0.5" Y="6.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAACAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Models\Records\ContentTypeRecord.cs</FileName>
</TypeIdentifier>
</Class>
<Interface Name="Orchard.Models.IContent">
<Position X="5.5" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAA=</HashCode>
<FileName>Models\IContent.cs</FileName>
</TypeIdentifier>
</Interface>
<Interface Name="Orchard.Models.IContentManager">
<Position X="4" Y="5.75" Width="6" />
<TypeIdentifier>
<HashCode>AAAACAAAAAAIACBAAACAAAAAAAAAAEAAAAAAAAAAAAA=</HashCode>
<FileName>Models\IContentManager.cs</FileName>
</TypeIdentifier>
</Interface>
<Interface Name="Orchard.Models.Driver.IContentProvider">
<Position X="4.25" Y="8.5" Width="3.75" />
<TypeIdentifier>
<HashCode>AAAACAAAAAEIAABAAACAAIAAACAAAAQAAAAAAAAAAAg=</HashCode>
<FileName>Models\Driver\IContentProvider.cs</FileName>
</TypeIdentifier>
</Interface>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

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

View File

@@ -12,7 +12,7 @@ namespace Orchard.Models.Driver {
return _item;
}
public ContentItemBuilder Weld<TPart>() where TPart : class, IContentItemPart, new() {
public ContentItemBuilder Weld<TPart>() where TPart : ContentPart, new() {
var part = new TPart();
_item.Weld(part);
return this;

View File

@@ -4,8 +4,8 @@ using System.Linq;
using Orchard.Logging;
namespace Orchard.Models.Driver {
public abstract class ContentHandler : IContentHandler {
protected ContentHandler() {
public abstract class ContentProvider : IContentProvider {
protected ContentProvider() {
Filters = new List<IContentFilter>();
Logger = NullLogger.Instance;
}
@@ -13,17 +13,17 @@ namespace Orchard.Models.Driver {
public List<IContentFilter> Filters { get; set; }
public ILogger Logger { get; set; }
public void AddOnActivated<TPart>(Action<ActivatedContentContext, TPart> handler) where TPart : class, IContentItemPart {
public void AddOnActivated<TPart>(Action<ActivatedContentContext, TPart> handler) where TPart : class, IContent {
Filters.Add(new InlineStorageFilter<TPart> { OnActivated = handler });
}
public void AddOnCreating<TPart>(Action<CreateContentContext, TPart> handler) where TPart : class, IContentItemPart {
public void AddOnCreating<TPart>(Action<CreateContentContext, TPart> handler) where TPart : class, IContent {
Filters.Add(new InlineStorageFilter<TPart> { OnCreating = handler });
}
public void AddOnLoaded<TPart>(Action<LoadContentContext, TPart> handler) where TPart : class, IContentItemPart {
public void AddOnLoaded<TPart>(Action<LoadContentContext, TPart> handler) where TPart : class, IContent {
Filters.Add(new InlineStorageFilter<TPart> { OnLoaded = handler });
}
class InlineStorageFilter<TPart> : StorageFilterBase<TPart> where TPart : class, IContentItemPart {
class InlineStorageFilter<TPart> : StorageFilterBase<TPart> where TPart : class, IContent {
public Action<ActivatedContentContext, TPart> OnActivated { get; set; }
public Action<CreateContentContext, TPart> OnCreating { get; set; }
public Action<CreateContentContext, TPart> OnCreated { get; set; }
@@ -34,54 +34,54 @@ namespace Orchard.Models.Driver {
protected override void Loaded(LoadContentContext context, TPart instance) { if (OnLoaded != null) OnLoaded(context, instance); }
}
void IContentHandler.Activating(ActivatingContentContext context) {
void IContentProvider.Activating(ActivatingContentContext context) {
foreach (var filter in Filters.OfType<IContentActivatingFilter>())
filter.Activating(context);
Activating(context);
}
void IContentHandler.Activated(ActivatedContentContext context) {
void IContentProvider.Activated(ActivatedContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Activated(context);
Activated(context);
}
void IContentHandler.Creating(CreateContentContext context) {
void IContentProvider.Creating(CreateContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Creating(context);
Creating(context);
}
void IContentHandler.Created(CreateContentContext context) {
void IContentProvider.Created(CreateContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Created(context);
Created(context);
}
void IContentHandler.Loading(LoadContentContext context) {
void IContentProvider.Loading(LoadContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Loading(context);
Loading(context);
}
void IContentHandler.Loaded(LoadContentContext context) {
void IContentProvider.Loaded(LoadContentContext context) {
foreach (var filter in Filters.OfType<IContentStorageFilter>())
filter.Loaded(context);
Loaded(context);
}
void IContentHandler.GetDisplays(GetDisplaysContext context) {
void IContentProvider.GetDisplays(GetDisplaysContext context) {
foreach (var filter in Filters.OfType<IContentTemplateFilter>())
filter.GetDisplays(context);
GetDisplays(context);
}
void IContentHandler.GetEditors(GetEditorsContext context) {
void IContentProvider.GetEditors(GetEditorsContext context) {
foreach (var filter in Filters.OfType<IContentTemplateFilter>())
filter.GetEditors(context);
GetEditors(context);
}
void IContentHandler.UpdateEditors(UpdateContentContext context) {
void IContentProvider.UpdateEditors(UpdateContentContext context) {
foreach (var filter in Filters.OfType<IContentTemplateFilter>())
filter.UpdateEditors(context);
UpdateEditors(context);

View File

@@ -3,8 +3,8 @@ using Orchard.UI.Models;
namespace Orchard.Models.Driver {
public class GetEditorsContext {
public GetEditorsContext(ContentItem part) {
ContentItem = part;
public GetEditorsContext(IContent content) {
ContentItem = content.ContentItem;
Editors= new List<ModelTemplate>();
}
public ContentItem ContentItem { get; set; }
@@ -12,8 +12,8 @@ namespace Orchard.Models.Driver {
}
public class GetDisplaysContext {
public GetDisplaysContext(ContentItem part) {
ContentItem = part;
public GetDisplaysContext(IContent content) {
ContentItem = content.ContentItem;
Displays = new List<ModelTemplate>();
}
public ContentItem ContentItem { get; set; }

View File

@@ -1,5 +1,5 @@
namespace Orchard.Models.Driver {
public interface IContentHandler : IDependency {
public interface IContentProvider : IDependency {
void Activating(ActivatingContentContext context);
void Activated(ActivatedContentContext context);
void Creating(CreateContentContext context);

View File

@@ -1,5 +1,5 @@
namespace Orchard.Models.Driver {
public abstract class StorageFilterBase<TPart> : IContentStorageFilter where TPart : class, IContentItemPart {
public abstract class StorageFilterBase<TPart> : IContentStorageFilter where TPart : class, IContent {
protected virtual void Activated(ActivatedContentContext context, TPart instance) { }
protected virtual void Creating(CreateContentContext context, TPart instance) { }

View File

@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
namespace Orchard.Models.Driver {
public abstract class TemplateFilterBase<TPart> : IContentTemplateFilter where TPart : class, IContentItemPart {
public abstract class TemplateFilterBase<TPart> : IContentTemplateFilter where TPart : class, IContent {
protected virtual void GetDisplays(GetDisplaysContext context, TPart instance) { }
protected virtual void GetEditors(GetEditorsContext context, TPart instance) { }

View File

@@ -1,6 +1,6 @@
namespace Orchard.Models.Driver {
public class UpdateContentContext : GetEditorsContext {
public UpdateContentContext(ContentItem contentItem, IUpdateModel updater) : base(contentItem) {
public UpdateContentContext(IContent content, IUpdateModel updater) : base(content) {
Updater = updater;
}

View File

@@ -0,0 +1,5 @@
namespace Orchard.Models {
public interface IContent {
ContentItem ContentItem { get; }
}
}

View File

@@ -1,7 +1,7 @@
using System.Web.Routing;
namespace Orchard.Models {
public interface IContentItemDisplay : IContentItemPart {
public interface IContentDisplayInfo : IContent {
string DisplayText { get; }
RouteValueDictionary DisplayRouteValues();
RouteValueDictionary EditRouteValues();

View File

@@ -1,5 +0,0 @@
namespace Orchard.Models {
public interface IContentItemPart {
ContentItem ContentItem { get; set; }
}
}

View File

@@ -4,12 +4,12 @@ using Orchard.UI.Models;
namespace Orchard.Models {
public interface IContentManager : IDependency {
ContentItem New(string contentType);
ContentItem Get(int id);
void Create(ContentItem contentItem);
IContent New(string contentType);
IContent Get(int id);
void Create(IContent contentItem);
IEnumerable<ModelTemplate> GetDisplays(ContentItem contentItem);
IEnumerable<ModelTemplate> GetEditors(ContentItem contentItem);
IEnumerable<ModelTemplate> UpdateEditors(ContentItem contentItem, IUpdateModel updater);
IEnumerable<ModelTemplate> GetDisplays(IContent contentItem);
IEnumerable<ModelTemplate> GetEditors(IContent contentItem);
IEnumerable<ModelTemplate> UpdateEditors(IContent contentItem, IUpdateModel updater);
}
}

View File

@@ -5,24 +5,24 @@ using Orchard.Models;
namespace Orchard.Mvc.Html {
public static class ContentItemExtensions {
public static MvcHtmlString ItemDisplayLink(this HtmlHelper html, string linkText, IContentItemPart item) {
public static MvcHtmlString ItemDisplayLink(this HtmlHelper html, string linkText, IContent item) {
return ItemDisplayLink(html, linkText, item.ContentItem);
}
public static MvcHtmlString ItemDisplayLink(this HtmlHelper html, IContentItemPart item) {
public static MvcHtmlString ItemDisplayLink(this HtmlHelper html, IContent item) {
return ItemDisplayLink(html, item.ContentItem);
}
public static MvcHtmlString ItemEditLink(this HtmlHelper html, string linkText, IContentItemPart item) {
public static MvcHtmlString ItemEditLink(this HtmlHelper html, string linkText, IContent item) {
return ItemEditLink(html, linkText, item.ContentItem);
}
public static MvcHtmlString ItemEditLink(this HtmlHelper html, IContentItemPart item) {
public static MvcHtmlString ItemEditLink(this HtmlHelper html, IContent item) {
return ItemEditLink(html, item.ContentItem);
}
public static MvcHtmlString ItemDisplayLink(this HtmlHelper html, string linkText, ContentItem item) {
var display = item.As<IContentItemDisplay>();
var display = item.As<IContentDisplayInfo>();
if (display == null)
return null;
@@ -35,7 +35,7 @@ namespace Orchard.Mvc.Html {
}
public static MvcHtmlString ItemEditLink(this HtmlHelper html, string linkText, ContentItem item) {
var display = item.As<IContentItemDisplay>();
var display = item.As<IContentDisplayInfo>();
if (display == null)
return null;

View File

@@ -145,19 +145,19 @@
<Compile Include="Models\Driver\CreateContentContext.cs" />
<Compile Include="Models\Driver\LoadContentContext.cs" />
<Compile Include="Models\Driver\ContentItemBuilder.cs" />
<Compile Include="Models\Driver\ContentHandler.cs" />
<Compile Include="Models\Driver\ContentProvider.cs" />
<Compile Include="Models\Driver\ActivatingContentContext.cs" />
<Compile Include="Models\Driver\GetEditorsContext.cs" />
<Compile Include="Models\Driver\StorageFilterForRecord.cs" />
<Compile Include="Models\Driver\StorageFilterBase.cs" />
<Compile Include="Models\Driver\TemplateFilterBase.cs" />
<Compile Include="Models\Driver\TemplateFilterForRecord.cs" />
<Compile Include="Models\IContentItemDisplay.cs" />
<Compile Include="Models\IContentDisplayInfo.cs" />
<Compile Include="Models\IContentManager.cs" />
<Compile Include="Models\Driver\IContentHandler.cs" />
<Compile Include="Models\Driver\IContentProvider.cs" />
<Compile Include="Models\ContentExtensions.cs" />
<Compile Include="Models\ContentItemPart.cs" />
<Compile Include="Models\IContentItemPart.cs" />
<Compile Include="Models\ContentPart.cs" />
<Compile Include="Models\IContent.cs" />
<Compile Include="Models\ContentPartForRecord.cs" />
<Compile Include="Models\Records\ContentPartRecord.cs" />
<Compile Include="Models\Records\ContentTypeRecord.cs" />
@@ -223,6 +223,9 @@
<Compile Include="Validation\JetBrains.Annotations.cs" />
<Compile Include="IMapper.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Models\Diagram.cd" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

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

View File

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