Bug 17835: Add an additional LEFT JOIN condition using DBIx::Class
The previous query was wrong. If an item type did not contain the translation in the interface's language, the ->search_with_localization did not return it at all. What we need is definitely to add a second condition on the join. For reference: http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Relationship/Base.pm#condition https://blog.afoolishmanifesto.com/posts/dbix-class-parameterized-relationships/ That sounds hacky but seems to be the DBIx::Class path to follow. Bug 17835: follow-up Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Lari Taskula <lari.taskula@jns.fi> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
parent
72dd80fae9
commit
cb0e33f046
|
|
@ -46,11 +46,15 @@ sub search_with_localization {
|
|||
my ( $self, $params, $attributes ) = @_;
|
||||
|
||||
my $language = C4::Languages::getlanguage();
|
||||
$params->{'-or'} = { 'localization.lang' => [ $language, undef ] };
|
||||
$attributes->{order_by} = 'localization.translation' unless exists $attributes->{order_by};
|
||||
$Koha::Schema::Result::Itemtype::LANGUAGE = $language;
|
||||
$attributes->{order_by} = 'translated_description' unless exists $attributes->{order_by};
|
||||
$attributes->{join} = 'localization';
|
||||
$attributes->{'+select'} = [ { coalesce => [qw( localization.translation me.description )] } ];
|
||||
$attributes->{'+as'} = ['translated_description'];
|
||||
$attributes->{'+select'} = [
|
||||
{
|
||||
coalesce => [qw( localization.translation me.description )],
|
||||
-as => 'translated_description'
|
||||
}
|
||||
];
|
||||
$self->SUPER::search( $params, $attributes );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -199,11 +199,20 @@ __PACKAGE__->has_many(
|
|||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:1GiikODklVISOurHX37qjA
|
||||
|
||||
# Use the ItemtypeLocalization view to create the join on localization
|
||||
our $LANGUAGE;
|
||||
__PACKAGE__->has_many(
|
||||
"localization",
|
||||
"Koha::Schema::Result::ItemtypeLocalization",
|
||||
{ "foreign.code" => "self.itemtype" },
|
||||
{ cascade_copy => 0, cascade_delete => 0 },
|
||||
"localization" => "Koha::Schema::Result::ItemtypeLocalization",
|
||||
sub {
|
||||
my $args = shift;
|
||||
|
||||
die "no lang specified!" unless $LANGUAGE;
|
||||
|
||||
return ({
|
||||
"$args->{self_alias}.itemtype" => { -ident => "$args->{foreign_alias}.code" },
|
||||
"$args->{foreign_alias}.lang" => $LANGUAGE,
|
||||
});
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -223,8 +223,8 @@
|
|||
<td><input type="radio" name="Column" value="items.itype" /></td>
|
||||
<td><select name="filter_items.itype" id="itype">
|
||||
<option value=""> </option>
|
||||
[% FOREACH itypeloo IN itemtypeloop %]
|
||||
[% IF ( itypeloo.selected ) %]<option value="[% itypeloo.code %]" selected="selected">[% itypeloo.description %]</option>[% ELSE %]<option value="[% itypeloo.code %]">[% itypeloo.description %]</option>[% END %]
|
||||
[% FOREACH itemtype IN itemtypes %]
|
||||
<option value="[% itemtype.itemtype %]">[% itemtype.translated_description %]</option>
|
||||
[% END %]
|
||||
</select>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ use CGI qw ( -utf8 );
|
|||
use C4::Auth; # get_template_and_user
|
||||
use C4::Output;
|
||||
use C4::Suggestions;
|
||||
use C4::Koha;
|
||||
use C4::Budgets;
|
||||
use C4::Search;
|
||||
use C4::Members;
|
||||
|
|
|
|||
|
|
@ -57,6 +57,18 @@ Koha::ItemType->new(
|
|||
}
|
||||
)->store;
|
||||
|
||||
Koha::ItemType->new(
|
||||
{
|
||||
itemtype => 'type3',
|
||||
description => 'description',
|
||||
rentalcharge => '0.00',
|
||||
imageurl => 'imageurl',
|
||||
summary => 'summary',
|
||||
checkinmsg => 'checkinmsg',
|
||||
checkinmsgtype => 'checkinmsgtype',
|
||||
}
|
||||
)->store;
|
||||
|
||||
Koha::Localization->new(
|
||||
{
|
||||
entity => 'itemtypes',
|
||||
|
|
@ -103,7 +115,7 @@ is( $type->checkinmsg, 'checkinmsg', 'checkinmsg' );
|
|||
is( $type->checkinmsgtype, 'checkinmsgtype', 'checkinmsgtype' );
|
||||
|
||||
my $itemtypes = Koha::ItemTypes->search_with_localization;
|
||||
is( $itemtypes->count, 2, 'There are 2 item types' );
|
||||
is( $itemtypes->count, 3, 'There are 3 item types' );
|
||||
my $first_itemtype = $itemtypes->next;
|
||||
is(
|
||||
$first_itemtype->translated_description,
|
||||
|
|
|
|||
Loading…
Reference in New Issue