From c4b9f379f3daf15f90f19a3d747f1c885da35537 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc=20V=C3=A9ron?= Date: Sat, 7 Mar 2015 08:38:04 +0100 Subject: [PATCH] Bug 12072: Add system preference for New dateformat dd.mm.yyyy (dmydot) Note: This feature depends on Bug 14870 'Delete C4/Dates from system' System preferences: To test: - apply the patch - run updatedatabase.pl - go to Admin > Sysprefs > I18N, change dateformat to dd.mm.yyyy, save - verify that the value was saved Date handling: - go through the staff client and verify that dates behave as expected. - go through Opac and verify that dates behave as expected. The Bugs where Bug 14870 depends on contain test plans that can be used for the overall testing. Note: Make sure that you reset the dateformat to the former value after testing. Signed-off-by: Josef Moravec Works as expected Amended to apply on top of Bug 15166 11.11.2015/mv Signed-off-by: Katrin Fischer Signed-off-by: Tomas Cohen Arazi --- Koha/DateUtils.pm | 16 ++++++++++++++++ .../bug_12072_update_syspref_dateformat.sql | 1 + installer/data/mysql/sysprefs.sql | 2 +- .../en/modules/admin/preferences/i18n_l10n.pref | 1 + t/DateUtils.t | 6 +++++- 5 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_12072_update_syspref_dateformat.sql diff --git a/Koha/DateUtils.pm b/Koha/DateUtils.pm index e2e8cfc9cd..65afaea36e 100644 --- a/Koha/DateUtils.pm +++ b/Koha/DateUtils.pm @@ -85,6 +85,16 @@ sub dt_from_string { (?\d{4}) |xms; } + elsif ( $date_format eq 'dmydot' ) { + # dmydot format is "dd.mm.yyyy[ hh:mm:ss]" + $regex = qr| + (?\d{2}) + . + (?\d{2}) + . + (?\d{4}) + |xms; + } elsif ( $date_format eq 'us' ) { # us format is "mm/dd/yyyy[ hh:mm:ss]" $regex = qr| @@ -231,6 +241,12 @@ sub output_pref { ? $dt->strftime("%d/%m/%Y") : $dt->strftime("%d/%m/%Y $time"); } + elsif ( $pref =~ m/^dmydot/ ) { + $date = $dateonly + ? $dt->strftime("%d.%m.%Y") + : $dt->strftime("%d.%m.%Y $time"); + } + elsif ( $pref =~ m/^us/ ) { $date = $dateonly ? $dt->strftime("%m/%d/%Y") diff --git a/installer/data/mysql/atomicupdate/bug_12072_update_syspref_dateformat.sql b/installer/data/mysql/atomicupdate/bug_12072_update_syspref_dateformat.sql new file mode 100644 index 0000000000..b5f96c9b0f --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_12072_update_syspref_dateformat.sql @@ -0,0 +1 @@ +UPDATE systempreferences SET options = 'metric|us|iso|dmydot', explanation = 'Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd, DMY separated by dots dd.mm.yyyy)' WHERE variable = 'dateformat' diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 60b776acb5..484b3cda70 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -99,7 +99,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('ConsiderOnSiteCheckoutsAsNormalCheckouts','1',NULL,'Consider on-site checkouts as normal checkouts','YesNo'), ('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo'), ('CurrencyFormat','US','US|FR','Determines the display format of currencies. eg: \'36000\' is displayed as \'360 000,00\' in \'FR\' or \'360,000.00\' in \'US\'.','Choice'), -('dateformat','us','metric|us|iso','Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd)','Choice'), +('dateformat','us','metric|us|iso|dmydot','Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd, dmydot dd.mm.yyyy)','Choice'), ('DebugLevel','2','0|1|2','Define the level of debugging information sent to the browser when errors are encountered (set to 0 in production). 0=none, 1=some, 2=most','Choice'), ('decreaseLoanHighHolds',NULL,'','Decreases the loan period for items with number of holds above the threshold specified in decreaseLoanHighHoldsValue','YesNo'), ('decreaseLoanHighHoldsDuration',NULL,'','Specifies a number of days that a loan is reduced to when used in conjunction with decreaseLoanHighHolds','Integer'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref index 6bf97939f8..89e4436e73 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/i18n_l10n.pref @@ -6,6 +6,7 @@ I18N/L10N: choices: us: mm/dd/yyyy metric: dd/mm/yyyy + dmydot: dd.mm.yyyy iso: yyyy-mm-dd - . Note: Do not change this preference on a production server with overdue items that are accruing fines. Doing so will result in duplicate fines! - diff --git a/t/DateUtils.t b/t/DateUtils.t index 92f87771aa..b82ed021e4 100755 --- a/t/DateUtils.t +++ b/t/DateUtils.t @@ -3,7 +3,9 @@ use DateTime; use DateTime::TimeZone; use C4::Context; -use Test::More tests => 59; + +use Test::More tests => 60; + use Test::MockModule; use Test::Warn; use Time::HiRes qw/ gettimeofday /; @@ -195,6 +197,8 @@ $dt = eval { dt_from_string( '31/01/2015', 'us' ); }; is( ref($dt), '', '31/01/2015 is not a correct date in us format' ); $dt = dt_from_string( '01/01/2015', 'us' ); is( ref($dt), 'DateTime', '01/01/2015 is a correct date in us format' ); +$dt = dt_from_string( '01.01.2015', 'dmydot' ); +is( ref($dt), 'DateTime', '01.01.2015 is a correct date in dmydot format' ); # default value for hh and mm is 00:00 -- 2.39.5