#-------------------------------------------------------
+=head2 sorting
+
+Stellt ein Formular zum Ändern der Sortierkriterien der Bücherliste zur Verfügung.
+
+=cut
+
+sub sorting : Local {
+
+ my ($self, $c) = @_;
+ my $K = ( caller(0) )[3] . "(): ";
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+ $self->add_booklist_menu($c);
+
+ push @{ $c->stash->{'menu_path'} }, {
+ 'path' => $c->web_path("/books/sorting"),
+ 'name' => "Sortierung"
+ };
+
+ my $columns = get_booklist_sort_columns();
+
+ $c->stash->{'booklist_sort_kriterien'} = [];
+ $c->stash->{'booklist_sort_namen'} = {};
+ push @{ $c->stash->{'booklist_sort_kriterien'} }, '###';
+ $c->stash->{'booklist_sort_namen'}{'###'} = '--- Wählen Sie ein Sortierkriterium aus ---';
+ for my $col ( sort { lc($a) cmp lc($b) } keys %$columns ) {
+ push @{ $c->stash->{'booklist_sort_kriterien'} }, $col;
+ $c->stash->{'booklist_sort_namen'}{$col} = $columns->{$col};
+ }
+
+ $c->stash->{'book_order_criteria'} = [];
+ $c->stash->{'book_order_col_dir'} = {};
+
+ if ( $c->request->params->{'do_save'} ) {
+
+ my $col_ids = {};
+ for my $p ( keys %{ $c->request->params } ) {
+ my $id;
+ if ( ( $id ) = $p =~ /^sort_column-(\d+)$/ ) {
+ my $val = $c->request->params->{$p};
+ $col_ids->{$id} = $val if $columns->{$val};
+ }
+ }
+
+ my $sort_order = [];
+ for my $id ( sort { $a <=> $b } keys %$col_ids ) {
+ my $col = $col_ids->{$id};
+ my $dir = $c->request->params->{ 'sort_dir-' . $id };
+ $dir = ( $dir and uc($dir) eq 'DESC' ) ? 'DESC' : 'ASC';
+ my $val = $dir eq 'ASC' ? $col : { $col => 'DESC' };
+ push @$sort_order, $val;
+ }
+ unless ( scalar( @$sort_order ) ) {
+ push @$sort_order, 'autoren';
+ push @$sort_order, 'title';
+ }
+
+ $c->session->{'book_order_criteria'} = $sort_order;
+ $c->session->{'book_list_page'} = 1;
+
+ }
+
+ if ( $c->session->{'book_order_criteria'} ) {
+ for my $crit ( @{ $c->session->{'book_order_criteria'} } ) {
+ if ( ref($crit) and ref($crit) eq 'HASH' ) {
+ for my $key ( keys %$crit ) {
+ my $col = lc($key);
+ if ( $columns->{$col} ) {
+ my $dir = $crit->{$key};
+ $dir = ( $dir =~ /desc/i ) ? 'DESC' : 'ASC';
+ push @{ $c->stash->{'book_order_criteria'} }, $col;
+ $c->stash->{'book_order_col_dir'}{$col} = $dir;
+ }
+ }
+ }
+ else {
+ my $col = lc($crit);
+ if ( $columns->{$col} ) {
+ push @{ $c->stash->{'book_order_criteria'} }, $col;
+ $c->stash->{'book_order_col_dir'}{$col} = 'ASC';
+ }
+ }
+ }
+ }
+ else {
+ push @{ $c->stash->{'book_order_criteria'} }, 'autoren';
+ push @{ $c->stash->{'book_order_criteria'} }, 'title';
+ $c->stash->{'book_order_col_dir'}{'autoren'} = 'ASC';
+ $c->stash->{'book_order_col_dir'}{'title'} = 'ASC';
+ }
+ $c->log->debug( get_output_string( $K, "book_order_criteria:: ", $c->stash->{'book_order_criteria'} ) ) if $c->stash->{'debug_level'} > 2;
+ $c->log->debug( get_output_string( $K, "book_order_col_dir:: ", $c->stash->{'book_order_col_dir'} ) ) if $c->stash->{'debug_level'} > 2;
+
+ $c->stash->{'template'} = 'books/sorting.tt2';
+
+ return 1;
+
+}
+
+#-------------------------------------------------------
+
=head2 form_new( )
Erstellen eines neuen Buches.
use strict;
use warnings;
+use Readonly;
use FrBr::Common;
# Export-Deklarationen
@ISA = qw(Exporter);
@EXPORT = qw(
&get_booklist
+ &get_booklist_sort_columns
&save_book
&delete_book
);
# Suchparameter auf undef setzen, falls es keine gibt.
$b_search_params = undef unless scalar keys %$b_search_params;
+ # Anzahl der Buecher insgesamt (ohne paginierung) ermitteln
my $other_params = {};
$other_params->{'order_by'} = $order;
$other_params->{'select'} = [ 'me.buch_id' ];
$other_params->{'as'} = [ 'buch_id' ];
+
+ $anzahl_buecher = $c->model('Schema::BuecherListe')->count( $b_search_params, $other_params );
+ $c->log->debug( get_output_string( $K, "Anzahl gefundene Buecher: ", $anzahl_buecher ) ) if $c->stash->{'debug_level'} >= 2;
+
$other_params->{'rows'} = $c->stash->{'list_length'} || 20;
$other_params->{'page'} = $params->{'page'} || $c->stash->{'page'} || 1;
return ( wantarray ? ( $book_ids, 0 ) : $book_ids ) unless scalar( @$book_ids );
my $in = "IN ( " . join( ", ", @$book_ids ) . " )";
- $anzahl_buecher = scalar( @$book_ids );
- $c->log->debug( get_output_string( $K, "Anzahl gefundene Buecher: ", $anzahl_buecher ) ) if $c->stash->{'debug_level'} >= 2;
$b_search_params = { 'me.id' => \$in };
#-----------------------------------------------------------------------------------
+=head2 get_booklist_sort_columns( )
+
+Gibt eine Hash-Ref mit allen verfügbaren Spaltennamen zurück, nach denen
+die Bücherliste sortiert werden kann.
+
+=cut
+
+sub get_booklist_sort_columns {
+
+ Readonly::Scalar my $valid_columns => {
+ 'autoren' => 'Autor/-en',
+ 'title' => 'Buchtitel',
+ 'title_original' => 'Original Buchtitel',
+ 'bindungsart' => 'Bindungsart',
+ 'verlag' => 'Buchverlag',
+ 'ort' => 'Aufbewahrungsort',
+ 'preis' => 'Preis',
+ 'waehrung' => 'Währung des Buchpreises',
+ 'ausgabejahr' => 'Ausgabejahr',
+ 'druckjahr' => 'Druckjahr',
+ 'seiten' => 'Seitenzahl',
+ 'kategorien' => 'Buchketagorie(-n)',
+ 'serien' => 'Zyklus/Reihe',
+ };
+
+ return $valid_columns;
+
+}
+
+#-----------------------------------------------------------------------------------
+
=head2 collect_sort_criteria( $c )
Sammelt aus der Sitzung die Sortierkriterien der Buchliste zusammen und gibt diese verwendbar
my $order = [];
- my $valid_column = {
- 'autoren' => 1,
- 'title' => 1,
- 'title_original' => 1,
- 'bindungsart' => 1,
- 'verlag' => 1,
- 'ort' => 1,
- 'preis' => 1,
- 'waehrung' => 1,
- 'ausgabejahr' => 1,
- 'druckjahr' => 1,
- 'seiten' => 1,
- 'kategorien' => 1,
- 'serien' => 1,
- };
+ my $valid_column = get_booklist_sort_columns();
my $used_column = {};
</tr>
[% END -%]
+[%- BLOCK listopt_row %]
+ <tr>
+ <td class="nav" colspan="[% tab_colspan %]"><table cellspacing="0" class="nav" width="100%">
+ <tr>
+ <td width="49%" style="text-align: center;"><b>
+ <a href="[% path('/books/sorting') %]" title="Sortierung">Sortierung</a>
+ |
+ <a href="[% path('/books/filter') %]" title="Filterung">Filter</a></b>[% IF booklist_filter_active %] <i>(aktiv)</i>[% END %]</td>
+ </tr>
+ </table></td>
+ </tr>
+[% END -%]
+
<div class="center">
<table class="wrapper" cellspacing="0">
<th></th>
[% IF Catalyst.user_exists %]<th></th>
<th></th>[% END %]
- </tr>[% PROCESS navrow %]
+ </tr>[% PROCESS listopt_row %][% PROCESS navrow %]
[% rowstyle = 'even' %][%- FOREACH book IN books -%][% buch_id = book.id %]
<tr>
<td class="[% rowstyle %]">[% tt_authors = [ ]; tt_authors.push(autor) FOREACH autor = book.autoren %][% tt_authors.join(', ') %]</td>
--- /dev/null
+<!-- [%#
+ ** Template fuer Formular zur Buchlistensortierung
+ **
+ ** vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+ **
+ ** $Id$
+ ** $URL$
+ ** -%]
+
+ Buchlistensortierung
+
+-->
+
+[% num_kriteria = book_order_criteria.size %][% i = 0 -%]
+
+[% BLOCK sort_order_row -%]
+ [%- nr = i + 1 -%]
+ [%- c_col = book_order_criteria.$i -%]
+ [%- IF c_col -%]
+ [%- dir = book_order_col_dir.$c_col -%]
+ [%- ELSE -%]
+ [%- c_col = '###' -%]
+ [%- dir = 'ASC' -%]
+ [%- END -%]
+ <tr>
+ <th>[% nr %]. Kriterium</th>
+ <td><select name="sort_column-[% i %]" size="1">[% FOR col IN booklist_sort_kriterien %]<option value="[% col %]"[% IF col == c_col %] selected[% END %]>[% booklist_sort_namen.$col %]</option>[% END %]
+ </select></td>
+ <td><select name="sort_dir-[% i %]" size="1">
+ <option value="ASC"[% IF dir == 'ASC' %] selected[% END %]>Aufsteigend</option>
+ <option value="DESC"[% IF dir == 'DESC' %] selected[% END %]>Absteigend</option>
+ </select></td>
+ </tr>
+ [%- i = i + 1 -%]
+[% END -%]
+
+<form method="post" name="book_form" action="[% self_url %]">
+<table class="ftable" cellspacing="0">
+ <tr>
+ <th colspan="3" class="title">Sortierung der Buchliste</th>
+ </tr><tr>
+ <td colspan="3" class="empty"></td>
+ </tr><tr>
+ <th></th>
+ <th>Sortierfeld</th>
+ <th>Sortierrichtung</th>[% WHILE i <= num_kriteria %][% PROCESS sort_order_row %][% END %]
+ </tr><tr>
+ <td colspan="3" class="empty"></td>
+ </tr><tr>
+ <th colspan="3" class="button"><input type="submit" name="do_save" value=" OK " /></th>
+ </tr>
+</table>
+</form>
+[%- IF error_message %]
+<div class="error">
+<span class="bold">Fehler:</span> [% error_message %]
+</div>
+[% END -%]
+
+<br />
+<div class="back">
+<h2><a href="[% path('/books/list') %]">[% 'Zurück' %]</a></h2>
+</div>
+<br />