diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Tokens/FieldTokens.cs b/src/Orchard.Web/Modules/Orchard.Fields/Tokens/FieldTokens.cs index dd6b6ed25..199d495f6 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Tokens/FieldTokens.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Tokens/FieldTokens.cs @@ -2,6 +2,9 @@ using Orchard.Events; using Orchard.Fields.Fields; using Orchard.Localization; +using Orchard.Services; +using Orchard.Core.Shapes.Localization; +using System.Globalization; namespace Orchard.Fields.Tokens { public interface ITokenProvider : IEventHandler { @@ -11,6 +14,27 @@ namespace Orchard.Fields.Tokens { public class FieldTokens : ITokenProvider { + private readonly IClock _clock; + private readonly IDateTimeLocalization _dateTimeLocalization; + private readonly IWorkContextAccessor _workContextAccessor; + private readonly Lazy _cultureInfo; + private readonly Lazy _timeZone; + + + public FieldTokens( + IClock clock, + IDateTimeLocalization dateTimeLocalization, + IWorkContextAccessor workContextAccessor) { + _clock = clock; + _dateTimeLocalization = dateTimeLocalization; + _workContextAccessor = workContextAccessor; + + _cultureInfo = new Lazy(() => CultureInfo.GetCultureInfo(_workContextAccessor.GetContext().CurrentCulture)); + _timeZone = new Lazy(() => _workContextAccessor.GetContext().CurrentTimeZone); + + T = NullLocalizer.Instance; + } + public Localizer T { get; set; } public void Describe(dynamic context) { @@ -24,6 +48,7 @@ namespace Orchard.Fields.Tokens { context.For("DateTimeField", T("Date Time Field"), T("Tokens for Date Time Fields")) .Token("Date", T("Date"), T("The date only.")) .Token("Time", T("Time"), T("The time only.")) + .Token("DateTime", T("Date Time"), T("The date and time.")) ; context.For("MediaPickerField", T("Media Picker Field"), T("Tokens for Media Picker Fields")) @@ -47,8 +72,10 @@ namespace Orchard.Fields.Tokens { ; context.For("DateTimeField") - .Token("Date", (Func)(field => field.DateTime)) - .Chain("Date", "Date", (Func)(field => field.DateTime)) + .Token("Date", (Func)(d => d.DateTime.ToString(_dateTimeLocalization.ShortDateFormat.Text, _cultureInfo.Value))) + .Token("Time", (Func)(d => d.DateTime.ToString(_dateTimeLocalization.ShortTimeFormat.Text, _cultureInfo.Value))) + .Token("DateTime", (Func)(d => d.DateTime.ToString(_dateTimeLocalization.ShortDateFormat.Text + " " + _dateTimeLocalization.ShortTimeFormat.Text, _cultureInfo.Value))) + .Chain("DateTime", "Date", (Func)(field => field.DateTime)) ; context.For("MediaPickerField") @@ -61,11 +88,6 @@ namespace Orchard.Fields.Tokens { .Token("Width", (Func)(field => field.Width)) .Token("Height", (Func)(field => field.Height)) ; - - context.For("DateTimeField") - .Token("Date", (Func)(field => field.DateTime)) - .Chain("Date", "Date", (Func)(field => field.DateTime)) - ; } } } \ No newline at end of file