From 49b167e8486e19a20f055e1ce9cde30f82cfc55e Mon Sep 17 00:00:00 2001 From: Paul Poulain Date: Fri, 16 Sep 2011 19:37:15 +0200 Subject: [PATCH] Bug 6875 de nesting C4::Biblio C4::Biblio is used in many many places. The goal of this cleaning is to do from C4::Biblio a package with as many dependancies as possible. * C4::Heading is called only in 1 place, highly rarely used (only in 1 misc/link_bibs_to_authorities.pl), moving to require * PrepareItemrecordDisplay is a sub that is more related to Items, moving it here. It means some scripts that used this sub must be checked against use C4::Items * C4::Items is needed in EmbedItemsInMarcBiblio, moving it only in this sub, and switching to require * 2 subs are totally useless z3950_extended_services and set_service_options, removing them Signed-off-by: Marcel de Rooy No test plan included, but tested some opac and cataloging functions. Code looks good. Marked as Passed QA. --- C4/Biblio.pm | 344 +------------------------- C4/Items.pm | 231 +++++++++++++++++ C4/Serials.pm | 5 +- acqui/neworderempty.pl | 1 + t/db_dependent/lib/KohaTest/Biblio.pm | 3 - t/db_dependent/lib/KohaTest/Items.pm | 1 + 6 files changed, 241 insertions(+), 344 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 83fef13f1c..5d9cd9e7e0 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -27,7 +27,6 @@ use Carp; use MARC::Record; use MARC::File::USMARC; use MARC::File::XML; -use ZOOM; use POSIX qw(strftime); use C4::Koha; @@ -35,9 +34,6 @@ use C4::Dates qw/format_date/; use C4::Log; # logaction use C4::ClassSource; use C4::Charset; -require C4::Heading; -require C4::Serials; -require C4::Items; use vars qw($VERSION @ISA @EXPORT); @@ -131,7 +127,6 @@ BEGIN { &TransformHtmlToMarc2 &TransformHtmlToMarc &TransformHtmlToXml - &PrepareItemrecordDisplay &GetNoZebraIndexes ); } @@ -418,9 +413,10 @@ sub DelBiblio { return $error if $error; # We delete attached subscriptions - my $subscriptions = &C4::Serials::GetFullSubscriptionsFromBiblionumber($biblionumber); + require C4::Serials; + my $subscriptions = C4::Serials::GetFullSubscriptionsFromBiblionumber($biblionumber); foreach my $subscription (@$subscriptions) { - &C4::Serials::DelSubscription( $subscription->{subscriptionid} ); + C4::Serials::DelSubscription( $subscription->{subscriptionid} ); } # Delete in Zebra. Be careful NOT to move this line after _koha_delete_biblio @@ -478,6 +474,7 @@ MARC record. =cut sub LinkBibHeadingsToAuthorities { + require C4::Heading; my $bib = shift; my $num_headings_changed = 0; @@ -2445,232 +2442,6 @@ sub TransformMarcToKohaOneField { return $result; } -=head1 OTHER FUNCTIONS - - -=head2 PrepareItemrecordDisplay - - PrepareItemrecordDisplay($itemrecord,$bibnum,$itemumber,$frameworkcode); - -Returns a hash with all the fields for Display a given item data in a template - -The $frameworkcode returns the item for the given frameworkcode, ONLY if bibnum is not provided - -=cut - -sub PrepareItemrecordDisplay { - - my ( $bibnum, $itemnum, $defaultvalues, $frameworkcode ) = @_; - - my $dbh = C4::Context->dbh; - $frameworkcode = &GetFrameworkCode($bibnum) if $bibnum; - my ( $itemtagfield, $itemtagsubfield ) = &GetMarcFromKohaField( "items.itemnumber", $frameworkcode ); - my $tagslib = &GetMarcStructure( 1, $frameworkcode ); - - # return nothing if we don't have found an existing framework. - return q{} unless $tagslib; - my $itemrecord; - if ($itemnum) { - $itemrecord = C4::Items::GetMarcItem( $bibnum, $itemnum ); - } - my @loop_data; - my $authorised_values_sth = $dbh->prepare( "SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib" ); - foreach my $tag ( sort keys %{$tagslib} ) { - my $previous_tag = ''; - if ( $tag ne '' ) { - - # loop through each subfield - my $cntsubf; - 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; - $subfield_data{tag} = $tag; - $subfield_data{subfield} = $subfield; - $subfield_data{countsubfield} = $cntsubf++; - $subfield_data{kohafield} = $tagslib->{$tag}->{$subfield}->{'kohafield'}; - - # $subfield_data{marc_lib}=$tagslib->{$tag}->{$subfield}->{lib}; - $subfield_data{marc_lib} = $tagslib->{$tag}->{$subfield}->{lib}; - $subfield_data{mandatory} = $tagslib->{$tag}->{$subfield}->{mandatory}; - $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable}; - $subfield_data{hidden} = "display:none" - if $tagslib->{$tag}->{$subfield}->{hidden}; - my ( $x, $defaultvalue ); - if ($itemrecord) { - ( $x, $defaultvalue ) = _find_value( $tag, $subfield, $itemrecord ); - } - $defaultvalue = $tagslib->{$tag}->{$subfield}->{defaultvalue} unless $defaultvalue; - if ( !defined $defaultvalue ) { - $defaultvalue = q||; - } - $defaultvalue =~ s/"/"/g; - - # search for itemcallnumber if applicable - if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' - && C4::Context->preference('itemcallnumber') ) { - my $CNtag = substr( C4::Context->preference('itemcallnumber'), 0, 3 ); - my $CNsubfield = substr( C4::Context->preference('itemcallnumber'), 3, 1 ); - if ($itemrecord) { - my $temp = $itemrecord->field($CNtag); - if ($temp) { - $defaultvalue = $temp->subfield($CNsubfield); - } - } - } - if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' - && $defaultvalues - && $defaultvalues->{'callnumber'} ) { - my $temp; - if ($itemrecord) { - $temp = $itemrecord->field($subfield); - } - unless ($temp) { - $defaultvalue = $defaultvalues->{'callnumber'} if $defaultvalues; - } - } - if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.holdingbranch' || $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.homebranch' ) - && $defaultvalues - && $defaultvalues->{'branchcode'} ) { - my $temp; - if ($itemrecord) { - $temp = $itemrecord->field($subfield); - } - unless ($temp) { - $defaultvalue = $defaultvalues->{branchcode} if $defaultvalues; - } - } - if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.location' ) - && $defaultvalues - && $defaultvalues->{'location'} ) { - my $temp = $itemrecord->field($subfield) if ($itemrecord); - unless ($temp) { - $defaultvalue = $defaultvalues->{location} if $defaultvalues; - } - } - if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { - my @authorised_values; - my %authorised_lib; - - # builds list, depending on authorised value... - #---- branch - if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { - if ( ( C4::Context->preference("IndependantBranches") ) - && ( C4::Context->userenv->{flags} % 2 != 1 ) ) { - my $sth = $dbh->prepare( "SELECT branchcode,branchname FROM branches WHERE branchcode = ? ORDER BY branchname" ); - $sth->execute( C4::Context->userenv->{branch} ); - push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); - while ( my ( $branchcode, $branchname ) = $sth->fetchrow_array ) { - push @authorised_values, $branchcode; - $authorised_lib{$branchcode} = $branchname; - } - } else { - my $sth = $dbh->prepare( "SELECT branchcode,branchname FROM branches ORDER BY branchname" ); - $sth->execute; - push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); - while ( my ( $branchcode, $branchname ) = $sth->fetchrow_array ) { - push @authorised_values, $branchcode; - $authorised_lib{$branchcode} = $branchname; - } - } - - #----- itemtypes - } elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { - my $sth = $dbh->prepare( "SELECT itemtype,description FROM itemtypes ORDER BY description" ); - $sth->execute; - push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); - while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { - push @authorised_values, $itemtype; - $authorised_lib{$itemtype} = $description; - } - #---- 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 - ($class_source eq $default_source); - push @authorised_values, $class_source; - $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; - } - - #---- "true" authorised value - } else { - $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} ); - push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); - while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { - push @authorised_values, $value; - $authorised_lib{$value} = $lib; - } - } - $subfield_data{marc_value} = CGI::scrolling_list( - -name => 'field_value', - -values => \@authorised_values, - -default => "$defaultvalue", - -labels => \%authorised_lib, - -size => 1, - -tabindex => '', - -multiple => 0, - ); - } 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 $temp; - my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, undef ); - my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, undef ); - $subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms? - my $index_subfield = int(rand(1000000)); - $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield; - $subfield_data{marc_value} = qq[ - ... - $javascript]; - } else { - warn "Plugin Failed: $plugin"; - $subfield_data{marc_value} = qq(); # supply default input form - } - } - elsif ( $tag eq '' ) { # it's an hidden field - $subfield_data{marc_value} = qq(); - } - elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ? - $subfield_data{marc_value} = qq(); - } - elsif ( length($defaultvalue) > 100 - or (C4::Context->preference("marcflavour") eq "UNIMARC" and - 300 <= $tag && $tag < 400 && $subfield eq 'a' ) - or (C4::Context->preference("marcflavour") eq "MARC21" and - 500 <= $tag && $tag < 600 ) - ) { - # oversize field (textarea) - $subfield_data{marc_value} = qq(\n"); - } else { - $subfield_data{marc_value} = ""; - } - push( @loop_data, \%subfield_data ); - } - } - } - my $itemnumber; - if ( $itemrecord && $itemrecord->field($itemtagfield) ) { - $itemnumber = $itemrecord->subfield( $itemtagfield, $itemtagsubfield ); - } - return { - 'itemtagfield' => $itemtagfield, - 'itemtagsubfield' => $itemtagsubfield, - 'itemnumber' => $itemnumber, - 'iteminformation' => \@loop_data - }; -} #" @@ -2834,6 +2605,7 @@ sub EmbedItemsInMarcBiblio { my @item_fields; my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode ); while (my ($itemnumber) = $sth->fetchrow_array) { + require C4::Items; my $item_marc = C4::Items::GetMarcItem($biblionumber, $itemnumber); push @item_fields, $item_marc->field($itemtag); } @@ -3627,112 +3399,6 @@ sub ModBiblioMarc { return $biblionumber; } -=head2 z3950_extended_services - - z3950_extended_services($serviceType,$serviceOptions,$record); - -z3950_extended_services is used to handle all interactions with Zebra's extended serices package, which is employed to perform all management of the MARC data stored in Zebra. - -C<$serviceType> one of: itemorder,create,drop,commit,update,xmlupdate - -C<$serviceOptions> a has of key/value pairs. For instance, if service_type is 'update', $service_options should contain: - - action => update action, one of specialUpdate, recordInsert, recordReplace, recordDelete, elementUpdate. - -and maybe - - recordidOpaque => Opaque Record ID (user supplied) or recordidNumber => Record ID number (system number). - syntax => the record syntax (transfer syntax) - databaseName = Database from connection object - -To set serviceOptions, call set_service_options($serviceType) - -C<$record> the record, if one is needed for the service type - -A record should be in XML. You can convert it to XML from MARC by running it through marc2xml(). - -=cut - -sub z3950_extended_services { - my ( $server, $serviceType, $action, $serviceOptions ) = @_; - - # get our connection object - my $Zconn = C4::Context->Zconn( $server, 0, 1 ); - - # create a new package object - my $Zpackage = $Zconn->package(); - - # set our options - $Zpackage->option( action => $action ); - - if ( $serviceOptions->{'databaseName'} ) { - $Zpackage->option( databaseName => $serviceOptions->{'databaseName'} ); - } - if ( $serviceOptions->{'recordIdNumber'} ) { - $Zpackage->option( recordIdNumber => $serviceOptions->{'recordIdNumber'} ); - } - if ( $serviceOptions->{'recordIdOpaque'} ) { - $Zpackage->option( recordIdOpaque => $serviceOptions->{'recordIdOpaque'} ); - } - - # this is an ILL request (Zebra doesn't support it, but Koha could eventually) - #if ($serviceType eq 'itemorder') { - # $Zpackage->option('contact-name' => $serviceOptions->{'contact-name'}); - # $Zpackage->option('contact-phone' => $serviceOptions->{'contact-phone'}); - # $Zpackage->option('contact-email' => $serviceOptions->{'contact-email'}); - # $Zpackage->option('itemorder-item' => $serviceOptions->{'itemorder-item'}); - #} - - if ( $serviceOptions->{record} ) { - $Zpackage->option( record => $serviceOptions->{record} ); - - # can be xml or marc - if ( $serviceOptions->{'syntax'} ) { - $Zpackage->option( syntax => $serviceOptions->{'syntax'} ); - } - } - - # send the request, handle any exception encountered - eval { $Zpackage->send($serviceType) }; - if ( $@ && $@->isa("ZOOM::Exception") ) { - return "error: " . $@->code() . " " . $@->message() . "\n"; - } - - # free up package resources - $Zpackage->destroy(); -} - -=head2 set_service_options - - my $serviceOptions = set_service_options($serviceType); - -C<$serviceType> itemorder,create,drop,commit,update,xmlupdate - -Currently, we only support 'create', 'commit', and 'update'. 'drop' support will be added as soon as Zebra supports it. - -=cut - -sub set_service_options { - my ($serviceType) = @_; - my $serviceOptions; - - # FIXME: This needs to be an OID ... if we ever need 'syntax' this sub will need to change - # $serviceOptions->{ 'syntax' } = ''; #zebra doesn't support syntaxes other than xml - - if ( $serviceType eq 'commit' ) { - - # nothing to do - } - if ( $serviceType eq 'create' ) { - - # nothing to do - } - if ( $serviceType eq 'drop' ) { - die "ERROR: 'drop' not currently supported (by Zebra)"; - } - return $serviceOptions; -} - =head2 get_biblio_authorised_values find the types and values for all authorised values assigned to this biblio. diff --git a/C4/Items.pm b/C4/Items.pm index 04cb4174f1..9c853384c9 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -82,6 +82,10 @@ BEGIN { GetAnalyticsCount GetItemHolds + + + PrepareItemrecordDisplay + ); } @@ -2497,4 +2501,231 @@ sub GetItemHolds { $holds = $sth->fetchrow; return $holds; } +=head1 OTHER FUNCTIONS + + +=head2 PrepareItemrecordDisplay + + PrepareItemrecordDisplay($itemrecord,$bibnum,$itemumber,$frameworkcode); + +Returns a hash with all the fields for Display a given item data in a template + +The $frameworkcode returns the item for the given frameworkcode, ONLY if bibnum is not provided + +=cut + +sub PrepareItemrecordDisplay { + + my ( $bibnum, $itemnum, $defaultvalues, $frameworkcode ) = @_; + + my $dbh = C4::Context->dbh; + $frameworkcode = &GetFrameworkCode($bibnum) if $bibnum; + my ( $itemtagfield, $itemtagsubfield ) = &GetMarcFromKohaField( "items.itemnumber", $frameworkcode ); + my $tagslib = &GetMarcStructure( 1, $frameworkcode ); + + # return nothing if we don't have found an existing framework. + return q{} unless $tagslib; + my $itemrecord; + if ($itemnum) { + $itemrecord = C4::Items::GetMarcItem( $bibnum, $itemnum ); + } + my @loop_data; + my $authorised_values_sth = $dbh->prepare( "SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib" ); + foreach my $tag ( sort keys %{$tagslib} ) { + my $previous_tag = ''; + if ( $tag ne '' ) { + + # loop through each subfield + my $cntsubf; + 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; + $subfield_data{tag} = $tag; + $subfield_data{subfield} = $subfield; + $subfield_data{countsubfield} = $cntsubf++; + $subfield_data{kohafield} = $tagslib->{$tag}->{$subfield}->{'kohafield'}; + + # $subfield_data{marc_lib}=$tagslib->{$tag}->{$subfield}->{lib}; + $subfield_data{marc_lib} = $tagslib->{$tag}->{$subfield}->{lib}; + $subfield_data{mandatory} = $tagslib->{$tag}->{$subfield}->{mandatory}; + $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable}; + $subfield_data{hidden} = "display:none" + if $tagslib->{$tag}->{$subfield}->{hidden}; + my ( $x, $defaultvalue ); + if ($itemrecord) { + ( $x, $defaultvalue ) = _find_value( $tag, $subfield, $itemrecord ); + } + $defaultvalue = $tagslib->{$tag}->{$subfield}->{defaultvalue} unless $defaultvalue; + if ( !defined $defaultvalue ) { + $defaultvalue = q||; + } + $defaultvalue =~ s/"/"/g; + + # search for itemcallnumber if applicable + if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' + && C4::Context->preference('itemcallnumber') ) { + my $CNtag = substr( C4::Context->preference('itemcallnumber'), 0, 3 ); + my $CNsubfield = substr( C4::Context->preference('itemcallnumber'), 3, 1 ); + if ($itemrecord) { + my $temp = $itemrecord->field($CNtag); + if ($temp) { + $defaultvalue = $temp->subfield($CNsubfield); + } + } + } + if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' + && $defaultvalues + && $defaultvalues->{'callnumber'} ) { + my $temp; + if ($itemrecord) { + $temp = $itemrecord->field($subfield); + } + unless ($temp) { + $defaultvalue = $defaultvalues->{'callnumber'} if $defaultvalues; + } + } + if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.holdingbranch' || $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.homebranch' ) + && $defaultvalues + && $defaultvalues->{'branchcode'} ) { + my $temp; + if ($itemrecord) { + $temp = $itemrecord->field($subfield); + } + unless ($temp) { + $defaultvalue = $defaultvalues->{branchcode} if $defaultvalues; + } + } + if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.location' ) + && $defaultvalues + && $defaultvalues->{'location'} ) { + my $temp = $itemrecord->field($subfield) if ($itemrecord); + unless ($temp) { + $defaultvalue = $defaultvalues->{location} if $defaultvalues; + } + } + if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { + my @authorised_values; + my %authorised_lib; + + # builds list, depending on authorised value... + #---- branch + if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { + if ( ( C4::Context->preference("IndependantBranches") ) + && ( C4::Context->userenv->{flags} % 2 != 1 ) ) { + my $sth = $dbh->prepare( "SELECT branchcode,branchname FROM branches WHERE branchcode = ? ORDER BY branchname" ); + $sth->execute( C4::Context->userenv->{branch} ); + push @authorised_values, "" + unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + while ( my ( $branchcode, $branchname ) = $sth->fetchrow_array ) { + push @authorised_values, $branchcode; + $authorised_lib{$branchcode} = $branchname; + } + } else { + my $sth = $dbh->prepare( "SELECT branchcode,branchname FROM branches ORDER BY branchname" ); + $sth->execute; + push @authorised_values, "" + unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + while ( my ( $branchcode, $branchname ) = $sth->fetchrow_array ) { + push @authorised_values, $branchcode; + $authorised_lib{$branchcode} = $branchname; + } + } + + #----- itemtypes + } elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { + my $sth = $dbh->prepare( "SELECT itemtype,description FROM itemtypes ORDER BY description" ); + $sth->execute; + push @authorised_values, "" + unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { + push @authorised_values, $itemtype; + $authorised_lib{$itemtype} = $description; + } + #---- 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 + ($class_source eq $default_source); + push @authorised_values, $class_source; + $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; + } + + #---- "true" authorised value + } else { + $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} ); + push @authorised_values, "" + unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { + push @authorised_values, $value; + $authorised_lib{$value} = $lib; + } + } + $subfield_data{marc_value} = CGI::scrolling_list( + -name => 'field_value', + -values => \@authorised_values, + -default => "$defaultvalue", + -labels => \%authorised_lib, + -size => 1, + -tabindex => '', + -multiple => 0, + ); + } 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 $temp; + my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, undef ); + my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, undef ); + $subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms? + my $index_subfield = int(rand(1000000)); + $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield; + $subfield_data{marc_value} = qq[ + ... + $javascript]; + } else { + warn "Plugin Failed: $plugin"; + $subfield_data{marc_value} = qq(); # supply default input form + } + } + elsif ( $tag eq '' ) { # it's an hidden field + $subfield_data{marc_value} = qq(); + } + elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ? + $subfield_data{marc_value} = qq(); + } + elsif ( length($defaultvalue) > 100 + or (C4::Context->preference("marcflavour") eq "UNIMARC" and + 300 <= $tag && $tag < 400 && $subfield eq 'a' ) + or (C4::Context->preference("marcflavour") eq "MARC21" and + 500 <= $tag && $tag < 600 ) + ) { + # oversize field (textarea) + $subfield_data{marc_value} = qq(\n"); + } else { + $subfield_data{marc_value} = ""; + } + push( @loop_data, \%subfield_data ); + } + } + } + my $itemnumber; + if ( $itemrecord && $itemrecord->field($itemtagfield) ) { + $itemnumber = $itemrecord->subfield( $itemtagfield, $itemtagsubfield ); + } + return { + 'itemtagfield' => $itemtagfield, + 'itemtagsubfield' => $itemtagsubfield, + 'itemnumber' => $itemnumber, + 'iteminformation' => \@loop_data + }; +} + 1; diff --git a/C4/Serials.pm b/C4/Serials.pm index 37d58e92a2..ba0397c3c1 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -225,13 +225,14 @@ sub GetSerialInformation { my $queryitem = $dbh->prepare("SELECT itemnumber from serialitems where serialid=?"); $queryitem->execute($serialid); my $itemnumbers = $queryitem->fetchall_arrayref( [0] ); + require C4::Items; if ( scalar(@$itemnumbers) > 0 ) { foreach my $itemnum (@$itemnumbers) { #It is ASSUMED that GetMarcItem ALWAYS WORK... #Maybe GetMarcItem should return values on failure $debug and warn "itemnumber :$itemnum->[0], bibnum :" . $data->{'biblionumber'}; - my $itemprocessed = PrepareItemrecordDisplay( $data->{'biblionumber'}, $itemnum->[0], $data ); + my $itemprocessed = C4::Items::PrepareItemrecordDisplay( $data->{'biblionumber'}, $itemnum->[0], $data ); $itemprocessed->{'itemnumber'} = $itemnum->[0]; $itemprocessed->{'itemid'} = $itemnum->[0]; $itemprocessed->{'serialid'} = $serialid; @@ -239,7 +240,7 @@ sub GetSerialInformation { push @{ $data->{'items'} }, $itemprocessed; } } else { - my $itemprocessed = PrepareItemrecordDisplay( $data->{'biblionumber'}, '', $data ); + my $itemprocessed = C4::Items::PrepareItemrecordDisplay( $data->{'biblionumber'}, '', $data ); $itemprocessed->{'itemid'} = "N$serialid"; $itemprocessed->{'serialid'} = $serialid; $itemprocessed->{'biblionumber'} = $data->{'biblionumber'}; diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl index 459dfe88a6..76be7e1ee6 100755 --- a/acqui/neworderempty.pl +++ b/acqui/neworderempty.pl @@ -81,6 +81,7 @@ use C4::Bookseller qw/ GetBookSellerFromId /; use C4::Acquisition; use C4::Suggestions; # GetSuggestion use C4::Biblio; # GetBiblioData +use C4::Items; #PrepareItemRecord use C4::Output; use C4::Input; use C4::Koha; diff --git a/t/db_dependent/lib/KohaTest/Biblio.pm b/t/db_dependent/lib/KohaTest/Biblio.pm index b25cd11f9d..b248c773a8 100644 --- a/t/db_dependent/lib/KohaTest/Biblio.pm +++ b/t/db_dependent/lib/KohaTest/Biblio.pm @@ -45,7 +45,6 @@ sub methods : Test( 1 ) { _disambiguate get_koha_field_from_marc TransformMarcToKohaOneField - PrepareItemrecordDisplay ModZebra GetNoZebraIndexes _DelBiblioNoZebra @@ -60,8 +59,6 @@ sub methods : Test( 1 ) { _koha_delete_biblio _koha_delete_biblioitems ModBiblioMarc - z3950_extended_services - set_service_options get_biblio_authorised_values ); diff --git a/t/db_dependent/lib/KohaTest/Items.pm b/t/db_dependent/lib/KohaTest/Items.pm index 7dcd9ab9ef..ea76efdfd4 100644 --- a/t/db_dependent/lib/KohaTest/Items.pm +++ b/t/db_dependent/lib/KohaTest/Items.pm @@ -52,6 +52,7 @@ sub methods : Test( 1 ) { _get_unlinked_item_subfields _get_unlinked_subfields_xml _parse_unlinked_item_subfields_from_xml + PrepareItemrecordDisplay ); can_ok( $self->testing_class, @methods ); -- 2.39.5