From f0e7a120ced84b4577f90d2e1879289c02b69bcd Mon Sep 17 00:00:00 2001 From: remi Date: Wed, 9 Mar 2016 11:48:31 -0500 Subject: [PATCH] Bug 16018: Merge.pl code cleanup Original patch from Remi Mayrand-Provencher. Amended by Marcel de Rooy (January 2017), part of omnibus bug 17908. EDIT: We cannot remove the ModAuthority call, since the reference record is the result of the merge and should be saved. Variable $overwrite is not used and can be removed. It is not useful to postpone a merge to the cron job here, since the old authority record is deleted. (Note that bug 9988 will address this subject too.) Removing the call to C4::ImportBatch::SetImportRecordStatus: Since $recordid2 is not an import_record_id, this is useless and potentially wrong. Removed the if statement for @errors, since it is not used at this point; putting the result of a comparison into $error is not useful either. Note: there is a lot of code in merge.pl around breeding that is actually unused. Template tools/manage-marc-import.tt contains two unused blocks final_match_link and match_link that contain a (unreachable) call to authorities/merge.pl with parameters: mergereference=breeding&authid=[% record_lis.match_id %]&authid=[% record_lis.import_record_id %] It seems that this would show the records correctly, but would not merge them correctly since that code expects two authority records. Leaving the signoff of Mehdi since he essentially tested the merge call. Test plan: [1] Restart Plack and restart koha-indexer. (I had some problems related to indexing as a result of the marcxml transition.) [2] Go to Authorities. Select two authorities to merge, start with two of the same type. Make sure that both are used in a few biblio records. Select at least one subfield from the authority to be removed for inclusion in the authority to be kept ("reference record"). [3] Click Merge. You come back to the kept authority record. Note: The number of attached records may not yet be updated. This depends on the speed of koha-indexer. If you wait a bit and refresh, you should have the correct number. First check the authority record again for the inserted subfield. Now check a biblio that was ALREADY attached to the reference record. And check a biblio that was FORMERLY attached to the deleted one. Note: See bug 17913 to see how pref AuthorityMergeMode impacts this. [4] Try steps 2 and 3 again for a merge of two authority records that do not have the same authority type noting the remarks below. For instance try to merge from a CORPO_NAME to a PERSO_NAME record. Make a change in say 040$a of the record to be deleted. And select that field later on the merge form. Normally, you would use the PERSO_NAME framework in the merge now. When checking the authority record, look at 040a. When checking the record that was linked to the CORPO_NAME, check if it contains the PERSO_NAME authority in the correct field (say 100, 600, 700). Signed-off-by: mehdi Signed-off-by: Marcel de Rooy Tested merging PERSO_NAME to PERSO_NAME and PERSO_NAME to CORPO_NAME. Signed-off-by: Julian Maurice Signed-off-by: Kyle M Hall --- authorities/merge.pl | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/authorities/merge.pl b/authorities/merge.pl index b423122efd..9d00a1d897 100755 --- a/authorities/merge.pl +++ b/authorities/merge.pl @@ -58,21 +58,16 @@ if ($merge) { $record->leader( GetAuthority($recordid1)->leader() ); # Modifying the reference record + # This triggers a merge for the biblios attached to $recordid1 ModAuthority( $recordid1, $record, $typecode ); - # Deleting the other record - if ( scalar(@errors) == 0 ) { + # Now merge for biblios attached to $recordid2 + # We ignore dontmerge now, since recordid2 is deleted + my $MARCfrom = GetAuthority( $recordid2 ); + merge( $recordid2, $MARCfrom, $recordid1, $record ); - my $error; - if ($input->param('mergereference') eq 'breeding') { - require C4::ImportBatch; - C4::ImportBatch::SetImportRecordStatus( $recordid2, 'imported' ); - } else { - C4::AuthoritiesMarc::merge( $recordid2, GetAuthority($recordid2), $recordid1, $record ); - $error = (DelAuthority($recordid2) == 0); - } - push @errors, $error if ($error); - } + # Deleting the other record + DelAuthority( $recordid2 ); # Parameters $template->param( -- 2.39.5