Embperl

 view release on metacpan or  search on metacpan

Embperl/Form/Control/mult.pm  view on Meta::CPAN

#   $Id$
#
###################################################################################

package Embperl::Form::Control::mult ;

use strict ;
use base 'Embperl::Form::Control::grid' ;

use vars qw{%fdat $epreq} ;

use Embperl::Inline ;

# ---------------------------------------------------------------------------
#
#   new - create a new control
#


sub new

    {
    my ($class, $args) = @_ ;

    my $self = Embperl::Form::ControlMultValue -> new($args) ;
    bless $self, $class ;
    
    $self -> init ;
    
    return $self ;
    }

# ---------------------------------------------------------------------------
#
#   init - init the new control
#

sub init

    {
    my ($self) = @_ ;
    
    my $form = $self -> form ;
    $self -> {fields} ||= [$self -> {field}] ;
    $self -> {class}  ||= 'ef-control-mult' ;
    my $options = $form -> {options} ;
    $form -> new_controls ($self -> {fields}, $options, undef, undef, $options -> {masks}, $options -> {defaults}, 1) ;

    return $self ;
    }

# ------------------------------------------------------------------------------------------
#
#   init_data - daten aufteilen
#

sub init_data
    {
    my ($self, $req) = @_ ;
    
    my $fdat  = $req -> {docdata} || \%fdat ;
    my $name    = $self->{name} ;
    my @entries = ref $fdat->{$name} eq 'ARRAY'?@{$fdat->{$name}}:split("\t",$fdat->{$name});

    my $field = $self -> {fields}[0] ;    
    my $i = 0 ;
    my @opt ;
    my @data ;
    foreach my $entry (@entries)
        {
        $fdat->{"__${name}__$i"} = $entry ;
        if (1) #$field -> can ('init_data'))
            {
            local $field->{name} = "__${name}__$i" ;
            local $field -> {fullid} = "$self->{fullid}__$i" ;
            $field -> init_data ($req, $self) if ($field -> can ('init_data')) ;
            push @data, $fdat->{$field->{name}} ;
            push @opt,  $fdat->{'_opt_' . $field->{name}} // $self -> get_display_text ($req, $entry) ;
            }
            
        $i++ ;
        }
    $fdat->{"__${name}_max"} = $i?$i:1;
    $fdat->{$name} //= join ("\t", @data);
    $fdat->{'_opt_' . $name} //= join (", ", @opt);
    }

# ------------------------------------------------------------------------------------------
#
#   prepare_fdat - daten zusammenfuehren
#

sub prepare_fdat
    {
    my ($self, $req) = @_ ;
    my $fdat    = $req -> {form} || \%fdat ;
    my $name    = $self->{name} ;
    my $max     = $fdat->{"__${name}_max"} || 1 ;

    my $field = $self -> {fields}[0] ;    
    my $fieldprep = (ref ($field) =~ /::/) && $field -> can ('prepare_fdat') ;
    my @rows;
    my $val ;
    if ($fieldprep && $fdat -> {$name} eq '')
        {
        if (exists ($fdat -> {"_opt_$name"}))
            {
            my @vals = split (/\s*,\s*/, $fdat -> {"_opt_$name"}) ;
            $max = @vals ;
            for (my $i = 0; $i < $max; $i++)
                {
                $val = $fdat->{"_opt___${name}__$i"} = shift @vals ;
                }
            }
        elsif (exists ($fdat -> {"_id_$name"}))
            {
            my @vals = split (/\s*,\s*/, $fdat -> {"_id_$name"}) ;
            $max = @vals ;
            for (my $i = 0; $i < $max; $i++)
                {
                $val = $fdat->{"_id___${name}__$i"} = shift @vals ;



( run in 0.444 second using v1.01-cache-2.11-cpan-39bf76dae61 )