Blog post create cleaned up.

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4043647
This commit is contained in:
skewed
2009-12-10 01:49:09 +00:00
parent 73a1740817
commit c676842309
13 changed files with 50 additions and 54 deletions

View File

@@ -3,5 +3,9 @@ using Orchard.Models;
namespace Orchard.Core.Common.Models {
public class BodyAspect : ContentPart<BodyRecord> {
public string Text {
get { return Record.Text; }
set { Record.Text = value; }
}
}
}

View File

@@ -3,7 +3,13 @@ using Orchard.Models;
namespace Orchard.Core.Common.Models {
public class RoutableAspect : ContentPart<RoutableRecord> {
public string Title { get { return Record.Title; } }
public string Slug { get { return Record.Slug; } }
public string Title {
get { return Record.Title; }
set { Record.Title = value; }
}
public string Slug {
get { return Record.Slug; }
set { Record.Slug = value; }
}
}
}

View File

@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Orchard.Core.Common.Models;
using Orchard.Core.Common.Models;
namespace Orchard.Core.Common.ViewModels {
public class BodyEditorViewModel {

View File

@@ -3,5 +3,7 @@
<%@ Import Namespace="Orchard.Core.Common.Models" %>
<%@ Import Namespace="Orchard.Core.Settings.ViewModels" %>
<%@ Import Namespace="Orchard.Utility" %>
<h3>Body</h3>
<ul><li><%=Html.EditorFor(m=>m.Text, Model.TextEditorTemplate) %></li></ul>
<fieldset>
<label>Body</label>
<%=Html.EditorFor(m=>m.Text, Model.TextEditorTemplate) %>
</fieldset>

View File

@@ -114,8 +114,9 @@ namespace Orchard.Blogs.Controllers {
if (blog == null)
return new NotFoundResult();
model.BlogPost = _contentManager.UpdateEditorViewModel(_contentManager.New<BlogPost>("blogpost"), null, this);
model.BlogPost.Item.Blog = blog;
BlogPost blogPost = _contentManager.New<BlogPost>("blogpost");
blogPost.Blog = blog;
model.BlogPost = _contentManager.UpdateEditorViewModel(blogPost, null, this);
if (!ModelState.IsValid)
return View(model);

View File

@@ -9,32 +9,29 @@ namespace Orchard.Blogs.Models {
public class BlogPost : ContentPart<BlogPostRecord> {
public readonly static ContentType ContentType = new ContentType { Name = "blogpost", DisplayName = "Blog Post" };
public Blog Blog { get; set; }
[HiddenInput(DisplayValue = false)]
public int Id { get { return ContentItem.Id; } }
[Required]
public string Title {
get { return this.As<RoutableAspect>().Title; }
set { this.As<RoutableAspect>().Record.Title = value; }
set { this.As<RoutableAspect>().Title = value; }
}
[Required]
public string Slug {
get { return this.As<RoutableAspect>().Slug; }
set { this.As<RoutableAspect>().Record.Slug = value; }
set { this.As<RoutableAspect>().Slug = value; }
}
[Required]
public string Body {
get { return this.As<BodyAspect>().Record.Text; }
set { this.As<BodyAspect>().Record.Text = value; }
public Blog Blog {
get { return this.As<CommonAspect>().Container.As<Blog>(); }
set { this.As<CommonAspect>().Container = value; }
}
public IUser Creator {
get { return this.As<CommonAspect>().OwnerField.Value; }
set { this.As<CommonAspect>().Record.OwnerId = value.Id; }
get { return this.As<CommonAspect>().Owner; }
set { this.As<CommonAspect>().Owner = value; }
}
public DateTime? Published

View File

@@ -26,8 +26,6 @@ namespace Orchard.Blogs.Models {
Filters.Add(new StorageFilter<BlogPostRecord>(repository));
Filters.Add(new ContentItemTemplates<BlogPost>("BlogPost", "Detail", "Summary", "SummaryAdmin"));
OnLoaded<BlogPost>((context, bp) => bp.Blog = contentManager.Get<Blog>(bp.Record.Blog.Id));
OnGetItemMetadata<BlogPost>((context, bp) => {
context.Metadata.DisplayText = bp.Title;
context.Metadata.DisplayRouteValues =

View File

@@ -3,7 +3,6 @@ using Orchard.Models.Records;
namespace Orchard.Blogs.Models {
public class BlogPostRecord : ContentPartRecord {
public virtual BlogRecord Blog { get; set; }
public virtual DateTime? Published { get; set; }
}
}

View File

@@ -9,32 +9,24 @@ namespace Orchard.Blogs.Services {
public class BlogPostService : IBlogPostService {
private readonly IContentManager _contentManager;
private readonly IRepository<BlogPostRecord> _blogPostRepository;
private readonly IRepository<RoutableRecord> _routableRepository;
public BlogPostService(IContentManager contentManager, IRepository<BlogPostRecord> blogPostRepository, IRepository<RoutableRecord> routableRepository) {
public BlogPostService(IContentManager contentManager, IRepository<BlogPostRecord> blogPostRepository) {
_contentManager = contentManager;
_blogPostRepository = blogPostRepository;
_routableRepository = routableRepository;
}
public BlogPost Get(Blog blog, string slug) {
RoutableRecord record =
_routableRepository.Get(r => r.ContentItemRecord.ContentType.Name == "blogpost" && r.Slug == slug);
BlogPost blogPost = record != null ? _contentManager.Get<BlogPost>(record.Id) : null;
return blogPost != null && blogPost.Record.Blog.Id == blog.ContentItem.Id ? blogPost : null;
return _contentManager.Query<BlogPost, BlogPostRecord >()
.Join<RoutableRecord>().Where(x => x.Slug == slug)
.Join<CommonRecord>().Where(x => x.Container == blog.Record.ContentItemRecord)
.List().FirstOrDefault();
}
public IEnumerable<BlogPost> Get(Blog blog) {
//TODO: (erikpo) Figure out how to sort by published date
IEnumerable<RoutableRecord> records =
_routableRepository.Fetch(rr => rr.ContentItemRecord.ContentType.Name == "blogpost"
/*, bpr => bpr.Asc(bpr2 => bpr2.Published.GetValueOrDefault(new DateTime(2099, 1, 1)))*/);
//TODO: (erikpo) Need to filter by blog in the line above instead of filtering here
return
records.Select(r => _contentManager.Get(r.Id).As<BlogPost>()).Where(
bp => bp.Record.Blog.Id == blog.ContentItem.Id);
return _contentManager.Query<BlogPost, BlogPostRecord>()
.Join<CommonRecord>().Where(x => x.Container == blog.Record.ContentItemRecord)
.OrderByDescending(x=>x.CreatedUtc)
.List();
}
public void Delete(BlogPost blogPost) {

View File

@@ -1,4 +1,6 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ItemDisplayViewModel<BlogPost>>" %>
<%@ Import Namespace="Orchard.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Models"%>
<%@ Import Namespace="Orchard.Models.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
@@ -7,4 +9,4 @@
<%=Html.PublishedState(Model.Item) %>
| <a href="#">?? comments</a>
</div>
<div class="content"><%=Model.Item.Body ?? "<p><em>there's no content for this blog post</em></p>" %></div>
<div class="content"><%=Model.Item.As<BodyAspect>().Text ?? "<p><em>there's no content for this blog post</em></p>" %></div>

View File

@@ -1,4 +1,6 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ItemDisplayViewModel<BlogPost>>" %>
<%@ Import Namespace="Orchard.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Models"%>
<%@ Import Namespace="Orchard.Models.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
@@ -7,7 +9,7 @@
<%=Html.PublishedState(Model.Item) %>
| <a href="#">?? comments</a>
</div>
<div class="content"><%=Model.Item.Body ?? "<p><em>there's no content for this blog post</em></p>"%></div>
<div class="content"><%=Model.Item.As<BodyAspect>().Text ?? "<p><em>there's no content for this blog post</em></p>"%></div>
<p class="actions">
<%-- todo: (heskew) make into a ul --%>
<span class="construct">

View File

@@ -12,13 +12,13 @@
<fieldset>
<label class="sub" for="permalink">Permalink<br /><span><%=Request.Url.ToRootString() %>/<%=Model.Blog.Slug %>/</span></label>
<span><%=Html.TextBoxFor(m => m.Slug, new { id = "permalink", @class = "text" })%></span>
</fieldset>
</fieldset><%--
<fieldset>
<%--<label for="body">Excerpt</label>
<span>[still needed]</span>-- %>
<label for="body">Body</label>
<span><%=Html.TextAreaFor(m => m.Body, new { id = "body", @class = "html" })%></span>
</fieldset>
</fieldset>--%>
</div>
<div class="secondary">
<fieldset>

View File

@@ -1,11 +1,8 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<script src="<%=ResolveUrl("~/Packages/TinyMce/scripts/tiny_mce.js") %>" type="text/javascript"></script>
<%=Html.TextArea("", Model, 25, 80, new {}) %>
<script type="text/javascript">
<%-- todo: (heskew) need script include and init script to not be duplicated --%>
<%--<script src="<%=ResolveUrl("~/Packages/TinyMce/scripts/tiny_mce.js") %>" type="text/javascript"></script>--%>
<%=Html.TextArea("", Model, 25, 80, new { @class = "html" }) %>
<%--<script type="text/javascript">
tinyMCE.init({ theme: "advanced", mode: "textareas", plugins: "fullscreen,autoresize", theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left", theme_advanced_buttons3_add: "fullscreen" });
</script>
</script>--%>