Bugzilla – Attachment 6889 Details for
Bug 6210
Choose framework on Merge
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[SIGNED-OFF] bug_6210: Select framework if merging two records with different frameworks
SIGNED-OFF-bug6210-Select-framework-if-merging-two.patch (text/plain), 13.30 KB, created by
Nicole C. Engard
on 2011-12-20 15:40:46 UTC
(
hide
)
Description:
[SIGNED-OFF] bug_6210: Select framework if merging two records with different frameworks
Filename:
MIME Type:
Creator:
Nicole C. Engard
Created:
2011-12-20 15:40:46 UTC
Size:
13.30 KB
patch
obsolete
>From f6c3767e3d2b0239b79f08e1b63553c4b4c1682e Mon Sep 17 00:00:00 2001 >From: Srdjan Jankovic <srdjan@catalyst.net.nz> >Date: Mon, 19 Dec 2011 19:22:49 +1300 >Subject: [PATCH] [SIGNED-OFF] bug_6210: Select framework if merging two records with different frameworks > >ModBiblio() - set framework to "" if "Default" > >Signed-off-by: Nicole C. Engard <nengard@bywatersolutions.com> > >All 4 tests passed: > >Test 1: Merge two records with the same framework > Desired result: shouldn't get any prompting to pick a framework, and the >same framework should be used > > Test 2: 2 records, different frameworks, into the kept record's framework > Desired result: merge with kept records framework used > > Test 3: 2 records, different frameworks, into the discarded record's >framework > Desired result: merge with used records framework used > > Test 4: 2 records, different frameworks, into a third framework > Desired result: merge with third framework used >--- > C4/Biblio.pm | 41 ++++--- > cataloguing/merge.pl | 136 +++++++++++-------- > .../prog/en/modules/cataloguing/merge.tt | 39 +++++- > 3 files changed, 136 insertions(+), 80 deletions(-) > >diff --git a/C4/Biblio.pm b/C4/Biblio.pm >index ac78ae3..7df8412 100644 >--- a/C4/Biblio.pm >+++ b/C4/Biblio.pm >@@ -320,7 +320,7 @@ sub ModBiblio { > SetUTF8Flag($record); > my $dbh = C4::Context->dbh; > >- $frameworkcode = "" unless $frameworkcode; >+ $frameworkcode = "" if !$frameworkcode || $frameworkcode eq "Default"; # XXX > > _strip_item_fields($record, $frameworkcode); > >@@ -1043,9 +1043,13 @@ for the given frameworkcode > > sub GetMarcFromKohaField { > my ( $kohafield, $frameworkcode ) = @_; >- return 0, 0 unless $kohafield and defined $frameworkcode; >+ return (0, undef) unless $kohafield and defined $frameworkcode; > my $relations = C4::Context->marcfromkohafield; >- return ( $relations->{$frameworkcode}->{$kohafield}->[0], $relations->{$frameworkcode}->{$kohafield}->[1] ); >+ if ( my $mf = $relations->{$frameworkcode}->{$kohafield} ) { >+ return @$mf; >+ } >+ warn qq{No marc tags for framework "$frameworkcode" field $kohafield}; >+ return (0, undef); > } > > =head2 GetMarcBiblio >@@ -3179,9 +3183,24 @@ sub _koha_marc_update_bib_ids { > # we drop the original field > # we add the new builded field. > my ( $biblio_tag, $biblio_subfield ) = GetMarcFromKohaField( "biblio.biblionumber", $frameworkcode ); >+ die qq{No biblionumber tag for framework "$frameworkcode"} unless $biblio_tag; > my ( $biblioitem_tag, $biblioitem_subfield ) = GetMarcFromKohaField( "biblioitems.biblioitemnumber", $frameworkcode ); >+ die qq{No biblioitemnumber tag for framework "$frameworkcode"} unless $biblio_tag; > >- if ( $biblio_tag != $biblioitem_tag ) { >+ if ( $biblio_tag == $biblioitem_tag ) { >+ >+ # biblionumber & biblioitemnumber are in the same field (can't be <10 as fields <10 have only 1 value) >+ my $new_field = MARC::Field->new( >+ $biblio_tag, '', '', >+ "$biblio_subfield" => $biblionumber, >+ "$biblioitem_subfield" => $biblioitemnumber >+ ); >+ >+ # drop old field and create new one... >+ my $old_field = $record->field($biblio_tag); >+ $record->delete_field($old_field) if $old_field; >+ $record->insert_fields_ordered($new_field); >+ } else { > > # biblionumber & biblioitemnumber are in different fields > >@@ -3209,20 +3228,6 @@ sub _koha_marc_update_bib_ids { > $old_field = $record->field($biblioitem_tag); > $record->delete_field($old_field) if $old_field; > $record->insert_fields_ordered($new_field); >- >- } else { >- >- # biblionumber & biblioitemnumber are in the same field (can't be <10 as fields <10 have only 1 value) >- my $new_field = MARC::Field->new( >- $biblio_tag, '', '', >- "$biblio_subfield" => $biblionumber, >- "$biblioitem_subfield" => $biblioitemnumber >- ); >- >- # drop old field and create new one... >- my $old_field = $record->field($biblio_tag); >- $record->delete_field($old_field) if $old_field; >- $record->insert_fields_ordered($new_field); > } > } > >diff --git a/cataloguing/merge.pl b/cataloguing/merge.pl >index 0b881f1..1aed8fa 100755 >--- a/cataloguing/merge.pl >+++ b/cataloguing/merge.pl >@@ -27,6 +27,7 @@ use C4::Auth; > use C4::Items; > use C4::Biblio; > use C4::Serials; >+use C4::Koha; > use C4::Reserves qw/MergeHolds/; > > my $input = new CGI; >@@ -61,7 +62,7 @@ if ($merge) { > # Rewriting the leader > $record->leader(GetMarcBiblio($tobiblio)->leader()); > >- my $frameworkcode = &GetFrameworkCode($tobiblio); >+ my $frameworkcode = $input->param('frameworkcode'); > my @notmoveditems; > > # Modifying the reference record >@@ -108,77 +109,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..3300f78 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> >@@ -332,14 +360,15 @@ $(document).ready(function(){ > [% END %] > > </ul> >+</div> >+</div> <!-- // #result --> >+</div> <!-- .yui-u --> > > <input type="hidden" name="biblio1" value="[% biblio1 %]" /> > <input type="hidden" name="biblio2" value="[% biblio2 %]" /> > <input type="hidden" name="mergereference" value="[% mergereference %]" /> >+<input type="hidden" name="frameworkcode" value="[% framework %]" /> > >-</div> >-</div> <!-- // #result --> >-</div> <!-- .yui-u --> > <fieldset class="action"><input type="submit" name="merge" value="Merge" /></fieldset> > </div> > </form> >-- >1.7.2.3
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 6210
:
5731
|
5734
|
5759
|
6245
|
6302
|
6858
| 6889 |
7311
|
7321
|
7327