foreach my $i ( 0 .. $#$items ) {
if ( defined $items->[$i]->{$name} ) {
- foreach my $v ( @{ $items->[$i]->{$name} } ) {
+ my $row = $items->[$i]->{$name};
+ $row = [ $row ] unless ref $row eq 'ARRAY'; # FIXME probably wrong place
+ foreach my $v ( @$row ) {
if ( defined $filter_hash->{ $v } ) {
$filtered_items->{$i}++;
}
# fix offset when changing limit
$offset = int( $offset / $limit ) * $limit;
+ if ( ! grep { /^\Q$order\E$/ } @columns ) {
+ $order = $columns[0];
+ $self->session( order => $order );
+ }
my $sorted = $self->_data_sorted_by( $order );
my @filter_names;
my $data = $self->_loaded('data');
my $code = $self->_param_scalar('code','');
- $code =~ s{\n+$}{}s;
+ $code =~ s{[\r\n]+$}{}s;
my $commit = $self->param('commit');
my $test = $self->param('test');
+ my $cols_changed;
+
if ( $code && ( $test || $commit ) ) {
# XXX find columns used in code snippet and show them to user
- foreach my $column ( $code =~ m/\$rec->{(.+?)}/g ) {
+ foreach my $column ( $code =~ m/\$row->{(.+?)}/g ) {
if ( $column =~ s/^(['"])// ) {
$column =~ s/$1$//;
}
+ $cols_changed->{$column}++;
next if grep { /$column/ } @columns;
+ $cols_changed->{$column}++;
unshift @columns, $column;
if ( $commit ) {
$self->session('columns', [ @columns ]);
$loaded->{$path}->{columns} = [ @columns ];
+ __path_modified( $path, 2 );
}
}
}
warn "# commit on ", $#$filtered + 1, " items:\n$code\n";
foreach ( 0 .. $#$filtered ) {
my $i = $filtered->[$_];
- my $rec = $data->{items}->[$i];
+ my $row = $data->{items}->[$i];
eval $code;
}
+ $code = '';
}
my $sorted_items;
last unless defined $filtered->[$i];
$i = $from_end - $i if $from_end;
my $id = $filtered->[$i];
- my $rec = $data->{items}->[ $id ];
- $rec->{_row_id} ||= $id;
+ my $row = $data->{items}->[ $id ];
if ( $code && $test ) {
- $rec = Storable::dclone $rec;
+ $row = Storable::dclone $row;
eval $code;
if ( $@ ) {
warn "ERROR evaling\n$code\n$@";
$self->stash('eval_error', $@) if $@;
} else {
- warn "EVAL ",dump($rec);
+ warn "EVAL ",dump($row);
}
}
- push @$sorted_items, $rec;
+ $row->{_row_id} ||= $id;
+ push @$sorted_items, $row;
}
warn "# sorted_items ", $#$sorted_items + 1, " offset $offset limit $limit order $sort";
numeric => { map { $_, $self->_is_numeric($_) } @columns },
filters => $self->_current_filters,
code => $code,
+ cols_changed => $cols_changed,
);
}