Fields: Fixing that a "not required" DateTimeField should store a null value (#7248), fixes #6966

This commit is contained in:
ViRuSTriNiTy
2019-08-26 16:58:21 +02:00
committed by Benedek Farkas
parent bae1bc6763
commit ecf3e66ee1
3 changed files with 19 additions and 12 deletions

View File

@@ -158,7 +158,7 @@ namespace Orchard.Fields.Drivers {
updater.AddModelError(GetPrefix(field, part), T("{0} is required.", T(field.DisplayName))); updater.AddModelError(GetPrefix(field, part), T("{0} is required.", T(field.DisplayName)));
} }
field.DateTime = value.HasValue ? value.Value : DateTime.MinValue; field.DateTime = value.HasValue ? value.Value : (System.DateTime?)null;
} }
return Editor(part, field, shapeHelper); return Editor(part, field, shapeHelper);

View File

@@ -6,23 +6,30 @@ using Orchard.Fields.Settings;
namespace Orchard.Fields.Fields { namespace Orchard.Fields.Fields {
public class DateTimeField : ContentField { public class DateTimeField : ContentField {
public DateTime DateTime { public DateTime? DateTime {
get { get {
var settings = this.PartFieldDefinition.Settings.GetModel<DateTimeFieldSettings>(); var settings = this.PartFieldDefinition.Settings.GetModel<DateTimeFieldSettings>();
var value = Storage.Get<DateTime>(); var value = Storage.Get<DateTime?>();
if (settings.Display == DateTimeFieldDisplays.DateOnly) { if (value.HasValue) {
return new DateTime(value.Year, value.Month, value.Day); if (settings.Display == DateTimeFieldDisplays.DateOnly) {
return new DateTime(value.Value.Year, value.Value.Month, value.Value.Day);
}
} }
return value; return value;
} }
set { set {
var settings = this.PartFieldDefinition.Settings.GetModel<DateTimeFieldSettings>(); if (value.HasValue) {
if (settings.Display == DateTimeFieldDisplays.DateOnly) { var settings = this.PartFieldDefinition.Settings.GetModel<DateTimeFieldSettings>();
Storage.Set(new DateTime(value.Year, value.Month, value.Day)); if (settings.Display == DateTimeFieldDisplays.DateOnly) {
Storage.Set(new DateTime(value.Value.Year, value.Value.Month, value.Value.Day));
}
else {
Storage.Set(value.Value);
}
} }
else { else {
Storage.Set(value); Storage.Set<System.DateTime?>(null);
} }
} }
} }

View File

@@ -55,9 +55,9 @@ namespace Orchard.Fields.Tokens {
; ;
context.For<DateTimeField>("DateTimeField") context.For<DateTimeField>("DateTimeField")
.Token("Date", (Func<DateTimeField, object>)(d => d.DateTime.ToString(_dateTimeLocalization.ShortDateFormat, _cultureInfo.Value))) .Token("Date", (Func<DateTimeField, object>)(d => d.DateTime.HasValue ? d.DateTime.Value.ToString(_dateTimeLocalization.ShortDateFormat, _cultureInfo.Value) : null))
.Token("Time", (Func<DateTimeField, object>)(d => d.DateTime.ToString(_dateTimeLocalization.ShortTimeFormat, _cultureInfo.Value))) .Token("Time", (Func<DateTimeField, object>)(d => d.DateTime.HasValue ? d.DateTime.Value.ToString(_dateTimeLocalization.ShortTimeFormat, _cultureInfo.Value) : null))
.Token("DateTime", (Func<DateTimeField, object>)(d => d.DateTime.ToString(_dateTimeLocalization.ShortDateTimeFormat, _cultureInfo.Value))) .Token("DateTime", (Func<DateTimeField, object>)(d => d.DateTime.HasValue ? d.DateTime.Value.ToString(_dateTimeLocalization.ShortDateTimeFormat, _cultureInfo.Value) : null))
.Chain("DateTime", "Date", (Func<DateTimeField, object>)(field => field.DateTime)) .Chain("DateTime", "Date", (Func<DateTimeField, object>)(field => field.DateTime))
; ;
} }