Embperl
view release on metacpan or search on metacpan
Embperl/Form/Control/grid.pm view on Meta::CPAN
my $form = $self -> form ;
my $options = $form -> {options} ;
$form -> new_controls ($fields, $options, undef, undef, $options -> {masks}, $options -> {defaults}, 1) ;
if ($self -> {line2})
{
my $ctl = [$self -> {line2}] ;
$form -> new_controls ($ctl, $options, undef, undef, $options -> {masks}, $options -> {defaults}, 1) ;
$self -> {line2} = $ctl -> [0] ;
}
return $self ;
}
# ------------------------------------------------------------------------------------------
#
# init_data_hash
#
sub init_data_hash
{
my ($rowno, $hashdata, $fields) = @_ ;
my $data ;
map
{
$data = $hashdata -> {$_} ;
my @data ;
if (ref $data eq 'HASH')
{
$data -> {'_key'} = $_ ;
foreach (@$fields)
{
push @data, $data -> {$_ -> {name}} ;
}
}
elsif (ref $data eq 'ARRAY')
{
push @data, $_, @$data ;
}
else
{
push @data, $_, $data ;
}
[$rowno++, @data ]
} sort keys %$hashdata ;
}
# ------------------------------------------------------------------------------------------
#
# init_data - daten aufteilen
#
sub init_data
{
my ($self, $req) = @_ ;
my $fdat = $req -> {docdata} || \%fdat ;
my $ldap = $req->{ldap};
my $name = $self->{name} ;
my $rowno = 1 ;
my $fields = $self -> {fields} ;
my @entries = ref $fdat->{$name} eq 'ARRAY'?@{$fdat->{$name}}:
ref $fdat->{$name} eq 'HASH' ?init_data_hash ($rowno, $fdat->{$name}, $fields):
split("\t",$fdat->{$name});
my $line2 = $self -> {line2} ;
my $order = $self -> {order} ;
my $order_desc = $self -> {order_desc} ;
if ($order)
{
if ($order !~ /^\d+$/)
{
my $i = 1 ;
foreach (@$fields)
{
$order = $i if ($_ -> {name} eq $order) ;
$i++ ;
}
}
if ($order_desc)
{
@entries = sort { $b -> [$order] cmp $a -> [$order] } @entries ;
}
else
{
@entries = sort { $a -> [$order] cmp $b -> [$order] } @entries ;
}
}
my $gridro = $self -> is_readonly ($req) ;
my $coloffset = defined ($self -> {coloffset})?$self -> {coloffset}:1 ;
my $data;
my $i = 0 ;
my $j ;
my $col ;
my $colval ;
my @rowclass ;
foreach my $entry (@entries)
{
$data = ref $entry?$entry:[$ldap?ecos::LdapBase -> splitAttrValue($entry):$entry];
if (ref $self -> {rowclass} eq 'CODE')
{
$rowclass[$i] = &{$self -> {rowclass}}($data, $self) ;
}
#my $co = $coloffset ;
#shift @$data while ($co-- > 0) ;
$j = 0 ;
foreach my $field ((@$fields, ($line2?($line2):())))
{
if (ref $data eq 'HASH')
{
$fdat->{"__${name}_${j}_$i"} = $data->{$field->{name}} ;
}
else
{
$col = exists $field -> {col}?$field -> {col}:$j ;
if ($colval = $field -> {colval})
{
$fdat->{"__${name}_${j}_$i"} = ($data->[$col+$coloffset] =~ /\Q$colval\E/)?1:0 ;
}
else
{
$fdat->{"__${name}_${j}_$i"} = $data->[$col+$coloffset] ;
}
}
if ($field -> can ('init_data'))
{
local $field->{name} = "__${name}_${j}_$i" ;
local $field -> {fullid} = "$self->{fullid}_${j}_$i" ;
local $field->{dataprefix} ;
$field -> init_data ($req, $self) if (!$gridro && $field -> should_init_data($req)) ;
}
$j++ ;
}
$i++ ;
}
$fdat->{"__${name}_max"} = $i?$i:1;
$self -> {rowclasses} ||= \@rowclass ;
}
# ------------------------------------------------------------------------------------------
#
# init_markup
#
sub init_markup
{
my ($self, $req, $grid, $method) = @_ ;
$self -> init_data ($req) if ($self -> is_readonly()) ;
my $fdat = $req -> {docdata} || \%fdat ;
my $name = $self->{name} ;
my $i ;
my $j ;
my $max = $fdat->{"__${name}_max"} ;
my $fields = $self -> {fields} ;
my $line2 = $self -> {line2} ;
foreach $i (0..$max, '%row%')
{
$j = 0 ;
foreach my $field ((@$fields, ($line2?($line2):())))
{
if ($field -> can ('init_markup'))
{
local $field->{name} = "__${name}_${j}_$i" ;
local $field -> {fullid} = "$self->{fullid}_${j}_$i" ;
local $field->{dataprefix} ;
$field -> init_markup ($req, $self, 'show_control') ;
}
$j++ ;
}
}
}
# ---------------------------------------------------------------------------
#
# should_init_data - returns true if init_data should be called for this control
#
sub should_init_data
{
my ($self, $req) = @_ ;
return !$self -> is_disabled ($req) ;
}
# ------------------------------------------------------------------------------------------
#
# prepare_fdat_sub - wird aufgerufen nachdem die einzelen Controls abgearbeitet sind abd
# bevor die daten zusammenfuehrt werden
#
sub prepare_fdat_sub
{
my ($self, $req) = @_ ;
}
# ------------------------------------------------------------------------------------------
#
# prepare_fdat - daten zusammenfuehren
#
sub prepare_fdat
{
my ($self, $req) = @_ ;
return if ($self -> is_readonly ($req)) ;
Embperl/Form/Control/grid.pm view on Meta::CPAN
$j = 0 ;
my $empty = 1 ;
my @data = $coloffset?($i+1):() ;
foreach my $field (@$fields)
{
$col = exists $field -> {col}?$field -> {col}:$j ;
if ($colval = $field -> {colval})
{
$data[$col+$coloffset] .= $colval if ($fdat->{"__${name}_${j}_$i"}) ;
}
else
{
$data[$col+$coloffset] = $fdat->{"__${name}_${j}_$i"} ;
}
$empty = 0 if ($data[$col+$coloffset] ne '') ;
$j++ ;
}
$val = $ldap?ecos::LdapBase -> joinAttrValue(\@data):\@data ;
push @rows, $val if (!$empty) ;
}
if ($self -> {datatype} eq 'hash')
{
if (exists $self -> {hasharray})
{
$fdat->{$name} = { map { ( shift @$_ => \@$_ ) } @rows } ;
}
else
{
$fdat->{$name} = { map { ($_->[1] => $_->[2]) } @rows } ;
}
}
else
{
$fdat->{$name} = \@rows ;
}
foreach my $key (keys %$fdat)
{
delete $fdat->{$key} if ($key =~ /^__\Q$name\E_/) ;
}
}
# ------------------------------------------------------------------------------------------
#
# get_display_text - returns the text that should be displayed
#
sub get_display_text
{
my ($self, $req, $value) = @_ ;
return '' if (!ref $value) ;
my $name = $self -> {name} ;
my $fields = $self -> {'fields'};
my $showfields = $req -> {'grid_gtf_' . $name} ;
my $allfields = $req -> {'grid_gta_' . $name} ;
if (!$showfields)
{
my $fdat = $req -> {docdata} || \%Embperl::fdat ;
my $max = $fdat -> {"__${name}_max"} ||= 0 ;
my $flat = $self -> {flat} ;
my @flat = split /\s*;\s*/, $flat ;
my $i = 0 ;
my @fields ;
my %fields ;
foreach my $field (@$fields)
{
$fields{$field -> {name}} = $i ;
push @fields, $field -> {name} ;
$i++ ;
}
@fields = @flat if (@flat) ;
$req -> {'grid_gtf_' . $name} = $showfields = \@fields ;
$req -> {'grid_gta_' . $name} = $allfields = \%fields ;
}
my @data ;
my $fieldname ;
my $j ;
my @rows ;
my $field ;
my $text ;
my @value ;
my $coloffset = defined ($self -> {coloffset})?$self -> {coloffset}:1 ;
my $col ;
my $colval ;
my $val ;
@value = (ref ($value) eq 'HASH')?init_data_hash (1, $value, $fields):@$value ;
foreach my $rowval (@value)
{
my @row ;
foreach $fieldname (@$showfields)
{
$j = $allfields -> {$fieldname} ;
$field = $fields -> [$j] ;
next if $field -> is_hidden ;
$col = exists $field -> {col}?$field -> {col}:$j ;
if ($colval = $field -> {colval})
{
$val = $rowval->[$col+$coloffset] =~ /\Q$colval\E/?1:0 ;
}
else
{
$val = $rowval->[$col+$coloffset] ;
}
$text = $field -> get_display_text ($req, $val, 1) ;
push @row, $text if ($text ne '') ;
}
push @rows, join (', ', @row) if (@row) ;
}
return join (' / ', @rows) ;
}
1 ;
__EMBPERL__
[# ---------------------------------------------------------------------------
#
( run in 1.429 second using v1.01-cache-2.11-cpan-39bf76dae61 )