]> Frank Brehm's Git Trees - books.git/commitdiff
Verlag editierbar gemacht
authorFrank Brehm <frank@brehm-online.com>
Tue, 16 Jun 2009 22:20:07 +0000 (22:20 +0000)
committerFrank Brehm <frank@brehm-online.com>
Tue, 16 Jun 2009 22:20:07 +0000 (22:20 +0000)
lib/FrBr/Books/Controller/Autor.pm
lib/FrBr/Books/Controller/Books.pm
lib/FrBr/Books/Controller/Verlag.pm
lib/FrBr/Books/Util/Verlag.pm
root/src/verlag/edit.tt2 [new file with mode: 0644]
root/src/verlag/form.css
root/src/verlag/list.tt2
root/src/verlag/verlag_form.tt2
root/src/verlag/view.tt2

index 817e7d47ee21b70dfc52e6a8e4f69519073304f1..c2a99fda6d96270995514575e0ccc39f82f066af 100644 (file)
@@ -61,6 +61,7 @@ sub index : Private {
        $c->session->{'return_target_autor_save'} = $c->web_path("/autor");
 
        delete $c->session->{'from_autor_list'} if exists $c->session->{'from_autor_list'};
+    delete $c->session->{'autor_data_edit'} if exists $c->session->{'autor_data_edit'};
 
 }
 
