Koha/koha-tmpl/opac-tmpl/bootstrap/en/includes/calendar.inc
Owen Leonard 50fb8ce0f5 Bug 30706: Fix space in check for dateformat preference
This patch fixes the calendar.inc includes in both staff and OPAC in
order to remove a typo: An extra space in the check for the "dateformat"
system preference.

The result of this error is that changes to the dateformat system
preference will not be correctly applied to Koha without a restart.

To reproduce the problem start the process of creating a new patron.

 - In the date of birth field, select a date. The format of the date
   inserted should match your current dateformat system preference.
 - Go to Administration -> System preferences and update dateformat to
   something different.
 - Go back to the patron creation form (refresh it if necessary).
 - The hint under the Date of birth field will match your updated system
   preference, but when you pick a date using the calendar widget it
   will still be formatted according to the old value of dateformat.

To test the fix, apply the patch and run through the same steps above.
A change the dateformat preference should be immediately reflected in
the functionality of the calendar widget.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
2022-05-09 10:02:35 -10:00

134 lines
5.3 KiB
PHP

[% USE Asset %]
[% USE Koha %]
[% USE raw %]
<script>
var flatpickr_weekdays = {
shorthand: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
longhand: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]
};
var flatpickr_months = {
shorthand: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
longhand: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
};
var debug = "[% debug | html %]";
var dateformat_pref = "[% Koha.Preference('dateformat') | html %]";
var sentmsg = 0;
if (debug > 1) {alert("dateformat: " + dateformat_pref + "\ndebug is on (level " + debug + ")");}
var calendarFirstDayOfWeek = '[% Koha.Preference('CalendarFirstDayOfWeek') | html %]';
var flatpickr_timeformat_string = [% IF Koha.Preference('TimeFormat') == '12hr' %]"G:i K"[% ELSE %]"H:i"[% END %];
var flatpickr_timeformat = [% IF Koha.Preference('TimeFormat') == '12hr' %]false[% ELSE %]true[% END %];
var flatpickr_dateformat_string = "";
switch ( dateformat_pref ){
case "us":
flatpickr_dateformat_string = "m/d/Y";
break;
case "metric":
flatpickr_dateformat_string = "d/m/Y";
break;
case "dmydot":
flatpickr_dateformat_string = "d.m.Y";
break;
default:
flatpickr_dateformat_string = "Y-m-d";
}
</script>
[% Asset.js("lib/flatpickr/flatpickr.min.js") | $raw %]
<script>
flatpickr.l10ns.default.weekdays = flatpickr_weekdays;
flatpickr.l10ns.default.months = flatpickr_months;
flatpickr.setDefaults({
allowInput: true,
dateFormat: flatpickr_dateformat_string,
nextArrow: '<i class="fa fa-fw fa-arrow-right" aria-hidden="true"></i>',
prevArrow: '<i class="fa fa-fw fa-arrow-left" aria-hidden="true"></i>',
time_24hr: flatpickr_timeformat,
locale: {
"firstDayOfWeek": calendarFirstDayOfWeek
},
onReady: function( selectedDates, dateStr, instance ){
/* When flatpickr instance is created, automatically append a "clear date" link */
if( $(instance.input).hasClass("futuredate") ){
instance.set("minDate", new Date().fp_incr(1));
}
if( $(instance.input).hasClass("pastdate") ){
instance.set("maxDate", new Date().fp_incr(-1));
}
$(instance.input)
/* Add a wrapper element so that we can prevent the clear button from wrapping */
.wrap("<span class='flatpickr_wrapper'></span>")
.after( $("<a/>")
.attr("href","#")
.addClass("clear_date")
.on("click", function(e){
e.preventDefault();
instance.clear();
})
.addClass("fa fa-fw fa-remove")
.attr("aria-hidden", true)
.attr("aria-label", _("Clear date") )
).keydown(function(e) {
var key = (event.keyCode ? event.keyCode : event.which);
if ( key == 40 ) {
instance.set('allowInput',false);
}
});
},
onClose: function( selectedDates, dateText, instance) {
validate_date( dateText, instance );
var thisInput = instance.input;
if ( thisInput.hasAttribute('data-start_for') ) {
var endPicker = document.querySelector("#"+thisInput.dataset.start_for)._flatpickr;
endPicker.set('minDate', selectedDates[0]);
}
},
});
var MSG_PLEASE_ENTER_A_VALID_DATE = ( __("Please enter a valid date (should match %s).") );
function is_valid_date(date) {
// An empty string is considered as a valid date for convenient reasons.
if (date === '') return 1;
var dateformat = flatpickr_dateformat_string;
switch ( dateformat_pref ){
case "us":
flatpickr_dateformat_string = "m/d/Y";
break;
case "metric":
flatpickr_dateformat_string = "d/m/Y";
break;
case "dmydot":
flatpickr_dateformat_string = "d.m.Y";
break;
default:
flatpickr_dateformat_string = "Y-m-d";
}
try {
flatpickr.parseDate(date, dateformat);
} catch (e) {
return 0;
}
return 1;
}
function validate_date(dateText, inst) {
if (!is_valid_date(dateText)) {
var dateformat_str = get_dateformat_str( dateformat_pref );
alert(MSG_PLEASE_ENTER_A_VALID_DATE.format(dateformat_str));
inst.clear();
}
}
$(document).ready(function(){
$(".flatpickr").flatpickr();
$(".clear-flatpickr").on("click", function(e){
e.preventDefault();
var element = $(this).data("fp");
if( element ){
document.querySelector("#" + element )._flatpickr.clear();
}
});
});
</script>