Bugzilla – Attachment 44087 Details for
Bug 14100
Add base to make item types, branch names, sysprefs values and authorised values translatable
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 14100: Better errors handling
Bug-14100-Better-errors-handling.patch (text/plain), 12.35 KB, created by
Jonathan Druart
on 2015-10-27 15:18:54 UTC
(
hide
)
Description:
Bug 14100: Better errors handling
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2015-10-27 15:18:54 UTC
Size:
12.35 KB
patch
obsolete
>From 4696ce5a72f5008ac9242cc86b736e0a925bc77e Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Tue, 13 Oct 2015 09:49:55 +0100 >Subject: [PATCH] Bug 14100: Better errors handling > >This patch mainly improves the errors handling. >It's now not possible to add several translations for the same entity-code-lang >combination. > >It also: >- wording: Translate for other languages => into >- fixes encoding issues on add/update (was just display) >- add entity and code to the title of the pop-up window > >Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> > >Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> >--- > .../Bug_14100-add_table_localization.sql | 3 +- > installer/data/mysql/kohastructure.sql | 3 +- > .../prog/en/modules/admin/itemtypes.tt | 2 +- > .../prog/en/modules/admin/localization.tt | 36 +++++++++-- > svc/localization | 75 ++++++++++++---------- > 5 files changed, 76 insertions(+), 43 deletions(-) > >diff --git a/installer/data/mysql/atomicupdate/Bug_14100-add_table_localization.sql b/installer/data/mysql/atomicupdate/Bug_14100-add_table_localization.sql >index 83bdb9d..ebe4b7e 100644 >--- a/installer/data/mysql/atomicupdate/Bug_14100-add_table_localization.sql >+++ b/installer/data/mysql/atomicupdate/Bug_14100-add_table_localization.sql >@@ -4,5 +4,6 @@ CREATE TABLE `localization` ( > code varchar(64) COLLATE utf8_unicode_ci NOT NULL, > lang varchar(25) COLLATE utf8_unicode_ci NOT NULL, > translation text COLLATE utf8_unicode_ci, >- PRIMARY KEY (localization_id) >+ PRIMARY KEY (localization_id), >+ UNIQUE KEY `entity_code_lang` (`entity`,`code`,`lang`) > ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index 8ad2205..593d96b 100644 >--- a/installer/data/mysql/kohastructure.sql >+++ b/installer/data/mysql/kohastructure.sql >@@ -3574,7 +3574,8 @@ CREATE TABLE `localization` ( > code varchar(64) COLLATE utf8_unicode_ci NOT NULL, > lang varchar(25) COLLATE utf8_unicode_ci NOT NULL, --could be a foreign key > translation text COLLATE utf8_unicode_ci, >- PRIMARY KEY (localization_id) >+ PRIMARY KEY (localization_id), >+ UNIQUE KEY `entity_code_lang` (`entity`,`code`,`lang`) > ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; > > /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >index 11d5cff..6b2ab05 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >@@ -126,7 +126,7 @@ Item types administration > [% END %] > <li> > <label for="description" class="required">Description: </label><input type="text" id="description" name="description" size="48" value="[% description |html %]" required="required" /> <span class="required">Required</span> >- <a href="/cgi-bin/koha/admin/localization.pl?entity=itemtypes&code=[% itemtype %]" title="Translate" rel="gb_page_center[600,500]"><i class="icon-edit"></i> Translate for other languages</a> >+ <a href="/cgi-bin/koha/admin/localization.pl?entity=itemtypes&code=[% itemtype %]" title="Translate item type [% itemtype %]" rel="gb_page_center[600,500]"><i class="icon-edit"></i> Translate into other languages</a> > </li> > <li> > <span class="label">Search category</span> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/localization.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/localization.tt >index ab6ca72..064ef75 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/localization.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/localization.tt >@@ -17,7 +17,11 @@ > message.text("Entity %s (code %s) for lang %s has correctly been updated with '%s'".format(data.entity, data.code, data.lang, data.translation)); > } else if ( type == 'error_on_update' ) { > message = $('<div class="dialog alert"></div>'); >- message.text("An error occurred when updating this translation"); >+ if ( data.error_code == 'already_exists' ) { >+ message.text("A translation already exists for this language."); >+ } else { >+ message.text("An error occurred when updating this translation."); >+ } > } else if ( type == 'success_on_delete' ) { > message = $('<div class="dialog message"></div>'); > message.text("The translation (id %s) has been removed successfully".format(data.id)); >@@ -29,7 +33,11 @@ > message.text("Translation (id %s) has been added successfully".format(data.id)); > } else if ( type == 'error_on_insert' ) { > message = $('<div class="dialog alert"></div>'); >- message.text("An error occurred when adding this translation"); >+ if ( data.error_code == 'already_exists' ) { >+ message.text("A translation already exists for this language."); >+ } else { >+ message.text("An error occurred when adding this translation"); >+ } > } > > $(messages).append(message); >@@ -48,6 +56,8 @@ > if ( data.is_changed ) { > $(cell).css('background-color', '#00FF00'); > show_message({ type: 'success_on_update', data: data }); >+ } else { >+ show_message({ type: 'error_on_update', data: data }); > } > if ( $(cell).hasClass('lang') ) { > $(cell).text(data.lang) >@@ -91,8 +101,16 @@ > > var languages_select = $('<select name="lang"></select>'); > [% FOR language IN languages %] >- var option = $('<option value="[% language.lang %]">[% language.description %]</option>'); >- $(languages_select).append(option); >+ [% FOR sublanguage IN language.sublanguages_loop %] >+ var option; >+ [% IF language.plural %] >+ option = $('<option value="[% sublanguage.rfc4646_subtag %]">[% sublanguage.native_description %] [% sublanguage.region_description %] ([% sublanguage.rfc4646_subtag %])</option>'); >+ $(languages_select).append(option); >+ [% ELSE %] >+ option = $('<option value="[% sublanguage.rfc4646_subtag %]">[% sublanguage.native_description %] ([% sublanguage.rfc4646_subtag %])</option>'); >+ [% END %] >+ $(languages_select).append(option); >+ [% END %] > [% END %] > > $("td.translation").on('focus', function(){ >@@ -149,9 +167,13 @@ > type: 'POST', > url: '/cgi-bin/koha/svc/localization', > success: function (data) { >- // FIXME Should append the delete link >- table.row.add( [ data.id, data.entity, data.code, data.lang, data.translation, "" ] ).draw(); >- show_message({ type: 'success_on_insert', data: data }); >+ if ( data.error ) { >+ show_message({ type: 'error_on_insert', data: data }); >+ } else { >+ // FIXME Should append the delete link >+ table.row.add( [ data.id, data.entity, data.code, data.lang, data.translation, "" ] ).draw(); >+ show_message({ type: 'success_on_insert', data: data }); >+ } > }, > error: function (data) { > show_message({ type: 'error_on_insert', data: data }); >diff --git a/svc/localization b/svc/localization >index ebec0e2..2bf3c69 100755 >--- a/svc/localization >+++ b/svc/localization >@@ -1,6 +1,7 @@ > #!/usr/bin/perl > > use Modern::Perl; >+use Encode qw( encode ); > > use C4::Service; > use Koha::Localizations; >@@ -8,15 +9,15 @@ use Koha::Localizations; > our ( $query, $response ) = C4::Service->init( parameters => 'parameters_remaining_permissions' ); > > sub get_translations { >- my $rs = Koha::Localizations->search({ type => $query->param('type'), code => $query->param('code') }); >+ 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, >- type => $s->type, >- code => $s->code, >- lang => $s->lang, >- translation => $s->translation, >+ id => Encode::encode( 'utf-8', $s->localization_id ), >+ entity => Encode::encode( 'utf-8', $s->entity ), >+ code => Encode::encode( 'utf-8', $s->code ), >+ lang => Encode::encode( 'utf-8', $s->lang ), >+ translation => Encode::encode( 'utf-8', $s->translation ), > } > } > $response->param( translations => \@translations ); >@@ -27,26 +28,30 @@ sub update_translation { > my $id = $query->param('id'); > my $translation = $query->param('translation'); > my $lang = $query->param('lang'); >- my $localization = Koha::Localizations->find( $id ); > >+ 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 $is_changed; >+ my %params; > if ( $localization->is_changed ) { >- $is_changed = 1; >- $localization->store; >+ 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( >- id => $localization->localization_id, >- entity => $localization->entity, >- code => $localization->code, >- lang => $localization->lang, >- translation => $localization->translation, >- is_changed => $is_changed, >+ %params, >+ id => Encode::encode('utf-8', $localization->localization_id), >+ entity => Encode::encode('utf-8', $localization->entity), >+ code => Encode::encode('utf-8', $localization->code), >+ lang => Encode::encode('utf-8', $localization->lang), >+ translation => Encode::encode('utf-8', $localization->translation), > ); > C4::Service->return_success( $response ); > } >@@ -56,24 +61,28 @@ sub add_translation { > my $code = $query->param('code'); > my $lang = $query->param('lang'); > my $translation = $query->param('translation'); >- my $localization = Koha::Localization->new( >- { >- entity => $entity, >- code => $code, >- lang => $lang, >- translation => $translation, >- } >- ); >- $localization->store; >- $localization->localization_id; >- $response->param( >- id => $localization->localization_id, >- entity => $localization->entity, >- code => $localization->code, >- lang => $localization->lang, >- translation => $localization->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 => Encode::encode('utf-8', $localization->localization_id), >+ entity => Encode::encode('utf-8', $localization->entity), >+ code => Encode::encode('utf-8', $localization->code), >+ lang => Encode::encode('utf-8', $localization->lang), >+ translation => Encode::encode('utf-8', $localization->translation), >+ ); >+ >+ } else { >+ $response->param( error => 1, error_code => 'already_exists', ); >+ } > C4::Service->return_success( $response ); > } > >-- >2.1.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 14100
:
38727
|
40917
|
40965
|
41654
|
41659
|
41660
|
42525
|
42526
|
43110
|
43111
|
43365
|
43366
|
43367
|
43368
|
43369
|
43370
|
43394
|
43395
|
43396
|
43577
|
43602
|
43603
|
43604
|
43605
|
43606
|
43613
|
44085
|
44086
| 44087 |
44088
|
44089
|
44090
|
44094
|
44108
|
44109
|
44119
|
44151