public override IDisplayResult Display(DateTimeField field, BuildFieldDisplayContext context)
 {
     return(Initialize <DisplayDateTimeFieldViewModel>(GetDisplayShapeType(context), async model =>
     {
         model.LocalDateTime = field.Value == null ? (DateTime?)null : (await _localClock.ConvertToLocalAsync(field.Value.Value)).DateTime;
         model.Field = field;
         model.Part = context.ContentPart;
         model.PartFieldDefinition = context.PartFieldDefinition;
     })
            .Location("Detail", "Content")
            .Location("Summary", "Content"));
 }
Ejemplo n.º 2
0
 private async ValueTask PopulateViewModel(PublishLaterPart part, PublishLaterPartViewModel viewModel)
 {
     viewModel.ContentItem                   = part.ContentItem;
     viewModel.ScheduledPublishUtc           = part.ScheduledPublishUtc;
     viewModel.ScheduledPublishLocalDateTime = part.ScheduledPublishUtc.HasValue ?
                                               (await _localClock.ConvertToLocalAsync(part.ScheduledPublishUtc.Value)).DateTime :
                                               (DateTime?)null;
 }
Ejemplo n.º 3
0
        public async Task <IHtmlContent> DateTime(IHtmlHelper Html, DateTime?Utc, string Format)
        {
            Utc = Utc ?? _clock.UtcNow;
            var zonedTime = await _localClock.ConvertToLocalAsync(Utc.Value);

            if (Format == null)
            {
                Format = T[LongDateTimeFormat].Value;
            }

            return(Html.Raw(Html.Encode(zonedTime.ToString(Format, CultureInfo.CurrentUICulture))));
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Converts the given UTC date to the given time-zone by temporarily setting it in the HTTP context.
 /// </summary>
 /// <param name="dateTimeUtc">UTC date.</param>
 /// <param name="timeZoneId">IANA time-zone ID.</param>
 /// <param name="localClock">IANA time-zone ID.</param>
 /// <param name="httpContext">HTTP context to be used to temporarily set in the HTTP context.</param>
 /// <returns>Local date.</returns>
 public static async Task <DateTime> ConvertToLocalAsync(
     this ILocalClock localClock,
     DateTime dateTimeUtc,
     string timeZoneId,
     HttpContext httpContext) =>
 (await ExecuteInDifferentTimeZone(
      httpContext,
      timeZoneId,
      async() =>
      await localClock.ConvertToLocalAsync(
          new DateTimeOffset(
              dateTimeUtc.Kind != DateTimeKind.Utc ?
              new DateTime(dateTimeUtc.Ticks, DateTimeKind.Utc) :
              dateTimeUtc)))).DateTime;
Ejemplo n.º 5
0
        public async Task <IHtmlContent> DateTime(IHtmlHelper Html, DateTime?Utc, string Format)
        {
            Utc = Utc ?? _clock.UtcNow;
            var zonedTime = await _localClock.ConvertToLocalAsync(Utc.Value);

            if (Format == null)
            {
                // We use the Plural localizer so we don't need to resolve another one.
                // Internally it will use the string localizer by passing 0 as count.
                Format = T[LongDateTimeFormat, LongDateTimeFormat, 0].Value;
            }

            return(Html.Raw(Html.Encode(zonedTime.ToString(Format, CultureInfo.CurrentUICulture))));
        }
Ejemplo n.º 6
0
        public override IDisplayResult Edit(CommonPart part, BuildPartEditorContext context)
        {
            var settings = context.TypePartDefinition.GetSettings <CommonPartSettings>();

            if (settings.DisplayDateEditor)
            {
                return(Initialize <DateEditorViewModel>("CommonPart_Edit__Date", async model =>
                {
                    model.LocalDateTime = part.ContentItem.CreatedUtc.HasValue
                    ? (DateTime?)(await _localClock.ConvertToLocalAsync(part.ContentItem.CreatedUtc.Value)).DateTime
                    : null;
                }));
            }

            return(null);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Converts a <see cref="DateTime" /> to the specified <see cref="ITimeZone" /> instance.
        /// </summary>
        public static Task <DateTimeOffset> ConvertToLocalAsync(this ILocalClock localClock, DateTime dateTime)
        {
            DateTime dateTimeUtc;

            switch (dateTime.Kind)
            {
            case DateTimeKind.Utc:
                dateTimeUtc = dateTime;
                break;

            case DateTimeKind.Local:
                dateTimeUtc = dateTime.ToUniversalTime();
                break;

            default:     //DateTimeKind.Unspecified
                dateTimeUtc = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
                break;
            }

            return(localClock.ConvertToLocalAsync(new DateTimeOffset(dateTimeUtc)));
        }
Ejemplo n.º 8
0
        public async ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, TemplateContext context)
        {
            DateTimeOffset value = DateTimeOffset.MinValue;

            if (input.Type == FluidValues.String)
            {
                var stringValue = input.ToStringValue();

                if (stringValue == "now" || stringValue == "today")
                {
                    value = await _localClock.LocalNowAsync;
                }
                else
                {
                    if (!DateTimeOffset.TryParse(stringValue, context.CultureInfo, DateTimeStyles.AssumeUniversal, out value))
                    {
                        return(NilValue.Instance);
                    }
                }
            }
            else
            {
                switch (input.ToObjectValue())
                {
                case DateTime dateTime:
                    value = dateTime;
                    break;

                case DateTimeOffset dateTimeOffset:
                    value = dateTimeOffset;
                    break;

                default:
                    return(NilValue.Instance);
                }
            }

            return(new ObjectValue(await _localClock.ConvertToLocalAsync(value)));
        }
Ejemplo n.º 9
0
        public override IDisplayResult Edit(CommonPart part)
        {
            var settings = GetSettings(part);

            if (settings.DisplayDateEditor)
            {
                return(Initialize <DateEditorViewModel>("CommonPart_Edit__Date", async model =>
                {
                    model.LocalDateTime = part.ContentItem.CreatedUtc.Value == null ? (DateTime?)null : (await _localClock.ConvertToLocalAsync(part.ContentItem.CreatedUtc.Value)).DateTime;
                }));
            }

            return(null);
        }