easyappointments/assets/js/pages/backend_settings_general_helper.js

129 lines
4.1 KiB
JavaScript
Raw Normal View History

/* ----------------------------------------------------------------------------
* Easy!Appointments - Open Source Web Scheduler
*
* @package EasyAppointments
* @author A.Tselegidis <alextselegidis@gmail.com>
2021-12-18 19:43:45 +03:00
* @copyright Copyright (c) Alex Tselegidis
* @license https://opensource.org/licenses/GPL-3.0 - GPLv3
* @link https://easyappointments.org
* @since v1.0.0
* ---------------------------------------------------------------------------- */
(function () {
'use strict';
/**
* "System Settings" Tab Helper Class
*
* @class SystemSettingsGeneralHelper
*/
var SystemSettingsGeneralHelper = function () {};
/**
* Save the system settings.
*
* This method is run after changes are detected on the tab input fields.
*
* @param {Array} settings Contains the system settings data.
*/
SystemSettingsGeneralHelper.prototype.save = function (settings) {
if (!this.validate()) {
return; // Validation failed, do not proceed.
}
var url = GlobalVariables.baseUrl + '/index.php/settings/general/save';
var data = {
csrf_token: GlobalVariables.csrfToken,
settings: JSON.stringify(settings),
type: BackendSettingsGeneral.SETTINGS_SYSTEM
};
$.post(url, data).done(function () {
Backend.displayNotification(App.Lang.settings_saved);
// Update the logo title on the header.
$('#header-logo span').text($('#company-name').val());
// Update book_advance_timeout preview
var totalMinutes = $('#book-advance-timeout').val();
var hours = Math.floor(totalMinutes / 60);
var minutes = totalMinutes % 60;
$('#book-advance-timeout-helper').text(
App.Lang.book_advance_timeout_hint.replace(
'{$limit}',
('0' + hours).slice(-2) + ':' + ('0' + minutes).slice(-2)
)
);
// Update variables also used in other setting tabs
GlobalVariables.timeFormat = $('#time-format').val();
GlobalVariables.firstWeekday = $('#first-weekday').val();
});
};
/**
* Prepare the system settings array.
*
* This method uses the DOM elements of the backend/settings page, so it can't be used in another page.
*
* @return {Array} Returns the system settings array.
*/
SystemSettingsGeneralHelper.prototype.get = function () {
var settings = [];
// General Settings Tab
$('#general')
.find('input, select')
.not('input:checkbox')
.each(function (index, field) {
settings.push({
name: $(field).attr('data-field'),
value: $(field).val()
});
});
return settings;
};
/**
* Validate the settings data.
*
* If the validation fails then display a message to the user.
*
* @return {Boolean} Returns the validation result.
*/
SystemSettingsGeneralHelper.prototype.validate = function () {
$('#general .is-invalid').removeClass('is-invalid');
try {
// Validate required fields.
var missingRequired = false;
$('#general .required').each(function (index, requiredField) {
if (!$(requiredField).val()) {
$(requiredField).addClass('is-invalid');
missingRequired = true;
}
});
if (missingRequired) {
throw new Error(App.Lang.fields_are_required);
}
// Validate company email address.
if (!GeneralFunctions.validateEmail($('#company-email').val())) {
$('#company-email').addClass('is-invalid');
throw new Error(App.Lang.invalid_email);
}
return true;
} catch (error) {
Backend.displayNotification(error.message);
return false;
}
};
window.SystemSettingsGeneralHelper = SystemSettingsGeneralHelper;
})();