diff --git a/application/views/layouts/account_layout.php b/application/views/layouts/account_layout.php index 6aae3538..094c33ee 100644 --- a/application/views/layouts/account_layout.php +++ b/application/views/layouts/account_layout.php @@ -45,7 +45,6 @@ - diff --git a/application/views/layouts/backend_layout.php b/application/views/layouts/backend_layout.php index 5d139b40..fb916287 100644 --- a/application/views/layouts/backend_layout.php +++ b/application/views/layouts/backend_layout.php @@ -45,7 +45,6 @@ - diff --git a/application/views/layouts/booking_layout.php b/application/views/layouts/booking_layout.php index 1f384aed..404ababb 100644 --- a/application/views/layouts/booking_layout.php +++ b/application/views/layouts/booking_layout.php @@ -60,7 +60,6 @@ - diff --git a/application/views/layouts/message_layout.php b/application/views/layouts/message_layout.php index 623888ab..2accea92 100644 --- a/application/views/layouts/message_layout.php +++ b/application/views/layouts/message_layout.php @@ -51,7 +51,6 @@ - @@ -59,7 +58,6 @@ - diff --git a/application/views/pages/installation.php b/application/views/pages/installation.php index d393199d..b492a43d 100755 --- a/application/views/pages/installation.php +++ b/application/views/pages/installation.php @@ -138,7 +138,6 @@ - diff --git a/application/views/pages/recovery.php b/application/views/pages/recovery.php index bf34501d..3d18f012 100644 --- a/application/views/pages/recovery.php +++ b/application/views/pages/recovery.php @@ -38,7 +38,6 @@ - diff --git a/assets/js/utils/general_functions.js b/assets/js/utils/general_functions.js deleted file mode 100755 index 645dd65d..00000000 --- a/assets/js/utils/general_functions.js +++ /dev/null @@ -1,551 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) Alex Tselegidis - * @license https://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link https://easyappointments.org - * @since v1.0.0 - * ---------------------------------------------------------------------------- */ - -window.GeneralFunctions = window.GeneralFunctions || {}; - -/** - * General Functions Module - * - * It contains functions that apply both on the front and back end of the application. - * - * @module GeneralFunctions - */ -(function (exports) { - ('use strict'); - - /** - * Register global error handler. - */ - document.addEventListener('DOMContentLoaded', () => { - $(document).ajaxError((event, jqxhr, settings, thrownError) => { - GeneralFunctions.ajaxFailureHandler(jqxhr, settings, thrownError); - }); - }); - - /** - * This functions displays a message box in the admin array. It is useful when user - * decisions or verifications are needed. - * - * @param {String} title The title of the message box. - * @param {String} message The message of the dialog. - * @param {Array} buttons Contains the dialog buttons along with their functions. - */ - exports.displayMessageBox = (title, message, buttons = null) => { - if (!title) { - title = '- No Title Provided -'; - } - - if (!message) { - message = '- No Message Provided -'; - } - - if (!buttons) { - buttons = [ - { - text: lang('close'), - click: () => { - $('#message-box').dialog('close'); - } - } - ]; - } - - // Destroy previous dialog instances. - $('#message-box').dialog('destroy').remove(); - - // Create the html of the message box. - $('
', { - 'id': 'message-box', - 'title': title, - 'html': [ - $('

