3 # Copyright 2013 C & P Bibliography Services
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 use C4
::AuthoritiesMarc
;
26 use Koha
::MetadataRecord
::Authority
;
31 my @authid = $input->multi_param('authid');
32 my $merge = $input->param('merge');
36 my ( $template, $loggedinuser, $cookie ) = get_template_and_user
(
38 template_name
=> "authorities/merge.tt",
42 flagsrequired
=> { editauthorities
=> 1 },
46 #------------------------
48 #------------------------
51 # Creating a new record from the html code
52 my $record = TransformHtmlToMarc
($input, 0);
53 my $recordid1 = $input->param('recordid1');
54 my $recordid2 = $input->param('recordid2');
55 my $typecode = $input->param('frameworkcode');
57 # Rewriting the leader
58 $record->leader( GetAuthority
($recordid1)->leader() );
60 # Modifying the reference record
61 # This triggers a merge for the biblios attached to $recordid1
62 ModAuthority
( $recordid1, $record, $typecode );
64 # Now merge for biblios attached to $recordid2
65 my $MARCfrom = GetAuthority
( $recordid2 );
66 merge
({ mergefrom
=> $recordid2, MARCfrom
=> $MARCfrom, mergeto
=> $recordid1, MARCto
=> $record });
68 # Delete the other record. Do not merge. It is unneeded and could under
69 # special circumstances have unwanted side-effects.
70 DelAuthority
({ authid
=> $recordid2, skip_merge
=> 1 });
75 recordid1
=> $recordid1
78 #-------------------------
79 # Show records to merge
80 #-------------------------
83 my $mergereference = $input->param('mergereference');
84 $template->{'VARS'}->{'mergereference'} = $mergereference;
86 if ( scalar(@authid) != 2 ) {
87 push @errors, { code
=> "WRONG_COUNT", value
=> scalar(@authid) };
90 my $recordObj1 = Koha
::MetadataRecord
::Authority
->get_from_authid($authid[0]) || Koha
::MetadataRecord
::Authority
->new();
93 if (defined $mergereference && $mergereference eq 'breeding') {
94 $recordObj2 = Koha
::MetadataRecord
::Authority
->get_from_breeding($authid[1]) || Koha
::MetadataRecord
::Authority
->new();
96 $recordObj2 = Koha
::MetadataRecord
::Authority
->get_from_authid($authid[1]) || Koha
::MetadataRecord
::Authority
->new();
99 if ($mergereference) {
102 if ( $recordObj1->authtypecode ne $recordObj2->authtypecode && $mergereference ne 'breeding' ) {
103 $framework = $input->param('frameworkcode')
104 or push @errors, { code
=> 'FRAMEWORK_NOT_SELECTED' };
107 $framework = $recordObj1->authtypecode;
109 if ($mergereference eq 'breeding') {
110 $mergereference = $authid[0];
113 # Getting MARC Structure
114 my $tagslib = GetTagsLabels
( 1, $framework );
115 foreach my $field ( keys %$tagslib ) {
116 if ( defined $tagslib->{$field}->{'tab'} && $tagslib->{$field}->{'tab'} eq ' ' ) {
117 $tagslib->{$field}->{'tab'} = 0;
121 #Setting $notreference
122 my $notreference = $authid[1];
123 if($mergereference == $notreference){
124 $notreference = $authid[0];
125 #Swap so $recordObj1 is always the correct merge reference
126 ($recordObj1, $recordObj2) = ($recordObj2, $recordObj1);
129 # Creating a loop for display
133 recordid
=> $mergereference,
134 record
=> $recordObj1->record,
135 frameworkcode
=> $recordObj1->authtypecode,
136 display
=> $recordObj1->createMergeHash($tagslib),
140 recordid
=> $notreference,
141 record
=> $recordObj2->record,
142 frameworkcode
=> $recordObj2->authtypecode,
143 display
=> $recordObj2->createMergeHash($tagslib),
149 recordid1
=> $mergereference,
150 recordid2
=> $notreference,
151 records
=> \
@records,
152 framework
=> $framework,
157 # Ask the user to choose which record will be the kept
159 choosereference
=> 1,
160 recordid1
=> $authid[0],
161 recordid2
=> $authid[1],
162 title1
=> $recordObj1->authorized_heading,
163 title2
=> $recordObj2->authorized_heading,
165 if ( $recordObj1->authtypecode ne $recordObj2->authtypecode ) {
166 my $authority_types = Koha
::Authority
::Types
->search( {}, { order_by
=> ['authtypecode'] } );
168 while ( my $authority_type = $authority_types->next ) {
170 value
=> $authority_type->authtypecode,
171 frameworktext
=> $authority_type->authtypetext,
173 push @frameworkselect, \
%row;
176 frameworkselect
=> \
@frameworkselect,
177 frameworkcode1
=> $recordObj1->authtypecode,
178 frameworkcode2
=> $recordObj2->authtypecode,
185 my $authority_types = Koha
::Authority
::Types
->search({}, { order_by
=> ['authtypetext']});
186 $template->param( authority_types
=> $authority_types );
191 $template->param( errors
=> \
@errors );
194 output_html_with_http_headers
$input, $cookie, $template->output;
201 # ------------------------
203 # ------------------------