Koha/svc/localization
Jonathan Druart e706cd18f0 Bug 15477: (follow-up) Bug 14100: Better errors handling
On bug 14100, the patch "Better errors handling" introduced an ...
error.
The user always get "An error occurred when updating this translation"
although it has been updated in DB.

Test plan:
Edit translations for an item type: you should not get an error when
everything went fine.

Tested on top of 15487, error message does no longer appear.
Signed-off-by: Marc Véron <veron@veron.ch>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com
2016-01-12 16:13:41 +00:00

104 lines
3.4 KiB
Perl
Executable file

#!/usr/bin/perl
use Modern::Perl;
use Encode qw( encode );
use C4::Service;
use Koha::Localizations;
our ( $query, $response ) = C4::Service->init( parameters => 'parameters_remaining_permissions' );
sub get_translations {
my $rs = Koha::Localizations->search({ entity => $query->param('entity'), code => $query->param('code') });
my @translations;
while ( my $s = $rs->next ) {
push @translations, {
id => $s->localization_id,
entity => $s->entity,
code => $s->code,
lang => $s->lang,
translation => $s->translation,
}
}
$response->param( translations => \@translations );
C4::Service->return_success( $response );
}
sub update_translation {
my $id = $query->param('id');
my $translation = $query->param('translation');
my $lang = $query->param('lang');
my $localization = Koha::Localizations->find( $id );
if ( defined $lang and $localization->lang ne $lang ) {
$localization->lang( $lang )
}
if ( defined $translation and $localization->translation ne $translation ) {
$localization->translation( $translation )
}
my %params;
my $is_changed;
if ( $localization->is_changed ) {
$is_changed = 1;
unless ( Koha::Localizations->search( { entity => $localization->entity, code => $localization->code, lang => $lang, localization_id => { '!=' => $localization->localization_id }, } )->count ) {
$localization->store;
} else {
$params{error} = 1;
$params{error_code} = 'already_exists';
}
}
$response->param(
%params,
id => $localization->localization_id,
entity => $localization->entity,
code => $localization->code,
lang => $localization->lang,
translation => $localization->translation,
is_changed => $is_changed,
);
C4::Service->return_success( $response );
}
sub add_translation {
my $entity = $query->param('entity');
my $code = $query->param('code');
my $lang = $query->param('lang');
my $translation = $query->param('translation');
unless ( Koha::Localizations->search({entity => $entity, code => $code, lang => $lang, })->count ) {
my $localization = Koha::Localization->new(
{
entity => $entity,
code => $code,
lang => $lang,
translation => $translation,
}
);
$localization->store;
$response->param(
id => $localization->localization_id,
entity => $localization->entity,
code => $localization->code,
lang => $localization->lang,
translation => $localization->translation,
);
} else {
$response->param( error => 1, error_code => 'already_exists', );
}
C4::Service->return_success( $response );
}
sub delete_translation {
my $id = $query->param('id');
Koha::Localizations->find($id)->delete;
$response->param( id => $id );
C4::Service->return_success( $response );
}
C4::Service->dispatch(
[ 'GET /', [ 'id' ], \&get_translations ],
[ 'PUT /', [ 'id' ], \&update_translation ],
[ 'POST /', [ 'entity', 'code', 'lang', 'translation' ], \&add_translation ],
[ 'DELETE /', ['id'], \&delete_translation ],
);