-# Filters
- my $linefilter = "";
-# warn "filtres ".@filters[0];
-# warn "filtres ".@filters[4];
-# warn "filtres ".@filters[5];
-# warn "filtres ".@filters[6];
-
- $linefilter = @$filters[0] if ($line =~ /categorycode/ ) ;
- $linefilter = @$filters[1] if ($line =~ /zipcode/ ) ;
- $linefilter = @$filters[2] if ($line =~ /branchcode/ ) ;
- $linefilter = @$filters[5] if ($line =~ /sex/);
- $linefilter = @$filters[6] if ($line =~ /sort1/ ) ;
- $linefilter = @$filters[7] if ($line =~ /sort2/ ) ;
-#
- my $colfilter = "";
- $colfilter = @$filters[0] if ($column =~ /categorycode/);
- $colfilter = @$filters[1] if ($column =~ /zipcode/);
- $colfilter = @$filters[2] if ($column =~ /branchcode/);
- $colfilter = @$filters[5] if ($column =~ /sex/);
- $colfilter = @$filters[6] if ($column =~ /sort1/);
- $colfilter = @$filters[7] if ($column =~ /sort2/);
-
- my @loopfilter;
- for (my $i=0;$i<=7;$i++) {
- my %cell;
- if ( @$filters[$i] ) {
- if($i == 3 or $i == 4){
- $cell{filter} .= format_date(@$filters[$i]);
- }else{
- $cell{filter} .= @$filters[$i];
- }
-
- $cell{crit} .="Cat Code " if ($i==0);
- $cell{crit} .="Zip Code" if ($i==1);
- $cell{crit} .="Branchcode" if ($i==2);
- $cell{crit} .="Date of Birth" if ($i==3);
- $cell{crit} .="Date of Birth" if ($i==4);
- $cell{crit} .="Sex" if ($i==5);
- $cell{crit} .="Sort1" if ($i==6);
- $cell{crit} .="Sort2" if ($i==7);
- push @loopfilter, \%cell;
- }
- }
+ # check parameters
+ my @valid_names = qw(categorycode zipcode branchcode sex sort1 sort2);
+ my @attribute_types = C4::Members::AttributeTypes::GetAttributeTypes;
+ if ($line =~ /^patron_attr\.(.*)/) {
+ my $attribute_type = $1;
+ return unless (grep {$attribute_type eq $_->{code}} @attribute_types);
+ } else {
+ return unless (grep /^$line$/, @valid_names);
+ }
+ if ($column =~ /^patron_attr\.(.*)/) {
+ my $attribute_type = $1;
+ return unless (grep {$attribute_type eq $_->{code}} @attribute_types);
+ } else {
+ return unless (grep /^$column$/, @valid_names);
+ }
+ return if ($digits and $digits !~ /^\d+$/);
+ return if ($status and (grep /^$status$/, qw(debarred gonenoaddress lost)) == 0);
+ return if ($activity and (grep /^$activity$/, qw(active nonactive)) == 0);
+
+ # Filters
+ my $linefilter;
+ if ( $line =~ /categorycode/ ) { $linefilter = @$filters[0]; }
+ elsif ( $line =~ /zipcode/ ) { $linefilter = @$filters[1]; }
+ elsif ( $line =~ /branchcode/ ) { $linefilter = @$filters[2]; }
+ elsif ( $line =~ /sex/ ) { $linefilter = @$filters[5]; }
+ elsif ( $line =~ /sort1/ ) { $linefilter = @$filters[6]; }
+ elsif ( $line =~ /sort2/ ) { $linefilter = @$filters[7]; }
+ elsif ( $line =~ /^patron_attr\.(.*)$/ ) { $linefilter = $attr_filters->{$1}; }
+ else { $linefilter = ''; }
+
+ my $colfilter;
+ if ( $column =~ /categorycode/ ) { $colfilter = @$filters[0]; }
+ elsif ( $column =~ /zipcode/ ) { $colfilter = @$filters[1]; }
+ elsif ( $column =~ /branchcode/) { $colfilter = @$filters[2]; }
+ elsif ( $column =~ /sex/) { $colfilter = @$filters[5]; }
+ elsif ( $column =~ /sort1/) { $colfilter = @$filters[6]; }
+ elsif ( $column =~ /sort2/) { $colfilter = @$filters[7]; }
+ elsif ( $column =~ /^patron_attr\.(.*)$/) { $colfilter = $attr_filters->{$1}; }
+ else { $colfilter = ''; }
+
+ my @loopfilter;
+ foreach my $i (0 .. scalar @$filters) {
+ my %cell;
+ if ( @$filters[$i] ) {
+ if ($i == 3 or $i == 4) {
+ $cell{filter} = eval { output_pref( { dt => dt_from_string( @$filters[$i] ), dateonly => 1 }); }
+ if ( @$filters[$i] );
+ } else {
+ $cell{filter} = @$filters[$i];
+ }
+
+ if ( $i == 0) { $cell{crit} = "Cat code"; }
+ elsif ( $i == 1 ) { $cell{crit} = "ZIP/Postal code"; }
+ elsif ( $i == 2 ) { $cell{crit} = "Branch code"; }
+ elsif ( $i == 3 ||
+ $i == 4 ) { $cell{crit} = "Date of birth"; }
+ elsif ( $i == 5 ) { $cell{crit} = "Sex"; }
+ elsif ( $i == 6 ) { $cell{crit} = "Sort1"; }
+ elsif ( $i == 7 ) { $cell{crit} = "Sort2"; }
+ else { $cell{crit} = "Unknown"; }
+
+ push @loopfilter, \%cell;
+ }
+ }
+ foreach my $type (keys %$attr_filters) {
+ if($attr_filters->{$type}) {
+ push @loopfilter, {
+ crit => "Attribute $type",
+ filter => $attr_filters->{$type}
+ }
+ }
+ }
+
+ my @branchcodes = map { $_->branchcode } Koha::Libraries->search;