]> Frank Brehm's Git Trees - books.git/commitdiff
Aufbau des Filters fast fertig
authorFrank Brehm <frank@brehm-online.com>
Tue, 8 Dec 2009 23:21:43 +0000 (23:21 +0000)
committerFrank Brehm <frank@brehm-online.com>
Tue, 8 Dec 2009 23:21:43 +0000 (23:21 +0000)
lib/FrBr/Books/Controller/Books.pm
root/src/books/filter.tt2

index 4af0b778d3536a473aee0cf631c64d262b8e4dae..b07726448146390a309989c4495b5525c7ef9f9d 100644 (file)
@@ -208,6 +208,96 @@ sub filter : Local {
 
     $c->stash->{'template'} = 'books/filter.tt2';
 
+    # Neue Filterkriterien setzen
+    if ( $c->request->params->{'do_save'} ) {
+
+               if ( $c->request->params->{'filter_enabled'} and ( lc($c->request->params->{'filter_enabled'}) eq 'on' ) ) {
+
+                       my $filter = {};
+
+                       # Buchtitel-Filter setzen
+                       my $title_name_where = $c->request->params->{'title_name_where'};
+                       $title_name_where ||= 'is';
+                       $title_name_where = lc($title_name_where);
+                       $title_name_where = 'is' unless ( ( $title_name_where eq 'starts_with' ) or ( $title_name_where eq 'contains' ) );
+                       $filter->{'title_name_where'} = $title_name_where;
+
+                       my $title_name = $c->request->params->{'title_name'};
+                       $title_name = '' unless defined $title_name;
+                       $title_name =~ s/^\s+//;
+                       $title_name =~ s/\s+$//;
+                       $filter->{'title_name'} = $title_name;
+
+                       # Nach Autoren filtern
+                       my $autoren = {};
+                       my $autor_ids = ref($c->request->params->{'autoren_ids'}) eq 'ARRAY' ? $c->request->params->{'autoren_ids'} : [$c->request->params->{'autoren_ids'}];
+                       for my $id ( @$autor_ids ) {
+                               if ( defined $id and $id =~ /(\d+)/ ) {
+                                       my $aid = $1;
+                                       $autoren->{$aid} = 1 if $aid;
+                               }
+                       }
+                       $filter->{'autoren'} = $autoren if ( scalar( keys %$autoren ) );
+
+                       # Nach Kategorie filtern
+                       my $kategorien = {};
+                       my $kat_ids = ref($c->request->params->{'kategorie_ids'}) eq 'ARRAY' ? $c->request->params->{'kategorie_ids'} : [$c->request->params->{'kategorie_ids'}];
+                       for my $id ( @$kat_ids ) {
+                               if ( defined $id and $id =~ /(\d+)/ ) {
+                                       my $aid = $1;
+                                       $kategorien->{$aid} = 1 if $aid;
+                               }
+                       }
+                       $filter->{'kategorien'} = $kategorien if ( scalar( keys %$kategorien ) );
+
+                       # Nach Buchserien filtern
+                       my $serien = {};
+                       my $serien_ids = ref($c->request->params->{'serien_ids'}) eq 'ARRAY' ? $c->request->params->{'serien_ids'} : [$c->request->params->{'serien_ids'}];
+                       for my $id ( @$serien_ids ) {
+                               if ( defined $id and $id =~ /(\d+)/ ) {
+                                       my $aid = $1;
+                                       $serien->{$aid} = 1 if $aid;
+                               }
+                       }
+                       $filter->{'serien'} = $serien if ( scalar( keys %$serien ) );
+
+                       # Nach Verlagen filtern
+                       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+)/ ) {
+                                       my $aid = $1;
+                                       $verlage->{$aid} = 1 if $aid;
+                               }
+                       }
+                       $filter->{'verlage'} = $verlage if ( scalar( keys %$verlage ) );
+
+                       # Nach Aufbewahrungsorten filtern
+                       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+)/ ) {
+                                       my $aid = $1;
+                                       $orte->{$aid} = 1 if $aid;
+                               }
+                       }
+                       $filter->{'orte'} = $orte if ( scalar( keys %$orte ) );
+
+                       $c->stash->{'booklist_filter'}   = $filter;
+                       $c->session->{'booklist_filter'} = $filter;
+
+               }
+               else {
+
+                       $c->stash->{'booklist_filter'}   = undef;
+                       $c->session->{'booklist_filter'} = undef;
+               
+               }
+
+               $c->detach('/books/list');
+
+       }
+
     return 1;
 
 }
