← 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:39 2013

Filename/usr/share/koha/lib/C4/Koha.pm
StatementsExecuted 6285 statements in 542ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1485310.3ms323msC4::Koha::::GetAuthValCodeC4::Koha::GetAuthValCode
51328.56ms240msC4::Koha::::GetKohaAuthorisedValuesC4::Koha::GetKohaAuthorisedValues
143518.52ms314msC4::Koha::::GetKohaAuthorisedValueLibC4::Koha::GetKohaAuthorisedValueLib
26225.68ms81.5msC4::Koha::::GetItemTypesC4::Koha::GetItemTypes
163534.27ms13.2msC4::Koha::::getitemtypeimagelocationC4::Koha::getitemtypeimagelocation
57114.23ms132msC4::Koha::::getitemtypeinfoC4::Koha::getitemtypeinfo
137112.08ms5.34msC4::Koha::::getitemtypeimagesrcC4::Koha::getitemtypeimagesrc
114511.67ms2.09msC4::Koha::::xml_escapeC4::Koha::xml_escape
111759µs989µsC4::Koha::::BEGIN@31C4::Koha::BEGIN@31
111742µs15.7msC4::Koha::::BEGIN@30C4::Koha::BEGIN@30
2511739µs9.00msC4::Koha::::GetNormalizedUPCC4::Koha::GetNormalizedUPC
2511591µs7.68msC4::Koha::::GetNormalizedEANC4::Koha::GetNormalizedEAN
2511582µs7.58msC4::Koha::::GetNormalizedOCLCNumberC4::Koha::GetNormalizedOCLCNumber
53061440µs440µsC4::Koha::::CORE:substC4::Koha::CORE:subst (opcode)
2511373µs6.88msC4::Koha::::GetNormalizedISBNC4::Koha::GetNormalizedISBN
211359µs5.58msC4::Koha::::GetAuthorisedValuesC4::Koha::GetAuthorisedValues
2021232µs333µsC4::Koha::::_normalize_match_pointC4::Koha::_normalize_match_point
4521125µs125µsC4::Koha::::CORE:matchC4::Koha::CORE:match (opcode)
11183µs2.16msC4::Koha::::getFacetsC4::Koha::getFacets
11130µs38µsC4::Koha::::BEGIN@23C4::Koha::BEGIN@23
11125µs25µsC4::Koha::::BEGIN@35C4::Koha::BEGIN@35
11117µs70µsC4::Koha::::BEGIN@28C4::Koha::BEGIN@28
11116µs20µsC4::Koha::::BEGIN@29C4::Koha::BEGIN@29
11116µs20µsC4::Koha::::BEGIN@26C4::Koha::BEGIN@26
11114µs150µsC4::Koha::::BEGIN@27C4::Koha::BEGIN@27
11112µs96µsC4::Koha::::BEGIN@33C4::Koha::BEGIN@33
0000s0sC4::Koha::::AddAuthorisedValueC4::Koha::AddAuthorisedValue
0000s0sC4::Koha::::GetAuthValCodeFromFieldC4::Koha::GetAuthValCodeFromField
0000s0sC4::Koha::::GetAuthorisedValueByCodeC4::Koha::GetAuthorisedValueByCode
0000s0sC4::Koha::::GetAuthorisedValueCategoriesC4::Koha::GetAuthorisedValueCategories
0000s0sC4::Koha::::GetCcodesC4::Koha::GetCcodes
0000s0sC4::Koha::::GetDailyQuoteC4::Koha::GetDailyQuote
0000s0sC4::Koha::::GetKohaAuthorisedValuesFromFieldC4::Koha::GetKohaAuthorisedValuesFromField
0000s0sC4::Koha::::GetKohaImageurlFromAuthorisedValuesC4::Koha::GetKohaImageurlFromAuthorisedValues
0000s0sC4::Koha::::GetPrinterC4::Koha::GetPrinter
0000s0sC4::Koha::::GetPrintersC4::Koha::GetPrinters
0000s0sC4::Koha::::GetSupportListC4::Koha::GetSupportList
0000s0sC4::Koha::::GetSupportNameC4::Koha::GetSupportName
0000s0sC4::Koha::::IsAuthorisedValueCategoryC4::Koha::IsAuthorisedValueCategory
0000s0sC4::Koha::::_getImagesFromDirectoryC4::Koha::_getImagesFromDirectory
0000s0sC4::Koha::::_getSubdirectoryNamesC4::Koha::_getSubdirectoryNames
0000s0sC4::Koha::::_isbn_cleanupC4::Koha::_isbn_cleanup
0000s0sC4::Koha::::displayServersC4::Koha::displayServers
0000s0sC4::Koha::::display_marc_indicatorsC4::Koha::display_marc_indicators
0000s0sC4::Koha::::getImageSetsC4::Koha::getImageSets
0000s0sC4::Koha::::get_infos_ofC4::Koha::get_infos_of
0000s0sC4::Koha::::get_itemtypeinfos_ofC4::Koha::get_itemtypeinfos_of
0000s0sC4::Koha::::get_notforloan_label_ofC4::Koha::get_notforloan_label_of
0000s0sC4::Koha::::getallthemesC4::Koha::getallthemes
0000s0sC4::Koha::::getauthtypeC4::Koha::getauthtype
0000s0sC4::Koha::::getauthtypesC4::Koha::getauthtypes
0000s0sC4::Koha::::getframeworkinfoC4::Koha::getframeworkinfo
0000s0sC4::Koha::::getframeworksC4::Koha::getframeworks
0000s0sC4::Koha::::getitemtypeimagedirC4::Koha::getitemtypeimagedir
0000s0sC4::Koha::::getnbpagesC4::Koha::getnbpages
0000s0sC4::Koha::::slashifyDateC4::Koha::slashifyDate
0000s0sC4::Koha::::subfield_is_koha_internal_pC4::Koha::subfield_is_koha_internal_p
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package C4::Koha;
2
3# Copyright 2000-2002 Katipo Communications
4# Parts Copyright 2010 Nelsonville Public Library
5# Parts copyright 2010 BibLibre
6#
7# This file is part of Koha.
8#
9# Koha is free software; you can redistribute it and/or modify it under the
10# terms of the GNU General Public License as published by the Free Software
11# Foundation; either version 2 of the License, or (at your option) any later
12# version.
13#
14# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License along
19# with Koha; if not, write to the Free Software Foundation, Inc.,
20# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21
22
23339µs245µs
# spent 38µs (30+8) within C4::Koha::BEGIN@23 which was called: # once (30µs+8µs) by C4::Biblio::BEGIN@33 at line 23
use strict;
# spent 38µs making 1 call to C4::Koha::BEGIN@23 # spent 8µs making 1 call to strict::import
24#use warnings; FIXME - Bug 2505
25
26332µs224µs
# spent 20µs (16+4) within C4::Koha::BEGIN@26 which was called: # once (16µs+4µs) by C4::Biblio::BEGIN@33 at line 26
use C4::Context;
# spent 20µs making 1 call to C4::Koha::BEGIN@26 # spent 4µs making 1 call to C4::Context::import
27336µs2285µs
# spent 150µs (14+135) within C4::Koha::BEGIN@27 which was called: # once (14µs+135µs) by C4::Biblio::BEGIN@33 at line 27
use C4::Branch qw(GetBranchesCount);
# spent 150µs making 1 call to C4::Koha::BEGIN@27 # spent 135µs making 1 call to Exporter::import
28339µs2124µs
# spent 70µs (17+53) within C4::Koha::BEGIN@28 which was called: # once (17µs+53µs) by C4::Biblio::BEGIN@33 at line 28
use Memoize;
# spent 70µs making 1 call to C4::Koha::BEGIN@28 # spent 53µs making 1 call to Exporter::import
29332µs223µs
# spent 20µs (16+3) within C4::Koha::BEGIN@29 which was called: # once (16µs+3µs) by C4::Biblio::BEGIN@33 at line 29
use DateTime;
# spent 20µs making 1 call to C4::Koha::BEGIN@29 # spent 3µs making 1 call to UNIVERSAL::import
303162µs215.7ms
# spent 15.7ms (742µs+15.0) within C4::Koha::BEGIN@30 which was called: # once (742µs+15.0ms) by C4::Biblio::BEGIN@33 at line 30
use DateTime::Format::MySQL;
# spent 15.7ms making 1 call to C4::Koha::BEGIN@30 # spent 4µs making 1 call to UNIVERSAL::import
313169µs21.12ms
# spent 989µs (759+231) within C4::Koha::BEGIN@31 which was called: # once (759µs+231µs) by C4::Biblio::BEGIN@33 at line 31
use autouse 'Data::Dumper' => qw(Dumper);
# spent 989µs making 1 call to C4::Koha::BEGIN@31 # spent 131µs making 1 call to autouse::import
32
333122µs2180µs
# spent 96µs (12+84) within C4::Koha::BEGIN@33 which was called: # once (12µs+84µs) by C4::Biblio::BEGIN@33 at line 33
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $DEBUG);
# spent 96µs making 1 call to C4::Koha::BEGIN@33 # spent 84µs making 1 call to vars::import
34
35
# spent 25µs within C4::Koha::BEGIN@35 which was called: # once (25µs+0s) by C4::Biblio::BEGIN@33 at line 78
BEGIN {
3611µs $VERSION = 3.07.00.049;
3711µs require Exporter;
3819µs @ISA = qw(Exporter);
3916µs @EXPORT = qw(
40 &slashifyDate
41 &subfield_is_koha_internal_p
42 &GetPrinters &GetPrinter
43 &GetItemTypes &getitemtypeinfo
44 &GetCcodes
45 &GetSupportName &GetSupportList
46 &get_itemtypeinfos_of
47 &getframeworks &getframeworkinfo
48 &getauthtypes &getauthtype
49 &getallthemes
50 &getFacets
51 &displayServers
52 &getnbpages
53 &get_infos_of
54 &get_notforloan_label_of
55 &getitemtypeimagedir
56 &getitemtypeimagesrc
57 &getitemtypeimagelocation
58 &GetAuthorisedValues
59 &GetAuthorisedValueCategories
60 &IsAuthorisedValueCategory
61 &GetKohaAuthorisedValues
62 &GetKohaAuthorisedValuesFromField
63 &GetKohaAuthorisedValueLib
64 &GetAuthorisedValueByCode
65 &GetKohaImageurlFromAuthorisedValues
66 &GetAuthValCode
67 &AddAuthorisedValue
68 &GetNormalizedUPC
69 &GetNormalizedISBN
70 &GetNormalizedEAN
71 &GetNormalizedOCLCNumber
72 &xml_escape
73
74 $DEBUG
75 );
761300ns $DEBUG = 0;
7716µs@EXPORT_OK = qw( GetDailyQuote );
7815.04ms125µs}
# spent 25µs making 1 call to C4::Koha::BEGIN@35
79
80# expensive functions
8119µs1275µsmemoize('GetAuthorisedValues');
# spent 275µs making 1 call to Memoize::memoize
82
83=head1 NAME
84
- -
99=head2 slashifyDate
100
- -
108sub slashifyDate {
109
110 # accepts a date of the form xx-xx-xx[xx] and returns it in the
111 # form xx/xx/xx[xx]
112 my @dateOut = split( '-', shift );
113 return ("$dateOut[2]/$dateOut[1]/$dateOut[0]");
114}
115
116# FIXME.. this should be moved to a MARC-specific module
117sub subfield_is_koha_internal_p {
118 my ($subfield) = @_;
119
120 # We could match on 'lib' and 'tab' (and 'mandatory', & more to come!)
121 # But real MARC subfields are always single-character
122 # so it really is safer just to check the length
123
124 return length $subfield != 1;
125}
126
127=head2 GetSupportName
128
- -
135sub GetSupportName{
136 my ($codestring)=@_;
137 return if (! $codestring);
138 my $resultstring;
139 my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes");
140 if (!$advanced_search_types or $advanced_search_types eq 'itemtypes') {
141 my $query = qq|
142 SELECT description
143 FROM itemtypes
144 WHERE itemtype=?
145 order by description
146 |;
147 my $sth = C4::Context->dbh->prepare($query);
148 $sth->execute($codestring);
149 ($resultstring)=$sth->fetchrow;
150 return $resultstring;
151 } else {
152 my $sth =
153 C4::Context->dbh->prepare(
154 "SELECT lib FROM authorised_values WHERE category = ? AND authorised_value = ?"
155 );
156 $sth->execute( $advanced_search_types, $codestring );
157 my $data = $sth->fetchrow_hashref;
158 return $$data{'lib'};
159 }
160
161}
162=head2 GetSupportList
163
- -
190sub GetSupportList{
191 my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes");
192 if (!$advanced_search_types or $advanced_search_types eq 'itemtypes') {
193 my $query = qq|
194 SELECT *
195 FROM itemtypes
196 order by description
197 |;
198 my $sth = C4::Context->dbh->prepare($query);
199 $sth->execute;
200 return $sth->fetchall_arrayref({});
201 } else {
202 my $advsearchtypes = GetAuthorisedValues($advanced_search_types);
203 my @results= map {{itemtype=>$$_{authorised_value},description=>$$_{lib},imageurl=>$$_{imageurl}}} @$advsearchtypes;
204 return \@results;
205 }
206}
207=head2 GetItemTypes
208
- -
244
# spent 81.5ms (5.68+75.8) within C4::Koha::GetItemTypes which was called 26 times, avg 3.13ms/call: # 25 times (5.31ms+72.4ms) by C4::XSLT::buildKohaItemsNamespace at line 258 of /usr/share/koha/lib/C4/XSLT.pm, avg 3.11ms/call # once (374µs+3.37ms) by main::RUNTIME at line 205 of /usr/share/koha/opac/cgi-bin/opac/opac-search.pl
sub GetItemTypes {
245
246 # returns a reference to a hash of references to itemtypes...
2472614µs my %itemtypes;
24826213µs2624.4ms my $dbh = C4::Context->dbh;
# spent 24.4ms making 26 calls to C4::Context::dbh, avg 939µs/call
2492635µs my $query = qq|
250 SELECT *
251 FROM itemtypes
252 |;
25326498µs525.56ms my $sth = $dbh->prepare($query);
# spent 2.96ms making 26 calls to DBI::db::prepare, avg 114µs/call # spent 2.60ms making 26 calls to DBD::mysql::db::prepare, avg 100µs/call
2542629.0ms2628.7ms $sth->execute;
# spent 28.7ms making 26 calls to DBI::st::execute, avg 1.10ms/call
2552623.4ms187226.6ms while ( my $IT = $sth->fetchrow_hashref ) {
# spent 19.3ms making 624 calls to DBI::st::fetchrow_hashref, avg 31µs/call # spent 3.94ms making 624 calls to DBI::st::fetch, avg 6µs/call # spent 3.35ms making 624 calls to DBI::common::FETCH, avg 5µs/call
256 $itemtypes{ $IT->{'itemtype'} } = $IT;
257 }
258261.20ms return ( \%itemtypes );
259}
260
261sub get_itemtypeinfos_of {
262 my @itemtypes = @_;
263
264 my $placeholders = join( ', ', map { '?' } @itemtypes );
265 my $query = <<"END_SQL";
266SELECT itemtype,
267 description,
268 imageurl,
269 notforloan
270 FROM itemtypes
271 WHERE itemtype IN ( $placeholders )
272END_SQL
273
274 return get_infos_of( $query, 'itemtype', undef, \@itemtypes );
275}
276
277# this is temporary until we separate collection codes and item types
278sub GetCcodes {
279 my $count = 0;
280 my @results;
281 my $dbh = C4::Context->dbh;
282 my $sth =
283 $dbh->prepare(
284 "SELECT * FROM authorised_values ORDER BY authorised_value");
285 $sth->execute;
286 while ( my $data = $sth->fetchrow_hashref ) {
287 if ( $data->{category} eq "CCODE" ) {
288 $count++;
289 $results[$count] = $data;
290
291 #warn "data: $data";
292 }
293 }
294 $sth->finish;
295 return ( $count, @results );
296}
297
298=head2 getauthtypes
299
- -
335sub getauthtypes {
336
337 # returns a reference to a hash of references to authtypes...
338 my %authtypes;
339 my $dbh = C4::Context->dbh;
340 my $sth = $dbh->prepare("select * from auth_types order by authtypetext");
341 $sth->execute;
342 while ( my $IT = $sth->fetchrow_hashref ) {
343 $authtypes{ $IT->{'authtypecode'} } = $IT;
344 }
345 return ( \%authtypes );
346}
347
348sub getauthtype {
349 my ($authtypecode) = @_;
350
351 # returns a reference to a hash of references to authtypes...
352 my %authtypes;
353 my $dbh = C4::Context->dbh;
354 my $sth = $dbh->prepare("select * from auth_types where authtypecode=?");
355 $sth->execute($authtypecode);
356 my $res = $sth->fetchrow_hashref;
357 return $res;
358}
359
360=head2 getframework
361
- -
397sub getframeworks {
398
399 # returns a reference to a hash of references to branches...
400 my %itemtypes;
401 my $dbh = C4::Context->dbh;
402 my $sth = $dbh->prepare("select * from biblio_framework");
403 $sth->execute;
404 while ( my $IT = $sth->fetchrow_hashref ) {
405 $itemtypes{ $IT->{'frameworkcode'} } = $IT;
406 }
407 return ( \%itemtypes );
408}
409
410=head2 getframeworkinfo
411
- -
418sub getframeworkinfo {
419 my ($frameworkcode) = @_;
420 my $dbh = C4::Context->dbh;
421 my $sth =
422 $dbh->prepare("select * from biblio_framework where frameworkcode=?");
423 $sth->execute($frameworkcode);
424 my $res = $sth->fetchrow_hashref;
425 return $res;
426}
427
428=head2 getitemtypeinfo
429
- -
438
# spent 132ms (4.23+128) within C4::Koha::getitemtypeinfo which was called 57 times, avg 2.32ms/call: # 57 times (4.23ms+128ms) by C4::Biblio::GetAuthorisedValueDesc at line 1585 of /usr/share/koha/lib/C4/Biblio.pm, avg 2.32ms/call
sub getitemtypeinfo {
43957127µs my ($itemtype, $interface) = @_;
44057344µs5754.1ms my $dbh = C4::Context->dbh;
# spent 54.1ms making 57 calls to C4::Context::dbh, avg 949µs/call
441571.17ms11411.4ms my $sth = $dbh->prepare("select * from itemtypes where itemtype=?");
# spent 6.18ms making 57 calls to DBI::db::prepare, avg 108µs/call # spent 5.23ms making 57 calls to DBD::mysql::db::prepare, avg 92µs/call
4425757.1ms5756.5ms $sth->execute($itemtype);
# spent 56.5ms making 57 calls to DBI::st::execute, avg 990µs/call
443574.22ms1715.28ms my $res = $sth->fetchrow_hashref;
# spent 3.70ms making 57 calls to DBI::st::fetchrow_hashref, avg 65µs/call # spent 841µs making 57 calls to DBI::common::FETCH, avg 15µs/call # spent 738µs making 57 calls to DBI::st::fetch, avg 13µs/call
444
44557428µs576.14ms $res->{imageurl} = getitemtypeimagelocation( ( ( defined $interface && $interface eq 'opac' ) ? 'opac' : 'intranet' ), $res->{imageurl} );
# spent 6.14ms making 57 calls to C4::Koha::getitemtypeimagelocation, avg 108µs/call
446
447572.76ms return $res;
448}
449
450=head2 getitemtypeimagedir
451
- -
460sub getitemtypeimagedir {
461 my $src = shift || 'opac';
462 if ($src eq 'intranet') {
463 return C4::Context->config('intrahtdocs') . '/' .C4::Context->preference('template') . '/img/itemtypeimg';
464 } else {
465 return C4::Context->config('opachtdocs') . '/' . C4::Context->preference('opacthemes') . '/itemtypeimg';
466 }
467}
468
469
# spent 5.34ms (2.08+3.26) within C4::Koha::getitemtypeimagesrc which was called 137 times, avg 39µs/call: # 137 times (2.08ms+3.26ms) by C4::Koha::getitemtypeimagelocation at line 488, avg 39µs/call
sub getitemtypeimagesrc {
470137193µs my $src = shift || 'opac';
471137869µs572.56ms if ($src eq 'intranet') {
# spent 2.56ms making 57 calls to C4::Context::preference, avg 45µs/call
472 return '/intranet-tmpl' . '/' . C4::Context->preference('template') . '/img/itemtypeimg';
473 } else {
47480888µs80696µs return '/opac-tmpl' . '/' . C4::Context->preference('opacthemes') . '/itemtypeimg';
# spent 696µs making 80 calls to C4::Context::preference, avg 9µs/call
475 }
476}
477
478
# spent 13.2ms (4.27+8.95) within C4::Koha::getitemtypeimagelocation which was called 163 times, avg 81µs/call: # 57 times (1.29ms+4.85ms) by C4::Koha::getitemtypeinfo at line 445, avg 108µs/call # 32 times (860µs+1.93ms) by C4::Search::searchResults at line 1985 of /usr/share/koha/lib/C4/Search.pm, avg 87µs/call # 26 times (109µs+0s) by main::RUNTIME at line 234 of /usr/share/koha/opac/cgi-bin/opac/opac-search.pl, avg 4µs/call # 25 times (678µs+1.38ms) by C4::Search::searchResults at line 1714 of /usr/share/koha/lib/C4/Search.pm, avg 82µs/call # 23 times (1.33ms+798µs) by main::RUNTIME at line 218 of /usr/share/koha/opac/cgi-bin/opac/opac-search.pl, avg 93µs/call
sub getitemtypeimagelocation {
479163352µs my ( $src, $image ) = @_;
480
481163209µs return '' if ( !$image );
482137472µs require URI::Split;
483
484137814µs1373.47ms my $scheme = ( URI::Split::uri_split( $image ) )[0];
# spent 3.47ms making 137 calls to URI::Split::uri_split, avg 25µs/call
485
486137108µs return $image if ( $scheme );
487
4881371.18ms1375.34ms return getitemtypeimagesrc( $src ) . '/' . $image;
# spent 5.34ms making 137 calls to C4::Koha::getitemtypeimagesrc, avg 39µs/call
489}
490
491=head3 _getImagesFromDirectory
492
- -
506sub _getImagesFromDirectory {
507 my $directoryname = shift;
508 return unless defined $directoryname;
509 return unless -d $directoryname;
510
511 if ( opendir ( my $dh, $directoryname ) ) {
512 my @images = grep { /\.(gif|png)$/i } readdir( $dh );
513 closedir $dh;
514 @images = sort(@images);
515 return @images;
516 } else {
517 warn "unable to opendir $directoryname: $!";
518 return;
519 }
520}
521
522=head3 _getSubdirectoryNames
523
- -
536sub _getSubdirectoryNames {
537 my $directoryname = shift;
538 return unless defined $directoryname;
539 return unless -d $directoryname;
540
541 if ( opendir ( my $dh, $directoryname ) ) {
542 my @directories = grep { -d File::Spec->catfile( $directoryname, $_ ) && ! ( /^\./ ) } readdir( $dh );
543 closedir $dh;
544 return @directories;
545 } else {
546 warn "unable to opendir $directoryname: $!";
547 return;
548 }
549}
550
551=head3 getImageSets
552
- -
570sub getImageSets {
571 my %params = @_;
572 my $checked = $params{'checked'} || '';
573
574 my $paths = { staff => { filesystem => getitemtypeimagedir('intranet'),
575 url => getitemtypeimagesrc('intranet'),
576 },
577 opac => { filesystem => getitemtypeimagedir('opac'),
578 url => getitemtypeimagesrc('opac'),
579 }
580 };
581
582 my @imagesets = (); # list of hasrefs of image set data to pass to template
583 my @subdirectories = _getSubdirectoryNames( $paths->{'staff'}{'filesystem'} );
584 foreach my $imagesubdir ( @subdirectories ) {
585 warn $imagesubdir if $DEBUG;
586 my @imagelist = (); # hashrefs of image info
587 my @imagenames = _getImagesFromDirectory( File::Spec->catfile( $paths->{'staff'}{'filesystem'}, $imagesubdir ) );
588 my $imagesetactive = 0;
589 foreach my $thisimage ( @imagenames ) {
590 push( @imagelist,
591 { KohaImage => "$imagesubdir/$thisimage",
592 StaffImageUrl => join( '/', $paths->{'staff'}{'url'}, $imagesubdir, $thisimage ),
593 OpacImageUrl => join( '/', $paths->{'opac'}{'url'}, $imagesubdir, $thisimage ),
594 checked => "$imagesubdir/$thisimage" eq $checked ? 1 : 0,
595 }
596 );
597 $imagesetactive = 1 if "$imagesubdir/$thisimage" eq $checked;
598 }
599 push @imagesets, { imagesetname => $imagesubdir,
600 imagesetactive => $imagesetactive,
601 images => \@imagelist };
602
603 }
604 return \@imagesets;
605}
606
607=head2 GetPrinters
608
- -
620sub GetPrinters {
621 my %printers;
622 my $dbh = C4::Context->dbh;
623 my $sth = $dbh->prepare("select * from printers");
624 $sth->execute;
625 while ( my $printer = $sth->fetchrow_hashref ) {
626 $printers{ $printer->{'printqueue'} } = $printer;
627 }
628 return ( \%printers );
629}
630
631=head2 GetPrinter
632
- -
637sub GetPrinter {
638 my ( $query, $printers ) = @_; # get printer for this query from printers
639 my $printer = $query->param('printer');
640 my %cookie = $query->cookie('userenv');
641 ($printer) || ( $printer = $cookie{'printer'} ) || ( $printer = '' );
642 ( $printers->{$printer} ) || ( $printer = ( keys %$printers )[0] );
643 return $printer;
644}
645
646=head2 getnbpages
647
- -
653sub getnbpages {
654 my ( $nb_items, $nb_items_per_page ) = @_;
655
656 return int( ( $nb_items - 1 ) / $nb_items_per_page ) + 1;
657}
658
659=head2 getallthemes
660
- -
668sub getallthemes {
669 my $type = shift;
670 my $htdocs;
671 my @themes;
672 if ( $type eq 'intranet' ) {
673 $htdocs = C4::Context->config('intrahtdocs');
674 }
675 else {
676 $htdocs = C4::Context->config('opachtdocs');
677 }
678 opendir D, "$htdocs";
679 my @dirlist = readdir D;
680 foreach my $directory (@dirlist) {
681 next if $directory eq 'lib';
682 -d "$htdocs/$directory/en" and push @themes, $directory;
683 }
684 return @themes;
685}
686
687
# spent 2.16ms (83µs+2.07) within C4::Koha::getFacets which was called: # once (83µs+2.07ms) by C4::Search::getRecords at line 342 of /usr/share/koha/lib/C4/Search.pm
sub getFacets {
6881500ns my $facets;
68919µs110µs if ( C4::Context->preference("marcflavour") eq "UNIMARC" ) {
# spent 10µs making 1 call to C4::Context::preference
690 $facets = [
691 {
692 idx => 'su-to',
693 label => 'Topics',
694 tags => [ qw/ 600ab 601ab 602a 604at 605a 606ax 610a / ],
695 sep => ' - ',
696 },
697 {
698 idx => 'su-geo',
699 label => 'Places',
700 tags => [ qw/ 607a / ],
701 sep => ' - ',
702 },
703 {
704 idx => 'su-ut',
705 label => 'Titles',
706 tags => [ qw/ 500a 501a 503a / ],
707 sep => ', ',
708 },
709 {
710 idx => 'au',
711 label => 'Authors',
712 tags => [ qw/ 700ab 701ab 702ab / ],
713 sep => C4::Context->preference("UNIMARCAuthorsFacetsSeparator"),
714 },
715 {
716 idx => 'se',
717 label => 'Series',
718 tags => [ qw/ 225a / ],
719 sep => ', ',
720 },
721 ];
722
723 my $library_facet;
724 unless ( C4::Context->preference("singleBranchMode") || GetBranchesCount() == 1 ) {
725 $library_facet = {
726 idx => 'branch',
727 label => 'Libraries',
728 tags => [ qw/ 995b / ],
729 };
730 } else {
731 $library_facet = {
732 idx => 'location',
733 label => 'Location',
734 tags => [ qw/ 995c / ],
735 };
736 }
737 push( @$facets, $library_facet );
738 }
739 else {
740133µs $facets = [
741 {
742 idx => 'su-to',
743 label => 'Topics',
744 tags => [ qw/ 650a / ],
745 sep => '--',
746 },
747 # {
748 # idx => 'su-na',
749 # label => 'People and Organizations',
750 # tags => [ qw/ 600a 610a 611a / ],
751 # sep => 'a',
752 # },
753 {
754 idx => 'su-geo',
755 label => 'Places',
756 tags => [ qw/ 651a / ],
757 sep => '--',
758 },
759 {
760 idx => 'su-ut',
761 label => 'Titles',
762 tags => [ qw/ 630a / ],
763 sep => '--',
764 },
765 {
766 idx => 'au',
767 label => 'Authors',
768 tags => [ qw/ 100a 110a 700a / ],
769 sep => ', ',
770 },
771 {
772 idx => 'se',
773 label => 'Series',
774 tags => [ qw/ 440a 490a / ],
775 sep => ', ',
776 },
777 {
778 idx => 'itype',
779 label => 'ItemTypes',
780 tags => [ qw/ 952y 942c / ],
781 sep => ', ',
782 },
783 ];
784
7851700ns my $library_facet;
786123µs52.07ms unless ( C4::Context->preference("singleBranchMode") || GetBranchesCount() == 1 ) {
# spent 2.05ms making 1 call to C4::Branch::GetBranchesCount # spent 10µs making 2 calls to DBI::common::DESTROY, avg 5µs/call # spent 8µs making 1 call to C4::Context::preference # spent 2µs making 1 call to DBD::_mem::common::DESTROY
787 $library_facet = {
788 idx => 'branch',
789 label => 'Libraries',
790 tags => [ qw / 952b / ],
791 };
792 } else {
793 $library_facet = {
794 idx => 'location',
795 label => 'Location',
796 tags => [ qw / 952c / ],
797 };
798 }
79913µs push( @$facets, $library_facet );
800 }
80116µs return $facets;
802}
803
804=head2 get_infos_of
805
- -
830sub get_infos_of {
831 my ( $query, $key_name, $value_name, $bind_params ) = @_;
832
833 my $dbh = C4::Context->dbh;
834
835 my $sth = $dbh->prepare($query);
836 $sth->execute( @$bind_params );
837
838 my %infos_of;
839 while ( my $row = $sth->fetchrow_hashref ) {
840 if ( defined $value_name ) {
841 $infos_of{ $row->{$key_name} } = $row->{$value_name};
842 }
843 else {
844 $infos_of{ $row->{$key_name} } = $row;
845 }
846 }
847 $sth->finish;
848
849 return \%infos_of;
850}
851
852=head2 get_notforloan_label_of
853
- -
872# FIXME - why not use GetAuthorisedValues ??
873#
874sub get_notforloan_label_of {
875 my $dbh = C4::Context->dbh;
876
877 my $query = '
878SELECT authorised_value
879 FROM marc_subfield_structure
880 WHERE kohafield = \'items.notforloan\'
881 LIMIT 0, 1
882';
883 my $sth = $dbh->prepare($query);
884 $sth->execute();
885 my ($statuscode) = $sth->fetchrow_array();
886
887 $query = '
888SELECT lib,
889 authorised_value
890 FROM authorised_values
891 WHERE category = ?
892';
893 $sth = $dbh->prepare($query);
894 $sth->execute($statuscode);
895 my %notforloan_label_of;
896 while ( my $row = $sth->fetchrow_hashref ) {
897 $notforloan_label_of{ $row->{authorised_value} } = $row->{lib};
898 }
899 $sth->finish;
900
901 return \%notforloan_label_of;
902}
903
904=head2 displayServers
905
- -
928sub displayServers {
929 my ( $position, $type ) = @_;
930 my $dbh = C4::Context->dbh;
931
932 my $strsth = 'SELECT * FROM z3950servers';
933 my @where_clauses;
934 my @bind_params;
935
936 if ($position) {
937 push @bind_params, $position;
938 push @where_clauses, ' position = ? ';
939 }
940
941 if ($type) {
942 push @bind_params, $type;
943 push @where_clauses, ' type = ? ';
944 }
945
946 # reassemble where clause from where clause pieces
947 if (@where_clauses) {
948 $strsth .= ' WHERE ' . join( ' AND ', @where_clauses );
949 }
950
951 my $rq = $dbh->prepare($strsth);
952 $rq->execute(@bind_params);
953 my @primaryserverloop;
954
955 while ( my $data = $rq->fetchrow_hashref ) {
956 push @primaryserverloop,
957 { label => $data->{description},
958 id => $data->{name},
959 name => "server",
960 value => $data->{host} . ":" . $data->{port} . "/" . $data->{database},
961 encoding => ( $data->{encoding} ? $data->{encoding} : "iso-5426" ),
962 checked => "checked",
963 icon => $data->{icon},
964 zed => $data->{type} eq 'zed',
965 opensearch => $data->{type} eq 'opensearch'
966 };
967 }
968 return \@primaryserverloop;
969}
970
971
972=head2 GetKohaImageurlFromAuthorisedValues
973
- -
980sub GetKohaImageurlFromAuthorisedValues {
981 my ( $category, $lib ) = @_;
982 my $dbh = C4::Context->dbh;
983 my $sth = $dbh->prepare("SELECT imageurl FROM authorised_values WHERE category=? AND lib =?");
984 $sth->execute( $category, $lib );
985 while ( my $data = $sth->fetchrow_hashref ) {
986 return $data->{'imageurl'};
987 }
988}
989
990=head2 GetAuthValCode
991
- -
996
# spent 323ms (10.3+312) within C4::Koha::GetAuthValCode which was called 148 times, avg 2.18ms/call: # 51 times (3.62ms+115ms) by C4::Koha::GetKohaAuthorisedValues at line 1169, avg 2.32ms/call # 32 times (2.16ms+65.6ms) by C4::Items::GetItemsInfo at line 1292 of /usr/share/koha/lib/C4/Items.pm, avg 2.12ms/call # 32 times (2.06ms+65.4ms) by C4::Items::GetItemsInfo at line 1286 of /usr/share/koha/lib/C4/Items.pm, avg 2.11ms/call # 32 times (2.35ms+65.1ms) by C4::Items::GetItemsInfo at line 1280 of /usr/share/koha/lib/C4/Items.pm, avg 2.11ms/call # once (90µs+1.58ms) by C4::Search::searchResults at line 1657 of /usr/share/koha/lib/C4/Search.pm
sub GetAuthValCode {
997148323µs my ($kohafield,$fwcode) = @_;
998148837µs148141ms my $dbh = C4::Context->dbh;
# spent 141ms making 148 calls to C4::Context::dbh, avg 953µs/call
99914887µs $fwcode='' unless $fwcode;
10001482.68ms29624.0ms my $sth = $dbh->prepare('select authorised_value from marc_subfield_structure where kohafield=? and frameworkcode=?');
# spent 13.1ms making 148 calls to DBI::db::prepare, avg 88µs/call # spent 10.9ms making 148 calls to DBD::mysql::db::prepare, avg 74µs/call
1001148155ms148153ms $sth->execute($kohafield,$fwcode);
# spent 153ms making 148 calls to DBI::st::execute, avg 1.04ms/call
10021483.98ms1482.65ms my ($authvalcode) = $sth->fetchrow_array;
# spent 2.65ms making 148 calls to DBI::st::fetchrow_array, avg 18µs/call
10031486.96ms return $authvalcode;
1004}
1005
1006=head2 GetAuthValCodeFromField
1007
- -
1014sub GetAuthValCodeFromField {
1015 my ($field,$subfield,$fwcode) = @_;
1016 my $dbh = C4::Context->dbh;
1017 $fwcode='' unless $fwcode;
1018 my $sth;
1019 if (defined $subfield) {
1020 $sth = $dbh->prepare('select authorised_value from marc_subfield_structure where tagfield=? and tagsubfield=? and frameworkcode=?');
1021 $sth->execute($field,$subfield,$fwcode);
1022 } else {
1023 $sth = $dbh->prepare('select authorised_value from marc_tag_structure where tagfield=? and frameworkcode=?');
1024 $sth->execute($field,$fwcode);
1025 }
1026 my ($authvalcode) = $sth->fetchrow_array;
1027 return $authvalcode;
1028}
1029
1030=head2 GetAuthorisedValues
1031
- -
1042
# spent 5.58ms (359µs+5.22) within C4::Koha::GetAuthorisedValues which was called 2 times, avg 2.79ms/call: # 2 times (359µs+5.22ms) by Memoize::_memoizer at line 247 of Memoize.pm, avg 2.79ms/call
sub GetAuthorisedValues {
104325µs my ( $category, $selected, $opac ) = @_;
1044215µs220µs my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
# spent 20µs making 2 calls to C4::Context::userenv, avg 10µs/call
104522µs my @results;
1046214µs21.98ms my $dbh = C4::Context->dbh;
# spent 1.98ms making 2 calls to C4::Context::dbh, avg 988µs/call
104723µs my $query = qq{
1048 SELECT *
1049 FROM authorised_values
1050 };
105121µs $query .= qq{
1052 LEFT JOIN authorised_values_branches ON ( id = av_id )
1053 } if $branch_limit;
10542700ns my @where_strings;
10552600ns my @where_args;
105623µs if($category) {
105724µs push @where_strings, "category = ?";
105822µs push @where_args, $category;
1059 }
106021µs if($branch_limit) {
1061 push @where_strings, "( branchcode = ? OR branchcode IS NULL )";
1062 push @where_args, $branch_limit;
1063 }
106429µs if(@where_strings > 0) {
1065 $query .= " WHERE " . join(" AND ", @where_strings);
1066 }
106722µs $query .= " GROUP BY lib ORDER BY category, lib, lib_opac";
1068
1069235µs4369µs my $sth = $dbh->prepare($query);
# spent 198µs making 2 calls to DBI::db::prepare, avg 99µs/call # spent 171µs making 2 calls to DBD::mysql::db::prepare, avg 85µs/call
1070
107122.44ms22.41ms $sth->execute( @where_args );
# spent 2.41ms making 2 calls to DBI::st::execute, avg 1.21ms/call
10722644µs84762µs while (my $data=$sth->fetchrow_hashref) {
# spent 548µs making 28 calls to DBI::st::fetchrow_hashref, avg 20µs/call # spent 109µs making 28 calls to DBI::st::fetch, avg 4µs/call # spent 105µs making 28 calls to DBI::common::FETCH, avg 4µs/call
10732627µs if ( defined $selected and $selected eq $data->{authorised_value} ) {
1074 $data->{selected} = 1;
1075 }
1076 else {
10772619µs $data->{selected} = 0;
1078 }
1079
10802611µs if ($opac && $data->{lib_opac}) {
1081 $data->{lib} = $data->{lib_opac};
1082 }
10832614µs push @results, $data;
1084 }
1085218µs28µs $sth->finish;
# spent 8µs making 2 calls to DBI::st::finish, avg 4µs/call
10862110µs return \@results;
1087}
1088
1089=head2 GetAuthorisedValueCategories
1090
- -
1098sub GetAuthorisedValueCategories {
1099 my $dbh = C4::Context->dbh;
1100 my $sth = $dbh->prepare("SELECT DISTINCT category FROM authorised_values ORDER BY category");
1101 $sth->execute;
1102 my @results;
1103 while (defined (my $category = $sth->fetchrow_array) ) {
1104 push @results, $category;
1105 }
1106 return \@results;
1107}
1108
1109=head2 IsAuthorisedValueCategory
1110
- -
1117sub IsAuthorisedValueCategory {
1118 my $category = shift;
1119 my $query = '
1120 SELECT category
1121 FROM authorised_values
1122 WHERE BINARY category=?
1123 LIMIT 1
1124 ';
1125 my $sth = C4::Context->dbh->prepare($query);
1126 $sth->execute($category);
1127 $sth->fetchrow ? return 1
1128 : return 0;
1129}
1130
1131=head2 GetAuthorisedValueByCode
1132
- -
1140sub GetAuthorisedValueByCode {
1141 my ( $category, $authvalcode, $opac ) = @_;
1142
1143 my $field = $opac ? 'lib_opac' : 'lib';
1144 my $dbh = C4::Context->dbh;
1145 my $sth = $dbh->prepare("SELECT $field FROM authorised_values WHERE category=? AND authorised_value =?");
1146 $sth->execute( $category, $authvalcode );
1147 while ( my $data = $sth->fetchrow_hashref ) {
1148 return $data->{ $field };
1149 }
1150}
1151
1152=head2 GetKohaAuthorisedValues
1153
- -
1164
# spent 240ms (8.56+231) within C4::Koha::GetKohaAuthorisedValues which was called 51 times, avg 4.70ms/call: # 25 times (2.68ms+116ms) by C4::XSLT::buildKohaItemsNamespace at line 255 of /usr/share/koha/lib/C4/XSLT.pm, avg 4.73ms/call # 25 times (5.71ms+112ms) by C4::XSLT::buildKohaItemsNamespace at line 254 of /usr/share/koha/lib/C4/XSLT.pm, avg 4.70ms/call # once (173µs+3.97ms) by C4::Search::searchResults at line 1654 of /usr/share/koha/lib/C4/Search.pm
sub GetKohaAuthorisedValues {
116551145µs my ($kohafield,$fwcode,$opac) = @_;
11665129µs $fwcode='' unless $fwcode;
11675126µs my %values;
116851271µs5150.0ms my $dbh = C4::Context->dbh;
# spent 50.0ms making 51 calls to C4::Context::dbh, avg 980µs/call
116951381µs204119ms my $avcode = GetAuthValCode($kohafield,$fwcode);
# spent 118ms making 51 calls to C4::Koha::GetAuthValCode, avg 2.32ms/call # spent 693µs making 102 calls to DBI::common::DESTROY, avg 7µs/call # spent 169µs making 51 calls to DBD::_mem::common::DESTROY, avg 3µs/call
11705146µs if ($avcode) {
117151709µs1027.19ms my $sth = $dbh->prepare("select authorised_value, lib, lib_opac from authorised_values where category=? ");
# spent 3.86ms making 51 calls to DBI::db::prepare, avg 76µs/call # spent 3.33ms making 51 calls to DBD::mysql::db::prepare, avg 65µs/call
11725153.9ms5153.3ms $sth->execute($avcode);
# spent 53.3ms making 51 calls to DBI::st::execute, avg 1.04ms/call
11735110.2ms7245.15ms while ( my ($val, $lib, $lib_opac) = $sth->fetchrow_array ) {
# spent 5.15ms making 724 calls to DBI::st::fetchrow_array, avg 7µs/call
1174 $values{$val} = ($opac && $lib_opac) ? $lib_opac : $lib;
1175 }
1176512.41ms return \%values;
1177 } else {
1178 return;
1179 }
1180}
1181
1182=head2 GetKohaAuthorisedValuesFromField
1183
- -
1195sub GetKohaAuthorisedValuesFromField {
1196 my ($field, $subfield, $fwcode,$opac) = @_;
1197 $fwcode='' unless $fwcode;
1198 my %values;
1199 my $dbh = C4::Context->dbh;
1200 my $avcode = GetAuthValCodeFromField($field, $subfield, $fwcode);
1201 if ($avcode) {
1202 my $sth = $dbh->prepare("select authorised_value, lib, lib_opac from authorised_values where category=? ");
1203 $sth->execute($avcode);
1204 while ( my ($val, $lib, $lib_opac) = $sth->fetchrow_array ) {
1205 $values{$val} = ($opac && $lib_opac) ? $lib_opac : $lib;
1206 }
1207 return \%values;
1208 } else {
1209 return;
1210 }
1211}
1212
1213=head2 xml_escape
1214
- -
1221
# spent 2.09ms (1.67+422µs) within C4::Koha::xml_escape which was called 114 times, avg 18µs/call: # 32 times (752µs+243µs) by C4::XSLT::buildKohaItemsNamespace at line 298 of /usr/share/koha/lib/C4/XSLT.pm, avg 31µs/call # 32 times (400µs+78µs) by C4::XSLT::buildKohaItemsNamespace at line 299 of /usr/share/koha/lib/C4/XSLT.pm, avg 15µs/call # 32 times (297µs+61µs) by C4::XSLT::buildKohaItemsNamespace at line 302 of /usr/share/koha/lib/C4/XSLT.pm, avg 11µs/call # 17 times (201µs+36µs) by C4::XSLT::buildKohaItemsNamespace at line 300 of /usr/share/koha/lib/C4/XSLT.pm, avg 14µs/call # once (19µs+3µs) by C4::XSLT::buildKohaItemsNamespace at line 301 of /usr/share/koha/lib/C4/XSLT.pm
sub xml_escape {
1222114109µs my $str = shift;
122311499µs return '' unless defined $str;
1224102504µs102194µs $str =~ s/&/&amp;/g;
# spent 194µs making 102 calls to C4::Koha::CORE:subst, avg 2µs/call
1225102274µs10265µs $str =~ s/</&lt;/g;
# spent 65µs making 102 calls to C4::Koha::CORE:subst, avg 640ns/call
1226102248µs10256µs $str =~ s/>/&gt;/g;
# spent 56µs making 102 calls to C4::Koha::CORE:subst, avg 549ns/call
1227102238µs10253µs $str =~ s/'/&apos;/g;
# spent 53µs making 102 calls to C4::Koha::CORE:subst, avg 519ns/call
1228102239µs10254µs $str =~ s/"/&quot;/g;
# spent 54µs making 102 calls to C4::Koha::CORE:subst, avg 531ns/call
1229102379µs return $str;
1230}
1231
1232=head2 GetKohaAuthorisedValueLib
1233
- -
1242
# spent 314ms (8.52+305) within C4::Koha::GetKohaAuthorisedValueLib which was called 143 times, avg 2.19ms/call: # 32 times (1.85ms+69.3ms) by C4::Items::GetItemsInfo at line 1288 of /usr/share/koha/lib/C4/Items.pm, avg 2.22ms/call # 32 times (1.66ms+69.0ms) by C4::Items::GetItemsInfo at line 1282 of /usr/share/koha/lib/C4/Items.pm, avg 2.21ms/call # 32 times (2.04ms+67.7ms) by C4::Items::GetItemsInfo at line 1281 of /usr/share/koha/lib/C4/Items.pm, avg 2.18ms/call # 32 times (2.10ms+67.4ms) by C4::Items::GetItemsInfo at line 1287 of /usr/share/koha/lib/C4/Items.pm, avg 2.17ms/call # 15 times (867µs+31.8ms) by C4::Items::GetItemsInfo at line 1292 of /usr/share/koha/lib/C4/Items.pm, avg 2.18ms/call
sub GetKohaAuthorisedValueLib {
1243143372µs my ($category,$authorised_value,$opac) = @_;
124414341µs my $value;
1245143737µs143139ms my $dbh = C4::Context->dbh;
# spent 139ms making 143 calls to C4::Context::dbh, avg 971µs/call
12461432.65ms28622.6ms my $sth = $dbh->prepare("select lib, lib_opac from authorised_values where category=? and authorised_value=?");
# spent 12.4ms making 143 calls to DBI::db::prepare, avg 86µs/call # spent 10.3ms making 143 calls to DBD::mysql::db::prepare, avg 72µs/call
1247143148ms143146ms $sth->execute($category,$authorised_value);
# spent 146ms making 143 calls to DBI::st::execute, avg 1.02ms/call
12481437.00ms4298.89ms my $data = $sth->fetchrow_hashref;
# spent 6.05ms making 143 calls to DBI::st::fetchrow_hashref, avg 42µs/call # spent 1.58ms making 143 calls to DBI::common::FETCH, avg 11µs/call # spent 1.25ms making 143 calls to DBI::st::fetch, avg 9µs/call
1249143305µs $value = ($opac && $$data{'lib_opac'}) ? $$data{'lib_opac'} : $$data{'lib'};
12501435.24ms return $value;
1251}
1252
1253=head2 AddAuthorisedValue
1254
- -
1261sub AddAuthorisedValue {
1262 my ($category, $authorised_value, $lib, $lib_opac, $imageurl) = @_;
1263
1264 my $dbh = C4::Context->dbh;
1265 my $query = qq{
1266 INSERT INTO authorised_values (category, authorised_value, lib, lib_opac, imageurl)
1267 VALUES (?,?,?,?,?)
1268 };
1269 my $sth = $dbh->prepare($query);
1270 $sth->execute($category, $authorised_value, $lib, $lib_opac, $imageurl);
1271}
1272
1273=head2 display_marc_indicators
1274
- -
1284sub display_marc_indicators {
1285 my $field = shift;
1286 my $indicators = '';
1287 if ($field->tag() >= 10) {
1288 $indicators = $field->indicator(1) . $field->indicator(2);
1289 $indicators =~ s/ /#/g;
1290 }
1291 return $indicators;
1292}
1293
1294
# spent 9.00ms (739µs+8.26) within C4::Koha::GetNormalizedUPC which was called 25 times, avg 360µs/call: # 25 times (739µs+8.26ms) by C4::Search::searchResults at line 1717 of /usr/share/koha/lib/C4/Search.pm, avg 360µs/call
sub GetNormalizedUPC {
12952543µs my ($record,$marcflavour) = @_;
12962536µs my (@fields,$upc);
1297
129825133µs if ($marcflavour eq 'UNIMARC') {
1299 @fields = $record->field('072');
1300 foreach my $field (@fields) {
1301 my $upc = _normalize_match_point($field->subfield('a'));
1302 if ($upc ne '') {
1303 return $upc;
1304 }
1305 }
1306
1307 }
1308 else { # assume marc21 if not unimarc
130925196µs257.73ms @fields = $record->field('024');
# spent 7.73ms making 25 calls to MARC::Record::field, avg 309µs/call
13102555µs foreach my $field (@fields) {
13111052µs10157µs my $indicator = $field->indicator(1);
# spent 157µs making 10 calls to MARC::Field::indicator, avg 16µs/call
13121073µs20375µs my $upc = _normalize_match_point($field->subfield('a'));
# spent 205µs making 10 calls to C4::Koha::_normalize_match_point, avg 21µs/call # spent 170µs making 10 calls to MARC::Field::subfield, avg 17µs/call
13131061µs if ($indicator == 1 and $upc ne '') {
1314 return $upc;
1315 }
1316 }
1317 }
1318}
1319
1320# Normalizes and returns the first valid ISBN found in the record
1321# ISBN13 are converted into ISBN10. This is required to get some book cover images.
1322
# spent 6.88ms (373µs+6.51) within C4::Koha::GetNormalizedISBN which was called 25 times, avg 275µs/call: # 25 times (373µs+6.51ms) by C4::Search::searchResults at line 1720 of /usr/share/koha/lib/C4/Search.pm, avg 275µs/call
sub GetNormalizedISBN {
13232539µs my ($isbn,$record,$marcflavour) = @_;
13242510µs my @fields;
13252517µs if ($isbn) {
1326 # Koha attempts to store multiple ISBNs in biblioitems.isbn, separated by " | "
1327 # anything after " | " should be removed, along with the delimiter
1328 $isbn =~ s/(.*)( \| )(.*)/$1/;
1329 return _isbn_cleanup($isbn);
1330 }
13312511µs return unless $record;
1332
133325187µs if ($marcflavour eq 'UNIMARC') {
1334 @fields = $record->field('010');
1335 foreach my $field (@fields) {
1336 my $isbn = $field->subfield('a');
1337 if ($isbn) {
1338 return _isbn_cleanup($isbn);
1339 } else {
1340 return;
1341 }
1342 }
1343 }
1344 else { # assume marc21 if not unimarc
13452585µs256.51ms @fields = $record->field('020');
# spent 6.51ms making 25 calls to MARC::Record::field, avg 260µs/call
13462546µs foreach my $field (@fields) {
1347 $isbn = $field->subfield('a');
1348 if ($isbn) {
1349 return _isbn_cleanup($isbn);
1350 } else {
1351 return;
1352 }
1353 }
1354 }
1355}
1356
1357
# spent 7.68ms (591µs+7.09) within C4::Koha::GetNormalizedEAN which was called 25 times, avg 307µs/call: # 25 times (591µs+7.09ms) by C4::Search::searchResults at line 1718 of /usr/share/koha/lib/C4/Search.pm, avg 307µs/call
sub GetNormalizedEAN {
13582544µs my ($record,$marcflavour) = @_;
13592521µs my (@fields,$ean);
1360
136125125µs if ($marcflavour eq 'UNIMARC') {
1362 @fields = $record->field('073');
1363 foreach my $field (@fields) {
1364 $ean = _normalize_match_point($field->subfield('a'));
1365 if ($ean ne '') {
1366 return $ean;
1367 }
1368 }
1369 }
1370 else { # assume marc21 if not unimarc
13712591µs256.75ms @fields = $record->field('024');
# spent 6.75ms making 25 calls to MARC::Record::field, avg 270µs/call
13722544µs foreach my $field (@fields) {
13731035µs1085µs my $indicator = $field->indicator(1);
# spent 85µs making 10 calls to MARC::Field::indicator, avg 9µs/call
13741052µs20254µs $ean = _normalize_match_point($field->subfield('a'));
# spent 128µs making 10 calls to C4::Koha::_normalize_match_point, avg 13µs/call # spent 126µs making 10 calls to MARC::Field::subfield, avg 13µs/call
13751034µs if ($indicator == 3 and $ean ne '') {
1376 return $ean;
1377 }
1378 }
1379 }
1380}
1381
# spent 7.58ms (582µs+7.00) within C4::Koha::GetNormalizedOCLCNumber which was called 25 times, avg 303µs/call: # 25 times (582µs+7.00ms) by C4::Search::searchResults at line 1719 of /usr/share/koha/lib/C4/Search.pm, avg 303µs/call
sub GetNormalizedOCLCNumber {
13822540µs my ($record,$marcflavour) = @_;
13832527µs my (@fields,$oclc);
1384
13852530µs if ($marcflavour eq 'UNIMARC') {
1386 # TODO: add UNIMARC fields
1387 }
1388 else { # assume marc21 if not unimarc
13892596µs256.45ms @fields = $record->field('035');
# spent 6.45ms making 25 calls to MARC::Record::field, avg 258µs/call
13902533µs foreach my $field (@fields) {
139125100µs25508µs $oclc = $field->subfield('a');
# spent 508µs making 25 calls to MARC::Field::subfield, avg 20µs/call
139225127µs2542µs if ($oclc =~ /OCoLC/) {
# spent 42µs making 25 calls to C4::Koha::CORE:match, avg 2µs/call
1393 $oclc =~ s/\(OCoLC\)//;
1394 return $oclc;
1395 } else {
13962599µs return;
1397 }
1398 }
1399 }
1400}
1401
1402=head2 GetDailyQuote($opts)
1403
- -
1423# This is definitely a candidate for some sort of caching once we finally settle caching/persistence issues...
1424# at least for default option
1425
1426sub GetDailyQuote {
1427 my %opts = @_;
1428 my $dbh = C4::Context->dbh;
1429 my $query = '';
1430 my $sth = undef;
1431 my $quote = undef;
1432 if ($opts{'id'}) {
1433 $query = 'SELECT * FROM quotes WHERE id = ?';
1434 $sth = $dbh->prepare($query);
1435 $sth->execute($opts{'id'});
1436 $quote = $sth->fetchrow_hashref();
1437 }
1438 elsif ($opts{'random'}) {
1439 # Fall through... we also return a random quote as a catch-all if all else fails
1440 }
1441 else {
1442 $query = 'SELECT * FROM quotes WHERE timestamp LIKE CONCAT(CURRENT_DATE,\'%\') ORDER BY timestamp DESC LIMIT 0,1';
1443 $sth = $dbh->prepare($query);
1444 $sth->execute();
1445 $quote = $sth->fetchrow_hashref();
1446 }
1447 unless ($quote) { # if there are not matches, choose a random quote
1448 # get a list of all available quote ids
1449 $sth = C4::Context->dbh->prepare('SELECT count(*) FROM quotes;');
1450 $sth->execute;
1451 my $range = ($sth->fetchrow_array)[0];
1452 if ($range > 1) {
1453 # chose a random id within that range if there is more than one quote
1454 my $id = int(rand($range));
1455 # grab it
1456 $query = 'SELECT * FROM quotes WHERE id = ?;';
1457 $sth = C4::Context->dbh->prepare($query);
1458 $sth->execute($id);
1459 }
1460 else {
1461 $query = 'SELECT * FROM quotes;';
1462 $sth = C4::Context->dbh->prepare($query);
1463 $sth->execute();
1464 }
1465 $quote = $sth->fetchrow_hashref();
1466 # update the timestamp for that quote
1467 $query = 'UPDATE quotes SET timestamp = ? WHERE id = ?';
1468 $sth = C4::Context->dbh->prepare($query);
1469 $sth->execute(DateTime::Format::MySQL->format_datetime(DateTime->now), $quote->{'id'});
1470 }
1471 return $quote;
1472}
1473
1474
# spent 333µs (232+101) within C4::Koha::_normalize_match_point which was called 20 times, avg 17µs/call: # 10 times (148µs+57µs) by C4::Koha::GetNormalizedUPC at line 1312, avg 21µs/call # 10 times (84µs+44µs) by C4::Koha::GetNormalizedEAN at line 1374, avg 13µs/call
sub _normalize_match_point {
14752017µs my $match_point = shift;
147620168µs2083µs (my $normalized_match_point) = $match_point =~ /([\d-]*[X]*)/;
# spent 83µs making 20 calls to C4::Koha::CORE:match, avg 4µs/call
14772082µs2018µs $normalized_match_point =~ s/-//g;
# spent 18µs making 20 calls to C4::Koha::CORE:subst, avg 880ns/call
1478
14792080µs return $normalized_match_point;
1480}
1481
1482sub _isbn_cleanup {
1483 require Business::ISBN;
1484 my $isbn = Business::ISBN->new( $_[0] );
1485 if ( $isbn ) {
1486 $isbn = $isbn->as_isbn10 if $isbn->type eq 'ISBN13';
1487 if (defined $isbn) {
1488 return $isbn->as_string([]);
1489 }
1490 }
1491 return;
1492}
1493
149416µs1;
1495
1496__END__
 
# spent 125µs within C4::Koha::CORE:match which was called 45 times, avg 3µs/call: # 25 times (42µs+0s) by C4::Koha::GetNormalizedOCLCNumber at line 1392, avg 2µs/call # 20 times (83µs+0s) by C4::Koha::_normalize_match_point at line 1476, avg 4µs/call
sub C4::Koha::CORE:match; # opcode
# spent 440µs within C4::Koha::CORE:subst which was called 530 times, avg 830ns/call: # 102 times (194µs+0s) by C4::Koha::xml_escape at line 1224, avg 2µs/call # 102 times (65µs+0s) by C4::Koha::xml_escape at line 1225, avg 640ns/call # 102 times (56µs+0s) by C4::Koha::xml_escape at line 1226, avg 549ns/call # 102 times (54µs+0s) by C4::Koha::xml_escape at line 1228, avg 531ns/call # 102 times (53µs+0s) by C4::Koha::xml_escape at line 1227, avg 519ns/call # 20 times (18µs+0s) by C4::Koha::_normalize_match_point at line 1477, avg 880ns/call
sub C4::Koha::CORE:subst; # opcode