@@ -112,6 +113,8 @@ sub list : Local {
     my $K = ( caller(0) )[3] . "(): ";
     $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
 
+    delete $c->session->{'autor_data_edit'} if exists $c->session->{'autor_data_edit'};
+
        $self->add_autorlist_menu($c);
 
     my $page = $c->session->{'autor_list_page'} || 1;
index 5802b5e17441cce9e180d5dad30d2edfece06fff..18f8af89a09cd1ce940662a65c7e5d61d2a3d9e7 100644 (file)
@@ -59,6 +59,9 @@ sub auto : Private {
     $c->stash->{'cssfiles'} = [] unless $c->stash->{'cssfiles'};
     push @{$c->stash->{'cssfiles'}}, 'books/styles.css';
 
+       delete $c->session->{'verlag_data_edit'} if exists $c->session->{'verlag_data_edit'};
+       delete $c->session->{'autor_data_edit'} if exists $c->session->{'autor_data_edit'};
+
     1;
 
 } ## end sub auto :
index d77b08afc8c83b537dacf5672d9f83db6a283c13..5af201a4d9d98ed4fb61db097882af0854e14a9a 100644 (file)
@@ -12,7 +12,7 @@ use FrBr::Books::Util::Verlag;
 
 =head1 NAME
 
-FrBr::Books::Controller::Verlag - Catalyst Controller fuer alles rund um verlage
+FrBr::Books::Controller::Verlag - Catalyst Controller fuer alles rund um Verlage
 
 =head1 DESCRIPTION
 
@@ -58,6 +58,10 @@ sub index : Private {
     my ( $self, $c ) = @_;
 
     $c->stash->{'template'} = 'verlag/index.tt2';
+       $c->session->{'return_target_verlag_save'} = $c->web_path("/verlag");
+
+       delete $c->session->{'from_verlag_list'} if exists $c->session->{'from_verlag_list'};
+    delete $c->session->{'verlag_data_edit'} if exists $c->session->{'verlag_data_edit'};
 }
 
 #-------------------------------------------------------
@@ -82,6 +86,20 @@ sub default : Private {
 
 #-------------------------------------------------------
 
+sub add_verlaglist_menu : Private {
+
+    my ( $self, $c ) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/verlag/list"),
+        'name' => "Liste"
+    };
+
+}
+
+#-------------------------------------------------------
+
 =head2 list
     
 Sucht alle Verlage als Objekt zusammen und übergibt das verlag/list.tt2 zur Darstellung.
@@ -94,15 +112,50 @@ sub list : Local {
     my $K = ( caller(0) )[3] . "(): ";
     $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
 
-    push @{ $c->stash->{'menu_path'} }, {
-        'path' => $c->web_path("/verlag/list"),
-        'name' => "Liste"
-    };
+       $self->add_verlaglist_menu($c);
+    delete $c->session->{'verlag_data_edit'} if exists $c->session->{'verlag_data_edit'};
+
+       my $page = $c->session->{'verlag_list_page'} || 1;
+    my $list_length = $c->stash->{'list_length'} || 10;
 
-    my $liste = get_verlagsliste( $c  );
+    if ( $c->request->params->{'page'} and to_int( $c->request->params->{'page'} ) ) {
+        $page = to_int( $c->request->params->{'page'} );
+        $c->session->{'verlag_list_page'} = $page;
+    }
+
+    my ( $liste, $anzahl ) = get_verlagsliste( $c, 'get_books' => undef, 'page' => $page );
     $c->log->debug( get_output_string( $K, "Erhaltene Liste der Verlage: ", $liste ) ) if $c->stash->{'debug_level'} >= 2;
     $c->stash->{'verlage'} = $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->{'verlag_list_page'} = $page;
+        }
+    }
+    else {
+        $page = 1;
+        $c->session->{'verlag_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("/verlag/list");
+       $c->session->{'return_target_verlag_save'} = $c->web_path("/verlag/list");
+       $c->session->{'from_verlag_list'} = 1;
     $c->stash->{'template'} = 'verlag/list.tt2';
 
 }
@@ -123,6 +176,7 @@ sub form_view : Path('view') {
        $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
 
        $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
+       $self->add_verlaglist_menu($c) if $c->session->{'from_verlag_list'};
        push @{ $c->stash->{'menu_path'} }, {
                'path' => $c->web_path("/verlag/view"),
                'name' => "Betrachten"
@@ -147,7 +201,7 @@ sub form_view : Path('view') {
                return 1;
        }
 
-       $c->stash->{'return_target'} = $c->web_path("/verlag/list");
+       $c->stash->{'return_target'} = $c->session->{'return_target_view'} or $c->web_path("/verlag/list");
 
        $c->stash->{'verlag'}     = $verlagsliste->[0];
        $verlagsliste = undef;
@@ -203,6 +257,94 @@ sub form_new : Path('new') {
 
 #-------------------------------------------------------
 
+=head2 form_edit( )
+
+Aendern eines vorhandenen Verlags.
+
+=cut
+
+sub form_edit : Path('edit') {
+
+    my ( $self, $c ) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    unless ( $c->user_exists() ) {
+        $c->detach('/not_allowed');
+        return;
+    }
+
+    $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
+       $self->add_verlaglist_menu($c) if $c->session->{'from_verlag_list'};
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/autor/edit"),
+        'name' => "&Auml;ndern"
+    };
+
+    $c->stash->{'error_message'} = '';
+
+    # Zu bearbeitende Verlags-Id ermitteln
+    my $vid = to_int( $c->request->params->{'edit_verlags_id'} || 0 );
+
+    unless ( $vid ) {
+        if ( $c->session->{'verlag_data_edit'} and $c->session->{'verlag_data_edit'}{'id'} ) {
+            $vid = $c->session->{'verlag_data_edit'}{'id'};
+        }
+    }
+
+    # Keine Verlags-Id da?
+    unless ( $vid ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Keine oder ung&uuml;ltige Verlags-Id &uuml;bergeben.';
+        return 1;
+    }
+
+    # Angaben zum Verlag aus der Datenbank holen
+       my $vliste = get_verlagsliste( $c, 'verlags_id' => $vid, );
+
+    unless ( $vliste and scalar( @$vliste ) ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Zur &uuml;bergebenen Verlags-Id wurde kein Verlag gefunden.';
+        return 1;
+    }
+
+    my $verlag = $vliste->[0];
+
+    $c->log->debug( get_output_string( $K, "Verlag aus Datenbank: ", $verlag ) ) if $c->stash->{'debug_level'} >= 2;
+
+    # Ruecksprung-URL bestimmen
+    $c->stash->{'return_target'} = $c->session->{'return_target_edit'} or $c->web_path("/verlag/list");
+
+    # Sitzungsdaten vorbelegen, falls noch nicht geschehen
+    if ( $c->session->{'verlag_data_edit'} ) {
+        if ( ! $c->session->{'verlag_data_edit'}{'id'} or $c->session->{'verlag_data_edit'}{'id'} != $vid ) {
+            $c->session->{'verlag_data_edit'} = $verlag;
+        }
+    }
+    else {
+        $c->session->{'verlag_data_edit'} = $verlag;
+    }
+    $vliste = undef;
+
+       $self->verlag_cgi2session($c);
+
+    $c->stash->{'template'} = 'verlag/edit.tt2';
+    push @{$c->stash->{'cssfiles'}}, 'verlag/form.css';
+
+    $self->verlag_session2stash($c);
+
+    unless ( $c->request->params->{'verlag_form_sent'} and $c->request->params->{'do_save'} ) {
+        return 1;
+    }
+
+    $c->stash->{'return_target_action'} = $c->session->{'return_target_edit'};
+    return $self->do_save_verlag($c);
+
+}
+
+#-------------------------------------------------------
+
 sub do_save_verlag : Private {
 
     my ( $self, $c ) = @_;
@@ -297,7 +439,7 @@ sub verlag_session2stash : Private {
     $c->stash->{'verlag_edit'} = {} unless $c->stash->{'verlag_edit'};
     $c->stash->{'verlag_edit'}{'id'}   = $c->session->{'verlag_data_edit'}{'id'}   if $c->session->{'verlag_data_edit'}{'id'};
     $c->stash->{'verlag_edit'}{'name'} = $c->session->{'verlag_data_edit'}{'name'} if $c->session->{'verlag_data_edit'}{'name'};
-    $c->stash->{'verlag_edit'}{'name_long'} = $c->session->{'verlag_data_edit'}{'name_long'} if $c->session->{'verlag_data_edit'}{'desc'};
+    $c->stash->{'verlag_edit'}{'name_long'} = $c->session->{'verlag_data_edit'}{'name_long'} if $c->session->{'verlag_data_edit'}{'name_long'};
 
     $c->stash->{'return_target_verlag_save'} = $c->session->{'return_target_verlag_save'} || $c->web_path('/verlag');
 
index 6307f724cc6d1c104d4872ced59fdc65c195d9db..6467220d77dad5e5949560f8e30ad638eef9014b 100644 (file)
@@ -24,6 +24,7 @@ BEGIN {
     @EXPORT = qw(
         &get_verlagsliste
         &save_verlag
+               &delete_verlag
     );
 
     #%EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
@@ -103,6 +104,8 @@ sub get_verlagsliste {
     $c->log->debug(  get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
 
     my $list = [];
+       my $anzahl_verlage = 0;
+
        my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
        my $rows = undef;
        $rows = $c->stash->{'list_length'} || 20 if defined $page;
@@ -114,6 +117,9 @@ sub get_verlagsliste {
                };
        }
 
+       $anzahl_verlage = $c->model('Schema::Verlage')->count( $search_params );
+    $c->log->debug(  get_output_string( $K, "Anzahl gefundene Verlage: ", $anzahl_verlage ) ) if $c->stash->{'debug_level'} >= 2;
+
     my $other_params = {};
     $other_params->{'order_by'} = [ 'name_short' ];
     $other_params->{'select'} = [
@@ -140,13 +146,13 @@ sub get_verlagsliste {
         my $verlag = {};
         $verlag->{'id'}          = $verlag_rs->id();
         $verlag->{'name'}        = $verlag_rs->name_short();
-        $verlag->{'descr'}       = $verlag_rs->name_long();
+        $verlag->{'name_long'}   = $verlag_rs->name_long();
         $verlag->{'count_books'} = $verlag_rs->get_column('count_books');
         push @$list, $verlag;
     }
 
-       return $list unless scalar $list;
-    return $list unless $params->{'get_books'};
+    return ( wantarray ? ( $list, 0 ) : $list ) unless scalar $list;
+    return ( wantarray ? ( $list, $anzahl_verlage ) : $list ) unless $params->{'get_books'};
 
        for my $verlag ( @$list ) {
 
@@ -270,7 +276,7 @@ sub get_verlagsliste {
 
        }
 
-       return $list;
+    return ( wantarray ? ( $list, $anzahl_verlage ) : $list );
 }
 
 #-----------------------------------------------------------------------------------
@@ -320,6 +326,52 @@ ENDE
 
 #-----------------------------------------------------------------------------------
 
+=head2 delete_verlag( $c, $verlags_id )
+
+Loescht den Autor mit der uebergebenen Autor-Id
+
+=cut
+
+sub delete_verlag {
+
+    my $c          = shift;
+    my $verlags_id = shift;
+    my $K          = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen fuer Verlags-Id " . ( defined $verlags_id ? $verlags_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
+
+    return undef unless $verlags_id and to_int($verlags_id);
+    $verlags_id = to_int($verlags_id);
+
+    my $schema =  $c->model('Schema')->{'schema'};
+
+       # Raus, wenn der Verlag noch Buecher hat ...
+       if ( $c->model('Schema::Buecher')->count( { 'verlags_id' => $verlags_id, } ) ) {
+               my $msg = 'Es existieren noch Buecher dieses Verlags.';
+               die $msg . "\n";
+       }
+
+       # Das eigentliche Löschen
+    my $coderef = sub {
+        $c->model('Schema::Verlage')->search( { 'id' => $verlags_id } )->delete();
+    };
+
+    my $rs;
+    eval {
+        $rs = $schema->txn_do($coderef);
+    };
+
+    if ($@) {                             # Transaction failed
+               my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
+               die $msg . "\n";
+               return undef;
+    }
+       return 1;
+
+}
+
+#-----------------------------------------------------------------------------------
+
 =head1 AUTHOR
 
 Frank Brehm
diff --git a/root/src/verlag/edit.tt2 b/root/src/verlag/edit.tt2
new file mode 100644 (file)
index 0000000..4c11df4
--- /dev/null
@@ -0,0 +1,17 @@
+<!-- [%#
+    Template zum Ändern der Angaben eines Verlags
+
+    vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+    $Id$
+    $URL$
+
+-%]
+[%- verlag_form_title = 'Verlag ändern' %]
+[% verlag_form_title %]
+-->
+[% PROCESS verlag/verlag_form.tt2 %]
+
+<div class="back">
+<h2><a href="[% return_target_verlag_save %]">[% 'Zurück' %]</a></h2>
+</div>
index dca05ff898e68ca50d1e39823f692ec08123f9da..5025231e089d7e1e8f2fe279649e51db2b22789c 100644 (file)
@@ -1,10 +1,11 @@
-[%#
+/* [%#
    # Template fuer Stylesheets Verlagsformulare
    #
    # $Id$
    # $URL$
    #
 -%]
-/*  Stylesheets Verlags-Formulare */
+Stylesheets Verlags-Formulare */
 
+[% PROCESS ftable.css %]
 
index 6846d8a0c0fd2b5ce6ecd08df79a8f3a18f078f0..dd4bb5fa0229f50119ad3c1cc7a5f85c0de0cf2f 100644 (file)
 
 [% META title = 'Verlagsliste' -%]
 
+[% tab_colspan = 4 %][% IF Catalyst.user_exists %][% tab_colspan = 6 %][% 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">
     <th></th>
     [% IF Catalyst.user_exists %]<th></th>
     <th></th>[% END %]
-  </tr>
+  </tr>[% PROCESS navrow %]
 [% rowstyle = 'even' %][%- FOREACH verlag IN verlage -%]
   <tr>
     <td class="[% rowstyle %]">[% verlag.name %]</td>
-    <td class="[% rowstyle %]">[% verlag.descr %]</td>
+    <td class="[% rowstyle %]">[% verlag.name_long %]</td>
     <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 %]
   </tr>
 [% IF rowstyle == 'even' %][% rowstyle = 'odd'%][% ELSE %][% rowstyle = 'even' %][% END %][% END -%]
-</table></td></tr></table>
+[% PROCESS navrow %]</table></td></tr></table>
 </div>
 <br />
index 05369b341b5080cc8a50bac82b48a622bf62f56e..a51a4e17c69d661423d7ef516e3d71b083189874 100644 (file)
@@ -1,4 +1,4 @@
-[%#
+<!-- [%#
 
     Template fuer Verlagsangaben
 
@@ -9,7 +9,7 @@
 
 -%]
 
-<!-- Verlags-Formular -->
+Verlags-Formular -->
 
 <form method="post" name="verlag_form" action="[% self_url %]">
 <input type="hidden" name="verlag_form_sent" value="sent" />
index 9144f860e67483fae9356b016494549ebf1bffc3..3ad111a70540f3d622455ff25a9c3242c39d7e76 100644 (file)
@@ -44,7 +44,7 @@
                        },
                ],
                'count_books' => '1',
-               'descr' => '',
+               'name_long => '',
                'id' => '8',
                'name' => 'Piper',
        };
@@ -67,7 +67,7 @@ Verlagsanzeige -->
     <td>[%- verlag.name | html -%]</td>
   </tr><tr>
     <th>Kompletter Verlagsname / Beschreibung:</th>
-    <td>[%- verlag.descr | html %]</td>
+    <td>[%- verlag.name_long | html %]</td>
   </tr><tr>
     <th>Anzahl Bücher:</th>
     <td>[%- verlag.count_books | html -%]</td>