]> Frank Brehm's Git Trees - books.git/commitdiff
Bis zu Löschen eines Autors gekommen
authorFrank Brehm <frank@brehm-online.com>
Sat, 13 Jun 2009 21:31:49 +0000 (21:31 +0000)
committerFrank Brehm <frank@brehm-online.com>
Sat, 13 Jun 2009 21:31:49 +0000 (21:31 +0000)
lib/FrBr/Books.pm
lib/FrBr/Books/Controller/Autor.pm
lib/FrBr/Books/Util/Author.pm

index d0a5ec97df9c2d095efd8d23cf68c9939b6bdf8d..0f7aea2f2ada64a7d90d35f836ecb4136cd0940c 100644 (file)
@@ -73,7 +73,7 @@ __PACKAGE__->config(
                 },
                 'store' => {
                     'class'         => 'DBIx::Class',
-                    'user_class'    => 'Users',
+                    'user_class'    => 'Schema::Users',
                     'id_field'      => 'user_id',
                 },
             },
index 690eb7a713963de73f0294f068ac5d9aaf0b6bea..a74f9988f4f171b28706cc3882649ddbf23fef11 100644 (file)
@@ -58,6 +58,7 @@ sub index : Private {
     my ( $self, $c ) = @_;
 
     $c->stash->{'template'} = 'autor/index.tt2';
+       $c->session->{'return_target_autor_save'} = $c->web_path("/autor");
 
        delete $c->session->{'from_autor_list'} if exists $c->session->{'from_autor_list'};
 
@@ -151,6 +152,7 @@ sub list : Local {
 
     $c->stash->{'authors'} = $liste;
     $c->session->{'return_target_view'} = $c->web_path("/autor/list");
+       $c->session->{'return_target_autor_save'} = $c->web_path("/autor/list");
 
     $c->stash->{'template'} = 'autor/list.tt2';
        $c->session->{'from_autor_list'} = 1;
@@ -254,6 +256,85 @@ sub form_view : Path('view') {
 
 #-------------------------------------------------------
 
+=head2 delete_autor( )
+
+Loescht einen vorhandenen Autor.
+
+=cut
+
+sub delete_autor_form : Path('delete') {
+
+    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_autorlist_menu($c) if $c->session->{'from_autor_list'};
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/autor/delete"),
+        'name' => "Löschen"
+    };
+
+    $c->stash->{'error_message'} = '';
+
+    my $aid = to_int( $c->request->params->{'delete_autor_id'} || $c->session->{'delete_autor_id'} || 0 );
+    unless ( $aid ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Keine oder ung&uuml;ltige Autor-Id &uuml;bergeben.';
+        return 1;
+    }
+    $c->session->{'delete_autor_id'} = $aid;
+
+    # Angaben zum Autor aus der Datenbank holen
+    my $aliste = get_author_list( $c, 'autor_id' => $aid );
+
+    unless ( $aliste and scalar( @$aliste ) ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Zur &uuml;bergebenen Autor-Id wurde kein Autor gefunden.';
+        return 1;
+    }
+
+    my $autor = $aliste->[0];
+    $c->log->debug( get_output_string( $K, "Autor aus Datenbank: ", $autor ) ) if $c->stash->{'debug_level'} >= 2;
+
+       my $anzahl_buecher = $c->model('Schema::Autor2buch')->count( { 'autor_id' => $aid, } );
+
+       if ( $anzahl_buecher ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Dem &uuml;bergebenen Autor sind noch Bücher zugeardnet.';
+        return 1;
+       }
+
+    $c->stash->{'return_target'} = $c->session->{'return_target_autor_save'} or $c->web_path("/autor/list");
+
+    $c->stash->{'autor'}     = $autor;
+    $aliste = undef;
+
+    $c->stash->{'template'} = 'autor/delete.tt2';
+    push @{$c->stash->{'cssfiles'}}, 'autor/view.css';
+
+    if ( $c->request->params->{'really_delete_author'} and $c->request->params->{'really_delete_author'} eq 'yes' and $c->request->params->{'do_delete'} ) {
+        eval {
+            delete_autor( $c, $aid );
+        };
+        if ( $@ ) {
+            $c->stash->{'error_message'} = $@;
+            $c->log->warn( "Fehler beim Löschen des Autors: " . $@ );
+            return undef;
+        }
+        $c->stash->{'template'} = 'autor/delete_success.tt2';
+    }
+
+}
+
+#-------------------------------------------------------
+
 =head2 form_edit( )
 
 Aendern eines vorhandenen Autors.
@@ -297,7 +378,7 @@ sub form_edit : Path('edit') {
         return 1;
     }
 
-    # Angaben zum Buch aus der Datenbank holen
+    # Angaben zum Autor aus der Datenbank holen
     my $aliste = get_author_list( $c, 'autor_id' => $aid );
 
     unless ( $aliste and scalar( @$aliste ) ) {
index 4fe22ee972ce3e5f277c5806d4af6cb1741a1ec5..04d15309064c238aeb623df0a072e6d185ec1437 100644 (file)
@@ -26,6 +26,7 @@ BEGIN {
         &get_author_list
         &get_autor_id
         &save_autor
+               &delete_autor
     );
 
     #%EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
@@ -441,6 +442,58 @@ ENDE
 
 #-----------------------------------------------------------------------------------
 
+=head2 delete_autor( $c, $autor_id )
+
+Loescht den Autor mit der uebergebenen Autor-Id
+
+=cut
+
+sub delete_autor {
+
+    my $c        = shift;
+    my $autor_id = shift;
+    my $K        = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen fuer Autor-Id " . ( defined $autor_id ? $autor_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
+
+    return undef unless $autor_id and to_int($autor_id);
+    $autor_id = to_int($autor_id);
+
+    my $schema =  $c->model('Schema')->{'schema'};
+
+#      # Sperren der Autoren- und der Buecher-Tabelle
+#      lock_tables( $c, 'write' => [ 'autoren', 'autoren', 'as', 'me', ], 'read' => [ 'autor2buch', 'autor2buch', 'as', 'me', ] );
+
+       # Raus, wenn der Autor noch Buecher hat ...
+       if ( $c->model('Schema::Autor2buch')->count( { 'autor_id' => $autor_id, } ) ) {
+               my $msg = 'Es existieren noch Buecher dieses Autors.';
+#              unlock_tables($c);
+               die $msg . "\n";
+       }
+
+       # Das eigentliche Löschen
+    my $coderef = sub {
+        $c->model('Schema::Autoren')->search( { 'id' => $autor_id } )->delete();
+    };
+
+    my $rs;
+    eval {
+        $rs = $schema->txn_do($coderef);
+    };
+
+    if ($@) {                             # Transaction failed
+               my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
+#              unlock_tables($c);
+               die $msg . "\n";
+               return undef;
+    }
+#    unlock_tables($c);
+       return 1;
+
+}
+
+#-----------------------------------------------------------------------------------
+
 =head1 AUTHOR
 
 Frank Brehm