', { - 'html': message - }) - ] - }).appendTo('body'); - - $('#message-box').dialog({ - autoOpen: false, - modal: true, - resize: 'auto', - width: 'auto', - height: 'auto', - resizable: false, - buttons: buttons, - closeOnEscape: true - }); - - $('#message-box').dialog('open'); - $('.ui-dialog .ui-dialog-buttonset button').addClass('btn btn-outline-secondary'); - $('#message-box .ui-dialog-titlebar-close').hide(); - }; - - /** - * This method centers a DOM element vertically and horizontally on the page. - * - * @param {Object} elementHandle The object that is going to be centered. - */ - exports.centerElementOnPage = (elementHandle) => { - // Center main frame vertical middle - $(window).resize(function () { - var elementLeft = ($(window).width() - elementHandle.outerWidth()) / 2; - var elementTop = ($(window).height() - elementHandle.outerHeight()) / 2; - elementTop = elementTop > 0 ? elementTop : 20; - - elementHandle.css({ - position: 'absolute', - left: elementLeft, - top: elementTop - }); - }); - $(window).resize(); - }; - - /** - * This function retrieves a parameter from a "GET" formed url. - * - * @link http://www.netlobo.com/url_query_string_javascript.html - * - * @param {String} url The selected url. - * @param {String} parameterName The parameter name. - - * @return {String} Returns the parameter value. - */ - exports.getUrlParameter = (url, parameterName) => { - var parsedUrl = url.substr(url.indexOf('?')).slice(1).split('&'); - - for (var index in parsedUrl) { - var parsedValue = parsedUrl[index].split('='); - - if (parsedValue.length === 1 && parsedValue[0] === parameterName) { - return ''; - } - - if (parsedValue.length === 2 && parsedValue[0] === parameterName) { - return decodeURIComponent(parsedValue[1]); - } - } - - return ''; - }; - - /** - * Convert date to ISO date string. - * - * This function creates a RFC 3339 date string. This string is needed by the Google Calendar API - * in order to pass dates as parameters. - * - * @param {Date} date The given date that will be transformed. - - * @return {String} Returns the transformed string. - */ - exports.ISODateString = (date) => { - function pad(n) { - return n < 10 ? '0' + n : n; - } - - return ( - date.getUTCFullYear() + - '-' + - pad(date.getUTCMonth() + 1) + - '-' + - pad(date.getUTCDate()) + - 'T' + - pad(date.getUTCHours()) + - ':' + - pad(date.getUTCMinutes()) + - ':' + - pad(date.getUTCSeconds()) + - 'Z' - ); - }; - - /** - * Clone JS Object - * - * This method creates and returns an exact copy of the provided object. It is very useful whenever changes need to - * be made to an object without modifying the original data. - * - * @link https://stackoverflow.com/a/728694 - * - * @param {Object} originalObject Object to be copied. - - * @return {Object} Returns an exact copy of the provided element. - */ - exports.clone = (originalObject) => { - // Handle the 3 simple types, and null or undefined - if (!originalObject || typeof originalObject !== 'object') { - return originalObject; - } - - var copy; - - // Handle Date - if (originalObject instanceof Date) { - copy = new Date(); - copy.setTime(originalObject.getTime()); - return copy; - } - - // Handle Array - if (originalObject instanceof Array) { - copy = []; - for (var i = 0, len = originalObject.length; i < len; i++) { - copy[i] = GeneralFunctions.clone(originalObject[i]); - } - return copy; - } - - // Handle Object - if (originalObject instanceof Object) { - copy = {}; - for (var attr in originalObject) { - if (originalObject.hasOwnProperty(attr)) copy[attr] = GeneralFunctions.clone(originalObject[attr]); - } - return copy; - } - - throw new Error("Unable to copy obj! Its type isn't supported."); - }; - - /** - * Validate Email Address - * - * This method validates an email address. If the address is not on the proper - * form then the result is FALSE. - * - * @link http://badsyntax.co/post/javascript-email-validation-rfc822 - * - * @param {String} email The email address to be checked. - - * @return {Boolean} Returns the validation result. - */ - exports.validateEmail = (email) => { - var re = - /(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/; - return re.test(email); - }; - - /** - * Makes the first letter of the string upper case. - * - * @param {String} value The string to be converted. - * - * @return {String} Returns the capitalized string. - */ - exports.upperCaseFirstLetter = (value) => value.charAt(0).toUpperCase() + value.slice(1); - - /** - * Enable Language Selection - * - * Enables the language selection functionality. Must be called on every page has a language selection button. - * This method requires the global variable 'vars('available_languages')' to be initialized before the execution. - * - * @param {Object} $element Selected element button for the language selection. - * - * @deprecated Since 1.5 - */ - exports.enableLanguageSelection = ($element) => { - console.warn( - `Call of deprecated GeneralFunctions.enableLanguageSelection method! Please use the App.Utils.Lang.enableLanguageSelection instead as this method will be removed soon.` - ); - App.Utils.Lang.enableLanguageSelection($element); - }; - - /** - * AJAX Failure Handler - * - * @param {jqXHR} jqXHR - * @param {String} textStatus - * @param {Object} errorThrown - */ - exports.ajaxFailureHandler = (jqXHR, textStatus, errorThrown) => { - console.error('Unexpected HTTP Error: ', jqXHR, textStatus, errorThrown); - - var response; - - try { - response = JSON.parse(jqXHR.responseText); // JSON response - } catch (error) { - response = {message: jqXHR.responseText}; // String response - } - - if (!response) { - return; - } - - GeneralFunctions.displayMessageBox(lang('unexpected_issues'), lang('unexpected_issues_message')); - - $('

