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 )