← Index
NYTProf Performance Profile   « block view • line view • sub view »
For /usr/share/koha/opac/cgi-bin/opac/opac-search.pl
  Run on Tue Oct 15 17:10:45 2013
Reported on Tue Oct 15 17:12:48 2013

Filename/usr/share/koha/lib/C4/XSLT.pm
StatementsExecuted 5870 statements in 36.4ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
251110.7ms2.49sC4::XSLT::::transformMARCXML4XSLTC4::XSLT::transformMARCXML4XSLT
25117.79ms4.46sC4::XSLT::::XSLTParse4DisplayC4::XSLT::XSLTParse4Display
25117.74ms1.74sC4::XSLT::::buildKohaItemsNamespaceC4::XSLT::buildKohaItemsNamespace
1115.66ms8.60msC4::XSLT::::BEGIN@35C4::XSLT::BEGIN@35
100411.55ms1.55msC4::XSLT::::CORE:substC4::XSLT::CORE:subst (opcode)
2511695µs1.27msC4::XSLT::::_get_best_default_xslt_filenameC4::XSLT::_get_best_default_xslt_filename
2511581µs6.60msC4::XSLT::::getAuthorisedValues4MARCSubfieldsC4::XSLT::getAuthorisedValues4MARCSubfields
2511572µs572µsC4::XSLT::::CORE:ftfileC4::XSLT::CORE:ftfile (opcode)
5131201µs201µsC4::XSLT::::CORE:matchC4::XSLT::CORE:match (opcode)
11134µs34µsC4::XSLT::::BEGIN@40C4::XSLT::BEGIN@40
11133µs41µsC4::XSLT::::BEGIN@23C4::XSLT::BEGIN@23
11131µs886µsC4::XSLT::::BEGIN@31C4::XSLT::BEGIN@31
11131µs302µsC4::XSLT::::BEGIN@27C4::XSLT::BEGIN@27
11130µs579µsC4::XSLT::::BEGIN@28C4::XSLT::BEGIN@28
11129µs194µsC4::XSLT::::BEGIN@33C4::XSLT::BEGIN@33
11129µs144µsC4::XSLT::::BEGIN@235C4::XSLT::BEGIN@235
11128µs1.16msC4::XSLT::::BEGIN@36C4::XSLT::BEGIN@36
11127µs501µsC4::XSLT::::BEGIN@34C4::XSLT::BEGIN@34
11126µs1.28msC4::XSLT::::BEGIN@30C4::XSLT::BEGIN@30
11126µs65µsC4::XSLT::::BEGIN@24C4::XSLT::BEGIN@24
11126µs904µsC4::XSLT::::BEGIN@29C4::XSLT::BEGIN@29
11124µs31µsC4::XSLT::::BEGIN@26C4::XSLT::BEGIN@26
11124µs801µsC4::XSLT::::BEGIN@32C4::XSLT::BEGIN@32
11118µs128µsC4::XSLT::::BEGIN@38C4::XSLT::BEGIN@38
0000s0sC4::XSLT::::GetURIC4::XSLT::GetURI
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package C4::XSLT;
2# Copyright (C) 2006 LibLime
3# <jmf at liblime dot com>
4# Parts Copyright Katrin Fischer 2011
5# Parts Copyright ByWater Solutions 2011
6# Parts Copyright Biblibre 2012
7#
8# This file is part of Koha.
9#
10# Koha is free software; you can redistribute it and/or modify it under the
11# terms of the GNU General Public License as published by the Free Software
12# Foundation; either version 2 of the License, or (at your option) any later
13# version.
14#
15# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
16# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
17# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License along
20# with Koha; if not, write to the Free Software Foundation, Inc.,
21# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22
23360µs249µs
# spent 41µs (33+8) within C4::XSLT::BEGIN@23 which was called: # once (33µs+8µs) by C4::Search::BEGIN@29 at line 23
use strict;
# spent 41µs making 1 call to C4::XSLT::BEGIN@23 # spent 8µs making 1 call to strict::import
24359µs2104µs
# spent 65µs (26+39) within C4::XSLT::BEGIN@24 which was called: # once (26µs+39µs) by C4::Search::BEGIN@29 at line 24
use warnings;
# spent 65µs making 1 call to C4::XSLT::BEGIN@24 # spent 39µs making 1 call to warnings::import
25
26367µs237µs
# spent 31µs (24+6) within C4::XSLT::BEGIN@26 which was called: # once (24µs+6µs) by C4::Search::BEGIN@29 at line 26
use C4::Context;
# spent 31µs making 1 call to C4::XSLT::BEGIN@26 # spent 6µs making 1 call to C4::Context::import
27366µs2572µs
# spent 302µs (31+270) within C4::XSLT::BEGIN@27 which was called: # once (31µs+270µs) by C4::Search::BEGIN@29 at line 27
use C4::Branch;
# spent 302µs making 1 call to C4::XSLT::BEGIN@27 # spent 270µs making 1 call to Exporter::import
28362µs21.13ms
# spent 579µs (30+549) within C4::XSLT::BEGIN@28 which was called: # once (30µs+549µs) by C4::Search::BEGIN@29 at line 28
use C4::Items;
# spent 579µs making 1 call to C4::XSLT::BEGIN@28 # spent 549µs making 1 call to Exporter::import
29380µs21.78ms
# spent 904µs (26+878) within C4::XSLT::BEGIN@29 which was called: # once (26µs+878µs) by C4::Search::BEGIN@29 at line 29
use C4::Koha;
# spent 904µs making 1 call to C4::XSLT::BEGIN@29 # spent 878µs making 1 call to Exporter::import
30368µs22.53ms
# spent 1.28ms (26µs+1.25) within C4::XSLT::BEGIN@30 which was called: # once (26µs+1.25ms) by C4::Search::BEGIN@29 at line 30
use C4::Biblio;
# spent 1.28ms making 1 call to C4::XSLT::BEGIN@30 # spent 1.25ms making 1 call to Exporter::import
31363µs21.74ms
# spent 886µs (31+855) within C4::XSLT::BEGIN@31 which was called: # once (31µs+855µs) by C4::Search::BEGIN@29 at line 31
use C4::Circulation;
# spent 886µs making 1 call to C4::XSLT::BEGIN@31 # spent 855µs making 1 call to Exporter::import
32363µs21.58ms
# spent 801µs (24+777) within C4::XSLT::BEGIN@32 which was called: # once (24µs+777µs) by C4::Search::BEGIN@29 at line 32
use C4::Reserves;
# spent 801µs making 1 call to C4::XSLT::BEGIN@32 # spent 777µs making 1 call to Exporter::import
33368µs2360µs
# spent 194µs (29+165) within C4::XSLT::BEGIN@33 which was called: # once (29µs+165µs) by C4::Search::BEGIN@29 at line 33
use Encode;
# spent 194µs making 1 call to C4::XSLT::BEGIN@33 # spent 165µs making 1 call to Exporter::import
34365µs2975µs
# spent 501µs (27+474) within C4::XSLT::BEGIN@34 which was called: # once (27µs+474µs) by C4::Search::BEGIN@29 at line 34
use XML::LibXML;
# spent 501µs making 1 call to C4::XSLT::BEGIN@34 # spent 474µs making 1 call to XML::LibXML::import
353293µs28.61ms
# spent 8.60ms (5.66+2.94) within C4::XSLT::BEGIN@35 which was called: # once (5.66ms+2.94ms) by C4::Search::BEGIN@29 at line 35
use XML::LibXSLT;
# spent 8.60ms making 1 call to C4::XSLT::BEGIN@35 # spent 6µs making 1 call to UNIVERSAL::import
36377µs22.30ms
# spent 1.16ms (28µs+1.13) within C4::XSLT::BEGIN@36 which was called: # once (28µs+1.13ms) by C4::Search::BEGIN@29 at line 36
use LWP::Simple;
# spent 1.16ms making 1 call to C4::XSLT::BEGIN@36 # spent 1.13ms making 1 call to LWP::Simple::import
37
383111µs2238µs
# spent 128µs (18+110) within C4::XSLT::BEGIN@38 which was called: # once (18µs+110µs) by C4::Search::BEGIN@29 at line 38
use vars qw($VERSION @ISA @EXPORT);
# spent 128µs making 1 call to C4::XSLT::BEGIN@38 # spent 110µs making 1 call to vars::import
39
40
# spent 34µs within C4::XSLT::BEGIN@40 which was called: # once (34µs+0s) by C4::Search::BEGIN@29 at line 48
BEGIN {
4111µs require Exporter;
4212µs $VERSION = 3.07.00.049;
43117µs @ISA = qw(Exporter);
44113µs @EXPORT = qw(
45 &XSLTParse4Display
46 &GetURI
47 );
4811.59ms134µs}
# spent 34µs making 1 call to C4::XSLT::BEGIN@40
49
50=head1 NAME
51
- -
62sub GetURI {
63 my ($uri) = @_;
64 my $string;
65 $string = get $uri ;
66 return $string;
67}
68
69=head2 transformMARCXML4XSLT
70
- -
75
# spent 2.49s (10.7ms+2.47) within C4::XSLT::transformMARCXML4XSLT which was called 25 times, avg 99.4ms/call: # 25 times (10.7ms+2.47s) by C4::XSLT::XSLTParse4Display at line 197, avg 99.4ms/call
sub transformMARCXML4XSLT {
762549µs my ($biblionumber, $record) = @_;
7725198µs10055.3ms my $frameworkcode = GetFrameworkCode($biblionumber) || '';
# spent 54.9ms making 25 calls to C4::Biblio::GetFrameworkCode, avg 2.19ms/call # spent 319µs making 50 calls to DBI::common::DESTROY, avg 6µs/call # spent 80µs making 25 calls to DBD::_mem::common::DESTROY, avg 3µs/call
7825274µs251.60s my $tagslib = &GetMarcStructure(1,$frameworkcode);
# spent 1.60s making 25 calls to Memoize::__ANON__[(eval 1015)[Memoize.pm:73]:1], avg 64.1ms/call
792521µs my @fields;
80 # FIXME: wish there was a better way to handle exceptions
812568µs eval {
8225300µs25435µs @fields = $record->fields();
# spent 435µs making 25 calls to MARC::Record::fields, avg 17µs/call
83 };
842513µs if ($@) { warn "PROBLEM WITH RECORD"; next; }
8525134µs256.60ms my $av = getAuthorisedValues4MARCSubfields($frameworkcode);
# spent 6.60ms making 25 calls to C4::XSLT::getAuthorisedValues4MARCSubfields, avg 264µs/call
8625116µs foreach my $tag ( keys %$av ) {
8750468µs5015.9ms foreach my $field ( $record->field( $tag ) ) {
# spent 15.9ms making 50 calls to MARC::Record::field, avg 317µs/call
8857405µs if ( $av->{ $tag } ) {
895758µs my @new_subfields = ();
90571.04ms572.48ms for my $subfield ( $field->subfields() ) {
# spent 2.48ms making 57 calls to MARC::Field::subfields, avg 44µs/call
91636950µs my ( $letter, $value ) = @$subfield;
926362.52ms817784ms $value = GetAuthorisedValueDesc( $tag, $letter, $value, '', $tagslib )
# spent 782ms making 295 calls to C4::Biblio::GetAuthorisedValueDesc, avg 2.65ms/call # spent 1.84ms making 348 calls to DBI::common::DESTROY, avg 5µs/call # spent 453µs making 174 calls to DBD::_mem::common::DESTROY, avg 3µs/call
93 if $av->{ $tag }->{ $letter };
946361.79ms push( @new_subfields, $letter, $value );
95 }
96571.34ms2289.07ms $field ->replace_with( MARC::Field->new(
# spent 5.25ms making 57 calls to MARC::Field::new, avg 92µs/call # spent 1.93ms making 114 calls to MARC::Field::indicator, avg 17µs/call # spent 1.88ms making 57 calls to MARC::Field::replace_with, avg 33µs/call
97 $tag,
98 $field->indicator(1),
99 $field->indicator(2),
100 @new_subfields
101 ) );
102 }
103 }
104 }
10525356µs return $record;
106}
107
108=head2 getAuthorisedValues4MARCSubfields
109
- -
114# Cache for tagfield-tagsubfield to decode per framework.
115# Should be preferably be placed in Koha-core...
1161600nsmy %authval_per_framework;
117
118
# spent 6.60ms (581µs+6.02) within C4::XSLT::getAuthorisedValues4MARCSubfields which was called 25 times, avg 264µs/call: # 25 times (581µs+6.02ms) by C4::XSLT::transformMARCXML4XSLT at line 85, avg 264µs/call
sub getAuthorisedValues4MARCSubfields {
1192537µs my ($frameworkcode) = @_;
1202546µs957µs unless ( $authval_per_framework{ $frameworkcode } ) {
# spent 44µs making 6 calls to DBI::common::DESTROY, avg 7µs/call # spent 14µs making 3 calls to DBD::_mem::common::DESTROY, avg 5µs/call
121321µs33.10ms my $dbh = C4::Context->dbh;
# spent 3.10ms making 3 calls to C4::Context::dbh, avg 1.03ms/call
122371µs6727µs my $sth = $dbh->prepare("SELECT DISTINCT tagfield, tagsubfield
# spent 391µs making 3 calls to DBI::db::prepare, avg 130µs/call # spent 336µs making 3 calls to DBD::mysql::db::prepare, avg 112µs/call
123 FROM marc_subfield_structure
124 WHERE authorised_value IS NOT NULL
125 AND authorised_value!=''
126 AND frameworkcode=?");
12732.31ms32.27ms $sth->execute( $frameworkcode );
# spent 2.27ms making 3 calls to DBI::st::execute, avg 756µs/call
12835µs my $av = { };
1293394µs44207µs while ( my ( $tag, $letter ) = $sth->fetchrow() ) {
# spent 207µs making 44 calls to DBI::st::fetchrow, avg 5µs/call
130 $av->{ $tag }->{ $letter } = 1;
131 }
1323150µs $authval_per_framework{ $frameworkcode } = $av;
133 }
13425119µs return $authval_per_framework{ $frameworkcode };
135}
136
1371400nsmy $stylesheet;
138
139
# spent 1.27ms (695µs+572µs) within C4::XSLT::_get_best_default_xslt_filename which was called 25 times, avg 51µs/call: # 25 times (695µs+572µs) by C4::XSLT::XSLTParse4Display at line 188, avg 51µs/call
sub _get_best_default_xslt_filename {
1402552µs my ($htdocs, $theme, $lang, $base_xslfile) = @_;
141
14225266µs my @candidates = (
143 "$htdocs/$theme/$lang/xslt/${base_xslfile}", # exact match
144 "$htdocs/$theme/en/xslt/${base_xslfile}", # if not, preferred theme in English
145 "$htdocs/prog/$lang/xslt/${base_xslfile}", # if not, 'prog' theme in preferred language
146 "$htdocs/prog/en/xslt/${base_xslfile}", # otherwise, prog theme in English; should always
147 # exist
148 );
1492514µs my $xslfilename;
1502537µs foreach my $filename (@candidates) {
1512520µs $xslfilename = $filename;
15225703µs25572µs if (-f $filename) {
# spent 572µs making 25 calls to C4::XSLT::CORE:ftfile, avg 23µs/call
1532547µs last; # we have a winner!
154 }
155 }
15625129µs return $xslfilename;
157}
158
159
# spent 4.46s (7.79ms+4.45) within C4::XSLT::XSLTParse4Display which was called 25 times, avg 178ms/call: # 25 times (7.79ms+4.45s) by C4::Search::searchResults at line 2014 of /usr/share/koha/lib/C4/Search.pm, avg 178ms/call
sub XSLTParse4Display {
1602562µs my ( $biblionumber, $orig_record, $xslsyspref, $fixamps, $hidden_items ) = @_;
1612587µs2588µs my $xslfilename = C4::Context->preference($xslsyspref);
# spent 88µs making 25 calls to C4::Context::preference, avg 4µs/call
16225241µs25132µs if ( $xslfilename =~ /^\s*"?default"?\s*$/i ) {
# spent 132µs making 25 calls to C4::XSLT::CORE:match, avg 5µs/call
1632512µs my $htdocs;
164259µs my $theme;
16525165µs25163µs my $lang = C4::Templates::_current_language();
# spent 163µs making 25 calls to C4::Templates::_current_language, avg 7µs/call
1662511µs my $xslfile;
16725136µs if ($xslsyspref eq "XSLTDetailsDisplay") {
168 $htdocs = C4::Context->config('intrahtdocs');
169 $theme = C4::Context->preference("template");
170 $xslfile = C4::Context->preference('marcflavour') .
171 "slim2intranetDetail.xsl";
172 } elsif ($xslsyspref eq "XSLTResultsDisplay") {
173 $htdocs = C4::Context->config('intrahtdocs');
174 $theme = C4::Context->preference("template");
175 $xslfile = C4::Context->preference('marcflavour') .
176 "slim2intranetResults.xsl";
177 } elsif ($xslsyspref eq "OPACXSLTDetailsDisplay") {
178 $htdocs = C4::Context->config('opachtdocs');
179 $theme = C4::Context->preference("opacthemes");
180 $xslfile = C4::Context->preference('marcflavour') .
181 "slim2OPACDetail.xsl";
182 } elsif ($xslsyspref eq "OPACXSLTResultsDisplay") {
18325138µs25569µs $htdocs = C4::Context->config('opachtdocs');
# spent 569µs making 25 calls to C4::Context::config, avg 23µs/call
1842587µs25117µs $theme = C4::Context->preference("opacthemes");
# spent 117µs making 25 calls to C4::Context::preference, avg 5µs/call
18525102µs25161µs $xslfile = C4::Context->preference('marcflavour') .
# spent 161µs making 25 calls to C4::Context::preference, avg 6µs/call
186 "slim2OPACResults.xsl";
187 }
18825127µs251.27ms $xslfilename = _get_best_default_xslt_filename($htdocs, $theme, $lang, $xslfile);
# spent 1.27ms making 25 calls to C4::XSLT::_get_best_default_xslt_filename, avg 51µs/call
189 }
190
19125139µs2565µs if ( $xslfilename =~ m/\{langcode\}/ ) {
# spent 65µs making 25 calls to C4::XSLT::CORE:match, avg 3µs/call
192 my $lang = C4::Templates::_current_language();
193 $xslfilename =~ s/\{langcode\}/$lang/;
194 }
195
196 # grab the XML, run it through our stylesheet, push it out to the browser
19725214µs252.49s my $record = transformMARCXML4XSLT($biblionumber, $orig_record);
# spent 2.49s making 25 calls to C4::XSLT::transformMARCXML4XSLT, avg 99.4ms/call
198 #return $record->as_formatted();
19925189µs251.74s my $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items);
# spent 1.74s making 25 calls to C4::XSLT::buildKohaItemsNamespace, avg 69.7ms/call
20025481µs50105ms my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour'));
# spent 105ms making 25 calls to MARC::Record::as_xml, avg 4.19ms/call # spent 416µs making 25 calls to C4::Context::preference, avg 17µs/call
2012528µs my $sysxml = "<sysprefs>\n";
20225101µs foreach my $syspref ( qw/ hidelostitems OPACURLOpenInNewWindow
203 DisplayOPACiconsXSLT URLLinkText viewISBD
204 OPACBaseURL TraceCompleteSubfields UseICU
205 UseAuthoritiesForTracings TraceSubjectSubdivisions
206 Display856uAsImage OPACDisplay856uAsImage
207 UseControlNumber IntranetBiblioDefaultView BiblioDefaultView
208 singleBranchMode OPACItemLocation DisplayIconsXSLT
209 AlternateHoldingsField AlternateHoldingsSeparator
210 TrackClicks OpacResultsItemtypeImage/ )
211 {
2125501.51ms55037.5ms my $sp = C4::Context->preference( $syspref );
# spent 37.5ms making 550 calls to C4::Context::preference, avg 68µs/call
213550182µs next unless defined($sp);
214525824µs $sysxml .= "<syspref name=\"$syspref\">$sp</syspref>\n";
215 }
2162525µs $sysxml .= "</sysprefs>\n";
21725829µs25629µs $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml\<\/record\>/;
# spent 629µs making 25 calls to C4::XSLT::CORE:subst, avg 25µs/call
2182534µs if ($fixamps) { # We need to correct the ampersand entities that Zebra outputs
21925322µs25242µs $xmlrecord =~ s/\&amp;amp;/\&amp;/g;
# spent 242µs making 25 calls to C4::XSLT::CORE:subst, avg 10µs/call
220 }
22125472µs25409µs $xmlrecord =~ s/\& /\&amp\; /;
# spent 409µs making 25 calls to C4::XSLT::CORE:subst, avg 16µs/call
22225332µs25272µs $xmlrecord =~ s/\&amp\;amp\; /\&amp\; /;
# spent 272µs making 25 calls to C4::XSLT::CORE:subst, avg 11µs/call
223
22425190µs25498µs my $parser = XML::LibXML->new();
# spent 498µs making 25 calls to XML::LibXML::new, avg 20µs/call
225 # don't die when you find &, >, etc
22625141µs251.11ms $parser->recover_silently(0);
# spent 1.11ms making 25 calls to XML::LibXML::recover_silently, avg 44µs/call
22725146µs2512.7ms my $source = $parser->parse_string($xmlrecord);
# spent 12.7ms making 25 calls to XML::LibXML::parse_string, avg 506µs/call
2282579µs2490µs unless ( $stylesheet->{$xslfilename} ) {
# spent 246µs making 1 call to AutoLoader::AUTOLOAD # spent 245µs making 1 call to XML::LibXML::Node::DESTROY
229112µs127µs my $xslt = XML::LibXSLT->new();
# spent 27µs making 1 call to XML::LibXSLT::new
2301500ns my $style_doc;
231114µs15µs if ( $xslfilename =~ /^https?:\/\// ) {
# spent 5µs making 1 call to C4::XSLT::CORE:match
232 my $xsltstring = GetURI($xslfilename);
233 $style_doc = $parser->parse_string($xsltstring);
234 } else {
2353950µs2259µs
# spent 144µs (29+115) within C4::XSLT::BEGIN@235 which was called: # once (29µs+115µs) by C4::Search::BEGIN@29 at line 235
use Cwd;
# spent 144µs making 1 call to C4::XSLT::BEGIN@235 # spent 115µs making 1 call to Exporter::import
23616µs11.87ms $style_doc = $parser->parse_file($xslfilename);
# spent 1.87ms making 1 call to XML::LibXML::parse_file
237 }
2381283µs110.3ms $stylesheet->{$xslfilename} = $xslt->parse_stylesheet($style_doc);
# spent 10.3ms making 1 call to XML::LibXSLT::parse_stylesheet
239 }
24025207µs2547.5ms my $results = $stylesheet->{$xslfilename}->transform($source);
# spent 47.5ms making 25 calls to XML::LibXSLT::StylesheetWrapper::transform, avg 1.90ms/call
24125174µs251.79ms my $newxmlrecord = $stylesheet->{$xslfilename}->output_string($results);
# spent 1.79ms making 25 calls to XML::LibXSLT::StylesheetWrapper::output_string, avg 72µs/call
242252.22ms return $newxmlrecord;
243}
244
245
# spent 1.74s (7.74ms+1.74) within C4::XSLT::buildKohaItemsNamespace which was called 25 times, avg 69.7ms/call: # 25 times (7.74ms+1.74s) by C4::XSLT::XSLTParse4Display at line 199, avg 69.7ms/call
sub buildKohaItemsNamespace {
2462548µs my ($biblionumber, $hidden_items) = @_;
247
24825248µs250840ms my @items = C4::Items::GetItemsInfo($biblionumber);
# spent 839ms making 25 calls to C4::Items::GetItemsInfo, avg 33.5ms/call # spent 1.36ms making 150 calls to DBI::common::DESTROY, avg 9µs/call # spent 380µs making 75 calls to DBD::_mem::common::DESTROY, avg 5µs/call
2492562µs if ($hidden_items && @$hidden_items) {
250 my %hi = map {$_ => 1} @$hidden_items;
251 @items = grep { !$hi{$_->{itemnumber}} } @items;
252 }
253
25425406µs200171ms my $shelflocations = GetKohaAuthorisedValues('items.location',GetFrameworkCode($biblionumber), 'opac');
# spent 117ms making 25 calls to C4::Koha::GetKohaAuthorisedValues, avg 4.70ms/call # spent 52.4ms making 25 calls to C4::Biblio::GetFrameworkCode, avg 2.10ms/call # spent 528µs making 100 calls to DBI::common::DESTROY, avg 5µs/call # spent 154µs making 50 calls to DBD::_mem::common::DESTROY, avg 3µs/call
25525315µs200172ms my $ccodes = GetKohaAuthorisedValues('items.ccode',GetFrameworkCode($biblionumber), 'opac');
# spent 118ms making 25 calls to C4::Koha::GetKohaAuthorisedValues, avg 4.73ms/call # spent 52.5ms making 25 calls to C4::Biblio::GetFrameworkCode, avg 2.10ms/call # spent 672µs making 100 calls to DBI::common::DESTROY, avg 7µs/call # spent 154µs making 50 calls to DBD::_mem::common::DESTROY, avg 3µs/call
256
25725207µs175341ms my $branches = GetBranches();
# spent 340ms making 25 calls to C4::Branch::GetBranches, avg 13.6ms/call # spent 661µs making 100 calls to DBI::common::DESTROY, avg 7µs/call # spent 210µs making 50 calls to DBD::_mem::common::DESTROY, avg 4µs/call
25825194µs10078.1ms my $itemtypes = GetItemTypes();
# spent 77.7ms making 25 calls to C4::Koha::GetItemTypes, avg 3.11ms/call # spent 251µs making 50 calls to DBI::common::DESTROY, avg 5µs/call # spent 118µs making 25 calls to DBD::_mem::common::DESTROY, avg 5µs/call
2592537µs my $location = "";
2602519µs my $ccode = "";
2612518µs my $xml = '';
2622580µs for my $item (@items) {
2633211µs my $status;
264
26532309µs12870.3ms my ( $transfertwhen, $transfertfrom, $transfertto ) = C4::Circulation::GetTransfers($item->{itemnumber});
# spent 69.9ms making 32 calls to C4::Circulation::GetTransfers, avg 2.18ms/call # spent 305µs making 64 calls to DBI::common::DESTROY, avg 5µs/call # spent 96µs making 32 calls to DBD::_mem::common::DESTROY, avg 3µs/call
266
26732359µs12867.3ms my $reservestatus = C4::Reserves::GetReserveStatus( $item->{itemnumber} );
# spent 67.0ms making 32 calls to C4::Reserves::GetReserveStatus, avg 2.09ms/call # spent 289µs making 64 calls to DBI::common::DESTROY, avg 5µs/call # spent 71µs making 32 calls to DBD::_mem::common::DESTROY, avg 2µs/call
268
26932404µs if ( $itemtypes->{ $item->{itype} }->{notforloan} || $item->{notforloan} || $item->{onloan} || $item->{wthdrawn} || $item->{itemlost} || $item->{damaged} ||
270 (defined $transfertwhen && $transfertwhen ne '') || $item->{itemnotforloan} || (defined $reservestatus && $reservestatus eq "Waiting") ){
271113µs if ( $item->{notforloan} < 0) {
272 $status = "On order";
273 }
27418µs if ( $item->{itemnotforloan} > 0 || $item->{notforloan} > 0 || $itemtypes->{ $item->{itype} }->{notforloan} == 1 ) {
275 $status = "reference";
276 }
27712µs if ($item->{onloan}) {
278 $status = "Checked out";
279 }
28012µs if ( $item->{wthdrawn}) {
281 $status = "Withdrawn";
282 }
28312µs if ($item->{itemlost}) {
284 $status = "Lost";
285 }
28611µs if ($item->{damaged}) {
287 $status = "Damaged";
288 }
2891900ns if (defined $transfertwhen && $transfertwhen ne '') {
290 $status = 'In transit';
291 }
29212µs if (defined $reservestatus && $reservestatus eq "Waiting") {
293 $status = 'Waiting';
294 }
295 } else {
2963139µs $status = "available";
297 }
29832338µs32994µs my $homebranch = $item->{homebranch}? xml_escape($branches->{$item->{homebranch}}->{'branchname'}):'';
# spent 994µs making 32 calls to C4::Koha::xml_escape, avg 31µs/call
29932157µs32478µs my $holdingbranch = $item->{holdingbranch}? xml_escape($branches->{$item->{holdingbranch}}->{'branchname'}):'';
# spent 478µs making 32 calls to C4::Koha::xml_escape, avg 15µs/call
30032159µs17237µs $location = $item->{location}? xml_escape($shelflocations->{$item->{location}}||$item->{location}):'';
# spent 237µs making 17 calls to C4::Koha::xml_escape, avg 14µs/call
3013266µs122µs $ccode = $item->{ccode}? xml_escape($ccodes->{$item->{ccode}}||$item->{ccode}):'';
# spent 22µs making 1 call to C4::Koha::xml_escape
30232113µs32359µs my $itemcallnumber = xml_escape($item->{itemcallnumber});
# spent 359µs making 32 calls to C4::Koha::xml_escape, avg 11µs/call
30332326µs $xml.= "<item><homebranch>$homebranch</homebranch>".
304 "<holdingbranch>$holdingbranch</holdingbranch>".
305 "<location>$location</location>".
306 "<ccode>$ccode</ccode>".
307 "<status>$status</status>".
308 "<itemcallnumber>".$itemcallnumber."</itemcallnumber>"
309 . "</item>";
310
311 }
3122547µs $xml = "<items xmlns=\"http://www.koha-community.org/items\">".$xml."</items>";
313253.75ms return $xml;
314}
315
- -
31817µs1;
319__END__
 
