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 )