2010-07-14 15:31:43 -07:00
using System ;
2011-03-15 19:04:42 -07:00
using System.Xml ;
2010-07-14 15:31:43 -07:00
using Orchard.ContentManagement ;
using Orchard.ContentManagement.Drivers ;
2011-03-14 17:14:03 -07:00
using Orchard.ContentManagement.Handlers ;
2010-12-10 11:12:29 -08:00
using Orchard.Mvc ;
2010-10-25 18:21:19 -07:00
using Orchard.PublishLater.Models ;
using Orchard.PublishLater.Services ;
using Orchard.PublishLater.ViewModels ;
2010-07-14 15:31:43 -07:00
using Orchard.Localization ;
2010-10-26 07:56:56 -07:00
using System.Globalization ;
2011-11-09 16:21:26 -08:00
using Orchard.Services ;
2013-11-28 22:24:40 +01:00
using Orchard.Localization.Services ;
2010-07-14 15:31:43 -07:00
2010-10-25 18:21:19 -07:00
namespace Orchard.PublishLater.Drivers {
2010-07-14 15:31:43 -07:00
public class PublishLaterPartDriver : ContentPartDriver < PublishLaterPart > {
2010-10-13 04:51:15 -07:00
private const string TemplateName = "Parts/PublishLater" ;
2011-10-05 14:48:31 -07:00
private readonly IHttpContextAccessor _httpContextAccessor ;
2010-07-14 15:31:43 -07:00
private readonly IPublishLaterService _publishLaterService ;
2011-11-09 16:21:26 -08:00
private readonly IClock _clock ;
2013-11-28 22:24:40 +01:00
private readonly IDateServices _dateServices ;
2010-07-14 15:31:43 -07:00
public PublishLaterPartDriver (
IOrchardServices services ,
2011-10-05 14:48:31 -07:00
IHttpContextAccessor httpContextAccessor ,
2011-11-09 16:21:26 -08:00
IPublishLaterService publishLaterService ,
2013-11-28 22:24:40 +01:00
IClock clock ,
IDateServices dateServices ) {
2011-10-05 14:48:31 -07:00
_httpContextAccessor = httpContextAccessor ;
2010-07-14 15:31:43 -07:00
_publishLaterService = publishLaterService ;
2011-11-09 16:21:26 -08:00
_clock = clock ;
2013-11-28 22:24:40 +01:00
_dateServices = dateServices ;
2010-07-14 15:31:43 -07:00
T = NullLocalizer . Instance ;
Services = services ;
}
2013-11-28 22:24:40 +01:00
public Localizer T {
get ;
set ;
}
public IOrchardServices Services {
get ;
set ;
}
2010-07-14 15:31:43 -07:00
2010-10-13 04:51:15 -07:00
protected override string Prefix {
2013-11-28 22:24:40 +01:00
get {
return "PublishLater" ;
}
2010-07-14 15:31:43 -07:00
}
2010-10-13 04:51:15 -07:00
protected override DriverResult Display ( PublishLaterPart part , string displayType , dynamic shapeHelper ) {
return Combined (
ContentShape ( "Parts_PublishLater_Metadata" ,
2011-12-30 15:26:41 -08:00
( ) = > shapeHelper . Parts_PublishLater_Metadata ( ScheduledPublishUtc : part . ScheduledPublishUtc . Value ) ) ,
2010-10-13 04:51:15 -07:00
ContentShape ( "Parts_PublishLater_Metadata_Summary" ,
2011-12-30 15:26:41 -08:00
( ) = > shapeHelper . Parts_PublishLater_Metadata_Summary ( ScheduledPublishUtc : part . ScheduledPublishUtc . Value ) ) ,
2010-10-13 04:51:15 -07:00
ContentShape ( "Parts_PublishLater_Metadata_SummaryAdmin" ,
2011-12-30 15:26:41 -08:00
( ) = > shapeHelper . Parts_PublishLater_Metadata_SummaryAdmin ( ScheduledPublishUtc : part . ScheduledPublishUtc . Value ) )
2010-10-13 04:51:15 -07:00
) ;
2010-07-14 15:31:43 -07:00
}
2010-10-13 04:51:15 -07:00
protected override DriverResult Editor ( PublishLaterPart part , dynamic shapeHelper ) {
2010-10-26 07:56:56 -07:00
var model = new PublishLaterViewModel ( part ) {
ScheduledPublishUtc = part . ScheduledPublishUtc . Value ,
2013-11-28 22:24:40 +01:00
ScheduledPublishDate = ! part . IsPublished ( ) ? _dateServices . ConvertToLocalDateString ( part . ScheduledPublishUtc . Value , "" ) : "" ,
ScheduledPublishTime = ! part . IsPublished ( ) ? _dateServices . ConvertToLocalTimeString ( part . ScheduledPublishUtc . Value , "" ) : ""
2010-10-26 07:56:56 -07:00
} ;
2010-10-15 11:55:48 -07:00
return ContentShape ( "Parts_PublishLater_Edit" ,
2010-10-13 04:51:15 -07:00
( ) = > shapeHelper . EditorTemplate ( TemplateName : TemplateName , Model : model , Prefix : Prefix ) ) ;
2010-07-14 15:31:43 -07:00
}
2013-11-28 22:24:40 +01:00
2010-10-13 04:51:15 -07:00
protected override DriverResult Editor ( PublishLaterPart part , IUpdateModel updater , dynamic shapeHelper ) {
2010-07-14 15:31:43 -07:00
var model = new PublishLaterViewModel ( part ) ;
2010-10-26 07:56:56 -07:00
2010-10-13 04:51:15 -07:00
updater . TryUpdateModel ( model , Prefix , null , null ) ;
2012-03-09 16:09:49 -08:00
var httpContext = _httpContextAccessor . Current ( ) ;
if ( httpContext . Request . Form [ "submit.Save" ] = = "submit.PublishLater" ) {
2013-11-28 22:24:40 +01:00
if ( ! String . IsNullOrWhiteSpace ( model . ScheduledPublishDate ) & & ! String . IsNullOrWhiteSpace ( model . ScheduledPublishTime ) ) {
try {
var utcDateTime = _dateServices . ConvertFromLocalString ( model . ScheduledPublishDate , model . ScheduledPublishTime ) ;
model . ScheduledPublishUtc = part . ScheduledPublishUtc . Value = utcDateTime ;
2011-11-09 16:21:26 -08:00
if ( model . ScheduledPublishUtc < _clock . UtcNow ) {
2013-11-28 22:24:40 +01:00
updater . AddModelError ( "ScheduledPublishUtcDate" , T ( "You cannot schedule a publishing date in the past." ) ) ;
2011-11-09 16:21:26 -08:00
}
else {
_publishLaterService . Publish ( model . ContentItem , model . ScheduledPublishUtc . Value ) ;
}
2010-12-10 11:12:29 -08:00
}
2013-11-28 22:24:40 +01:00
catch ( FormatException ) {
updater . AddModelError ( Prefix , T ( "'{0} {1}' could not be parsed as a valid date and time." , model . ScheduledPublishDate , model . ScheduledPublishTime ) ) ;
2010-12-10 11:12:29 -08:00
}
2010-11-04 13:20:46 -07:00
}
2013-11-28 22:24:40 +01:00
else if ( ! String . IsNullOrWhiteSpace ( model . ScheduledPublishDate ) | | ! String . IsNullOrWhiteSpace ( model . ScheduledPublishTime ) ) {
2010-12-10 11:12:29 -08:00
updater . AddModelError ( Prefix , T ( "Both the date and time need to be specified for when this is to be published. If you don't want to schedule publishing then click Save or Publish Now." ) ) ;
2010-11-04 13:20:46 -07:00
}
}
2010-10-15 11:55:48 -07:00
return ContentShape ( "Parts_PublishLater_Edit" ,
2010-10-13 04:51:15 -07:00
( ) = > shapeHelper . EditorTemplate ( TemplateName : TemplateName , Model : model , Prefix : Prefix ) ) ;
}
2011-03-14 17:14:03 -07:00
2011-03-16 10:32:22 -07:00
protected override void Importing ( PublishLaterPart part , ImportContentContext context ) {
var scheduledUtc = context . Attribute ( part . PartDefinition . Name , "ScheduledPublishUtc" ) ;
if ( scheduledUtc ! = null ) {
part . ScheduledPublishUtc . Value = XmlConvert . ToDateTime ( scheduledUtc , XmlDateTimeSerializationMode . Utc ) ;
}
}
2011-03-14 17:14:03 -07:00
protected override void Exporting ( PublishLaterPart part , ExportContentContext context ) {
2011-03-15 19:04:42 -07:00
var scheduled = part . ScheduledPublishUtc . Value ;
if ( scheduled ! = null ) {
context . Element ( part . PartDefinition . Name )
. SetAttributeValue ( "ScheduledPublishUtc" , XmlConvert . ToString ( scheduled . Value , XmlDateTimeSerializationMode . Utc ) ) ;
}
2011-03-14 17:14:03 -07:00
}
2010-07-14 15:31:43 -07:00
}
}