[Koha-patches] [PATCH] [SIGNED-OFF] bug_6210: Select framework if merging two records with different frameworks

Nicole C. Engard nengard at bywatersolutions.com
Mon Oct 3 05:35:37 CEST 2011


From: Srdjan Jankovic <srdjan at catalyst.net.nz>

Signed-off-by: Nicole C. Engard <nengard at bywatersolutions.com>
---
 cataloguing/merge.pl                               |  134 ++++++++++++--------
 .../prog/en/modules/cataloguing/merge.tt           |   32 +++++-
 2 files changed, 108 insertions(+), 58 deletions(-)

diff --git a/cataloguing/merge.pl b/cataloguing/merge.pl
index c97ca7a..7a4f61e 100755
--- a/cataloguing/merge.pl
+++ b/cataloguing/merge.pl
@@ -26,6 +26,7 @@ use C4::Auth;
 use C4::Items;
 use C4::Biblio;
 use C4::Serials;
+use C4::Koha;
 
 my $input = new CGI;
 my @biblionumber = $input->param('biblionumber');
@@ -104,77 +105,98 @@ if ($merge) {
 	push @errors, $error if ($error); 
     }
 
-    # Errors
-    my @errors_loop  = map{{error => $_}}@errors;
-
     # Parameters
     $template->param(
-	errors  => \@errors_loop,
 	result => 1,
 	biblio1 => $input->param('biblio1')
     );
 
