my $K = ( caller(0) )[3] . "(): ";
$c->stash->{'template'} = 'category/index.tt2';
+ $c->session->{'return_target_category_save'} = $c->web_path("/kategorie");
+
}
#-------------------------------------------------------
#-------------------------------------------------------
+sub add_kategorielist_menu : Private {
+
+ my ( $self, $c ) = @_;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ push @{ $c->stash->{'menu_path'} }, {
+ 'path' => $c->web_path("/kategorie/list"),
+ 'name' => "Liste"
+ };
+
+}
+
+#-------------------------------------------------------
+
+=head2 list
+
+Sucht alle Kategorien als Objekt zusammen und übergibt das category/list.tt2 zur Darstellung.
+
+=cut
+
+sub list : Local {
+
+ my ($self, $c) = @_;
+ my $K = ( caller(0) )[3] . "(): ";
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+ $self->add_kategorielist_menu($c);
+ delete $c->session->{'category_data_edit'} if exists $c->session->{'category_data_edit'};
+
+ my $page = $c->session->{'category_list_page'} || 1;
+ my $list_length = $c->stash->{'list_length'} || 10;
+
+ if ( $c->request->params->{'page'} and to_int( $c->request->params->{'page'} ) ) {
+ $page = to_int( $c->request->params->{'page'} );
+ $c->session->{'category_list_page'} = $page;
+ }
+
+ my ( $liste, $anzahl ) = get_category_list( $c, 'get_books' => undef, 'page' => $page );
+ $c->log->debug( get_output_string( $K, "Erhaltene Liste der Kategorien: ", $liste ) ) if $c->stash->{'debug_level'} >= 2;
+ $c->stash->{'kategorien'} = $liste;
+
+ my $max_page = 1;
+ if ( $anzahl ) {
+ $max_page = int( $anzahl / $list_length ) + 1;
+ if ( ( $page - 1 ) * $list_length > $anzahl ) {
+ $page = $max_page;
+ $c->session->{'category_list_page'} = $page;
+ }
+ }
+ else {
+ $page = 1;
+ $c->session->{'category_list_page'} = 1;
+ }
+
+ my $nav = {
+ 'cur' => $page,
+ 'first' => 1,
+ 'last' => $max_page,
+ 'prev' => ( ( $page > 1 ) ? ( $page - 1 ) : 1 ),
+ 'next' => ( ( ( $page + 1 ) > $max_page ) ? $max_page : ( $page + 1 ) ),
+ 'verlage' => $anzahl,
+ 'verlag_from' => ( $anzahl ? ( ( $page - 1 ) * $list_length ) + 1 : 0 ),
+ 'verlag_to' => ( ( $page * $list_length ) > $anzahl ? $anzahl : ( $page * $list_length ) ),
+ };
+ $c->stash->{'nav'} = $nav;
+ $c->log->debug( get_output_string( $K, "Seitennavigation: ", $nav ) ) if $c->stash->{'debug_level'} >= 2;
+
+ $c->session->{'return_target_view'} = $c->web_path("/kategorie/list");
+ $c->session->{'return_target_category_save'} = $c->web_path("/kategorie/list");
+ $c->session->{'from_category_list'} = 1;
+ $c->stash->{'template'} = 'category/list.tt2';
+
+}
+
+#-------------------------------------------------------
+
=head2 form_new( )
Erstellen eines neuen Verlages.
sub auto : Private {
my ( $self, $c ) = @_;
- my $K = __PACKAGE__ . "::auto(): ";
+ my $K = ( caller(0) )[3] . "(): ";
$c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
Folgende benannte Parameter koennen ueber $params uebergeben werden:
-Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Kategorien, die den uebergebenen Suchkriterien entsprechen:
+=over 4
+
+=item B<category_id>: Die ID einer konkreten Kategorie
+
+=item B<get_books>: Bool. Zeigt an, daß zu den gefundenen Kategorien die dazugehörigen
+Bücher geholt werden sollen.
+
+=item B<page>
+
+Integer: Zeigt an, welche Seite von Kategorien dargestellt werden soll.
+
+Wenn nicht angegeben, werden alle Kategorien zurückgegeben.
+
+=back
+
+Rueckgabe: Im skalaren Kontext eine Array-Ref von Hash-Refs mit allen Kategorien, die den uebergebenen Suchkriterien entsprechen:
$res = [
- { 'id' => 1,
- 'name' => 'Science Fiction',
+ { 'id' => 1,
+ 'name' => 'Science Fiction',
+ 'count_books' => 22,
},
{ 'id' => 2,
...
Die Liste ist nach den Kategorie-Namen alphabetisch sortiert.
+Im Listenkontext wird als zweiter Rückgabewert die Gesamtzahl aller Kategorien zurueckgegeben.
+
=cut
sub get_category_list {
my $c = shift;
- my $K = __PACKAGE__ . "::get_category_list(): ";
+ my $K = ( caller(0) )[3] . "(): ";
$c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
$c->log->debug( get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
my $list = [];
+ my $anzahl_kategorien = 0;
+
+ my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
+ my $rows = undef;
+ $rows = $c->stash->{'list_length'} || 20 if defined $page;
my $search_params = undef;
+ if ( $params->{'category_id'} ) {
+ $search_params = {
+ 'me.id' => $params->{'category_id'},
+ };
+ }
+
+ $anzahl_kategorien = $c->model('Schema::Kategorien')->count( $search_params );
+ $c->log->debug( get_output_string( $K, "Anzahl gefundene Kategorien: ", $anzahl_kategorien ) ) if $c->stash->{'debug_level'} >= 2;
my $other_params = {};
$other_params->{'order_by'} = [ 'kategorie_name' ];
$other_params->{'select'} = [
- 'id',
- 'kategorie_name',
+ 'me.id',
+ 'me.kategorie_name',
+ { 'count' => 'buch_kategorie.id' }
];
$other_params->{'as'} = [
'id',
'kategorie_name',
+ 'count_books',
];
+ $other_params->{'join'} = [ 'buch_kategorie'];
+ $other_params->{'group_by'} = [ 'me.id' ];
+
+ if ( $page ) {
+ $other_params->{'rows'} = $rows;
+ $other_params->{'page'} = $page;
+ }
for my $cat_rs ( $c->model('Schema::Kategorien')->search( $search_params, $other_params )->all() ) {
my $cat = {};
- $cat->{'id'} = $cat_rs->id();
- $cat->{'name'} = $cat_rs->kategorie_name();
+ $cat->{'id'} = $cat_rs->id();
+ $cat->{'name'} = $cat_rs->kategorie_name();
+ $cat->{'count_books'} = $cat_rs->get_column('count_books');
push @$list, $cat;
}
- return $list;
+ return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
+ return ( wantarray ? ( $list, $anzahl_kategorien ) : $list ) unless $params->{'get_books'};
+
+ return ( wantarray ? ( $list, $anzahl_kategorien ) : $list );
}
=back
-Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Verlagen, die den uebergebenen Suchkriterien entsprechen:
+Rueckgabe: Im skalaren Kontext eine Array-Ref von Hash-Refs mit allen Verlagen, die den uebergebenen Suchkriterien entsprechen:
$res = [
{
Die Liste ist nach den Verlags-Namen alphabetisch sortiert.
+Im Listenkontext wird als zweiter Rückgabewert die Gesamtzahl aller Verlage zurueckgegeben.
+
=cut
sub get_verlagsliste {
my $c = shift;
- my $K = __PACKAGE__ . "::get_verlagsliste(): ";
+ my $K = ( caller(0) )[3] . "(): ";
$c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
push @$list, $verlag;
}
- return ( wantarray ? ( $list, 0 ) : $list ) unless scalar $list;
+ return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
return ( wantarray ? ( $list, $anzahl_verlage ) : $list ) unless $params->{'get_books'};
for my $verlag ( @$list ) {
--- /dev/null
+<!-- [%#
+ ** Template fuer Kategorieliste
+ **
+ ** vim: noai : ts=4 fenc=utf-8 filetype=html :
+ **
+ ** $Id$
+ ** $URL$
+ ** -%]
+
+ Kategorieliste
+
+-->
+
+[% META title = 'Kategorieliste' -%]
+
+[% tab_colspan = 3 %][% IF Catalyst.user_exists %][% tab_colspan = 5 %][% END -%]
+[% BLOCK navrow %]
+ <tr>
+ <td class="nav" colspan="[% tab_colspan %]"><table cellspacing="0" class="nav" width="100%">
+ <tr>
+ <td width="33%" style="text-align: left;"><b>[% IF nav.cur != 1 %]<a href="[% self_url %]?page=1" title="Erste Seite"><<</a>[% ELSE %]<<[% END %] [% IF nav.cur != nav.prev %]<a href="[% self_url %]?page=[% nav.prev %]" title="Vorherige Seite"><</a>[% ELSE %]<[% END %]</b></td>
+ <td width="33%" style="text-align: center;">Verlag [% nav.verlag_from %] bis [% nav.verlag_to %] von [% nav.verlage %]</td>
+ <td width="33%" style="text-align: right;"><b>[% IF nav.cur != nav.next %]<a href="[% self_url %]?page=[% nav.next %]" title="Nächste Seite">></a>[% ELSE %]>[% END %] [% IF nav.cur != nav.last %]<a href="[% self_url %]?page=[% nav.last %]" title="Letzte Seite">>></a>[% ELSE %]>>[% END %]</b></td>
+ </tr>
+ </table></td>
+ </tr>
+[% END -%]
+
+<div class="center">
+
+<table class="wrapper" cellspacing="0">
+<tr><th>Liste der Kategorien</th> </tr>
+[% IF Catalyst.user_exists %]<tr><td class="action"><a href="[% path('/kategorie/new') %]">Neue Kategorie ...</a></td></tr>[% END %]
+<tr><td><table class="kategorieliste">
+ <tr>
+ <th>Name der Kategorie</th>
+ <th>Anzahl Bücher</th>
+ <th></th>
+ [% IF Catalyst.user_exists %]<th></th>
+ <th></th>[% END %]
+ </tr>[% PROCESS navrow %]
+[% rowstyle = 'even' %][%- FOREACH kategorie IN kategorien -%]
+ <tr>
+ <td class="[% rowstyle %]">[% kategorie.name %]</td>
+ <td class="[% rowstyle %]" style="text-align: right;">[% kategorie.count_books %]</td>
+ <td class="button [% rowstyle %]"><a href="[% path('/kategorie/view') %]?view_category_id=[% kategorie.id %]">Ansehen</a></td>
+ [% IF Catalyst.user_exists %]<td class="button [% rowstyle %]"><a href="[% path('/kategorie/edit') %]?edit_category_id=[% kategorie.id %]">Ändern</a></td>
+ <td class="button [% rowstyle %]">[% IF kategorie.count_books > 0 %]Löschen[% ELSE %]<a href="[% path('/kategorie/delete') %]?delete_category_id=[% kategorie.id %]">Löschen</a>[% END %]</td>[% END %]
+ </tr>
+[% IF rowstyle == 'even' %][% rowstyle = 'odd'%][% ELSE %][% rowstyle = 'even' %][% END %][% END -%]
+[% PROCESS navrow %]</table></td></tr></table>
+</div>
+<br />
-%]
Stylesheets Kategorien */
+DIV.center {
+ margin: auto;
+ text-align: center;
+ width: auto;
+}
+
+TABLE.wrapper {
+ border-spacing: 0;
+ margin: auto;
+}
+
+TABLE.wrapper TH {
+ text-align: center;
+ font-size: 1.2em;
+}
+
+TABLE.wrapper TD {
+ text-align: left;
+}
+
+TABLE.wrapper TD.action {
+ font-weight: bolder;
+ padding-top: 1em;
+ padding-bottom: 1em;
+}
+
+TABLE.kategorieliste {
+ border-width: 2px;
+ border-style: solid;
+ border-top-color: [% site.col.tab_rahmen_hell %];
+ border-left-color: [% site.col.tab_rahmen_hell %];
+ border-right-color: [% site.col.tab_rahmen_dkl %];
+ border-bottom-color: [% site.col.tab_rahmen_dkl %];
+ border-collapse: separate;
+ border-spacing: 0;
+}
+
+TABLE.kategorieliste TH {
+ vertical-align: top;
+ text-align: left;
+ font-size: 1em;
+ padding: 2px;
+ border-width: 1px;
+ border-style: solid;
+ border-top-color: [% site.col.tab_rahmen_dkl %];
+ border-left-color: [% site.col.tab_rahmen_dkl %];
+ border-right-color: [% site.col.tab_rahmen_hell %];
+ border-bottom-color: [% site.col.tab_rahmen_hell %];
+ background-color: [% site.col.list_head %];
+}
+
+TABLE.kategorieliste TD {
+ vertical-align: top;
+ font-size: 1em;
+ padding: 2px;
+ border-width: 1px;
+ border-style: solid;
+ border-top-color: [% site.col.tab_rahmen_dkl %];
+ border-left-color: [% site.col.tab_rahmen_dkl %];
+ border-right-color: [% site.col.tab_rahmen_hell %];
+ border-bottom-color: [% site.col.tab_rahmen_hell %];
+ background-color: [% site.col.list_row_bold %];
+}
+
+TABLE.kategorieliste TD.odd {
+ background-color: [% site.col.list_row %];
+}
+
+TABLE.kategorieliste UL {
+ margin: 0;
+}
+
+TABLE.kategorieliste TD.button {
+ font-weight: bolder;
+ text-align: center;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
<td class="[% rowstyle %]" style="text-align: right;">[% verlag.count_books %]</td>
<td class="button [% rowstyle %]"><a href="[% path('/verlag/view') %]?view_verlags_id=[% verlag.id %]">Ansehen</a></td>
[% IF Catalyst.user_exists %]<td class="button [% rowstyle %]"><a href="[% path('/verlag/edit') %]?edit_verlags_id=[% verlag.id %]">Ändern</a></td>
- <td class="button [% rowstyle %]">[% IF verlag.count_books > 0 %]Löschen[% ELSE %]<a href="[% path('/verlag/delete') %]?delete_verlags_id=[% author.id %]">Löschen</a>[% END %]</td>[% END %]
+ <td class="button [% rowstyle %]">[% IF verlag.count_books > 0 %]Löschen[% ELSE %]<a href="[% path('/verlag/delete') %]?delete_verlags_id=[% verlag.id %]">Löschen</a>[% END %]</td>[% END %]
</tr>
[% IF rowstyle == 'even' %][% rowstyle = 'odd'%][% ELSE %][% rowstyle = 'even' %][% END %][% END -%]
[% PROCESS navrow %]</table></td></tr></table>