index cc397a41543a6bcf56c734f2499a2e0c0a376344..56b0539e39ca8254cba096a7b9f0ac9cd6484d11 100644 (file)
@@ -18,6 +18,10 @@ function set_filter_disabled() {
     document.booklist_filter_form.title_name_where.disabled = true;
     document.booklist_filter_form.title_name.disabled = true;
     document.booklist_filter_form.autoren_ids.disabled = true;
+    document.booklist_filter_form.kategorie_ids.disabled = true;
+    document.booklist_filter_form.verlags_ids.disabled = true;
+    document.booklist_filter_form.serien_ids.disabled = true;
+    document.booklist_filter_form.orts_ids.disabled = true;
 }
 
 function set_filter_enabled() {
@@ -25,6 +29,10 @@ function set_filter_enabled() {
     document.booklist_filter_form.title_name_where.disabled = false;
     document.booklist_filter_form.title_name.disabled = false;
     document.booklist_filter_form.autoren_ids.disabled = false;
+    document.booklist_filter_form.kategorie_ids.disabled = false;
+    document.booklist_filter_form.verlags_ids.disabled = false;
+    document.booklist_filter_form.serien_ids.disabled = false;
+    document.booklist_filter_form.orts_ids.disabled = false;
 }
 
 </script>
@@ -40,7 +48,7 @@ function set_filter_enabled() {
                value="off"[% IF NOT booklist_filter %] checked[% END %]>&nbsp;<label
                for="filter_disabled">Filter deaktiviert - es werden alle Bücher angezeigt</label></td>
   </tr><tr>
-    <td><input type="radio" id="filter_enabled" name="filter_enabled"onclick="set_filter_enabled();"
+    <td><input type="radio" id="filter_enabled" name="filter_enabled"  onclick="set_filter_enabled();"
                value="on"[% IF booklist_filter %] checked[% END %]>&nbsp;<label
                for="filter_enabled">Filter aktiviert - es werden die Bücher entsprechend ihrer Auswahl angezeigt</label></td>
   </tr><tr>
@@ -58,9 +66,33 @@ function set_filter_enabled() {
             </tr><tr>
               <th><label for="autoren_ids">Autor:</label>&nbsp;</th>
               <td><select name="autoren_ids" id="autoren_ids" size="12" multiple>
-                    <option value="">-- Autor oder Autoren wählen --</option>[% FOR autor_id IN autor_array_sorted %]
+                    <option value="">-- Autor(en) wählen --</option>[% FOR autor_id IN autor_array_sorted %]
                     <option value="[% autor_id %]"[% IF booklist_filter.autoren AND booklist_filter.autoren.$autor_id %] selected[% END %] >[% autor_list.$autor_id %]</option>
                   [% END %]</select></td>
+            </tr><tr>
+              <th><label for="kategorie_ids">Kategorie:</label>&nbsp;</th>
+              <td><select name="kategorie_ids" id="kategorie_ids" size="6" multiple>
+                    <option value="">-- Kategorie(n) wählen --</option>[% FOR kategorie_id IN kategorie_ids %]
+                    <option value="[% kategorie_id %]"[% IF booklist_filter.kategorien AND booklist_filter.kategorien.$kategorie_id %] selected[% END %] >[% kategorie_list.$kategorie_id %]</option>
+                  [% END %]</select></td>
+            </tr><tr>
+              <th><label for="serien_ids">Buchserie:</label>&nbsp;</th>
+              <td><select name="serien_ids" id="serien_ids" size="8" multiple>
+                    <option value="">-- Buchserie(e) wählen --</option>[% FOR serien_id IN serien_ids %]
+                    <option value="[% serien_id %]"[% IF booklist_filter.serien AND booklist_filter.serien.$serien_id %] selected[% END %] >[% serienliste.$serien_id %]</option>
+                  [% END %]</select></td>
+            </tr><tr>
+              <th><label for="verlags_ids">Verlag:</label>&nbsp;</th>
+              <td><select name="verlags_ids" id="verlags_ids" size="8" multiple>
+                    <option value="">-- Verlag(e) wählen --</option>[% FOR verlags_id IN verlags_ids %]
+                    <option value="[% verlags_id %]"[% IF booklist_filter.verlage AND booklist_filter.verlage.$verlags_id %] selected[% END %] >[% verlagsliste.$verlags_id %]</option>
+                  [% END %]</select></td>
+            </tr><tr>
+              <th><label for="orts_ids">Aufbewahrungsort:</label>&nbsp;</th>
+              <td><select name="orts_ids" id="orts_ids" size="6" multiple>
+                    <option value="">-- Aufbewahrungsort(e) wählen --</option>[% FOR orts_id IN orts_ids %]
+                    <option value="[% orts_id %]"[% IF booklist_filter.orte AND booklist_filter.orte.$orts_id %] selected[% END %] >[% ortsliste.$orts_id %]</option>
+                  [% END %]</select></td>
             </tr>
           </table>
         </fieldset>
@@ -74,7 +106,11 @@ function set_filter_enabled() {
 
 <script type="text/javascript">
 
-[% IF booklist_filter %]set_filter_enabled();[% ELSE %]set_filter_disabled();[% END %] 
+[% IF booklist_filter %]set_filter_enabled();
+document.booklist_filter_form.filter_enabled.checked = true;
+document.booklist_filter_form.filter_disabled.checked = false;[% ELSE %]set_filter_disabled();
+document.booklist_filter_form.filter_enabled.checked = false;
+document.booklist_filter_form.filter_disabled.checked = true;[% END %] 
 
 </script>