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'};
$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;
#-------------------------------------------------------
+=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ültige Autor-Id ü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 ü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 ü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.
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 ) ) {
&get_author_list
&get_autor_id
&save_autor
+ &delete_autor
);
#%EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
#-----------------------------------------------------------------------------------
+=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