ngcp-panel/lib/NGCP/Panel/Field/DateTime.pm

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: