From 6c214f3d016411d00443d9aef9e038217394c9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?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. --- Koha/DateUtils.pm | 16 ++++++++++++++++ .../bug_12072_update_syspref_dateformat.sql | 2 ++ installer/data/mysql/sysprefs.sql | 2 +- .../prog/en/modules/admin/preferences/i18n_l10n.pref | 1 + t/DateUtils.t | 4 +++- 5 files changed, 23 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 7a98120..4f0cbde 100644 --- a/Koha/DateUtils.pm +++ b/Koha/DateUtils.pm @@ -86,6 +86,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| @@ -224,6 +234,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 0000000..486a674 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_12072_update_syspref_dateformat.sql @@ -0,0 +1,2 @@ +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 2e4a019..3e3e28b 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 6bf9793..89e4436 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 4f7c773..064b0c1 100755 --- a/t/DateUtils.t +++ b/t/DateUtils.t @@ -3,7 +3,7 @@ use DateTime; use DateTime::TimeZone; use C4::Context; -use Test::More tests => 55; +use Test::More tests => 56; use Test::MockModule; use Time::HiRes qw/ gettimeofday /; use t::lib::Mocks; @@ -196,6 +196,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 -- 1.7.10.4