$self->session( 'offset' => 0 );
- $self->redirect_to('/data/table');
+ $self->redirect_to('/data/items');
}
sub _filter_item {
my ( $self, $filters, $i ) = @_;
my $pass = 1;
foreach my $n ( keys %$filters ) {
- # filter must exists in element
- if ( ! defined $i->{$n} ) {
- $pass = 0;
- last;
+ my @filter_values = @{ $filters->{$n} };
+ my $include_missing = grep { /^_missing/ } @filter_values;
+ if ( ! exists $i->{$n} ) {
+ if ( $include_missing ) {
+ $pass = 1;
+ next;
+ } else {
+ $pass = 0;
+ last;
+ }
}
# and match any of values in element
my $have_values = 0;
foreach my $v ( @{ $i->{$n} } ) { # FIXME not array?
- $have_values ||= 1 if grep { m/^\Q$v\E$/ } @{ $filters->{$n} };
+ $have_values ||= 1 if grep { m/^\Q$v\E$/ } @filter_values;
}
if ( ! $have_values ) {
$pass = 0;
} @{ $data->{items} };
}
-sub table {
+sub items {
my $self = shift;
$self->redirect_to('/data/index') unless $data->{items};
# FIXME - multi-level sort
my $numeric = $self->_is_numeric($order);
+ my $missing = $numeric ? 0 : '';
+ no warnings qw(numeric);
my @sorted = sort {
- my ($v1,$v2) = ( join('', @{$a->{$order}}), join(' ', @{$b->{$order}}) );
+ my $v1 = exists $a->{$order} ? join('', @{$a->{$order}}) : $missing;
+ my $v2 = exists $b->{$order} ? join('', @{$b->{$order}}) : $missing;
($v1,$v2) = ($v2,$v1) if $sort eq 'd';
- $numeric
- ? $v1 <=> $v2
- : ( $v1 || '' ) cmp ( $v2 || '' )
- ;
+ $numeric ? $v1 <=> $v2 : $v1 cmp $v2 ;
} $self->_data_items;
# warn "# sorted ", dump @sorted;
my $self = shift;
$self->session('order', $self->param('order'));
$self->session('sort', $self->param('sort'));
- $self->redirect_to('/data/table');
+ $self->redirect_to('/data/items');
}
sub _is_numeric {
my $f = $self->session('filters');
delete $f->{$remove};
$self->session( 'filters' => $f );
- $self->redirect_to( '/data/table' );
+ $self->redirect_to( '/data/items' );
}
my $facet;
my $name = $self->param('name') || die "no name";
foreach my $i ( $self->_data_items ) {
- next unless exists $i->{$name};
- if ( ref $i->{$name} eq 'ARRAY' ) {
+ if ( ! exists $i->{$name} ) {
+ $facet->{ _missing }++;
+ } elsif ( ref $i->{$name} eq 'ARRAY' ) {
$facet->{$_}++ foreach @{ $i->{$name} };
} else {
$facet->{ $i->{$name} }++;