', { - 'class': 'card', - 'html': [ - $('
', { - 'class': 'card-body overflow-auto', - 'html': response.message || '→ No error information provided.' - }) - ] - }).appendTo('#message-box'); - }; - - /** - * Escape JS HTML string values for XSS prevention. - * - * @param {String} content String to be escaped. - * - * @return {String} Returns the escaped string. - */ - exports.escapeHtml = (content) => $('
').text(content).html(); - - /** - * Format a given date according to the date format setting. - * - * @param {String} date The date to be formatted. - * @param {String} dateFormatSetting The setting provided by PHP must be one of the "DMY", "MDY" or "YMD". - * @param {Boolean} addHours (optional) Whether to add hours to the result. - - * @return {String} Returns the formatted date string. - */ - exports.formatDate = (date, dateFormatSetting, addHours) => { - var timeFormat = vars('time_format') === 'regular' ? 'h:mm a' : 'HH:mm'; - var hours = addHours ? ' ' + timeFormat : ''; - var result; - var parsedDateMoment = moment(date); - - if (!parsedDateMoment.isValid()) { - return date; - } - - switch (dateFormatSetting) { - case 'DMY': - result = parsedDateMoment.format('DD/MM/YYYY' + hours); - break; - case 'MDY': - result = parsedDateMoment.format('MM/DD/YYYY' + hours); - break; - case 'YMD': - result = parsedDateMoment.format('YYYY/MM/DD' + hours); - break; - default: - throw new Error('Invalid date format setting provided!', dateFormatSetting); - } - - return result; - }; - - /** - * Get the Id of a Weekday using the US week format and day names (Sunday=0) as used in the JS code of the - * application, case insensitive, short and long names supported. - * - * @param {String} weekDayName The weekday name among Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, - * Saturday. - - * @return {Number} Returns the ID of the weekday. - */ - exports.getWeekDayId = (weekDayName) => { - var result; - - switch (weekDayName.toLowerCase()) { - case 'sunday': - case 'sun': - result = 0; - break; - - case 'monday': - case 'mon': - result = 1; - break; - - case 'tuesday': - case 'tue': - result = 2; - break; - - case 'wednesday': - case 'wed': - result = 3; - break; - - case 'thursday': - case 'thu': - result = 4; - break; - - case 'friday': - case 'fri': - result = 5; - break; - - case 'saturday': - case 'sat': - result = 6; - break; - - default: - throw new Error('Invalid weekday name provided!', weekDayName); - } - - return result; - }; - - /** - * Get the name in lowercase of a Weekday using its Id. - * - * @param {Number} weekDayId The Id (From 0 for sunday to 6 for saturday). - - * @return {String} Returns the name of the weekday. - */ - exports.getWeekdayName = (weekDayId) => { - var result; - - switch (weekDayId) { - case 0: - result = 'sunday'; - break; - - case 1: - result = 'monday'; - break; - - case 2: - result = 'tuesday'; - break; - - case 3: - result = 'wednesday'; - break; - - case 4: - result = 'thursday'; - break; - - case 5: - result = 'friday'; - break; - - case 6: - result = 'saturday'; - break; - - default: - throw new Error('Invalid weekday Id provided!', weekDayId); - } - - return result; - }; - - /** - * Sort a dictionary where keys are weekdays - * - * @param {Object} weekDictionary A dictionary with weekdays as keys. - * @param {Number} startDayId Id of the first day to start sorting (From 0 for sunday to 6 for saturday). - - * @return {Object} Returns a sorted dictionary - */ - exports.sortWeekDictionary = (weekDictionary, startDayId) => { - var sortedWeekDictionary = {}; - - for (var i = startDayId; i < startDayId + 7; i++) { - var weekdayName = GeneralFunctions.getWeekdayName(i % 7); - sortedWeekDictionary[weekdayName] = weekDictionary[weekdayName]; - } - - return sortedWeekDictionary; - }; - - /** - * Render a map icon that links to Google maps. - * - * @param {Object} user Should have the address, city, etc properties. - * - * @return {string} The rendered HTML. - */ - exports.renderMapIcon = (user) => { - var data = []; - - if (user.address) { - data.push(user.address); - } - - if (user.city) { - data.push(user.city); - } - - if (user.state) { - data.push(user.state); - } - - if (user.zip_code) { - data.push(user.zip_code); - } - - if (!data.length) { - return ''; - } - - return $('
', { - 'html': [ - $('', { - 'href': 'https://www.google.com/maps/place/' + data.join(','), - 'target': '_blank', - 'html': [ - $('', { - 'class': 'fas fa-map-marker-alt' - }) - ] - }) - ] - }).html(); - }; - - /** - * Render a mail icon. - * - * @param {String} email - * - * @return {string} The rendered HTML. - */ - exports.renderMailIcon = (email) => - $('