@ISA = qw(Exporter);
@EXPORT = qw(
&get_author_list
+ &get_autor_id
&save_autor
);
my $c = shift;
my $autor = shift;
- my $K = __PACKAGE__ . "::save_autor(): ";
+ 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 {
push @Params, $autor->{'id'};
+ my $a_params = {};
+
my $tmp = $autor->{'titel'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
push @Params, ( $tmp ? $tmp : undef );
+ $a_params->{'vorname'} = $tmp if $tmp;
$tmp = $autor->{'mittelname'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
push @Params, ( $tmp ? $tmp : undef );
+ $a_params->{'mittelname'} = $tmp if $tmp;
$tmp = $autor->{'nachname'};
$tmp = '' unless defined $tmp;
$tmp =~ s/^\s+//;
$tmp =~ s/\s+$//;
push @Params, $tmp;
+ $a_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;
push @Params, $autor->{'desc'};
+ # 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." );
+ return undef;
+ }
+ }
+ else {
+ if ( get_autor_id( $c, $a_params ) ) {
+ $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' ] );
+ # 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." );
+ unlock_tables($c);
+ return undef;
+ }
+ }
+ else {
+ if ( get_autor_id( $c, $a_params ) ) {
+ $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);
+ return undef;
+ }
+ }
+
my $id = undef;
my $do_insert = undef;
if ( $autor->{'id'} ) {
my $author_id = $storage->last_insert_id();
unlock_tables($c);
+ $c->stash->{'storage'}{'save_autor_result'} = 'OK';
return $author_id;
}
#-----------------------------------------------------------------------------------
+=head2 get_autor_id( $c, 'nachname' => 'Wolf', 'vorname' => 'Friedrich' )
+
+=cut
+
+sub get_autor_id {
+
+ my $c = shift;
+ my $K = ( caller(0) )[3] . "(): ";
+
+ $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 3;
+
+ my $params = {};
+ if ( ref($_[0]) and ref($_[0]) eq 'HASH' ) {
+ $params = $_[0];
+ }
+ else {
+ %$params = @_;
+ }
+ $c->log->debug( get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
+
+ my $storage = $c->stash->{'storage'};
+ #$c->log->debug( get_output_string( $K, "Storage: ", $storage ) ) if $c->stash->{'debug_level'} >= 4;
+
+ my $name = $params->{'nachname'};
+ $name = $params->{'mittelname'} . " " . $name if defined $params->{'mittelname'};
+ $name = $params->{'vorname'} . " " . $name if defined $params->{'vorname'};
+ $name .= " " . $params->{'name_suffix'} if defined $params->{'name_suffix'};
+
+ my $select_func = sub {
+
+ my ( $storage, $dbh, $name ) = @_;
+ my $sql = <<ENDE;
+SELECT `me`.`id`
+ FROM `autoren` AS `me`
+ WHERE CONCAT(
+ IFNULL( `me`.`vorname`, '' ), IF( ISNULL(`me`.`vorname`), '', ' ' ),
+ IFNULL( `me`.`mittelname`, '' ), IF( ISNULL(`me`.`mittelname`), '', ' ' ),
+ `me`.`nachname`,
+ IF( ISNULL( `me`.`name_suffix` ), '', ' ' ), IFNULL( `me`.`name_suffix`, '' )
+ ) = ?
+ENDE
+
+ if ( $storage->debug() ) {
+ my $text = $sql;
+ $text =~ s/\s+$//;
+ $text .= ": " . join( ", ", map { $dbh->quote($_) } ( $name ) ) . "\n";
+ warn $text;
+ }
+
+ my $sth = $dbh->prepare($sql);
+ $sth->execute( $name );
+
+ return $sth->fetchall_arrayref();
+ };
+
+ my $id = undef;
+ for my $autor_rs ( $storage->dbh_do( $select_func, $name ) ) {
+ $id = $autor_rs->[0];
+ }
+
+ return $id;
+
+}
+
+#-----------------------------------------------------------------------------------
+
=head1 AUTHOR
Frank Brehm