X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=authorities%2Fmerge.pl;h=9f725415a52cdeeb7a3e80a1abeb673e7055e4be;hb=e053ccb682402d57253471d8f07dcf906ea288c0;hp=060db09fbd8d3bd8ec10a29c23547dbf2e3550c1;hpb=db35492c795540d6c3b10f7cba18698aeb84a816;p=koha.git diff --git a/authorities/merge.pl b/authorities/merge.pl index 060db09fbd..9f725415a5 100755 --- a/authorities/merge.pl +++ b/authorities/merge.pl @@ -23,11 +23,11 @@ use CGI qw ( -utf8 ); use C4::Output; use C4::Auth; use C4::AuthoritiesMarc; -use Koha::MetadataRecord::Authority; use C4::Koha; use C4::Biblio; -use Koha::Exceptions; +use Koha::Authority::Types; +use Koha::MetadataRecord::Authority; my $input = new CGI; my @authid = $input->multi_param('authid'); @@ -52,12 +52,28 @@ if ($merge) { # Creating a new record from the html code my $record = TransformHtmlToMarc($input, 0); - my $recordid1 = $input->param('recordid1'); - my $recordid2 = $input->param('recordid2'); + my $recordid1 = $input->param('recordid1') // q{}; + my $recordid2 = $input->param('recordid2') // q{}; my $typecode = $input->param('frameworkcode'); + # Some error checking + if( $recordid1 eq $recordid2 ) { + push @errors, { code => 'DESTRUCTIVE_MERGE' }; + } elsif( !$typecode || !Koha::Authority::Types->find($typecode) ) { + push @errors, { code => 'WRONG_FRAMEWORK' }; + } elsif( scalar $record->fields == 0 ) { + push @errors, { code => 'EMPTY_MARC' }; + } + if( @errors ) { + $template->param( errors => \@errors ); + output_html_with_http_headers $input, $cookie, $template->output; + exit; + } + # Rewriting the leader - $record->leader( GetAuthority($recordid1)->leader() ); + if( my $authrec = GetAuthority($recordid1) ) { + $record->leader( $authrec->leader() ); + } # Modifying the reference record # This triggers a merge for the biblios attached to $recordid1 @@ -87,10 +103,14 @@ else { if ( scalar(@authid) != 2 ) { push @errors, { code => "WRONG_COUNT", value => scalar(@authid) }; - } - else { + } elsif( $authid[0] eq $authid[1] ) { + push @errors, { code => 'DESTRUCTIVE_MERGE' }; + } else { my $recordObj1 = Koha::MetadataRecord::Authority->get_from_authid($authid[0]); - Koha::Exceptions::ObjectNotFound->throw( "No authority record found for authid $authid[0]\n" ) if !$recordObj1; + if (!$recordObj1) { + push @errors, { code => "MISSING_RECORD", value => $authid[0] }; + } + my $recordObj2; if (defined $mergereference && $mergereference eq 'breeding') { @@ -98,14 +118,23 @@ else { } else { $recordObj2 = Koha::MetadataRecord::Authority->get_from_authid($authid[1]); } - Koha::Exceptions::ObjectNotFound->throw( "No authority record found for authid $authid[1]\n" ) if !$recordObj2; + if (!$recordObj2) { + push @errors, { code => "MISSING_RECORD", value => $authid[1] }; + } - if ($mergereference) { + unless ( $recordObj1 && $recordObj2 ) { + if (@errors) { + $template->param( errors => \@errors ); + } + output_html_with_http_headers $input, $cookie, $template->output; + exit; + } + + if ($mergereference ) { my $framework; if ( $recordObj1->authtypecode ne $recordObj2->authtypecode && $mergereference ne 'breeding' ) { - $framework = $input->param('frameworkcode') - or push @errors, { code => 'FRAMEWORK_NOT_SELECTED' }; + $framework = $input->param('frameworkcode'); } else { $framework = $recordObj1->authtypecode; @@ -167,17 +196,9 @@ else { title2 => $recordObj2->authorized_heading, ); if ( $recordObj1->authtypecode ne $recordObj2->authtypecode ) { - my $authority_types = Koha::Authority::Types->search( {}, { order_by => ['authtypecode'] } ); - my @frameworkselect; - while ( my $authority_type = $authority_types->next ) { - my %row = ( - value => $authority_type->authtypecode, - frameworktext => $authority_type->authtypetext, - ); - push @frameworkselect, \%row; - } + my $authority_types = Koha::Authority::Types->search( { authtypecode => { '!=' => '' } }, { order_by => ['authtypecode'] } ); $template->param( - frameworkselect => \@frameworkselect, + frameworkselect => $authority_types->unblessed, frameworkcode1 => $recordObj1->authtypecode, frameworkcode2 => $recordObj2->authtypecode, ); @@ -186,22 +207,7 @@ else { } } -my $authority_types = Koha::Authority::Types->search({}, { order_by => ['authtypetext']}); -$template->param( authority_types => $authority_types ); - if (@errors) { - - # Errors $template->param( errors => \@errors ); } - output_html_with_http_headers $input, $cookie, $template->output; -exit; - -=head1 FUNCTIONS - -=cut - -# ------------------------ -# Functions -# ------------------------