-
 #-------------------------
 # Show records to merge
 #-------------------------
 } else {
-
     my $mergereference = $input->param('mergereference');
     my $biblionumber = $input->param('biblionumber');
 
-    my $data1 = GetBiblioData($biblionumber[0]);
-    my $data2 = GetBiblioData($biblionumber[1]);
-
-    # Ask the user to choose which record will be the kept
-    if (not $mergereference) {
-	$template->param(
-	    choosereference => 1,	
-	    biblio1 => $biblionumber[0],
-	    biblio2 => $biblionumber[1],
-	    title1 => $data1->{'title'},
-	    title2 => $data2->{'title'}
-	    );
-    } else {
-
-	if (scalar(@biblionumber) != 2) {
-	    push @errors, "An unexpected number of records was provided for merging. Currently only two records at a time can be merged.";
-	}
-
-	# Checks if both records use the same framework
-	my $frameworkcode1 = &GetFrameworkCode($biblionumber[0]);
-	my $frameworkcode2 = &GetFrameworkCode($biblionumber[1]);
-	my $framework;
-	if ($frameworkcode1 ne $frameworkcode2) {
-	    push @errors, "The records selected for merging are using different frameworks. Currently merging is only available for records using the same framework.";
-	} else {
-	    $framework = $frameworkcode1;	
-	}
-
-	# Getting MARC Structure
-	my $tagslib = GetMarcStructure(1, $framework);
-
-	my $notreference = ($biblionumber[0] == $mergereference) ? $biblionumber[1] : $biblionumber[0];
-
-	# Creating a loop for display
-	my @record1 = _createMarcHash(GetMarcBiblio($mergereference), $tagslib);
-	my @record2 = _createMarcHash(GetMarcBiblio($notreference), $tagslib);
-
-	# Errors
-	my @errors_loop  = map{{error => $_}}@errors;
-
-	# Parameters
-	$template->param(
-	    errors  => \@errors_loop,
-	    biblio1 => $mergereference,
-	    biblio2 => $notreference,
-	    mergereference => $mergereference,
-	    record1 => @record1,
-	    record2 => @record2,
-	    framework => $framework
-	    );
+    if (scalar(@biblionumber) != 2) {
+        push @errors, "An unexpected number of records was provided for merging. Currently only two records at a time can be merged.";
+    }
+    else {
+        my $data1 = GetBiblioData($biblionumber[0]);
+        my $data2 = GetBiblioData($biblionumber[1]);
+
+        # Checks if both records use the same framework
+        my $frameworkcode1 = &GetFrameworkCode($biblionumber[0]);
+        my $frameworkcode2 = &GetFrameworkCode($biblionumber[1]);
+
+        if ($mergereference) {
+
+            my $framework;
+            if ($frameworkcode1 ne $frameworkcode2) {
+                $framework = $input->param('frameworkcode')
+                  or push @errors, "Famework not selected.";
+            } else {
+                $framework = $frameworkcode1;	
+            }
+
+            # Getting MARC Structure
+            my $tagslib = GetMarcStructure(1, $framework);
+
+            my $notreference = ($biblionumber[0] == $mergereference) ? $biblionumber[1] : $biblionumber[0];
+
+            # Creating a loop for display
+            my @record1 = _createMarcHash(GetMarcBiblio($mergereference), $tagslib);
+            my @record2 = _createMarcHash(GetMarcBiblio($notreference), $tagslib);
+
+            # Parameters
+            $template->param(
+                biblio1 => $mergereference,
+                biblio2 => $notreference,
+                mergereference => $mergereference,
+                record1 => @record1,
+                record2 => @record2,
+                framework => $framework
+            );
+        }
+        else {
+
+        # Ask the user to choose which record will be the kept
+            $template->param(
+                choosereference => 1,	
+                biblio1 => $biblionumber[0],
+                biblio2 => $biblionumber[1],
+                title1 => $data1->{'title'},
+                title2 => $data2->{'title'}
+            );
+            if ($frameworkcode1 ne $frameworkcode2) {
+                my $frameworks = getframeworks;
+                my @frameworkselect;
+                foreach my $thisframeworkcode ( keys %$frameworks ) {
+                    my %row = (
+                        value         => $thisframeworkcode,
+                        frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'},
+                    );
+                    if ($frameworkcode1 eq $thisframeworkcode){
+                        $row{'selected'} = 1;
+                        }
+                    push @frameworkselect, \%row;
+                }
+                $template->param(
+                    frameworkselect => \@frameworkselect,
+                    frameworkcode1 => $frameworkcode1,
+                    frameworkcode2 => $frameworkcode2,
+                );
+            }
+        }
     }
 }
+
+if (@errors) {
+    # Errors
+    my @errors_loop  = map{{error => $_}}@errors;
+    $template->param( errors  => \@errors_loop );
+}
+
 output_html_with_http_headers $input, $cookie, $template->output;
 exit;
 
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tt
index 0d8a84c..de14f24 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tt
@@ -161,6 +161,10 @@ $(document).ready(function(){
 
 });
 
+function changeFramework(fw) {
+    $("#Frameworks").val(fw);
+}
+
 //]]>
 </script>
 </head>
@@ -194,10 +198,34 @@ $(document).ready(function(){
 <form id="mergeform" action="/cgi-bin/koha/cataloguing/merge.pl" method="post">
     <fieldset class="rows">
 	<legend>Merge reference</legend>
+    <table>
+      <tr>
+        <td style="border-width: 0px; text-align: left">
 	<ol>
-	<li class="radio"><input type="radio" value="[% biblio1 %]" checked="checked" id="mergereference1" name="mergereference" /><label style="float:none" for="mergereference1">[% title1 %] ([% biblio1 %])</label></li>
-	<li class="radio"><input type="radio" value="[% biblio2 %]" id="mergereference2" name="mergereference" /><label style="float:none" for="mergereference2">[% title2 %] ([% biblio2 %])</label></li>
+	<li class="radio"><input type="radio" value="[% biblio1 %]" checked="checked" id="mergereference1" name="mergereference" onclick="changeFramework('[% frameworkcode1 %]')" /><label style="float:none" for="mergereference1">[% title1 %] ([% biblio1 %])</label></li>
+	<li class="radio"><input type="radio" value="[% biblio2 %]" id="mergereference2" name="mergereference" onclick="changeFramework('[% frameworkcode2 %]')" /><label style="float:none" for="mergereference2">[% title2 %] ([% biblio2 %])</label></li>
 </ol>
+        </td>
+        <td style="border-width: 0px">
+    [% IF frameworkselect %]
+          <label style="float:none" for="frameworkcode">Framework:</label><br>
+            <select name="frameworkcode" id="Frameworks">
+                            <option value="Default">Default</option>
+                            [% FOREACH frameworkcodeloo IN frameworkselect %]
+                                [% IF ( frameworkcodeloo.selected ) %]
+                                    <option value="[% frameworkcodeloo.value %]" selected="selected">
+                                [% ELSE %]
+                                    <option value="[% frameworkcodeloo.value %]">
+                                [% END %]
+                                 [% frameworkcodeloo.frameworktext %]                              
+                                 </option>
+                            [% END %]
+            </select>
+    [% END %]
+        </td>
+      </tr>
+    </table>
+
 	<input type="hidden" name="biblionumber" value="[% biblio1 %]" />
 	<input type="hidden" name="biblionumber" value="[% biblio2 %]" />
 	<fieldset class="action"><input type="submit" value="Next" /></fieldset>
-- 
1.7.2.3



More information about the Koha-patches mailing list