]> Frank Brehm's Git Trees - books.git/commitdiff
Kategorieliste dazu
authorFrank Brehm <frank@brehm-online.com>
Thu, 15 Oct 2009 20:15:34 +0000 (20:15 +0000)
committerFrank Brehm <frank@brehm-online.com>
Thu, 15 Oct 2009 20:15:34 +0000 (20:15 +0000)
lib/FrBr/Books/Controller/Kategorie.pm
lib/FrBr/Books/Controller/Verlag.pm
lib/FrBr/Books/Util/Category.pm
lib/FrBr/Books/Util/Verlag.pm
root/src/category/list.tt2 [new file with mode: 0644]
root/src/category/styles.css
root/src/verlag/list.tt2

index a4972565c1aafd1c1e8161745f3fa880525b2915..bfb90014490432ae72226ccc6dfe30b2c169cd7e 100644 (file)
@@ -59,6 +59,8 @@ sub index : Private {
     my $K = ( caller(0) )[3] . "(): ";
 
     $c->stash->{'template'} = 'category/index.tt2';
+       $c->session->{'return_target_category_save'} = $c->web_path("/kategorie");
+
 }
 
 #-------------------------------------------------------
@@ -83,6 +85,82 @@ sub default : Private {
 
 #-------------------------------------------------------
 
+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.
index 5af201a4d9d98ed4fb61db097882af0854e14a9a..db48ee1df8594ce7e02b402112f8998034725348 100644 (file)
@@ -31,7 +31,7 @@ Catalyst Controller.
 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;
 
index 4267b295bbec05ed47ae866ffeaf3fff0854524e..8701929437e770877b92535a92ed73e9c686af1f 100644 (file)
@@ -51,11 +51,27 @@ Sammelt alle Kategorien zusammen.
 
 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,
       ...
@@ -65,12 +81,14 @@ Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Kategorien, die den uebergeben
 
 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;
 
@@ -84,28 +102,54 @@ sub get_category_list {
     $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 );
 
 }
 
index 6467220d77dad5e5949560f8e30ad638eef9014b..ca037585e895be3172d76777cba5479f03de5b6e 100644 (file)
@@ -67,7 +67,7 @@ Wenn nicht angegeben, werden alle Verlage zurückgegeben.
 
 =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 = [
        {
@@ -85,12 +85,14 @@ Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Verlagen, die den uebergebenen
 
 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;
 
@@ -151,7 +153,7 @@ sub get_verlagsliste {
         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 ) {
diff --git a/root/src/category/list.tt2 b/root/src/category/list.tt2
new file mode 100644 (file)
index 0000000..6948667
--- /dev/null
@@ -0,0 +1,53 @@
+<!-- [%#
+  ** 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">&lt;&lt;</a>[% ELSE %]&lt;&lt;[% END %]&nbsp;&nbsp;[% IF nav.cur != nav.prev %]<a href="[% self_url %]?page=[% nav.prev %]" title="Vorherige Seite">&lt;</a>[% ELSE %]&lt;[% 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">&gt;</a>[% ELSE %]&gt;[% END %]&nbsp;&nbsp;[% IF nav.cur != nav.last %]<a href="[% self_url %]?page=[% nav.last %]" title="Letzte Seite">&gt;&gt;</a>[% ELSE %]&gt;&gt;[% 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 />
index ee3d3873d2a606b05b254c24744e3259d571f945..d66222c827390360c8d7b81048dd83ac4f350a49 100644 (file)
@@ -7,4 +7,83 @@
 -%]
  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;
+}
+
 
index dd4bb5fa0229f50119ad3c1cc7a5f85c0de0cf2f..8837ff69235ba4582c72b62648bda23a821000d5 100644 (file)
@@ -47,7 +47,7 @@
     <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>