Bugzilla – Attachment 7770 Details for
Bug 6875
de-nesting C4 packages
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[PASSED_QA]Bug 6875 Biblio module
patch.txt (text/plain), 36.53 KB, created by
Marcel de Rooy
on 2012-02-20 11:04:58 UTC
(
hide
)
Description:
[PASSED_QA]Bug 6875 Biblio module
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2012-02-20 11:04:58 UTC
Size:
36.53 KB
patch
obsolete
>From 0820e8d77dc59e4eb884d474164d68a131d5ed38 Mon Sep 17 00:00:00 2001 >From: Paul Poulain <paul.poulain@biblibre.com> >Date: Fri, 16 Sep 2011 19:37:15 +0200 >Subject: [PATCH] Bug 6875 de nesting C4::Biblio >Content-Type: text/plain; charset="utf-8" > >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 <m.de.rooy@rijksmuseum.nl> >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 8d2dd9d..eafb67b 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; >@@ -2450,232 +2447,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[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" >- onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');" >- 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} = qq(<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" />); # supply default input form >- } >- } >- elsif ( $tag eq '' ) { # it's an hidden field >- $subfield_data{marc_value} = qq(<input type="hidden" tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />); >- } >- elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ? >- $subfield_data{marc_value} = qq(<input type="text" tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />); >- } >- 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(<textarea tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255">$defaultvalue</textarea>\n"); >- } else { >- $subfield_data{marc_value} = "<input type=\"text\" name=\"field_value\" value=\"$defaultvalue\" size=\"50\" maxlength=\"255\" />"; >- } >- 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 >- }; >-} > > #" > >@@ -2839,6 +2610,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); > } >@@ -3632,112 +3404,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 04cb417..9c85338 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[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" >+ onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');" >+ 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} = qq(<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" />); # supply default input form >+ } >+ } >+ elsif ( $tag eq '' ) { # it's an hidden field >+ $subfield_data{marc_value} = qq(<input type="hidden" tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />); >+ } >+ elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ? >+ $subfield_data{marc_value} = qq(<input type="text" tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />); >+ } >+ 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(<textarea tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255">$defaultvalue</textarea>\n"); >+ } else { >+ $subfield_data{marc_value} = "<input type=\"text\" name=\"field_value\" value=\"$defaultvalue\" size=\"50\" maxlength=\"255\" />"; >+ } >+ 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 37d58e9..ba0397c 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 99cd2d9..3fbe3a4 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 b25cd11..b248c77 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 7dcd9ab..ea76efd 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 ); >-- >1.6.0.6 >
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 6875
:
5442
|
5443
|
5496
|
5497
|
5498
|
5499
|
5500
|
5501
|
5502
|
5503
|
5504
|
5505
|
5506
|
5507
|
5508
|
5509
|
5510
|
5511
|
5512
|
7359
|
7360
|
7361
|
7362
|
7363
|
7364
|
7365
|
7652
|
7654
|
7655
|
7656
|
7657
|
7658
|
7770
|
7771
|
7808
|
7844
|
8095
|
8133
|
8134
|
8135