@@ -, +, @@
---
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(-)
--- a/C4/Biblio.pm
+++ a/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.
--- a/C4/Items.pm
+++ a/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;
--- a/C4/Serials.pm
+++ a/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'};
--- a/acqui/neworderempty.pl
+++ a/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;
--- a/t/db_dependent/lib/KohaTest/Biblio.pm
+++ a/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
);
--- a/t/db_dependent/lib/KohaTest/Items.pm
+++ a/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 );
--