Bugzilla – Attachment 3054 Details for
Bug 4263
repeatable subfields in items
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Fix for bug 4263
0001-Bug-4263-Repeatable-subfields-in-items.patch (text/plain), 29.36 KB, created by
Chris Cormack
on 2011-02-02 23:20:13 UTC
(
hide
)
Description:
Fix for bug 4263
Filename:
MIME Type:
Creator:
Chris Cormack
Created:
2011-02-02 23:20:13 UTC
Size:
29.36 KB
patch
obsolete
>From 200dbc1a74b892356838a8cd1f18b68347bcbc42 Mon Sep 17 00:00:00 2001 >From: Chris Cormack <chrisc@catalyst.net.nz> >Date: Thu, 3 Feb 2011 12:17:37 +1300 >Subject: [PATCH] Bug: 4263 - Repeatable subfields in items > >Squashed commit of the following: > >commit f441094d5095d165eab18340c983a831cce8f6e0 >Author: Henri-Damien LAURENT <henridamien.laurent@biblibre.com> >Date: Mon Jul 5 20:33:23 2010 +0200 > > bug4263 followup : Can't blank subfields > > Previous bug4263 reintroduced bug 2466: fix clearing item field > This keeps bug4263 followup to be assigned (donot blank dateaccessioned) > But also allow to blank item subfields. > >commit 92889b766c41b48bdd0e3a33ca4b183b1e259805 >Author: Nahuel ANGELINETTI <nahuel.angelinetti@biblibre.com> >Date: Fri Apr 23 13:54:30 2010 +0200 > > (bug #4263) dateaccessionned is cleaned on item modification > > Every item modification, date accessionned is cleaned, if there is no modification made, we must'nt reset to "undef" the value. > >commit 5abb2db16b2564d32e84b7cc680acbc301d73179 >Author: Nahuel ANGELINETTI <nahuel.angelinetti@biblibre.com> >Date: Tue Mar 2 09:57:33 2010 +0100 > > (bug #4263) fix the edition of items with repeatable subfields > > The subfield management in item level is broken, fields are concatenated in one field, and if the librarian edit it, the values are not selected. > This big patch fix three things: > 1) saving fields that are stocked in SQL(using koha2marc mapping) are now well cut and separated in _REAL_ subfields > 2) loading records with repeatable subfields are now well returned > 3) Editing items with repeatable fields works well >--- > C4/Biblio.pm | 11 +- > C4/Items.pm | 37 +++-- > cataloguing/additem.pl | 421 +++++++++++++++++++++++++++--------------------- > 3 files changed, 268 insertions(+), 201 deletions(-) > >diff --git a/C4/Biblio.pm b/C4/Biblio.pm >index b151d71..7eb3124 100644 >--- a/C4/Biblio.pm >+++ b/C4/Biblio.pm >@@ -1680,13 +1680,18 @@ sub TransformKohaToMarcOneField { > } > $sth->execute( $frameworkcode, $kohafieldname ); > if ( ( $tagfield, $tagsubfield ) = $sth->fetchrow ) { >+ my @values = split(/\s?\|\s?/, $value, -1); >+ >+ foreach my $itemvalue (@values){ > my $tag = $record->field($tagfield); > if ($tag) { >- $tag->update( $tagsubfield => $value ); >+ $tag->add_subfields( $tagsubfield => $itemvalue ); > $record->delete_field($tag); > $record->insert_fields_ordered($tag); >- } else { >- $record->add_fields( $tagfield, " ", " ", $tagsubfield => $value ); >+ } >+ else { >+ $record->add_fields( $tagfield, " ", " ", $tagsubfield => $itemvalue ); >+ } > } > } > return $record; >diff --git a/C4/Items.pm b/C4/Items.pm >index a7c190c..80877ca 100644 >--- a/C4/Items.pm >+++ b/C4/Items.pm >@@ -402,7 +402,7 @@ my %default_values_for_mod_from_marc = ( > 'items.cn_source' => undef, > copynumber => undef, > damaged => 0, >- dateaccessioned => undef, >+# dateaccessioned => undef, > enumchron => undef, > holdingbranch => undef, > homebranch => undef, >@@ -429,6 +429,18 @@ sub ModItemFromMarc { > my $biblionumber = shift; > my $itemnumber = shift; > >+ my $dbh = C4::Context->dbh; >+ my $frameworkcode = GetFrameworkCode($biblionumber); >+ my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode ); >+ >+ my $localitemmarc = MARC::Record->new; >+ $localitemmarc->append_fields( $item_marc->field($itemtag) ); >+ my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode, 'items' ); >+ foreach my $item_field ( keys %default_values_for_mod_from_marc ) { >+ $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field}); >+ } >+ my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode ); >+ > my $dbh = C4::Context->dbh; > my $frameworkcode = GetFrameworkCode( $biblionumber ); > my ($itemtag,$itemsubfield)=GetMarcFromKohaField("items.itemnumber",$frameworkcode); >@@ -2136,17 +2148,20 @@ sub _marc_from_item_hash { > : () } keys %{ $item } }; > > my $item_marc = MARC::Record->new(); >- foreach my $item_field (keys %{ $mungeditem }) { >- my ($tag, $subfield) = GetMarcFromKohaField($item_field, $frameworkcode); >- next unless defined $tag and defined $subfield; # skip if not mapped to MARC field >- if (my $field = $item_marc->field($tag)) { >- $field->add_subfields($subfield => $mungeditem->{$item_field}); >- } else { >- my $add_subfields = []; >- if (defined $unlinked_item_subfields and ref($unlinked_item_subfields) eq 'ARRAY' and $#$unlinked_item_subfields > -1) { >- $add_subfields = $unlinked_item_subfields; >+ foreach my $item_field ( keys %{$mungeditem} ) { >+ my ( $tag, $subfield ) = GetMarcFromKohaField( $item_field, $frameworkcode ); >+ next unless defined $tag and defined $subfield; # skip if not mapped to MARC field >+ my @values = split(/\s?\|\s?/, $mungeditem->{$item_field}, -1); >+ foreach my $value (@values){ >+ if ( my $field = $item_marc->field($tag) ) { >+ $field->add_subfields( $subfield => $value ); >+ } else { >+ my $add_subfields = []; >+ if (defined $unlinked_item_subfields and ref($unlinked_item_subfields) eq 'ARRAY' and $#$unlinked_item_subfields > -1) { >+ $add_subfields = $unlinked_item_subfields; >+ } >+ $item_marc->add_fields( $tag, " ", " ", $subfield => $value, @$add_subfields ); > } >- $item_marc->add_fields( $tag, " ", " ", $subfield => $mungeditem->{$item_field}, @$add_subfields); > } > } > >diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl >index 6dc190a..ffc14d5 100755 >--- a/cataloguing/additem.pl >+++ b/cataloguing/additem.pl >@@ -30,6 +30,7 @@ use C4::Koha; # XXX subfield_is_koha_internal_p > use C4::Branch; # XXX subfield_is_koha_internal_p > use C4::ClassSource; > use C4::Dates; >+use List::MoreUtils qw/any/; > > use MARC::File::XML; > >@@ -91,7 +92,176 @@ sub _increment_barcode { > } > > >-my $input = new CGI; >+sub generate_subfield_form { >+ my ($tag, $subfieldtag, $value, $tagslib,$subfieldlib, $branches, $today_iso, $biblionumber, $temp, $loop_data, $i) = @_; >+ >+ my %subfield_data; >+ my $dbh = C4::Context->dbh; >+ my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib"); >+ >+ my $index_subfield = int(rand(1000000)); >+ if ($subfieldtag eq '@'){ >+ $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield; >+ } else { >+ $subfield_data{id} = "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield; >+ } >+ >+ $subfield_data{tag} = $tag; >+ $subfield_data{subfield} = $subfieldtag; >+ $subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms? >+ $subfield_data{marc_lib} ="<span id=\"error$i\" title=\"".$subfieldlib->{lib}."\">".$subfieldlib->{lib}."</span>"; >+ $subfield_data{mandatory} = $subfieldlib->{mandatory}; >+ $subfield_data{repeatable} = $subfieldlib->{repeatable}; >+ >+ $value =~ s/"/"/g; >+ if ( ! defined( $value ) || $value eq '') { >+ $value = $subfieldlib->{defaultvalue}; >+ # get today date & replace YYYY, MM, DD if provided in the default value >+ my ( $year, $month, $day ) = split ',', $today_iso; # FIXME: iso dates don't have commas! >+ $value =~ s/YYYY/$year/g; >+ $value =~ s/MM/$month/g; >+ $value =~ s/DD/$day/g; >+ } >+ >+ $subfield_data{visibility} = "display:none;" if (($subfieldlib->{hidden} > 4) || ($subfieldlib->{hidden} < -4)); >+ >+ my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); >+ if (!$value && $subfieldlib->{kohafield} eq 'items.itemcallnumber' && $pref_itemcallnumber) { >+ my $CNtag = substr($pref_itemcallnumber, 0, 3); >+ my $CNsubfield = substr($pref_itemcallnumber, 3, 1); >+ my $CNsubfield2 = substr($pref_itemcallnumber, 4, 1); >+ my $temp2 = $temp->field($CNtag); >+ if ($temp2) { >+ $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2)); >+ #remove any trailing space incase one subfield is used >+ $value =~ s/^\s+|\s+$//g; >+ } >+ } >+ >+ my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" ); >+ my $attributes = qq($attributes_no_value value="$value" ); >+ >+ if ( $subfieldlib->{authorised_value} ) { >+ my @authorised_values; >+ my %authorised_lib; >+ # builds list, depending on authorised value... >+ if ( $subfieldlib->{authorised_value} eq "branches" ) { >+ foreach my $thisbranch (@$branches) { >+ push @authorised_values, $thisbranch->{value}; >+ $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname}; >+ $value = $thisbranch->{value} if $thisbranch->{selected}; >+ } >+ } >+ elsif ( $subfieldlib->{authorised_value} eq "itemtypes" ) { >+ push @authorised_values, "" unless ( $subfieldlib->{mandatory} ); >+ my $sth = $dbh->prepare("SELECT itemtype,description FROM itemtypes ORDER BY description"); >+ $sth->execute; >+ while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { >+ push @authorised_values, $itemtype; >+ $authorised_lib{$itemtype} = $description; >+ } >+ >+ unless ( $value ) { >+ my $itype_sth = $dbh->prepare("SELECT itemtype FROM biblioitems WHERE biblionumber = ?"); >+ $itype_sth->execute( $biblionumber ); >+ ( $value ) = $itype_sth->fetchrow_array; >+ } >+ >+ #---- class_sources >+ } >+ elsif ( $subfieldlib->{authorised_value} eq "cn_source" ) { >+ push @authorised_values, "" unless ( $subfieldlib->{mandatory} ); >+ >+ my $class_sources = GetClassSources(); >+ my $default_source = C4::Context->preference("DefaultClassificationSource"); >+ >+ foreach my $class_source (sort keys %$class_sources) { >+ next unless $class_sources->{$class_source}->{'used'} or >+ ($value and $class_source eq $value) or >+ ($class_source eq $default_source); >+ push @authorised_values, $class_source; >+ $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; >+ } >+ $value = $default_source unless ($value); >+ >+ #---- "true" authorised value >+ } >+ else { >+ push @authorised_values, "" unless ( $subfieldlib->{mandatory} ); >+ $authorised_values_sth->execute( $subfieldlib->{authorised_value} ); >+ while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { >+ push @authorised_values, $value; >+ $authorised_lib{$value} = $lib; >+ } >+ } >+ >+ $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list >+ -name => "field_value", >+ -values => \@authorised_values, >+ -default => $value, >+ -labels => \%authorised_lib, >+ -override => 1, >+ -size => 1, >+ -multiple => 0, >+ -tabindex => 1, >+ -id => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield, >+ -class => "input_marceditor", >+ ); >+ >+ # it's a thesaurus / authority field >+ } >+ elsif ( $subfieldlib->{authtypecode} ) { >+ $subfield_data{marc_value} = "<input type=\"text\" $attributes /> >+ <a href=\"#\" class=\"buttonDot\" >+ onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$subfieldlib->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a> >+ "; >+ # it's a plugin field >+ } >+ elsif ( $subfieldlib->{value_builder} ) { >+ # opening plugin >+ my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $subfieldlib->{'value_builder'}; >+ if (do $plugin) { >+ my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data ); >+ my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data ); >+ my $change = index($javascript, 'function Change') > -1 ? >+ "return Change$function_name($subfield_data{random}, '$subfield_data{id}');" : >+ 'return 1;'; >+ $subfield_data{marc_value} = qq[<input $attributes >+ onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');" >+ onchange=" $change" >+ onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" /> >+ <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a> >+ $javascript]; >+ } else { >+ warn "Plugin Failed: $plugin"; >+ $subfield_data{marc_value} = "<input $attributes />"; # supply default input form >+ } >+ } >+ elsif ( $tag eq '' ) { # it's an hidden field >+ $subfield_data{marc_value} = qq(<input type="hidden" $attributes />); >+ } >+ elsif ( $subfieldlib->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ? >+ $subfield_data{marc_value} = qq(<input type="text" $attributes />); >+ } >+ elsif ( length($value) > 100 >+ or (C4::Context->preference("marcflavour") eq "UNIMARC" and >+ 300 <= $tag && $tag < 400 && $subfieldtag eq 'a' ) >+ or (C4::Context->preference("marcflavour") eq "MARC21" and >+ 500 <= $tag && $tag < 600 ) >+ ) { >+ # oversize field (textarea) >+ $subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n"; >+ } else { >+ # it's a standard field >+ $subfield_data{marc_value} = "<input $attributes />"; >+ } >+ >+ return \%subfield_data; >+} >+ >+ >+my $input = new CGI; >+my $dbh = C4::Context->dbh; > my $error = $input->param('error'); > my $biblionumber = $input->param('biblionumber'); > my $itemnumber = $input->param('itemnumber'); >@@ -318,30 +488,35 @@ my ( $itemtagfield, $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumb > my ($branchtagfield, $branchtagsubfield) = &GetMarcFromKohaField("items.homebranch", $frameworkcode); > > foreach my $field (@fields) { >- next if ($field->tag()<10); >- my @subf = $field->subfields or (); # don't use ||, as that forces $field->subfelds to be interpreted in scalar context >+ next if ( $field->tag() < 10 ); >+ >+ my @subf = $field->subfields or (); # don't use ||, as that forces $field->subfelds to be interpreted in scalar context > my %this_row; >-# loop through each subfield >- for my $i (0..$#subf) { >- next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10 >- && ($field->tag() ne $itemtagfield >- && $subf[$i][0] ne $itemtagsubfield)); >+ # loop through each subfield >+ my $i = 0; >+ foreach my $subfield (@subf){ >+ my $subfieldcode = $subfield->[0]; >+ my $subfieldvalue= $subfield->[1]; > >- $witness{$subf[$i][0]} = $tagslib->{$field->tag()}->{$subf[$i][0]}->{lib} if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} eq 10); >- if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} eq 10) { >- $this_row{$subf[$i][0]}=GetAuthorisedValueDesc( $field->tag(), >- $subf[$i][0], $subf[$i][1], '', $tagslib) >- || $subf[$i][1]; >- } >+ next if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab} ne 10 >+ && ($field->tag() ne $itemtagfield >+ && $subfieldcode ne $itemtagsubfield)); >+ $witness{$subfieldcode} = $tagslib->{$field->tag()}->{$subfieldcode}->{lib} if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab} eq 10); >+ if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab} eq 10) { >+ $this_row{$subfieldcode} .= " | " if($this_row{$subfieldcode}); >+ $this_row{$subfieldcode} .= GetAuthorisedValueDesc( $field->tag(), >+ $subfieldcode, $subfieldvalue, '', $tagslib) >+ || $subfieldvalue; >+ } > >- if (($field->tag eq $branchtagfield) && ($subf[$i][$0] eq $branchtagsubfield) && C4::Context->preference("IndependantBranches")) { >+ if (($field->tag eq $branchtagfield) && ($subfieldcode eq $branchtagsubfield) && C4::Context->preference("IndependantBranches")) { > #verifying rights > my $userenv = C4::Context->userenv(); >- unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $subf[$i][1]))){ >- $this_row{'nomod'}=1; >+ unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $subfieldvalue))){ >+ $this_row{'nomod'} = 1; > } > } >- $this_row{itemnumber} = $subf[$i][1] if ($field->tag() eq $itemtagfield && $subf[$i][0] eq $itemtagsubfield); >+ $this_row{itemnumber} = $subfieldvalue if ($field->tag() eq $itemtagfield && $subfieldcode eq $itemtagsubfield); > } > if (%this_row) { > push(@big_array, \%this_row); >@@ -374,177 +549,50 @@ foreach my $subfield_code (sort keys(%witness)) { > my @loop_data =(); > my $i=0; > >-my $branches = GetBranchesLoop(); # build once ahead of time, instead of multiple times later. > my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); > >-# Getting the fields where the item location is >-my ($location_field, $location_subfield) = GetMarcFromKohaField('items.location', $frameworkcode); >- >-# Getting the name of the authorised values' category for item location >-my $item_location_category = $tagslib->{$location_field}->{$location_subfield}->{'authorised_value'}; >- >-foreach my $tag (sort keys %{$tagslib}) { >-# loop through each subfield >- foreach my $subfield (sort keys %{$tagslib->{$tag}}) { >- next if subfield_is_koha_internal_p($subfield); >- next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10"); >- my %subfield_data; >- >- my $index_subfield = int(rand(1000000)); >- if ($subfield eq '@'){ >- $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield; >- } else { >- $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield; >- } >- $subfield_data{tag} = $tag; >- $subfield_data{subfield} = $subfield; >- $subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms? >-# $subfield_data{marc_lib} = $tagslib->{$tag}->{$subfield}->{lib}; >- $subfield_data{marc_lib} ="<span id=\"error$i\" title=\"".$tagslib->{$tag}->{$subfield}->{lib}."\">".$tagslib->{$tag}->{$subfield}->{lib}."</span>"; >- $subfield_data{mandatory} = $tagslib->{$tag}->{$subfield}->{mandatory}; >- $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable}; >- my ($x,$value); >- ($x,$value) = find_value($tag,$subfield,$itemrecord) if ($itemrecord); >- $value =~ s/"/"/g; >- unless ($value) { >- $value = $tagslib->{$tag}->{$subfield}->{defaultvalue}; >- # get today date & replace YYYY, MM, DD if provided in the default value >- my ( $year, $month, $day ) = split ',', $today_iso; # FIXME: iso dates don't have commas! >- $value =~ s/YYYY/$year/g; >- $value =~ s/MM/$month/g; >- $value =~ s/DD/$day/g; >- } >- $subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4)); >- # testing branch value if IndependantBranches. >- if (!$value && $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' && $pref_itemcallnumber) { >- my $CNtag = substr($pref_itemcallnumber, 0, 3); >- my $CNsubfield = substr($pref_itemcallnumber, 3, 1); >- my $CNsubfield2 = substr($pref_itemcallnumber, 4, 1); >- my $temp2 = $temp->field($CNtag); >- if ($temp2) { >- $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2)); >- #remove any trailing space incase one subfield is used >- $value =~ s/^\s+|\s+$//g; >- } >- } >+my $onlymine = C4::Context->preference('IndependantBranches') && >+ C4::Context->userenv && >+ C4::Context->userenv->{flags}!=1 && >+ C4::Context->userenv->{branch}; >+my $branches = GetBranchesLoop(undef,$onlymine); # build once ahead of time, instead of multiple times later. > >- my $attributes_no_value = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" ); >- my $attributes = qq($attributes_no_value value="$value" ); >- if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { >- my @authorised_values; >- my %authorised_lib; >- # builds list, depending on authorised value... >- >- if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) { >- foreach my $thisbranch (@$branches) { >- push @authorised_values, $thisbranch->{value}; >- $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname}; >- # in edit item this is set to the data value otherwise use default >- if ($op ne 'edititem' && $thisbranch->{selected} ) { >- $value = $thisbranch->{value}; >- } >- } >- } >- elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { >- push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); >- my $sth = $dbh->prepare("select itemtype,description from itemtypes order by description"); >- $sth->execute; >- while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { >- push @authorised_values, $itemtype; >- $authorised_lib{$itemtype} = $description; >- } >- >- unless ( $value ) { >- my $itype_sth = $dbh->prepare("SELECT itemtype FROM biblioitems WHERE biblionumber = ?"); >- $itype_sth->execute( $biblionumber ); >- ( $value ) = $itype_sth->fetchrow_array; >- } >- >- #---- class_sources >- } >- elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) { >- push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); >- >- my $class_sources = GetClassSources(); >- my $default_source = C4::Context->preference("DefaultClassificationSource"); >- >- foreach my $class_source (sort keys %$class_sources) { >- next unless $class_sources->{$class_source}->{'used'} or >- ($value and $class_source eq $value) or >- ($class_source eq $default_source); >- push @authorised_values, $class_source; >- $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; >- } >- $value = $default_source unless ($value); >- >- #---- "true" authorised value >- } >- else { >- push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); >- >- # Are we dealing with item location ? >- my $item_location = ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) ? 1 : 0; >- >- # If so, we sort by authorised_value, else by libelle >- my $orderby = $item_location ? 'authorised_value' : 'lib'; >- >- my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY $orderby"); >- >- $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value}); >- >- >- while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { >- push @authorised_values, $value; >- if ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) { >- $authorised_lib{$value} = $value . " - " . $lib; >- } else { >- $authorised_lib{$value} = $lib; >- } >- >- # For item location, we show the code and the libelle >- $authorised_lib{$value} = ($item_location) ? $value . " - " . $lib : $lib; >- } >- } >- $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list >- -name => "field_value", >- -values => \@authorised_values, >- -default => $value, >- -labels => \%authorised_lib, >- -override => 1, >- -size => 1, >- -multiple => 0, >- # -tabindex => 1, >- -id => "tag_".$tag."_subfield_".$subfield."_".$index_subfield, >- -class => "input_marceditor", >- ); >- # it's a thesaurus / authority field >- } >- elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) { >- $subfield_data{marc_value} = "<input type=\"text\" $attributes /> >- <a href=\"#\" class=\"buttonDot\" >- onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a> >- "; >- # it's a plugin field >- } >- elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) { >- # opening plugin >- my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'}; >- if (do $plugin) { >- my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data ); >- my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data ); >- my $change = index($javascript, 'function Change') > -1 ? >- "return Change$function_name($subfield_data{random}, '$subfield_data{id}');" : >- 'return 1;'; >- $subfield_data{marc_value} = qq[<input $attributes >- onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');" >- onchange=" $change" >- onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" /> >- <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a> >- $javascript]; >- } else { >- warn "Plugin Failed: $plugin"; >- $subfield_data{marc_value} = "<input $attributes />"; # supply default input form >- } >+# We generate form, from actuel record >+my @fields; >+if($itemrecord){ >+ foreach my $field ($itemrecord->fields()){ >+ my $tag = $field->{_tag}; >+ foreach my $subfield ( $field->subfields() ){ >+ >+ my $subfieldtag = $subfield->[0]; >+ my $value = $subfield->[1]; >+ my $subfieldlib = $tagslib->{$tag}->{$subfieldtag}; >+ >+ next if subfield_is_koha_internal_p($subfieldtag); >+ next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10"); >+ >+ my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i); >+ >+ push @fields, "$tag$subfieldtag"; >+ push (@loop_data, $subfield_data); >+ $i++; >+ } >+ >+ } >+ } >+ # and now we add fields that are empty >+ >+foreach my $tag ( keys %{$tagslib}){ >+ foreach my $subtag (keys %{$tagslib->{$tag}}){ >+ next if subfield_is_koha_internal_p($subtag); >+ next if ($tagslib->{$tag}->{$subtag}->{'tab'} ne "10"); >+ next if any { /^$tag$subtag$/ } @fields; >+ >+ my $value = ""; >+ my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i); >+ >+ push (@loop_data, $subfield_data); >+ $i++; > } > elsif ( $tag eq '' ) { # it's an hidden field > $subfield_data{marc_value} = qq(<input type="hidden" $attributes />); >@@ -569,7 +617,6 @@ foreach my $tag (sort keys %{$tagslib}) { > $i++ > } > } >- > # what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit. > $template->param( title => $record->title() ) if ($record ne "-1"); > $template->param( >-- >1.7.1 >
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 4263
: 3054 |
3123