$c->stash->{'template'} = 'autor/index.tt2';
+ delete $c->session->{'from_autor_list'} if exists $c->session->{'from_autor_list'};
+
}
#-------------------------------------------------------
$c->session->{'return_target_view'} = $c->web_path("/autor/list");
$c->stash->{'template'} = 'autor/list.tt2';
+ $c->session->{'from_autor_list'} = 1;
}
}
$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/new"),
'name' => "Neu"
$c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
$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/view"),
'name' => "Betrachten"
#-------------------------------------------------------
+=head2 form_edit( )
+
+Aendern eines vorhandenen Autors.
+
+=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_autorlist_menu($c) if $c->session->{'from_autor_list'};
+ push @{ $c->stash->{'menu_path'} }, {
+ 'path' => $c->web_path("/autor/edit"),
+ 'name' => "Ändern"
+ };
+
+ $c->stash->{'error_message'} = '';
+
+ # Zu bearbeitende Autor-Id ermitteln
+ my $aid = to_int( $c->request->params->{'edit_autor_id'} || 0 );
+
+ unless ( $aid ) {
+ if ( $c->session->{'autor_data_edit'} and $c->session->{'autor_data_edit'}{'id'} ) {
+ $aid = $c->session->{'autor_data_edit'}{'id'};
+ }
+ }
+
+ # Keine Autor-Id da?
+ unless ( $aid ) {
+ $c->stash->{'template'} = 'error.tt2';
+ $c->stash->{'error'} = 'Keine oder ungültige Autor-Id übergeben.';
+ return 1;
+ }
+
+ # Angaben zum Buch 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;
+
+ # Ruecksprung-URL bestimmen
+ $c->stash->{'return_target'} = $c->session->{'return_target_edit'} or $c->web_path("/autor/list");
+
+ # Sitzungsdaten vorbelegen, falls noch nicht geschehen
+ if ( $c->session->{'autor_data_edit'} ) {
+ if ( ! $c->session->{'autor_data_edit'}{'id'} or $c->session->{'autor_data_edit'}{'id'} != $aid ) {
+ $c->session->{'autor_data_edit'} = $autor;
+ }
+ }
+ else {
+ $c->session->{'autor_data_edit'} = $autor;
+ }
+ $aliste = undef;
+
+# $self->prepare_data_structures($c);
+ $self->autor_cgi2session($c);
+
+ $c->stash->{'template'} = 'autor/edit.tt2';
+ push @{$c->stash->{'cssfiles'}}, 'autor/form.css';
+
+ $self->autor_session2stash($c);
+
+ unless ( $c->request->params->{'autor_form_sent'} and $c->request->params->{'do_save'} ) {
+ return 1;
+ }
+
+ $c->stash->{'return_target_action'} = $c->session->{'return_target_edit'};
+ return $self->save_author($c);
+
+}
+
+#-------------------------------------------------------
+
sub save_author : Private {
my ( $self, $c ) = @_;
return 1 unless $self->check_formparams($c);
+ $c->log->debug( get_output_string( $K, "Sichere Autor: ", $c->stash->{'autor_edit'} ) ) if $c->stash->{'debug_level'} >= 2;
my $autor_id = undef;
eval {
$autor_id = save_autor( $c, $c->stash->{'autor_edit'} );
$c->stash->{'autor_edit'}{'mittelname'} = $c->session->{'autor_data_edit'}{'mittelname'} if exists $c->session->{'autor_data_edit'}{'mittelname'};
$c->stash->{'autor_edit'}{'nachname'} = $c->session->{'autor_data_edit'}{'nachname'} if $c->session->{'autor_data_edit'}{'nachname'};
$c->stash->{'autor_edit'}{'name_suffix'} = $c->session->{'autor_data_edit'}{'name_suffix'} if exists $c->session->{'autor_data_edit'}{'name_suffix'};
- $c->stash->{'autor_edit'}{'desc'} = $c->session->{'autor_data_edit'}{'desc'} if exists $c->session->{'autor_data_edit'}{'desc'};
+ $c->stash->{'autor_edit'}{'descr'} = $c->session->{'autor_data_edit'}{'descr'} if exists $c->session->{'autor_data_edit'}{'descr'};
$c->stash->{'return_target_autor_save'} = $c->session->{'return_target_autor_save'} || $c->web_path('/autor');
}
# Genauere Beschreibung des Autors
- $c->session->{'autor_data_edit'}{'desc'} = $c->request->params->{'autor_desc'} if defined $c->request->params->{'autor_desc'};
+ $c->session->{'autor_data_edit'}{'descr'} = $c->request->params->{'autor_desc'} if defined $c->request->params->{'autor_desc'};
return 1;
This library is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.
+=head1 INTERNA
+
+=head2 Sitzungs-Variablen:
+
+=over 4
+
+=item I<autor_data_edit>: die aktuellen Daten des zu bearbeitenden Autors, bevor sie gespeichert werden
+
+=item I<delete_autor_id>: die Id des zu loeschenden Autors
+
+=item I<list_length>: die aktuelle Listenlaenge
+
+=item I<from_autor_list>: boolscher Flag, ob man aus der Autorenliste ins Formular kam oder aus dem Menue
+
+=back
+
=cut
1;
=over 4
-=item I<book_data_edit>: die aktuellen daten des zu bearbeitenden Buches, bevor sie gespeichert werden
+=item I<book_data_edit>: die aktuellen Daten des zu bearbeitenden Buches, bevor sie gespeichert werden
=item I<delete_book_id>: die Id des zu loeschenden Buches
sub save_autor {
- my $c = shift;
- my $autor = shift;
- my $K = ( caller(0) )[3] . "(): ";
-
- $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-
- my $storage = $c->stash->{'storage'};
- $c->stash->{'storage'}{'save_autor_result'} = '';
-
- my $save_func = sub {
+ my $c = shift;
+ my $autor = shift;
+ my $K = ( caller(0) )[3] . "(): ";
- my ( $storage, $dbh, $insert, $autor_id, $titel, $vorname, $mittelname, $nachname, $suffix, $desc ) = @_;
- $desc = '' unless defined $desc;
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
- my $sql = '';
- my @P = ();
+ my $storage = $c->stash->{'storage'};
+ $c->stash->{'storage'}{'save_autor_result'} = '';
- if ( $insert ) {
- if ( $autor_id ) {
- $sql = <<ENDE;
-INSERT INTO `autoren` (
- `id`, `titel`, `vorname`, `mittelname`, `nachname`, `name_suffix`, `autor_descr` )
- VALUES (
- LAST_INSERT_ID(?), ?, ?, ?, ?, ?, ? )
-ENDE
- @P = ( $autor_id, $titel, $vorname, $mittelname, $nachname, $suffix, $desc );
- }
- else {
- $sql = <<ENDE;
-INSERT INTO `autoren` (
- `titel`, `vorname`, `mittelname`, `nachname`, `name_suffix`, `autor_descr` )
- VALUES (
- ?, ?, ?, ?, ?, ? )
-ENDE
- @P = ( $titel, $vorname, $mittelname, $nachname, $suffix, $desc );
- }
- }
- else {
- $sql = <<ENDE;
-UPDATE `autoren`
- SET `id` = LAST_INSERT_ID(`id`),
- `titel` = ?,
- `vorname` = ?,
- `mittelname` = ?,
- `nachname` = ?,
- `name_suffix` = ?,
- `autor_descr` = ?
- WHERE `id` = ?
-ENDE
- @P = ( $titel, $vorname, $mittelname, $nachname, $suffix, $desc, $autor_id );
- }
-
- if ( $storage->debug() ) {
- my $text = $sql;
- $text =~ s/\s+$//;
- $text .= ": " . join( ", ", map { $dbh->quote($_) } @P ) . "\n";
- warn $text;
- }
-
- my $sth = $dbh->prepare($sql);
- $sth->execute( @P );
-
- };
-
- my @Params = ();
- my $search_params = {};
-
- push @Params, $autor->{'id'};
-
- my $a_params = {};
+ my $search_params = {};
+ my $row = {};
my $tmp = $autor->{'titel'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
- push @Params, ( $tmp ? $tmp : undef );
+ $row->{'titel'} = $tmp eq '' ? undef : $tmp;
$tmp = $autor->{'vorname'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
- push @Params, ( $tmp ? $tmp : undef );
- $a_params->{'vorname'} = $tmp if $tmp;
+ $row->{'vorname'} = $tmp eq '' ? undef : $tmp;
+ $search_params->{'vorname'} = $tmp if $tmp ne '';
$tmp = $autor->{'mittelname'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
- push @Params, ( $tmp ? $tmp : undef );
- $a_params->{'mittelname'} = $tmp if $tmp;
+ $row->{'mittelname'} = $tmp eq '' ? undef : $tmp;
+ $search_params->{'mittelname'} = $tmp if $tmp ne '';
$tmp = $autor->{'nachname'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
- push @Params, $tmp;
- $a_params->{'nachname'} = $tmp;
+ $row->{'nachname'} = $tmp;
+ $search_params->{'nachname'} = $tmp;
$tmp = $autor->{'name_suffix'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
- push @Params, ( $tmp ? $tmp : undef );
- $a_params->{'name_suffix'} = $tmp if $tmp;
+ $row->{'name_suffix'} = $tmp eq '' ? undef : $tmp;
+ $search_params->{'name_suffix'} = $tmp if $tmp ne '';
- push @Params, $autor->{'desc'};
+ $tmp = $autor->{'descr'};
+ $tmp = '' unless defined $tmp;
+ $tmp =~ s/^\s+//;
+ $tmp =~ s/\s+$//;
+ $row->{'autor_descr'} = $tmp;
+ my $saved_aid = get_autor_id( $c, $search_params );
+
# Zuerst einmal Test im nichgelocktem Zustand ...
if ( $autor->{'id'} ) {
- my $new_id = get_autor_id( $c, $a_params );
- if ( $new_id and ( $new_id != $autor->{'id'} ) ) {
- $c->stash->{'save_autor_result'} = 'Es existiert bereits ein Autor mit den uebergebenen Angaben.';
- $c->log->info( $K . "Es existiert bereits ein Autor mit den uebergebenen Angaben." );
+ if ( $saved_aid and ( $saved_aid != $autor->{'id'} ) ) {
+ $c->stash->{'save_autor_result'} = 'Es existiert bereits ein Autor mit den übergebenen Angaben.';
+ $c->log->info( $K . "Es existiert bereits ein Autor mit den übergebenen Angaben." );
return undef;
}
}
else {
- if ( get_autor_id( $c, $a_params ) ) {
+ if ( $saved_aid ) {
$c->stash->{'save_autor_result'} = 'Es existiert bereits ein Autor mit den uebergebenen Angaben.';
$c->log->info( $K . "Es existiert bereits ein Autor mit den uebergebenen Angaben." );
return undef;
# Sperren der Autoren-Tabelle
lock_tables( $c, 'write' => [ 'autoren', 'autoren', 'as', 'me' ] );
+ $saved_aid = get_autor_id( $c, $search_params );
+
# Und jetzt Test im gelocktem Zustand ...
if ( $autor->{'id'} ) {
- my $new_id = get_autor_id( $c, $a_params );
- if ( $new_id and ( $new_id != $autor->{'id'} ) ) {
- $c->stash->{'save_autor_result'} = 'Es existiert bereits ein Autor mit den uebergebenen Angaben.';
- $c->log->info( $K . "Es existiert bereits ein Autor mit den uebergebenen Angaben." );
+ if ( $saved_aid and ( $saved_aid != $autor->{'id'} ) ) {
+ $c->stash->{'save_autor_result'} = 'Es existiert bereits ein Autor mit den übergebenen Angaben.';
+ $c->log->info( $K . "Es existiert bereits ein Autor mit den übergebenen Angaben." );
unlock_tables($c);
return undef;
}
}
else {
- if ( get_autor_id( $c, $a_params ) ) {
+ if ( $saved_aid ) {
$c->stash->{'save_autor_result'} = 'Es existiert bereits ein Autor mit den uebergebenen Angaben.';
$c->log->info( $K . "Es existiert bereits ein Autor mit den uebergebenen Angaben." );
unlock_tables($c);
}
}
- my $id = undef;
- my $do_insert = undef;
- if ( $autor->{'id'} ) {
- $search_params = { '`id`' => $autor->{'id'}, };
- }
- else {
- $search_params = {
- 'nachname' => $autor->{'nachname'},
- 'vorname' => $autor->{'vorname'},
- 'mittelname' => $autor->{'mittelname'},
- 'name_suffix' => $autor->{'name_suffix'},
- };
- }
- for my $autor_rs ( $c->model('Schema::Autoren')->search( $search_params )->all() ) {
- $id = $autor_rs->id();
- }
-
- if ( $id ) {
- $autor->{'id'} = $id;
- $Params[0] = $id;
- }
- else {
- $do_insert = 1;
- }
-
- $storage->dbh_do( $save_func, $do_insert, @Params );
+ my $new_id = undef;
+
+ eval {
+ if ( $autor->{'id'} ) {
+ $new_id = $autor->{'id'};
+ my $count = $c->model('Schema::Autoren')->count( { 'id' => $autor->{'id'} } );
+ if ( $count ) {
+ $c->model('Schema::Autoren')->search( { 'id' => $autor->{'id'} } )->update( $row );
+ }
+ else {
+ $row->{'id'} = $new_id;
+ $c->model('Schema::Autoren')->create($row);
+ }
+ }
+ else {
+ $c->model('Schema::Autoren')->create($row);
+ $new_id = $storage->last_insert_id();
+ }
+ };
+ if ( $@ ) {
+ $c->stash->{'save_autor_result'} = $@;
+ $c->log->info( $K . $@ );
+ unlock_tables($c);
+ return undef;
+ }
- my $author_id = $storage->last_insert_id();
unlock_tables($c);
$c->stash->{'storage'}{'save_autor_result'} = 'OK';
- return $author_id;
+ return $new_id;
}
my $id = undef;
for my $autor_rs ( $storage->dbh_do( $select_func, $name ) ) {
- $id = $autor_rs->[0];
+ $id = $autor_rs->[0][0];
}
+ $c->log->debug( $K . get_output_string( "Ermittelte Autor-Id: ", ( defined $id ? $id : '<keine>' ) ) ) if $c->stash->{'debug_level'} >= 2;
return $id;
}
<td><input type="text" name="autor_name_suffix" size="50" maxlength="100" value="[% autor_edit.name_suffix | html %]" /></td>
</tr><tr>
<th>Zusätzliche Angaben:</th>
- <td><textarea name="autor_desc" cols="50" rows="5">[% autor_edit.desc | html %]</textarea></td>
+ <td><textarea name="autor_desc" cols="50" rows="5">[% autor_edit.descr | html %]</textarea></td>
</tr><tr>
<td colspan="2"> </td>
</tr><tr>
--- /dev/null
+<!-- [%#
+ Template zum Ändern der Angaben eines Autors
+
+ vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+ $Id$
+ $URL$
+
+-%]
+[%- autor_form_title = 'Autor ändern' %]
+[% autor_form_title %]
+-->
+[% PROCESS autor/autor_form.tt2 %]
+
+<div class="back">
+<h2><a href="[% return_target_autor_save %]">[% 'Zurück' %]</a></h2>
+</div>
-%]
/* Stylesheets Autoren-Formulare */
+TABLE.ftable {
+ 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;
+ margin: auto;
+}
+
+TABLE.ftable UL {
+ margin: 0;
+}
+
+TABLE.ftable TH {
+ vertical-align: top;
+ text-align: left;
+ padding: 2px;
+ border-width: 1px;
+ border-style: solid;
+ font-size: 1em;
+ 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.ftable TD {
+ vertical-align: top;
+ 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.ftable TD.empty {
+ height: 0.5em;
+}
+
+TABLE.ftable TH.button {
+ font-weight: bolder;
+ text-align: center;
+ font-size: 1.2em;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+TABLE.ftable TH.button INPUT {
+ font-weight: bolder;
+ text-align: center;
+ font-size: 1em;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
-[%#
+<!-- [%#
Template fuer neuen Autor
vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
-%]
[%- autor_form_title = 'Neuer Autor' -%]
+[% autor_form_title %]
+-->
[% PROCESS autor/autor_form.tt2 %]
<div class="back">
-%]
/* Stylesheets Formulare */
+TABLE.ftable {
+ 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;
+ margin: auto;
+}
+
+TABLE.ftable UL {
+ margin: 0;
+}
+
+TABLE.ftable TH {
+ vertical-align: top;
+ text-align: left;
+ padding: 2px;
+ border-width: 1px;
+ border-style: solid;
+ font-size: 1em;
+ 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.ftable TD {
+ vertical-align: top;
+ 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.ftable TD.empty {
+ height: 0.5em;
+}
+
+TABLE.ftable TH.button {
+ font-weight: bolder;
+ text-align: center;
+ font-size: 1.2em;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+TABLE.ftable TH.button INPUT {
+ font-weight: bolder;
+ text-align: center;
+ font-size: 1em;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+