]> Frank Brehm's Git Trees - books.git/commitdiff
Auch nach Buechern ohne bekannten Aufbewahrungsort selektierbar
authorFrank Brehm <frank@brehm-online.com>
Wed, 13 Jan 2010 23:13:54 +0000 (23:13 +0000)
committerFrank Brehm <frank@brehm-online.com>
Wed, 13 Jan 2010 23:13:54 +0000 (23:13 +0000)
lib/FrBr/Books/Controller/Books.pm
lib/FrBr/Books/Util/Book.pm

index fa781bc2db6c0e0acd6d254807a7560ad49fbf2c..75d8dca909591d967187a50873c7fac0eb622c3b 100644 (file)
@@ -57,6 +57,7 @@ sub auto : Private {
     $c->stash->{'return_target_action'} = $c->web_path("/books");
 
        $c->stash->{'booklist_filter'} = $c->session->{'booklist_filter'} if $c->session->{'booklist_filter'};
+    $c->log->debug( get_output_string( $K, "Buchlistenfilter: ", $c->session->{'booklist_filter'} ) ) if $c->stash->{'debug_level'} >= 2;
 
     $c->stash->{'cssfiles'} = [] unless $c->stash->{'cssfiles'};
     push @{$c->stash->{'cssfiles'}}, 'books/styles.css';
@@ -213,6 +214,7 @@ sub list : Local {
     $c->session->{'return_target_del'} = $c->web_path("/books/list");
     $c->session->{'return_target_new'} = $c->web_path("/books/list");
     $c->session->{'from_book_list'} = 1;
+    $c->log->debug( get_output_string( $K, "Buchlistenfilter: ", $c->session->{'booklist_filter'} ) ) if $c->stash->{'debug_level'} >= 2;
 }
 
 #-------------------------------------------------------
@@ -239,6 +241,12 @@ sub filter : Local {
 
     $self->prepare_data_structures($c);
 
+    $c->stash->{'ortsliste'}{-1} = 'unbekannt';
+    unshift @{ $c->stash->{'orts_ids'} }, -1;
+
+    $c->stash->{'verlagsliste'}{-1} = 'unbekannt';
+    unshift @{ $c->stash->{'verlags_ids'} }, -1;
+
     $c->stash->{'template'} = 'books/filter.tt2';
 
     # Neue Filterkriterien setzen
@@ -298,7 +306,7 @@ sub filter : Local {
                        my $verlage = {};
                        my $verlags_ids = ref($c->request->params->{'verlags_ids'}) eq 'ARRAY' ? $c->request->params->{'verlags_ids'} : [$c->request->params->{'verlags_ids'}];
                        for my $id ( @$verlags_ids ) {
-                               if ( defined $id and $id =~ /(\d+)/ ) {
+                               if ( defined $id and $id =~ /(-?\d+)/ ) {
                                        my $aid = $1;
                                        $verlage->{$aid} = 1 if $aid;
                                }
@@ -309,27 +317,36 @@ sub filter : Local {
                        my $orte = {};
                        my $orts_ids = ref($c->request->params->{'orts_ids'}) eq 'ARRAY' ? $c->request->params->{'orts_ids'} : [$c->request->params->{'orts_ids'}];
                        for my $id ( @$orts_ids ) {
-                               if ( defined $id and $id =~ /(\d+)/ ) {
+                               if ( defined $id and $id =~ /(-?\d+)/ ) {
                                        my $aid = $1;
                                        $orte->{$aid} = 1 if $aid;
                                }
                        }
-                       $filter->{'orte'} = $orte if ( scalar( keys %$orte ) );
+                       if ( scalar( keys %$orte ) ) {
+                               $filter->{'orte'} = $orte if ( scalar( keys %$orte ) );
+                       }
+                       else {
+                               delete $filter->{'orte'} if exists $filter->{'orte'};
+                       }
 
                        $c->stash->{'booklist_filter'}   = $filter;
                        $c->session->{'booklist_filter'} = $filter;
 
+                       $c->log->debug(  get_output_string( $K, "Filter: ", $filter ) ) if $c->stash->{'debug_level'} >= 2;
+
                }
                else {
 
                        $c->stash->{'booklist_filter'}   = undef;
                        $c->session->{'booklist_filter'} = undef;
+                       $c->log->debug(  get_output_string( $K, "Filter gelöscht." ) ) if $c->stash->{'debug_level'} >= 2;
                
                }
 
                $c->stash->{'booklist_filter_changed'} = 1;
 
        }
+    $c->log->debug( get_output_string( $K, "Buchlistenfilter: ", $c->session->{'booklist_filter'} ) ) if $c->stash->{'debug_level'} >= 2;
 
     return 1;
 
index 1b0d44fda073eaf58f254697f908702eed15e2f6..049b41d74ac0d8779062d9ad1512123dd3228041 100644 (file)
@@ -271,10 +271,31 @@ sub get_booklist {
         if ( $filter->{'orte'} and scalar( keys %{ $filter->{'orte'} } ) ) {
             my $ids = [ keys( %{ $filter->{'orte'} } ) ];
             if ( scalar(@$ids) > 1 ) {
-                $b_search_params->{'me.orts_id'} = { '-in' => $ids };
+                if ( exists $filter->{'orte'}{-1} ) {
+                    my $or = [];
+                    push @$or, 'me.orts_id' => \'IS NULL';
+                    #delete $filter->{'orte'}{-1};
+                    my $oids = [ grep { $_ >= 0 } keys %{ $filter->{'orte'} } ];
+                    if ( scalar(@$oids) > 1 ) {
+                        push @$or, 'me.orts_id' => { '-in' => $oids };
+                    }
+                    else {
+                        push @$or, 'me.orts_id' => $oids->[0];
+                    }
+                    $b_search_params->{'-or'} = $or;
+                }
+                else {
+                    $b_search_params->{'me.orts_id'} = { '-in' => $ids };
+                }
             }
             else {
-                $b_search_params->{'me.orts_id'} = $ids->[0];
+                my $oid = $ids->[0];
+                if ( $oid == -1 ) {
+                    $b_search_params->{'me.orts_id'} = \'IS NULL';
+                }
+                else {
+                    $b_search_params->{'me.orts_id'} = $oid;
+                }
             }
         }
 
@@ -282,6 +303,7 @@ sub get_booklist {
 
     # Suchparameter auf undef setzen, falls es keine gibt.
     $b_search_params = undef unless scalar keys %$b_search_params;
+    $c->log->debug(  get_output_string( $K, "Suchparameter: ", $b_search_params ) ) if $c->stash->{'debug_level'} >= 2;
 
     # Anzahl der Buecher insgesamt (ohne paginierung) ermitteln
     my $other_params = {};