# spent 572µs within C4::XSLT::CORE:ftfile which was called 25 times, avg 23µs/call: # 25 times (572µs+0s) by C4::XSLT::_get_best_default_xslt_filename at line 152, avg 23µs/call
sub C4::XSLT::CORE:ftfile; # opcode
# spent 201µs within C4::XSLT::CORE:match which was called 51 times, avg 4µs/call: # 25 times (132µs+0s) by C4::XSLT::XSLTParse4Display at line 162, avg 5µs/call # 25 times (65µs+0s) by C4::XSLT::XSLTParse4Display at line 191, avg 3µs/call # once (5µs+0s) by C4::XSLT::XSLTParse4Display at line 231
sub C4::XSLT::CORE:match; # opcode
# spent 1.55ms within C4::XSLT::CORE:subst which was called 100 times, avg 16µs/call: # 25 times (629µs+0s) by C4::XSLT::XSLTParse4Display at line 217, avg 25µs/call # 25 times (409µs+0s) by C4::XSLT::XSLTParse4Display at line 221, avg 16µs/call # 25 times (272µs+0s) by C4::XSLT::XSLTParse4Display at line 222, avg 11µs/call # 25 times (242µs+0s) by C4::XSLT::XSLTParse4Display at line 219, avg 10µs/call
sub C4::XSLT::CORE:subst; # opcode