$c->session->{'book_list_page'} = $page;
}
- my ( $buchliste, $anzahl ) = get_booklist( $c, { 'page' => $page } );
+ my $book_order_criteria = $c->session->{'book_order_criteria'};
+ unless ( $book_order_criteria and ref($book_order_criteria) and ref($book_order_criteria) eq 'ARRAY' and scalar(@$book_order_criteria) ) {
+ $book_order_criteria = [
+ 'autoren',
+ 'title',
+ ];
+ }
+ $c->stash->{'book_order_columns'} = {};
+ for my $crit ( @$book_order_criteria ) {
+ if ( ref($crit) ) {
+ if ( ref($crit) eq 'HASH' ) {
+ for my $col ( keys %$crit ) {
+ if ( $crit->{$col} =~ /^\s*d(?:esc)?/i ) {
+ $c->stash->{'book_order_columns'}{$col} = 'd';
+ }
+ else {
+ $c->stash->{'book_order_columns'}{$col} = 'a';
+ }
+ }
+ }
+ }
+ else {
+ $c->stash->{'book_order_columns'}{$crit} = 'a';
+ }
+ }
+
+ my $list_params = {
+ 'page' => $page,
+ 'list_length' => $c->stash->{'list_length'},
+ 'sort_criteria' => $book_order_criteria,
+ };
+ $list_params->{'filter'} = $c->session->{'booklist_filter'} if $c->session->{'booklist_filter'};
+
+ my ( $buchliste, $anzahl ) = get_booklist( $c, $list_params );
my $max_page = 1;
if ( $anzahl ) {
$max_page = int( $anzahl / $list_length ) + 1;
}
- $c->detach('/books/list');
+ $c->stash->{'booklist_filter_changed'} = 1;
}
=item I<autor_id>: Alle Buecher des Autors mit dieser Id
+=item I<page>: Die Nummer der Listenseite, die dargestellt werden soll.
+
+Wenn nicht übergeben, werden alle Buecher des Resultsets zurueckgegeben.
+
+=item I<list_length>: Laenge einer Listenseite.
+
+Ist standardmaessig 20. Wird nicht beruecksichtigt, wenn I<page> nicht mit uebergeben wurde.
+
+=item I<filter>: eine optionale Hash-Ref mit folgenden Filterkriterien:
+
+
+
=item I<sort_criteria>: Eine Array-Ref mit den Spalten, nach denen sortiert wird.
In diesem Fall wird anhand dieses Parameters und nicht des Sitzungsparameters 'book_order_criteria' sortiert
$order = collect_sort_criteria( $c, $order )
}
+ # uebergebenen Filter auswerten
+ if ( $params->{'filter'} and ref($params->{'filter'}) and ( scalar( keys %{$params->{'filter'}} ) ) and not $params->{'buch_id'} ) {
+
+ my $filter = $params->{'filter'};
+
+ # Es wurde ein Buchtitel als Filter uebergeben
+ if ( $filter->{'title_name'} ) {
+ if ( $filter->{'title_name_where'} eq 'contains' ) {
+ $b_search_params->{'-or'} = [
+ 'title' => { 'RLIKE', $filter->{'title_name'} },
+ 'title_original' => { 'RLIKE', $filter->{'title_name'} },
+ 'untertitel' => { 'RLIKE', $filter->{'title_name'} },
+ ];
+ }
+ elsif ( $filter->{'title_name_where'} eq 'starts_with' ) {
+ $b_search_params->{'-or'} = [
+ 'title' => { 'LIKE', ( $filter->{'title_name'} . '%' ) },
+ 'title_original' => { 'LIKE', ( $filter->{'title_name'} . '%' ) },
+ 'untertitel' => { 'LIKE', ( $filter->{'title_name'} . '%' ) },
+ ];
+ }
+ else {
+ $b_search_params->{'-or'} = [
+ 'title' => $filter->{'title_name'},
+ 'title_original' => $filter->{'title_name'},
+ 'untertitel' => $filter->{'title_name'},
+ ];
+ }
+ }
+
+ my $buch_id = {};
+
+ # Es wurden Autoren als Filter uebergeben
+ if ( $filter->{'autoren'} and scalar( keys %{ $filter->{'autoren'} } ) ) {
+ my $ids = [ keys( %{ $filter->{'autoren'} } ) ];
+ my $s_params = {};
+ if ( scalar(@$ids) > 1 ) {
+ $s_params->{'me.autor_id'} = { '-in' => $ids };
+ }
+ else {
+ $s_params->{'me.autor_id'} = $ids->[0];
+ }
+ for my $autor ( $c->model('Schema::Autor2buch')->search( $s_params )->all() ) {
+ my $id = $autor->get_column('buch_id');
+ $buch_id->{$id} = 1;
+ }
+ }
+
+ # Es wurden Kategorien als Filter uebergeben
+ if ( $filter->{'kategorien'} and scalar( keys %{ $filter->{'kategorien'} } ) ) {
+ my $ids = [ keys( %{ $filter->{'kategorien'} } ) ];
+ my $s_params = {};
+ if ( scalar(@$ids) > 1 ) {
+ $s_params->{'me.kategorie_id'} = { '-in' => $ids };
+ }
+ else {
+ $s_params->{'me.kategorie_id'} = $ids->[0];
+ }
+ for my $bkat ( $c->model('Schema::Buch2kategorie')->search( $s_params )->all() ) {
+ my $id = $bkat->get_column('buch_id');
+ $buch_id->{$id} = 1;
+ }
+ }
+
+ # Es wurden Buchserien als Filter uebergeben
+ if ( $filter->{'serien'} and scalar( keys %{ $filter->{'serien'} } ) ) {
+ my $ids = [ keys( %{ $filter->{'serien'} } ) ];
+ my $s_params = {};
+ if ( scalar(@$ids) > 1 ) {
+ $s_params->{'me.serien_id'} = { '-in' => $ids };
+ }
+ else {
+ $s_params->{'me.serien_id'} = $ids->[0];
+ }
+ for my $bserie ( $c->model('Schema::Buch2serie')->search( $s_params )->all() ) {
+ my $id = $bserie->get_column('buch_id');
+ $buch_id->{$id} = 1;
+ }
+ }
+
+ # eventuell spezifizierte Buch-Ids auswerten
+ my $buch_ids = undef;
+ if ( keys %$buch_id and scalar( keys %$buch_id ) ) {
+ $buch_ids = [ keys %$buch_id ];
+ }
+ $b_search_params->{'me.id'} = ( scalar(@$buch_ids) > 1 ? { '-in' => $buch_ids } : $buch_ids->[0] ) if $buch_ids;
+
+ # Es wurden Verlage als Filter uebergeben
+ if ( $filter->{'verlage'} and scalar( keys %{ $filter->{'verlage'} } ) ) {
+ my $ids = [ keys( %{ $filter->{'verlage'} } ) ];
+ if ( scalar(@$ids) > 1 ) {
+ $b_search_params->{'me.verlags_id'} = { '-in' => $ids };
+ }
+ else {
+ $b_search_params->{'me.verlags_id'} = $ids->[0];
+ }
+ }
+
+ # Es wurden Aufbewahrungsorte als Filter uebergeben
+ 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 };
+ }
+ else {
+ $b_search_params->{'me.orts_id'} = $ids->[0];
+ }
+ }
+
+ }
+
# Suchparameter auf undef setzen, falls es keine gibt.
$b_search_params = undef unless scalar keys %$b_search_params;
my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
my $rows = undef;
- $rows = $c->stash->{'list_length'} || 20 if defined $page;
+ $rows = ( $params->{'list_length'} || $c->stash->{'list_length'} || 20 ) if defined $page;
if ( $page ) {
$other_params->{'rows'} = $rows;
<option value="starts_with"[% IF booklist_filter.title_name_where == "starts_with" %] selected[% END %]>beginnt mit</option>
<option value="contains"[% IF booklist_filter.title_name_where == "contains" %] selected[% END %]>enthält</option>
</select>
- <input name="title_name" id="title_name" type="text" size="50" value="[% booklist_filter.title_name %]"></td>
+ <input name="title_name" id="title_name" type="text" size="50" value="[% booklist_filter.title_name %]"><br />
+ <span style="font-size: 0.8em;"><b>Hinweis:</b> wenn Sie <i>"enthält"</i> als Suchmethode wählen, können Sie MySQL-reguläre Ausdrücke verwenden
+ (Siehe <a href="http://dev.mysql.com/doc/refman/5.1/de/regexp.html" target="_new">Beschreibung der MySQL-Syntax für reguläre Ausdrücke</a>).</span></td>
</tr><tr>
<th><label for="autoren_ids">Autor:</label> </th>
<td><select name="autoren_ids" id="autoren_ids" size="12" multiple>
document.booklist_filter_form.filter_enabled.checked = false;
document.booklist_filter_form.filter_disabled.checked = true;[% END %]
+[%- IF booklist_filter_changed %]
+
+function goto_list() {
+ var target = '[% Catalyst.web_path( '/books/list' ) %]';
+ window.location.href = target;
+}
+
+window.setTimeout("goto_list()", 2000);
+
+[% END %]
+
</script>
[%- IF error_message %]