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 )