Index: sections.html
===================================================================
--- sections.html (revision 385)
+++ sections.html (revision 386)
@@ -244,11 +244,21 @@
foreach my $prop ( @props ) {
my $attr = $prop->{attr};
my $value = ref $fields && exists $fields->{$attr} ? $fields->{$attr} : undef;
- if ( $prop->{db_type} eq 'float' ) {
- for ( $value ) {
- s/\,/\./;
- s/^\s+//;
- s/\s+$//;
+ if ( exists $prop->{db_type} ) {
+ if ( $prop->{db_type} eq 'float' ) {
+ for ( $value ) {
+ s/\,/\./;
+ s/^\s+//;
+ s/\s+$//;
+ }
+ if ( $value eq '' ) {
+ $value = undef;
+ }
+ } elsif ( $prop->{db_type} eq 'integer' || $prop->{db_type} eq 'smallint' ) {
+ $value =~ s/\D//sg if $value;
+ if ( $value eq '' ) {
+ $value = undef;
+ }
}
}
if ( $prop->{type} eq 'checkbox' ) {
@@ -291,6 +301,53 @@
}
$m->redirect("sections.html?id=".$id.($return_params ? '&'.$return_params : ''));
}
+ if ( $ARGS{move} || $ARGS{link} ) {
+ my $return_params = join ('&', map { $_.'='.$filter_params{$_} } grep { $_ ne 's' } keys %filter_params );
+ if ( exists $ARGS{tree} && $ARGS{tree} && $ARGS{tree} != $owner->id ) {
+ my %updated;
+ while ( my ($field, $value) = each %ARGS ) {
+ if ( $field =~ /^update_(\d+)_(\w+)$/ ) {
+ my $oid = $1;
+ my $attr = $2;
+ $updated{$oid}{$attr} = $value;
+ }
+ }
+ my %classes = map { $_->{class} => 1 } values %updated;
+ my $parent_new = $keeper->get_section_by_id( $ARGS{tree} );
+ my $document_access = $user->section_accesses($user, $parent_new->id);
+ if ( $document_access == 2 ) {
+ foreach my $update_class ( keys %classes ) {
+ my @ids;
+ while ( my ($oid, $attr) = each %updated) {
+ push @ids, $oid if $attr->{class} eq $update_class;
+ }
+ my @objects = $keeper->get_documents (
+ id => \@ids,
+ class => $update_class
+ ) if @ids;
+ my ($prop) = grep { $_->{attr} eq 'sections' } $update_class->new( $keeper )->structure;
+ if ( ref $prop && exists $prop->{db_type} && exists $prop->{db_field} ) {
+ foreach my $object ( @objects ) {
+ if ( $prop->{db_type} eq 'integer[]' ) {
+ my @sections = grep { $_ != $parent_new->id } $object->sections;
+ if ( @sections && $sections[0] == $owner->id ) {
+ unshift @sections, $parent_new->id;
+ } else {
+ push @sections, $parent_new->id;
+ }
+ @sections = grep { $_ == $owner->id } @sections if $ARGS{move};
+ $object->sections( @sections );
+ } else {
+ $object->sections( $parent_new->id );
+ }
+ $object->store;
+ }
+ }
+ }
+ }
+ }
+ $m->redirect("sections.html?id=".$id.($return_params ? '&'.$return_params : ''));
+ }
my %filter=();
my $nothing_found = 0;
@@ -320,11 +377,11 @@
$filter{$search_by} = int($search);
} elsif ( ref $prop && ($prop->{type} eq 'pickup' || $prop->{type} eq 'lookup') && $search =~ /\D/ ) {
my $lookup_opts = $prop->{lookup_opts};
- if ( ref $lookup_opts && exists $lookup_opts->{class} ) {
+ if ( ref $lookup_opts && (exists $lookup_opts->{class} || exists $lookup_opts->{table}) ) {
my $search_field = exists $lookup_opts->{search_by} ? $lookup_opts->{search_by} : 'name';
my @ids = $keeper->get_documents (
ids => 1,
- class => $lookup_opts->{class},
+ exists $lookup_opts->{class} ? (class => $lookup_opts->{class}) : (table => $lookup_opts->{table}),
ilike => 1,
$search_field => '%'.$search.'%',
);
@@ -372,7 +429,6 @@
@documents = $keeper->get_documents(%filter, %order, limit=>$n, offset=>$first);
}
}
-
# набор колонок таблицы документов...
my @columns = $sorted ? ({attr => '_sort_', name => 'N'}) : ();