Embperl
view release on metacpan or search on metacpan
Embperl/Form/Control/duration.pm view on Meta::CPAN
# ---------------------------------------------------------------------------
#
# init - init the new control
#
sub init
{
my ($self) = @_ ;
$self->{unit} ||= 'hh:mm' ;
return $self ;
}
# ------------------------------------------------------------------------------------------
#
# get_display_text - returns the text that should be displayed
#
sub get_display_text
{
my ($self, $req, $val) = @_ ;
return if ($val eq '') ;
my $aval = abs ($val) ;
my $sec = $aval % 60 ;
my $min = int ($aval / 60) % 60 ;
my $hour = int($aval / 3600) ;
my $days ;
if ($self -> {days})
{
$hour %= 24 ;
$days = int($aval / 86400) ;
}
my $duration = ($val<0?'-':'') . (sprintf('%d:%02d', $hour, $min)) ;
if ($sec != 0 && !$self -> {nosec})
{
$duration .= sprintf (':%02d', $sec) ;
}
if ($days != 0)
{
$duration = sprintf ('%dd %s', $days, $duration) ;
}
$duration = '-' . $duration if ($val<0) ;
return $duration ;
}
# ------------------------------------------------------------------------------------------
#
# init_data - daten aufteilen
#
sub init_data
{
my ($self, $req, $parentctrl, $force) = @_ ;
my $fdat = $req -> {docdata} || \%fdat ;
my $name = $self->{name} ;
my $time = $fdat->{$name} ;
return if ($time eq '' || ($req -> {"ef_duration_init_done_$name"} && !$force)) ;
$fdat->{$name} = $self -> get_display_text ($req, $time) ;
$req -> {"ef_duration_init_done_$name"} = 1 ;
}
# ---------------------------------------------------------------------------
#
# init_markup - add any dynamic markup to the form data
#
sub init_markup
{
my ($self, $req, $parentctl, $method) = @_ ;
return if (!$self -> is_readonly($req) && (! $parentctl || ! $parentctl -> is_readonly($req))) ;
return $self -> init_data ($req, $parentctl) ;
}
# ------------------------------------------------------------------------------------------
#
# prepare_fdat - daten zusammenfuehren
#
sub prepare_fdat
{
my ($self, $req) = @_ ;
my $fdat = $req -> {form} || \%fdat ;
my $name = $self->{name} ;
return if (!exists $fdat->{$name}) ;
my $val = $fdat->{$name} ;
return if ($val eq '') ;
if ($val =~ /[dhms]$/)
{
my %factor = ( 's' => 1, 'm' => 60, 'h' => 60 * 60, 'd' => 24 * 60 * 60 ) ;
my ($value, $unit) = ($val =~ /(\d+)([dhms])/ ) ;
my $factor = $factor { $unit } || 1 ;
$fdat->{$name} = $value * $factor ;
return ;
}
my $neg = 0 ;
$neg = 1 if ($val =~ s/^\s*-//) ;
my @vals = split (/:/, $val, 3) ;
$fdat->{$name} = @vals == 1?$vals[0] * 60:$vals[0] * 3600 + $vals[1] * 60 + $vals[2] ;
$fdat->{$name} = - $fdat{$name} if ($neg) ;
}
# ---------------------------------------------------------------------------
#
# get_validate_auto_rules - get rules for validation, in case user did
( run in 0.867 second using v1.01-cache-2.11-cpan-39bf76dae61 )