Handle publishing in UTC
This commit is contained in:
@@ -142,8 +142,8 @@ namespace Archetype.Models
|
||||
internal bool IsDisabled()
|
||||
{
|
||||
return Disabled
|
||||
|| (ReleaseDate.HasValue && ReleaseDate > DateTime.Now)
|
||||
|| (ExpireDate.HasValue && DateTime.Now > ExpireDate);
|
||||
|| (ReleaseDate.HasValue && ReleaseDate > DateTime.UtcNow)
|
||||
|| (ExpireDate.HasValue && DateTime.UtcNow > ExpireDate);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Archetype.Extensions;
|
||||
using Archetype.Models;
|
||||
using ClientDependency.Core;
|
||||
using Newtonsoft.Json;
|
||||
using Umbraco.Core;
|
||||
@@ -175,6 +176,10 @@ namespace Archetype.PropertyEditors
|
||||
var uploadedFiles = editorValue.AdditionalData.ContainsKey("files") ? editorValue.AdditionalData["files"] as IEnumerable<ContentItemFile> : null;
|
||||
foreach (var fieldset in archetype.Fieldsets)
|
||||
{
|
||||
// make sure the publishing dates are in UTC
|
||||
fieldset.ReleaseDate = EnsureUtcDate(fieldset.ReleaseDate);
|
||||
fieldset.ExpireDate = EnsureUtcDate(fieldset.ExpireDate);
|
||||
|
||||
// assign an id to the fieldset if it has none (e.g. newly created fieldset)
|
||||
fieldset.Id = fieldset.Id == Guid.Empty ? Guid.NewGuid() : fieldset.Id;
|
||||
// find the corresponding fieldset in the current Archetype value (if any)
|
||||
@@ -237,6 +242,20 @@ namespace Archetype.PropertyEditors
|
||||
? new ArchetypePropertyEditor()
|
||||
: (PropertyEditor) new TextboxPropertyEditor();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensures that a datetime is in UTC
|
||||
/// </summary>
|
||||
/// <param name="dateTime">The datetime</param>
|
||||
/// <returns>The datetime in UTC (or null if it's not set)</returns>
|
||||
private DateTime? EnsureUtcDate(DateTime? dateTime)
|
||||
{
|
||||
if(dateTime.HasValue == false || dateTime.Value.Kind == DateTimeKind.Utc)
|
||||
{
|
||||
return dateTime;
|
||||
}
|
||||
return new DateTime(dateTime.Value.Ticks, DateTimeKind.Utc);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -281,6 +281,8 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
|
||||
if ($scope.canPublish() === false) {
|
||||
return false;
|
||||
}
|
||||
// NOTE: all comparison is done in local datetime
|
||||
// - that's fine because the selected local datetimes will be converted to UTC datetimes when submitted
|
||||
if (fieldset.expireDateModel && fieldset.expireDateModel.value) {
|
||||
// an expired release affects the fieldset
|
||||
return moment() > moment(fieldset.expireDateModel.value);
|
||||
@@ -321,16 +323,18 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
|
||||
}
|
||||
|
||||
function addCustomPropertiesToFieldset(fieldset) {
|
||||
// create models for publish configuration
|
||||
|
||||
// create models for publish configuration (utilizing the built-in datepicker data type)
|
||||
// NOTE: all datetimes must be converted from UTC to local
|
||||
fieldset.releaseDateModel = {
|
||||
alias: _.uniqueId("archetypeReleaseDate_"),
|
||||
view: "datepicker",
|
||||
value: fieldset.releaseDate
|
||||
value: fromUtc(fieldset.releaseDate)
|
||||
};
|
||||
fieldset.expireDateModel = {
|
||||
alias: _.uniqueId("archetypeExpireDate_"),
|
||||
view: "datepicker",
|
||||
value: fieldset.expireDate
|
||||
value: fromUtc(fieldset.expireDate)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -555,10 +559,24 @@ angular.module("umbraco").controller("Imulus.ArchetypeController", function ($sc
|
||||
}
|
||||
$scope.submitWatcherOnSubmit = function () {
|
||||
_.each($scope.model.value.fieldsets, function(fieldset) {
|
||||
// extract the publish configuration from the fieldsets
|
||||
fieldset.releaseDate = fieldset.releaseDateModel.value;
|
||||
fieldset.expireDate = fieldset.expireDateModel.value;
|
||||
// extract the publish configuration from the fieldsets (and convert local datetimes to UTC)
|
||||
fieldset.releaseDate = toUtc(fieldset.releaseDateModel.value);
|
||||
fieldset.expireDate = toUtc(fieldset.expireDateModel.value);
|
||||
});
|
||||
$scope.$broadcast("archetypeFormSubmitting");
|
||||
}
|
||||
|
||||
function toUtc(date) {
|
||||
if (!date) {
|
||||
return null;
|
||||
}
|
||||
return moment(date, "YYYY-MM-DD HH:mm:ss").utc().toDate();
|
||||
}
|
||||
|
||||
function fromUtc(date) {
|
||||
if (!date) {
|
||||
return null;
|
||||
}
|
||||
return moment(moment.utc(date).toDate()).format("YYYY-MM-DD HH:mm:ss")
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user