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) =>
- $('', {
- 'html': [
- $('', {
- 'href': 'mailto:' + email,
- 'target': '_blank',
- 'html': [
- $('', {
- 'class': 'fas fa-envelope'
- })
- ]
- })
- ]
- }).html();
-
- /**
- * Render a phone icon.
- *
- * @param {String} phone
- *
- * @return {string} The rendered HTML.
- */
- exports.renderPhoneIcon = (phone) =>
- $('', {
- 'html': [
- $('', {
- 'href': 'tel:' + phone,
- 'target': '_blank',
- 'html': [
- $('', {
- 'class': 'fas fa-phone-alt'
- })
- ]
- })
- ]
- }).html();
-})(window.GeneralFunctions);