From ee5bcdb7f0595556178dda1c4c97ed820b9aac9f Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 19 Aug 2015 10:22:24 +0100 Subject: [PATCH] Bug 14100: (follow-up) Language overlay for item types Display the translated description for item types in the following pages: > admin/smart-rules.pl > catalogue/detail.pl > catalogue/itemsearch.pl > catalogue/moredetail.pl > reports/acquisitions_stats.pl > reports/bor_issues_top.pl > reports/cat_issues_top.pl > reports/catalogue_out.pl > reports/catalogue_stats.pl > reports/issues_avg_stats.pl > reports/issues_stats.pl > reports/itemslost.pl > reports/manager.pl > reports/reserves_stats.pl > suggestion/suggestion.pl > tools/export.pl > Opac: > opac-detail.pl > opac-MARCdetail.pl > opac-search.pl Signed-off-by: Josef Moravec --- C4/Biblio.pm | 2 +- C4/ItemType.pm | 13 +++++++++++-- C4/Items.pm | 10 +++++++++- C4/Koha.pm | 9 +-------- Koha/Template/Plugin/ItemTypes.pm | 2 +- admin/smart-rules.pl | 19 ++++++++++--------- catalogue/itemsearch.pl | 2 +- catalogue/moredetail.pl | 4 ++-- .../prog/en/modules/admin/smart-rules.tt | 8 ++++---- .../intranet-tmpl/prog/en/modules/catalogue/detail.tt | 6 +++--- .../prog/en/modules/reports/acquisitions_stats.tt | 4 ++-- .../prog/en/modules/reports/bor_issues_top.tt | 2 +- .../prog/en/modules/reports/catalogue_stats.tt | 8 +++----- .../prog/en/modules/reports/issues_avg_stats.tt | 4 ++-- .../prog/en/modules/reports/itemtypes.tt | 3 ++- .../prog/en/modules/suggestion/suggestion.tt | 4 ++-- opac/opac-detail.pl | 4 ++-- reports/acquisitions_stats.pl | 15 ++------------- reports/bor_issues_top.pl | 4 ++-- reports/cat_issues_top.pl | 4 ++-- reports/catalogue_out.pl | 4 ++-- reports/catalogue_stats.pl | 6 ++---- reports/issues_avg_stats.pl | 19 ++++--------------- reports/issues_stats.pl | 4 ++-- reports/itemslost.pl | 4 ++-- reports/itemtypes.plugin | 14 +++++++------- reports/reserves_stats.pl | 4 ++-- tools/export.pl | 2 +- 28 files changed, 85 insertions(+), 99 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index d90094e..56581b9 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1637,7 +1637,7 @@ sub GetAuthorisedValueDesc { #---- itemtypes if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "itemtypes" ) { - return getitemtypeinfo($value)->{description}; + return getitemtypeinfo($value)->{translated_description}; } #---- "true" authorized value diff --git a/C4/ItemType.pm b/C4/ItemType.pm index 16b3f8c..27b5aea 100644 --- a/C4/ItemType.pm +++ b/C4/ItemType.pm @@ -21,6 +21,7 @@ package C4::ItemType; use strict; use warnings; use C4::Context; +use C4::Languages; use Encode qw( encode ); our $AUTOLOAD; @@ -78,9 +79,17 @@ sub all { my ($class) = @_; my $dbh = C4::Context->dbh; + my $language = C4::Languages::getlanguage(); my @itypes; - for ( @{$dbh->selectall_arrayref( - "SELECT * FROM itemtypes ORDER BY description", { Slice => {} })} ) + for ( @{$dbh->selectall_arrayref(q| + SELECT *, + COALESCE( localization.translation, itemtypes.description ) AS translated_description + FROM itemtypes + LEFT JOIN localization ON itemtypes.itemtype = localization.code + AND localization.entity = 'itemtypes' + AND localization.lang = ? + ORDER BY description + |, { Slice => {} }, $language)} ) { push @itypes, $class->new($_); } diff --git a/C4/Items.pm b/C4/Items.pm index 087b20d..3d60ecd 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1301,6 +1301,7 @@ sub GetItemsInfo { my ( $biblionumber ) = @_; my $dbh = C4::Context->dbh; # note biblioitems.* must be avoided to prevent large marc and marcxml fields from killing performance. + my $language = C4::Languages::getlanguage(); my $query = " SELECT items.*, biblio.*, @@ -1326,6 +1327,7 @@ sub GetItemsInfo { serial.serialseq, serial.publisheddate, itemtypes.description, + COALESCE( localization.translation, itemtypes.description ) AS translated_description, itemtypes.notforloan as notforloan_per_itemtype, holding.branchurl, holding.branchname, @@ -1344,9 +1346,15 @@ sub GetItemsInfo { LEFT JOIN serial USING (serialid) LEFT JOIN itemtypes ON itemtypes.itemtype = " . (C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype'); + $query .= q| + LEFT JOIN localization ON itemtypes.itemtype = localization.code + AND localization.entity = 'itemtypes' + AND localization.lang = ? + |; + $query .= " WHERE items.biblionumber = ? ORDER BY home.branchname, items.enumchron, LPAD( items.copynumber, 8, '0' ), items.dateaccessioned DESC" ; my $sth = $dbh->prepare($query); - $sth->execute($biblionumber); + $sth->execute($language, $biblionumber); my $i = 0; my @results; my $serial; diff --git a/C4/Koha.pm b/C4/Koha.pm index 8a573c0..186e0a7 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -194,14 +194,7 @@ build a HTML select with the following code : sub GetSupportList{ my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes"); if (!$advanced_search_types or $advanced_search_types =~ /itemtypes/) { - my $query = qq| - SELECT * - FROM itemtypes - order by description - |; - my $sth = C4::Context->dbh->prepare($query); - $sth->execute; - return $sth->fetchall_arrayref({}); + return GetItemTypes( style => 'array' ); } else { my $advsearchtypes = GetAuthorisedValues($advanced_search_types); my @results= map {{itemtype=>$$_{authorised_value},description=>$$_{lib},imageurl=>$$_{imageurl}}} @$advsearchtypes; diff --git a/Koha/Template/Plugin/ItemTypes.pm b/Koha/Template/Plugin/ItemTypes.pm index 0f16601..b7dee06 100644 --- a/Koha/Template/Plugin/ItemTypes.pm +++ b/Koha/Template/Plugin/ItemTypes.pm @@ -27,7 +27,7 @@ use C4::Koha; sub GetDescription { my ( $self, $itemtype ) = @_; - my $itemtype = C4::Koha::getitemtypeinfo( $itemtype ); + $itemtype = C4::Koha::getitemtypeinfo( $itemtype ); return $itemtype->{translated_description}; } diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl index 9ef6ef6..c312a36 100755 --- a/admin/smart-rules.pl +++ b/admin/smart-rules.pl @@ -46,6 +46,7 @@ my ($template, $loggedinuser, $cookie) my $type=$input->param('type'); my $branch = $input->param('branch') || ( C4::Branch::onlymine() ? ( C4::Branch::mybranch() || '*' ) : '*' ); my $op = $input->param('op') || q{}; +my $language = C4::Languages::getlanguage(); if ($op eq 'delete') { my $itemtype = $input->param('itemtype'); @@ -386,25 +387,25 @@ while (my $data=$sth->fetchrow_hashref){ } $sth->finish; -$sth=$dbh->prepare("SELECT description,itemtype FROM itemtypes ORDER BY description"); -$sth->execute; -# $i=0; my @row_loop; -my @itemtypes; -while (my $row=$sth->fetchrow_hashref){ - push @itemtypes,$row; -} +my @itemtypes = @{ GetItemTypes( style => 'array' ) }; my $sth2 = $dbh->prepare(" - SELECT issuingrules.*, itemtypes.description AS humanitemtype, categories.description AS humancategorycode + SELECT issuingrules.*, + itemtypes.description AS humanitemtype, + categories.description AS humancategorycode, + COALESCE( localization.translation, itemtypes.description ) AS translated_description FROM issuingrules LEFT JOIN itemtypes ON (itemtypes.itemtype = issuingrules.itemtype) LEFT JOIN categories ON (categories.categorycode = issuingrules.categorycode) + LEFT JOIN localization ON issuingrules.itemtype = localization.code + AND localization.entity = 'itemtypes' + AND localization.lang = ? WHERE issuingrules.branchcode = ? "); -$sth2->execute($branch); +$sth2->execute($language, $branch); while (my $row = $sth2->fetchrow_hashref) { $row->{'current_branch'} ||= $row->{'branchcode'}; diff --git a/catalogue/itemsearch.pl b/catalogue/itemsearch.pl index ed1a932..1735548 100755 --- a/catalogue/itemsearch.pl +++ b/catalogue/itemsearch.pl @@ -258,7 +258,7 @@ if ($format eq 'html') { my @itemtypes = C4::ItemType->all(); foreach my $itemtype (@itemtypes) { $itemtype->{value} = $itemtype->{itemtype}; - $itemtype->{label} = $itemtype->{description}; + $itemtype->{label} = $itemtype->{translated_description}; } my $ccode_avcode = GetAuthValCode('items.ccode') || 'CCODE'; my $ccodes = GetAuthorisedValues($ccode_avcode); diff --git a/catalogue/moredetail.pl b/catalogue/moredetail.pl index 3736c13..70378d0 100755 --- a/catalogue/moredetail.pl +++ b/catalogue/moredetail.pl @@ -127,7 +127,7 @@ my $ccodes= GetKohaAuthorisedValues('items.ccode',$fw); my $copynumbers = GetKohaAuthorisedValues('items.copynumber',$fw); my $itemtypes = GetItemTypes; -$data->{'itemtypename'} = $itemtypes->{$data->{'itemtype'}}->{'description'}; +$data->{'itemtypename'} = $itemtypes->{$data->{'itemtype'}}->{'translated_description'}; $data->{'rentalcharge'} = sprintf( "%.2f", $data->{'rentalcharge'} ); foreach ( keys %{$data} ) { $template->param( "$_" => defined $data->{$_} ? $data->{$_} : '' ); @@ -138,7 +138,7 @@ foreach my $item (@items){ $item->{itemlostloop}= GetAuthorisedValues(GetAuthValCode('items.itemlost',$fw),$item->{itemlost}) if GetAuthValCode('items.itemlost',$fw); $item->{itemdamagedloop}= GetAuthorisedValues(GetAuthValCode('items.damaged',$fw),$item->{damaged}) if GetAuthValCode('items.damaged',$fw); $item->{'collection'} = $ccodes->{ $item->{ccode} } if ($ccodes); - $item->{'itype'} = $itemtypes->{ $item->{'itype'} }->{'description'}; + $item->{'itype'} = $itemtypes->{ $item->{'itype'} }->{'translated_description'}; $item->{'replacementprice'} = sprintf( "%.2f", $item->{'replacementprice'} ); if ( defined $item->{'copynumber'} ) { $item->{'displaycopy'} = 1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt index 84ffcd8..2a28575 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt @@ -174,7 +174,7 @@ for="tobranch">Clone these rules to: Clone these rules to: [% FOREACH itemtypeloo IN itemtypeloop %] - + [% END %] @@ -501,7 +501,7 @@ for="tobranch">Clone these rules to: Clone these rules to: [% FOREACH itemtypeloo IN itemtypeloop %] - + [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt index 41730f5..2436ff8 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -401,7 +401,7 @@ function verify_images() { [% FOREACH subtitl IN subtitle %]

[% subtitl.subfield %]

[% END %] - [% UNLESS ( item_level_itypes ) %][% description %][% END %] + [% UNLESS ( item_level_itypes ) %][% translated_description %][% END %] [% IF ( unititle ) %]

[% unititle |html %]

[% END %] [% IF ( author ) %]

By [% author %]

[% END %]