diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj index 8188b4adb..f04cfcec1 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj @@ -98,6 +98,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs new file mode 100644 index 000000000..ec788b7c1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs @@ -0,0 +1,138 @@ +using System; +using Orchard.Core.XmlRpc; +using Orchard.Core.XmlRpc.Models; +using Orchard.Logging; + +namespace Orchard.Blogs.Services { + public class XmlRpcHandler : IXmlRpcHandler { + private readonly IBlogService _blogService; + + public XmlRpcHandler(IBlogService blogService) { + _blogService = blogService; + Logger = NullLogger.Instance; + } + + public ILogger Logger { get; set; } + + public void Process(XmlRpcContext context) { + var uriBuilder = new UriBuilder(context.HttpContext.Request.Url) { + Path = + context.HttpContext.Request. + ApplicationPath, + Query = string.Empty + }; + + + if (context.Request.MethodName == "blogger.getUsersBlogs") { + var a = new XRpcArray(); + foreach (var blog in _blogService.Get()) { + a.Add(new XRpcStruct() + .Set("url", uriBuilder.Path + blog.Slug) + .Set("blogid", blog.Id) + .Set("blogName", blog.Name)); + } + + context.Response = new XRpcMethodResponse().Add(a); + } + + if (context.Request.MethodName == "metaWeblog.newPost") { + var result = MetaWeblogNewPost( + Convert.ToString(context.Request.Params[0].Value), + Convert.ToString(context.Request.Params[1].Value), + Convert.ToString(context.Request.Params[2].Value), + (XRpcStruct)context.Request.Params[3].Value, + Convert.ToBoolean(context.Request.Params[4].Value)); + + context.Response = new XRpcMethodResponse().Add(result); + } + + if (context.Request.MethodName == "metaWeblog.getPost") { + var result = MetaWeblogGetPost( + Convert.ToInt32(context.Request.Params[0].Value), + Convert.ToString(context.Request.Params[1].Value), + Convert.ToString(context.Request.Params[2].Value)); + context.Response = new XRpcMethodResponse().Add(result); + } + + if (context.Request.MethodName == "metaWeblog.editPost") { + var result = MetaWeblogEditPost( + Convert.ToInt32(context.Request.Params[0].Value), + Convert.ToString(context.Request.Params[1].Value), + Convert.ToString(context.Request.Params[2].Value), + (XRpcStruct)context.Request.Params[3].Value, + Convert.ToBoolean(context.Request.Params[4].Value)); + context.Response = new XRpcMethodResponse().Add(result); + } + } + + private int MetaWeblogNewPost( + string blogId, + string user, + string password, + XRpcStruct content, + bool publish) { + //var title = content.Optional("title"); + //var description = content.Optional("description"); + + //var pageRevision = _pageManager.CreatePage(new CreatePageParams(title, null, "TwoColumns")); + //pageRevision.Contents.First().Content = description; + + //if (publish) { + // if (string.IsNullOrEmpty(pageRevision.Slug)) + // pageRevision.Slug = "slug" + pageRevision.Page.Id; + + // _pageManager.Publish(pageRevision, new PublishOptions()); + //} + + //return pageRevision.Page.Id; + return 1; + } + + private XRpcStruct MetaWeblogGetPost( + int postId, + string user, + string password) { + + //var pageRevision = _pageManager.GetLastRevision(postId); + + //var url = "http://localhost/orchard/" + pageRevision.Slug; + //return new XRpcStruct() + // .Set("userid", 37) + // .Set("postid", pageRevision.Page.Id) + // .Set("description", pageRevision.Contents.First().Content) + // .Set("title", pageRevision.Title) + // .Set("link", url) + // .Set("permaLink", url); + + throw new NotImplementedException(); + } + + private bool MetaWeblogEditPost( + int postId, + string user, + string password, + XRpcStruct content, + bool publish) { + + //var pageRevision = _pageManager.AcquireDraft(postId); + + //var title = content.Optional("title"); + //var description = content.Optional("description"); + + //pageRevision.Title = title; + //pageRevision.Contents.First().Content = description; + + //if (publish) { + // if (string.IsNullOrEmpty(pageRevision.Slug)) + // pageRevision.Slug = "slug" + postId; + + // _pageManager.Publish(pageRevision, new PublishOptions()); + //} + + //return true; + + throw new NotImplementedException(); + } + + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx index d0b721cdf..c3db735c2 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx @@ -1,74 +1,63 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> -<%@ Import Namespace="Orchard.Themes"%> -<%@ Import Namespace="Orchard.Extensions"%> -<%@ Import Namespace="Orchard.ContentManagement"%> -<%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> -
-
-

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPostEdit(Model.Item.Blog.Slug, Model.Item.Id))%>

- +
+

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPostEdit(Model.Item.Blog.Slug, Model.Item.Id))%>

    -
  • - <%if (Model.IsPublished) - { %> - " alt="<%=_Encoded("Online") %>" title="<%=_Encoded("The page is currently online") %>" /><%=_Encoded(" Published")%> - <% } - else - { %> - " alt="<%=_Encoded("Offline") %>" title="<%=_Encoded("The page is currently offline") %>" /><%=_Encoded(" Not Published")%> - <% } %> -  |  +
  • <% + if (Model.Item.HasPublished) { %> + " alt="<%=_Encoded("Online") %>" title="<%=_Encoded("The page is currently online") %>" /><%=_Encoded(" Published")%><% + } + else { %> + " alt="<%=_Encoded("Offline") %>" title="<%=_Encoded("The page is currently offline") %>" /><%=_Encoded(" Not Published")%><% + } %> | 
  • - -
  • - <% if (Model.IsDraft) { %> - " alt="<%=_Encoded("Draft") %>" title="<%=_Encoded("The post has a draft") %>" /><%=Html.PublishedState(Model.Item)%> - <% } - else - { %> - <%=_Encoded("No draft")%> - <% } %> -  |  +
  • <% + if (Model.Item.HasDraft) { %> + " alt="<%=_Encoded("Draft") %>" title="<%=_Encoded("The post has a draft") %>" /><%=Html.PublishedState(Model.Item)%><% + } + else { %> + <%=_Encoded("No draft")%><% + } %> | 
  • - - <%--This should show publised date, last modified, or scheduled. -
  • - " alt="<%=_Encoded("Scheduled") %>" title="<%=_Encoded("The post is scheduled for publishing") %>" /><%=_Encoded("Scheduled")%> -  |  -
  • --%> - -
  • - <%=_Encoded("By {0}", Model.Item.Creator.UserName)%> -
  • -
+
  • <% + if (Model.Item.ScheduledPublishUtc.HasValue && Model.Item.ScheduledPublishUtc.Value > DateTime.UtcNow) { %> + " alt="<%=_Encoded("Scheduled") %>" title="<%=_Encoded("The post is scheduled for publishing") %>" /><%=_Encoded("Scheduled")%> + <%=Html.DateTime(Model.Item.ScheduledPublishUtc.Value, "M/d/yyyy h:mm tt")%><% + } + else if (Model.Item.IsPublished) { %> + <%=_Encoded("Published: ") + Html.PublishedWhen(Model.Item) %><% + } + else { %> + <%=_Encoded("Last modified: {todo}") %><% + } %> |  +
  • +
  • <%=_Encoded("By {0}", Model.Item.Creator.UserName)%>
  • +
    - - \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx index 37b70f9c1..f152780d5 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx @@ -10,10 +10,11 @@
    <% Html.Zone("secondary");%>
    - "/> - <% if (Model.IsDraft) { %> - <%=Html.ActionLink(T("Discard Draft").ToString(), "DiscardDraft", new { Area = "Orchard.Blogs", Controller = "BlogPostAdmin", id=Model.Item.Id }, new { @class = "button" })%> - <% } %> + "/><% + //TODO: (erikpo) In the future, remove the HasPublished check so the user can delete the content item from here if the choose to + if (Model.Item.HasDraft && Model.Item.HasPublished) { %> + <%=Html.ActionLink(T("Discard Draft").ToString(), "DiscardDraft", new { Area = "Orchard.Blogs", Controller = "BlogPostAdmin", id=Model.Item.Id }, new { @class = "button" })%><% + } %>
    \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Views/EditorTemplates/Items/Pages.Page.ascx b/src/Orchard.Web/Modules/Orchard.Pages/Views/EditorTemplates/Items/Pages.Page.ascx index eba1bd6f3..f88b148c9 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Views/EditorTemplates/Items/Pages.Page.ascx +++ b/src/Orchard.Web/Modules/Orchard.Pages/Views/EditorTemplates/Items/Pages.Page.ascx @@ -10,10 +10,11 @@
    <% Html.Zone("secondary");%>
    - "/> - <% if (Model.IsDraft) { %> - <%=Html.ActionLink(T("Discard Draft").ToString(), "DiscardDraft", new { Area = "Orchard.Pages", Controller = "Admin", Model.Item.Id }, new { @class = "button" })%> - <% } %> + "/><% + //TODO: (erikpo) In the future, remove the HasPublished check so the user can delete the content item from here if the choose to + if (Model.Item.HasDraft && Model.Item.HasPublished) { %> + <%=Html.ActionLink(T("Discard Draft").ToString(), "DiscardDraft", new { Area = "Orchard.Pages", Controller = "Admin", Model.Item.Id }, new { @class = "button" })%><% + } %>
    \ No newline at end of file diff --git a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs index 5420aae4d..0c3c9109a 100644 --- a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs +++ b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs @@ -116,9 +116,18 @@ namespace Orchard.Mvc.Html { return value.HasValue ? htmlHelper.DateTime(value.Value) : defaultIfNull; } - //TODO: (erikpo) This format should come from a site setting + public static string DateTime(this HtmlHelper htmlHelper, DateTime? value, string defaultIfNull, string customFormat) { + return value.HasValue ? htmlHelper.DateTime(value.Value, customFormat) : defaultIfNull; + } + public static string DateTime(this HtmlHelper htmlHelper, DateTime value) { - return value.ToString("MMM d yyyy h:mm tt"); + //TODO: (erikpo) This default format should come from a site setting + return htmlHelper.DateTime(value, "MMM d yyyy h:mm tt"); + } + + public static string DateTime(this HtmlHelper htmlHelper, DateTime value, string customFormat) { + //TODO: (erikpo) In the future, convert this to "local" time before calling ToString + return value.ToString(customFormat); } #endregion diff --git a/src/Orchard/Mvc/ViewModels/ContentItemViewModel.cs b/src/Orchard/Mvc/ViewModels/ContentItemViewModel.cs index a4308e0d5..bfc6355c7 100644 --- a/src/Orchard/Mvc/ViewModels/ContentItemViewModel.cs +++ b/src/Orchard/Mvc/ViewModels/ContentItemViewModel.cs @@ -36,16 +36,6 @@ namespace Orchard.Mvc.ViewModels { public string TemplateName { get; set; } public string Prefix { get; set; } public ZoneCollection Zones { get; private set; } - - public bool IsPublished { - get { return Item != null && Item.VersionRecord != null && Item.VersionRecord.Published; } - } - public bool IsLatest { - get { return Item != null && Item.VersionRecord != null && Item.VersionRecord.Latest; } - } - public bool IsDraft { - get { return IsLatest && !IsPublished; } - } } public class ContentItemViewModel : ContentItemViewModel where TPart : IContent {