69 lines
1.7 KiB
69 lines
1.7 KiB
package NGCP::Panel::Field::DateTime;
|
|
use HTML::FormHandler::Moose;
|
|
|
|
use Sipwise::Base;
|
|
use NGCP::Panel::Utils::DateTime qw//;
|
|
extends 'HTML::FormHandler::Field::Text';
|
|
|
|
has '+deflate_method' => ( default => sub { \&datetime_deflate } );
|
|
has '+inflate_method' => ( default => sub { \&datetime_inflate } );
|
|
|
|
sub datetime_deflate { # deflate: DateTime (in any tz) -> User representation (with correct tz)
|
|
my ( $self, $value ) = @_;
|
|
|
|
my $c = $self->form->ctx;
|
|
|
|
if(blessed($value) && $value->isa('DateTime')) {
|
|
if($c && $c->session->{user_tz}) {
|
|
$value->set_time_zone('local'); # starting point for conversion
|
|
$value->set_time_zone($c->session->{user_tz}); # desired time zone
|
|
}
|
|
return $value->ymd('-') . ' ' . $value->hms(':');
|
|
} else {
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
sub datetime_inflate { # inflate: User entry -> DateTime -> Plaintext but converted
|
|
my ( $self, $value ) = @_;
|
|
|
|
my $c = $self->form->ctx;
|
|
|
|
my $tz;
|
|
if($c && $c->session->{user_tz}) {
|
|
$tz = $c->session->{user_tz};
|
|
}
|
|
|
|
my $date = NGCP::Panel::Utils::DateTime::from_forminput_string($value, $tz);
|
|
unless ($date) {
|
|
$self->add_error('Could not parse DateTime input. Should be one of (Y-m-d H:M:S, Y-m-d H:M, Y-m-d).');
|
|
return;
|
|
}
|
|
$date->set_time_zone('local'); # convert to local
|
|
|
|
return $date->ymd('-') . ' ' . $date->hms(':');
|
|
}
|
|
|
|
no Moose;
|
|
1;
|
|
|
|
=head1 NAME
|
|
|
|
NGCP::Panel::Field::DateTime
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
|
=head1 AUTHOR
|
|
|
|
Gerhard Jungwirth
|
|
|
|
=head1 LICENSE
|
|
|
|
This library is free software. You can redistribute it and/or modify
|
|
it under the same terms as Perl itself.
|
|
|
|
=cut
|
|
|
|
# vim: set tabstop=4 expandtab:
|