From f84eecf7e84c335545426651a42d5d69338f1533 Mon Sep 17 00:00:00 2001 From: tm8544 <15167679+tm8544@users.noreply.github.com> Date: Wed, 27 Mar 2024 17:09:15 +0200 Subject: [PATCH 01/72] add default settings for language and timezone --- application/controllers/Admins.php | 2 + application/controllers/Booking.php | 2 + application/controllers/Customers.php | 2 + application/controllers/General_settings.php | 3 ++ application/controllers/Providers.php | 2 + application/controllers/Secretaries.php | 2 + .../language/arabic/translations_lang.php | 4 ++ .../language/bulgarian/translations_lang.php | 4 ++ .../language/catalan/translations_lang.php | 4 ++ .../language/chinese/translations_lang.php | 4 ++ .../language/croatian/translations_lang.php | 4 ++ .../language/czech/translations_lang.php | 4 ++ .../language/danish/translations_lang.php | 4 ++ .../language/dutch/translations_lang.php | 4 ++ .../language/english/translations_lang.php | 4 ++ .../language/estonian/translations_lang.php | 4 ++ .../language/finnish/translations_lang.php | 4 ++ .../language/french/translations_lang.php | 4 ++ .../language/german/translations_lang.php | 4 ++ .../language/greek/translations_lang.php | 4 ++ .../language/hebrew/translations_lang.php | 4 ++ .../language/hindi/translations_lang.php | 4 ++ .../language/hungarian/translations_lang.php | 4 ++ .../language/italian/translations_lang.php | 4 ++ .../language/japanese/translations_lang.php | 4 ++ .../luxembourgish/translations_lang.php | 4 ++ .../language/marathi/translations_lang.php | 4 ++ .../language/persian/translations_lang.php | 4 ++ .../language/polish/translations_lang.php | 4 ++ .../portuguese-br/translations_lang.php | 4 ++ .../language/portuguese/translations_lang.php | 4 ++ .../language/romanian/translations_lang.php | 4 ++ .../language/russian/translations_lang.php | 4 ++ .../language/serbian/translations_lang.php | 4 ++ .../language/slovak/translations_lang.php | 4 ++ .../language/spanish/translations_lang.php | 4 ++ .../language/swedish/translations_lang.php | 4 ++ .../language/thai/translations_lang.php | 4 ++ .../language/turkish/translations_lang.php | 4 ++ .../052_add_default_timezone_to_setting.php | 38 +++++++++++++++++++ .../053_add_default_language_to_settings.php | 38 +++++++++++++++++++ application/views/pages/general_settings.php | 36 ++++++++++++++++++ assets/js/components/appointments_modal.js | 8 ++-- assets/js/pages/admins.js | 4 +- assets/js/pages/customers.js | 4 +- assets/js/pages/providers.js | 4 +- assets/js/pages/secretaries.js | 3 +- 47 files changed, 269 insertions(+), 11 deletions(-) create mode 100644 application/migrations/052_add_default_timezone_to_setting.php create mode 100644 application/migrations/053_add_default_language_to_settings.php diff --git a/application/controllers/Admins.php b/application/controllers/Admins.php index f5f20998..7573acde 100644 --- a/application/controllers/Admins.php +++ b/application/controllers/Admins.php @@ -64,6 +64,8 @@ class Admins extends EA_Controller 'role_slug' => $role_slug, 'timezones' => $this->timezones->to_array(), 'min_password_length' => MIN_PASSWORD_LENGTH, + 'default_language' => setting('default_language'), + 'default_timezone' => setting('default_timezone'), ]); html_vars([ diff --git a/application/controllers/Booking.php b/application/controllers/Booking.php index 5a1b0743..e23597bb 100755 --- a/application/controllers/Booking.php +++ b/application/controllers/Booking.php @@ -233,6 +233,8 @@ class Booking extends EA_Controller 'appointment_data' => $appointment, 'provider_data' => $provider, 'customer_data' => $customer, + 'default_language' => setting('default_language'), + 'default_timezone' => setting('default_timezone'), ]); html_vars([ diff --git a/application/controllers/Customers.php b/application/controllers/Customers.php index b69294bb..134dfd83 100644 --- a/application/controllers/Customers.php +++ b/application/controllers/Customers.php @@ -87,6 +87,8 @@ class Customers extends EA_Controller 'time_format' => $time_format, 'timezones' => $this->timezones->to_array(), 'secretary_providers' => $secretary_providers, + 'default_language' => setting('default_language'), + 'default_timezone' => setting('default_timezone'), ]); html_vars([ diff --git a/application/controllers/General_settings.php b/application/controllers/General_settings.php index 4b63c8dd..06354fc9 100644 --- a/application/controllers/General_settings.php +++ b/application/controllers/General_settings.php @@ -30,6 +30,7 @@ class General_settings extends EA_Controller $this->load->model('settings_model'); $this->load->library('accounts'); + $this->load->library('timezones'); } /** @@ -62,6 +63,7 @@ class General_settings extends EA_Controller script_vars([ 'user_id' => $user_id, 'role_slug' => $role_slug, + 'timezones' => $this->timezones->to_array(), 'general_settings' => $this->settings_model->get(), ]); @@ -69,6 +71,7 @@ class General_settings extends EA_Controller 'page_title' => lang('settings'), 'active_menu' => PRIV_SYSTEM_SETTINGS, 'user_display_name' => $this->accounts->get_user_display_name($user_id), + 'grouped_timezones' => $this->timezones->to_grouped_array(), 'available_themes' => $available_themes, ]); diff --git a/application/controllers/Providers.php b/application/controllers/Providers.php index 75fdc350..ee3ca765 100644 --- a/application/controllers/Providers.php +++ b/application/controllers/Providers.php @@ -76,6 +76,8 @@ class Providers extends EA_Controller 'min_password_length' => MIN_PASSWORD_LENGTH, 'timezones' => $this->timezones->to_array(), 'services' => $services, + 'default_language' => setting('default_language'), + 'default_timezone' => setting('default_timezone'), ]); html_vars([ diff --git a/application/controllers/Secretaries.php b/application/controllers/Secretaries.php index ef8cd3ed..196a8450 100644 --- a/application/controllers/Secretaries.php +++ b/application/controllers/Secretaries.php @@ -72,6 +72,8 @@ class Secretaries extends EA_Controller 'timezones' => $this->timezones->to_array(), 'min_password_length' => MIN_PASSWORD_LENGTH, 'providers' => $providers, + 'default_language' => setting('default_language'), + 'default_timezone' => setting('default_timezone'), ]); html_vars([ diff --git a/application/language/arabic/translations_lang.php b/application/language/arabic/translations_lang.php index 5934f0fb..849daecc 100755 --- a/application/language/arabic/translations_lang.php +++ b/application/language/arabic/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/bulgarian/translations_lang.php b/application/language/bulgarian/translations_lang.php index 6b0a2479..27a5703d 100755 --- a/application/language/bulgarian/translations_lang.php +++ b/application/language/bulgarian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/catalan/translations_lang.php b/application/language/catalan/translations_lang.php index a89f6f2e..a07fc91e 100644 --- a/application/language/catalan/translations_lang.php +++ b/application/language/catalan/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Quan està activat, els clients i els usua $lang['check_spam_folder'] = 'Comproveu la vostra carpeta de correu brossa si el correu no arriba en uns minuts.'; $lang['api_token_hint'] = 'Establiu un token secret per permetre l\'autenticació basada en tokens de l\'API d\'Easy!Appointments.'; $lang['timezone'] = 'Zona horària'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Això sobreescriurà els plans de treball existents del proveïdor, esteu segur que voleu continuar?'; $lang['working_plans_got_updated'] = 'S\'han actualitzat tots els plans de treball.'; $lang['apply_to_all_providers'] = 'Aplica-ho a tots els proveïdors'; diff --git a/application/language/chinese/translations_lang.php b/application/language/chinese/translations_lang.php index 839141f5..50142635 100755 --- a/application/language/chinese/translations_lang.php +++ b/application/language/chinese/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/croatian/translations_lang.php b/application/language/croatian/translations_lang.php index 31516e31..384072e5 100644 --- a/application/language/croatian/translations_lang.php +++ b/application/language/croatian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Kada je omogućeno, klijenti i korisnici $lang['check_spam_folder'] = 'Provjerite svoju spam mapu ako e-mail ne stigne unutar nekoliko minuta.'; $lang['api_token_hint'] = 'Postavite tajni token kako biste omogućili autentifikaciju temeljenu na tokenima za Easy!Appointments API.'; $lang['timezone'] = 'Vremenska Zona'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Ovo će prebrisati postojeće radne planove pružatelja, jeste li sigurni da želite nastaviti?'; $lang['working_plans_got_updated'] = 'Svi radni planovi su ažurirani.'; $lang['apply_to_all_providers'] = 'Primijeni na sve pružatelje'; diff --git a/application/language/czech/translations_lang.php b/application/language/czech/translations_lang.php index bd10ad87..fb0c6f9e 100644 --- a/application/language/czech/translations_lang.php +++ b/application/language/czech/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Pokud je zapnuto, uživatelé a zákazníc $lang['check_spam_folder'] = 'Zkontrolujte prosím svou SPAM schránku, pokud email v několika minutách nedorazí.'; $lang['api_token_hint'] = 'Nastavte bezpečnostní token, abyste povolili autentizaci tokenem v API Easy!Appointments.'; $lang['timezone'] = 'Časová zóna'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Tímto nahradíte současné pracovní plány. Opravdu jste si jisti, že chcete pokračovat?'; $lang['working_plans_got_updated'] = 'Všechny pracovní plány byly aktualizovány.'; $lang['apply_to_all_providers'] = 'Použít pro všechny poskytovatele'; diff --git a/application/language/danish/translations_lang.php b/application/language/danish/translations_lang.php index 2746ec2f..438da52d 100755 --- a/application/language/danish/translations_lang.php +++ b/application/language/danish/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Tjek venligst din uønsket mail (spam) mappe hvis du ikke har modtaget mailen inden for et par minutter.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Tidszone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/dutch/translations_lang.php b/application/language/dutch/translations_lang.php index ebbf7899..286674b2 100755 --- a/application/language/dutch/translations_lang.php +++ b/application/language/dutch/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/english/translations_lang.php b/application/language/english/translations_lang.php index a4a00080..4b1156a7 100755 --- a/application/language/english/translations_lang.php +++ b/application/language/english/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/estonian/translations_lang.php b/application/language/estonian/translations_lang.php index 84663eed..ef819757 100644 --- a/application/language/estonian/translations_lang.php +++ b/application/language/estonian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Kui see on sisse lülitatud, siis klient p $lang['check_spam_folder'] = 'Kui e-maili mõne minuti jooksul ei saabu, siis palun kontrolli enda meili rämpspostikausta.'; $lang['api_token_hint'] = 'Sea sisse juurdepääsuluba et võimaldada pääsuloaga autentimine Easy!Appointments API kasutamiseks.'; $lang['timezone'] = 'Ajavöönd'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'See kirjutab eksisteerivad tööplaanid üle. Oled kindel, et soovid jätkata?'; $lang['working_plans_got_updated'] = 'Kõik tööplaanid uuendatud.'; $lang['apply_to_all_providers'] = 'Rakenda kõikidele teenusepakkujatele'; diff --git a/application/language/finnish/translations_lang.php b/application/language/finnish/translations_lang.php index b6709287..63413ea2 100755 --- a/application/language/finnish/translations_lang.php +++ b/application/language/finnish/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Jos valittu, asiakkaiden ja käyttäjien o $lang['check_spam_folder'] = 'Tarkista roskapostikansio mikäli viestiä ei näy muutaman minuutin kuluessa.'; $lang['api_token_hint'] = 'Aseta secret token aktivoidaksesi token-pohjaisen autentikoinnin Easy!Appointments API:lle.'; $lang['timezone'] = 'Aikavyöhyke'; +$lang['default_timezone'] = 'Oletusaikavyöhyke'; +$lang['default_timezone_hint'] = 'Tämä tulee uusien käyttäjien ja varausten oletusaikavyöhykkeeksi'; +$lang['default_language'] = 'Oletuskieli'; +$lang['default_language_hint'] = 'Tämä tulee uusien käyttäjien oletuskieleksi'; $lang['overwrite_existing_working_plans'] = 'Tämä korvaa aiemmat työsuunnitelmat, haluatko varmasti jatkaa?'; $lang['working_plans_got_updated'] = 'Kaikki työsuunnitelmat päivitettiin.'; $lang['apply_to_all_providers'] = 'Aseta kaikille palveluntarjoajille'; diff --git a/application/language/french/translations_lang.php b/application/language/french/translations_lang.php index 0c6ca117..dcb3a1ad 100755 --- a/application/language/french/translations_lang.php +++ b/application/language/french/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Lorsque activé, les clients et les utilis $lang['check_spam_folder'] = 'Veuillez vérifier votre dossier de courrier indésirable si l\'email n\'arrive pas dans les minutes qui suivent.'; $lang['api_token_hint'] = 'Définissez un jeton secret afin d\'activer l\'authentification basée sur le jeton de l\'API Easy!Appointments. '; $lang['timezone'] = 'Fuseau horaire'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Cela écrasera les plannings existants du fournisseur. Êtes-vous sûr de vouloir continuer ?'; $lang['working_plans_got_updated'] = 'Tous les plannings ont été mis à jour.'; $lang['apply_to_all_providers'] = 'Appliquer à tous les fournisseurs'; diff --git a/application/language/german/translations_lang.php b/application/language/german/translations_lang.php index 50c658c0..3ee8300b 100755 --- a/application/language/german/translations_lang.php +++ b/application/language/german/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Wenn aktiviert, müssen Kunden und Benutze $lang['check_spam_folder'] = 'Bitte kontrollieren Sie Ihren Spam-Ordner, falls die E-Mail nicht innerhalb weniger Minuten eintrifft.'; $lang['api_token_hint'] = 'Setze einen geheimen Token um die tokenbasierte Authentifizierung für die Easy!Appointments API zu aktivieren.'; $lang['timezone'] = 'Zeitzone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Dies wird bestehende Arbeitspläne von Anbietern überschreiben. Sind sie sicher?'; $lang['working_plans_got_updated'] = 'Alle Arbeitspläne wurden aktualisiert.'; $lang['apply_to_all_providers'] = 'Auf alle Anbieter anwenden'; diff --git a/application/language/greek/translations_lang.php b/application/language/greek/translations_lang.php index bd62092b..755ea715 100755 --- a/application/language/greek/translations_lang.php +++ b/application/language/greek/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Όταν ενεργοποιημένο, ο $lang['check_spam_folder'] = 'Παρακαλώ ελέγξτε τον φάκελο spam εφόσον το ηλεκτρονικό μήνυμα δεν έχει ληφθεί.'; $lang['api_token_hint'] = 'Καταχωρήστε εναν μυστικό κωδικό για να μπορέσετε να ενεργοποιήσετε την token-based πιστοποίηση του Easy!Appointments API.'; $lang['timezone'] = 'Ζώνη Ώρας'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Αυτό θα αντικαταστήσει το υπάρχον πλάνο εργασίας του παρόχου, είστε σίγουρος ότι θέλετε να συνεχίσετε;'; $lang['working_plans_got_updated'] = 'Όλα τα πλάνα εργασίας έχουν ενημερωθεί.'; $lang['apply_to_all_providers'] = 'Εφαρμογή σε όλους τος παρόχους'; diff --git a/application/language/hebrew/translations_lang.php b/application/language/hebrew/translations_lang.php index 9b9d5d83..0aaeb30a 100644 --- a/application/language/hebrew/translations_lang.php +++ b/application/language/hebrew/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'כאשר אפשרות זו מופעלת, $lang['check_spam_folder'] = 'אם הדוא"ל אינו מגיע תוך מספר דקות יש לבדוק את תיקיית הספאם שלך .'; $lang['api_token_hint'] = 'הגדר טוקן סודי על מנת לאפשר אימות מבוסס טוקן בממשק ה- API של Easy! Appointments.'; $lang['timezone'] = 'אזור זמן'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'פעולה זו תחליף את כל תוכניות העבודה של הספקים הקיימים, האם את/ה בטוח/ה שברצונך להמשיך?'; $lang['working_plans_got_updated'] = 'כל תוכניות העבודה עודכנו.'; $lang['apply_to_all_providers'] = 'החל על כל הספקים'; diff --git a/application/language/hindi/translations_lang.php b/application/language/hindi/translations_lang.php index 5149418d..6c490c09 100755 --- a/application/language/hindi/translations_lang.php +++ b/application/language/hindi/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/hungarian/translations_lang.php b/application/language/hungarian/translations_lang.php index 7360603b..3d5415a6 100755 --- a/application/language/hungarian/translations_lang.php +++ b/application/language/hungarian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/italian/translations_lang.php b/application/language/italian/translations_lang.php index ef994d10..95099e8d 100755 --- a/application/language/italian/translations_lang.php +++ b/application/language/italian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Quando abilitato i clienti e gli utenti ne $lang['check_spam_folder'] = 'Controlla la cartella SPAM se non ricevi l\'email di conferma entro pochi minuti.'; $lang['api_token_hint'] = 'Imposta un token segreto per abilitare l\'autenticazione basata su token nelle API di Easy!Appointments.'; $lang['timezone'] = 'Fuso Orario'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Questa operazione sovrascrive il Piano di Lavoro del fornitore esistente, sei sicuro di voler continuare?'; $lang['working_plans_got_updated'] = 'Tutti i Piani di Lavoro sono stati aggiornati.'; $lang['apply_to_all_providers'] = 'Applica a tutti i Fornitori'; diff --git a/application/language/japanese/translations_lang.php b/application/language/japanese/translations_lang.php index 6dc3ba35..8ab500ba 100755 --- a/application/language/japanese/translations_lang.php +++ b/application/language/japanese/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/luxembourgish/translations_lang.php b/application/language/luxembourgish/translations_lang.php index 297358c8..479d1bcb 100755 --- a/application/language/luxembourgish/translations_lang.php +++ b/application/language/luxembourgish/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/marathi/translations_lang.php b/application/language/marathi/translations_lang.php index 97667b30..718d93a5 100644 --- a/application/language/marathi/translations_lang.php +++ b/application/language/marathi/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/persian/translations_lang.php b/application/language/persian/translations_lang.php index 3fa289c2..1ed254ff 100644 --- a/application/language/persian/translations_lang.php +++ b/application/language/persian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'در صورت فعال بودن ، هنگ $lang['check_spam_folder'] = 'اگر تا دقایقی دیگر ایمیل را دریافت نکردید ، لطفاً پوشه هرزنامه خود را بررسی کنید.'; $lang['api_token_hint'] = 'برای فعال سازی احراز هویت مبتنی بر token برای دسترسی به API برنامه، یک رمز مخفی تنظیم کنید.'; $lang['timezone'] = 'منطقه زمانی'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'این کار باعث بازنویسی برنامه های کاری موجود می شود. آیا از این کار اطمینان دارید؟'; $lang['working_plans_got_updated'] = 'تمامی برنامه های کاری به روز رسانی شدند'; $lang['apply_to_all_providers'] = 'اعمال کردن به همه ارائه دهنده ها'; diff --git a/application/language/polish/translations_lang.php b/application/language/polish/translations_lang.php index 6496071f..21d42000 100755 --- a/application/language/polish/translations_lang.php +++ b/application/language/polish/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/portuguese-br/translations_lang.php b/application/language/portuguese-br/translations_lang.php index 6b898d68..65cd512c 100755 --- a/application/language/portuguese-br/translations_lang.php +++ b/application/language/portuguese-br/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Quando ativado, os clientes e usuários pr $lang['check_spam_folder'] = 'Verifique sua pasta de spam se o e-mail não chegar em alguns minutos.'; $lang['api_token_hint'] = 'Defina um token secreto para habilitar a autenticação baseada em token da API Easy!Appointments.'; $lang['timezone'] = 'Fuso horário'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Isso substituirá os planos de trabalho dos fornecedores existentes. Tem certeza de que deseja continuar?'; $lang['working_plans_got_updated'] = 'Todos os planos de trabalho foram atualizados.'; $lang['apply_to_all_providers'] = 'Aplicar a todos os fornecedores'; diff --git a/application/language/portuguese/translations_lang.php b/application/language/portuguese/translations_lang.php index a47a537a..862b90ab 100755 --- a/application/language/portuguese/translations_lang.php +++ b/application/language/portuguese/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/romanian/translations_lang.php b/application/language/romanian/translations_lang.php index c624e92f..5386e8c5 100755 --- a/application/language/romanian/translations_lang.php +++ b/application/language/romanian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/russian/translations_lang.php b/application/language/russian/translations_lang.php index 0a86abb4..472c9d99 100644 --- a/application/language/russian/translations_lang.php +++ b/application/language/russian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Когда эта функция вклю $lang['check_spam_folder'] = 'Пожалуйста, проверьте папку спама, если письмо не пришло в течение нескольких минут.'; $lang['api_token_hint'] = 'Установите секретный токен, чтобы включить аутентификацию на основе токена в Easy!Appointments API.'; $lang['timezone'] = 'Часовой пояс'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Это перезапишет существующие рабочие планы поставщика - Вы уверены что хотите продолжить?'; $lang['working_plans_got_updated'] = 'Все рабочие планы были обновлены.'; $lang['apply_to_all_providers'] = 'Применяется ко всем поставщикам услуг'; diff --git a/application/language/serbian/translations_lang.php b/application/language/serbian/translations_lang.php index 0e44470f..b3dce9ca 100644 --- a/application/language/serbian/translations_lang.php +++ b/application/language/serbian/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Kada je omogućeno, klijenti i korisnici t $lang['check_spam_folder'] = 'Proverite svoju neželjenu poštu (spam) ako E-mail nije stigao u roku od nekoliko minuta.'; $lang['api_token_hint'] = 'Postavite tajni token kako biste omogućili pristup Easy!Appointments API.'; $lang['timezone'] = 'Vremenska zona'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Ovo će prepisati postojeći plan rada izvršioca, da li ste sigurni da želite da nastavite?'; $lang['working_plans_got_updated'] = 'Svi planovi rada su aktualizovani.'; $lang['apply_to_all_providers'] = 'Primeni na sve izvršioce'; diff --git a/application/language/slovak/translations_lang.php b/application/language/slovak/translations_lang.php index 6dc43fd9..e32424de 100755 --- a/application/language/slovak/translations_lang.php +++ b/application/language/slovak/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; diff --git a/application/language/spanish/translations_lang.php b/application/language/spanish/translations_lang.php index 33dcb0a0..b3cda78c 100755 --- a/application/language/spanish/translations_lang.php +++ b/application/language/spanish/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Cuando está habilitado, clientes y usuari $lang['check_spam_folder'] = 'Por favor, verifique su carpeta de correo no deseado si el correo no llega dentro de unos minutos.'; $lang['api_token_hint'] = 'Defina un token secreto para habilitar la autentificación por token mediante la API de Easy!Appointments.'; $lang['timezone'] = 'Zona horaria'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Esto sobreescribirá los planes de trabajo existentes del proveedor. ¿Seguro que desea continuar?'; $lang['working_plans_got_updated'] = 'Todos los planes de trabajo fueron actualizados.'; $lang['apply_to_all_providers'] = 'Aplicar a todos los proveedores'; diff --git a/application/language/swedish/translations_lang.php b/application/language/swedish/translations_lang.php index aade4545..b4947b42 100644 --- a/application/language/swedish/translations_lang.php +++ b/application/language/swedish/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'När denna är aktiv måste kunderna ange $lang['check_spam_folder'] = 'Om eposten inte kommit fram inom några minuter; kolla skräpposten.'; $lang['api_token_hint'] = 'Ställ in en hemlig token för att aktivera tokenbaserad autentisering av Easy!Appointments API.'; $lang['timezone'] = 'Tidszon'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Detta kommer skriva över befintliga leverantörsscheman. Är du säker på att du vill det?'; $lang['working_plans_got_updated'] = 'Alla scheman uppdaterades.'; $lang['apply_to_all_providers'] = 'Tilldela till alla leverantörer'; diff --git a/application/language/thai/translations_lang.php b/application/language/thai/translations_lang.php index b35f2cb6..b0755a92 100644 --- a/application/language/thai/translations_lang.php +++ b/application/language/thai/translations_lang.php @@ -319,6 +319,10 @@ $lang['require_phone_number_hint'] = 'เมื่อเปิดใช้งา $lang['check_spam_folder'] = 'โปรดตรวจสอบโฟลเดอร์สแปมของคุณ หากคุณไม่ได้รับอีเมลภายในไม่กี่นาที'; $lang['api_token_hint'] = 'ตั้งค่าโทเค็นลับเพื่อเปิดใช้งานการตรวจสอบสิทธิ์โดยใช้โทเค็นของ Easy!Appointments API'; $lang['timezone'] = 'เขตเวลา'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'การดำเนินการนี้จะเขียนทับแผนการทำงานของผู้ให้บริการที่มีอยู่ คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ'; $lang['working_plans_got_updated'] = 'แผนการทำงานทั้งหมดได้รับการปรับปรุง'; $lang['apply_to_all_providers'] = 'นำไปใช้กับผู้ให้บริการทั้งหมด'; diff --git a/application/language/turkish/translations_lang.php b/application/language/turkish/translations_lang.php index 940cce9f..ca419416 100755 --- a/application/language/turkish/translations_lang.php +++ b/application/language/turkish/translations_lang.php @@ -322,6 +322,10 @@ $lang['require_phone_number_hint'] = 'Etkinleştirildiğinde, müşterilerin ve $lang['check_spam_folder'] = 'E-posta birkaç dakika içinde gelmezse lütfen spam klasörünüzü kontrol edin.'; $lang['api_token_hint'] = 'Easy!Appointments Api sinin belirteç tabanlı kimlik doğrulamasını etkinleştirmek için gizli bir belirteç ayarlayın.'; $lang['timezone'] = 'Saat Dilimi'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'Tüm çalışma planları güncellendi.'; $lang['apply_to_all_providers'] = 'Tüm H.Sağlayıcılara Uygula'; diff --git a/application/migrations/052_add_default_timezone_to_setting.php b/application/migrations/052_add_default_timezone_to_setting.php new file mode 100644 index 00000000..7e3be9b6 --- /dev/null +++ b/application/migrations/052_add_default_timezone_to_setting.php @@ -0,0 +1,38 @@ + + * @copyright Copyright (c) Alex Tselegidis + * @license https://opensource.org/licenses/GPL-3.0 - GPLv3 + * @link https://easyappointments.org + * @since v1.3.2 + * ---------------------------------------------------------------------------- */ + +class Migration_Add_weekday_start_setting extends EA_Migration +{ + /** + * Upgrade method. + */ + public function up() + { + if (!$this->db->get_where('settings', ['name' => 'default_timezone'])->num_rows()) { + $this->db->insert('settings', [ + 'name' => 'default_timezone', + 'value' => 'UTC', + ]); + } + } + + /** + * Downgrade method. + */ + public function down() + { + if ($this->db->get_where('settings', ['name' => 'default_timezone'])->num_rows()) { + $this->db->delete('settings', ['name' => 'default_timezone']); + } + } +} diff --git a/application/migrations/053_add_default_language_to_settings.php b/application/migrations/053_add_default_language_to_settings.php new file mode 100644 index 00000000..76866ffe --- /dev/null +++ b/application/migrations/053_add_default_language_to_settings.php @@ -0,0 +1,38 @@ + + * @copyright Copyright (c) Alex Tselegidis + * @license https://opensource.org/licenses/GPL-3.0 - GPLv3 + * @link https://easyappointments.org + * @since v1.3.2 + * ---------------------------------------------------------------------------- */ + +class Migration_Add_weekday_start_setting extends EA_Migration +{ + /** + * Upgrade method. + */ + public function up() + { + if (!$this->db->get_where('settings', ['name' => 'default_language'])->num_rows()) { + $this->db->insert('settings', [ + 'name' => 'default_language', + 'value' => 'english', + ]); + } + } + + /** + * Downgrade method. + */ + public function down() + { + if ($this->db->get_where('settings', ['name' => 'default_language'])->num_rows()) { + $this->db->delete('settings', ['name' => 'default_language']); + } + } +} diff --git a/application/views/pages/general_settings.php b/application/views/pages/general_settings.php index 66eb6151..50f0d7cc 100755 --- a/application/views/pages/general_settings.php +++ b/application/views/pages/general_settings.php @@ -191,6 +191,42 @@ + +
+ + +
+ + + +
+
+ +
+ + 'id="default-timezone" data-field="default_timezone" class="form-control required"', + 'grouped_timezones' => vars('grouped_timezones'), + ]); ?> +
+
+ + + +
+ diff --git a/assets/js/components/appointments_modal.js b/assets/js/components/appointments_modal.js index b3043995..888ea4d9 100755 --- a/assets/js/components/appointments_modal.js +++ b/assets/js/components/appointments_modal.js @@ -424,8 +424,8 @@ App.Components.AppointmentsModal = (function () { $address.val(''); $city.val(''); $zipCode.val(''); - $language.val('english'); - $timezone.val('UTC'); + $language.val(vars('default_language')); + $timezone.val(vars('default_timezone')); $customerNotes.val(''); $customField1.val(''); $customField2.val(''); @@ -449,8 +449,8 @@ App.Components.AppointmentsModal = (function () { const defaultStatusValue = $appointmentStatus.find('option:first').val(); $appointmentStatus.val(defaultStatusValue); - $language.val('english'); - $timezone.val('UTC'); + $language.val(vars('default_language')); + $timezone.val(vars('default_timezone')) // Reset color. $appointmentColor.find('.color-selection-option:first').trigger('click'); diff --git a/assets/js/pages/admins.js b/assets/js/pages/admins.js index f9b63b25..d1c4c04a 100644 --- a/assets/js/pages/admins.js +++ b/assets/js/pages/admins.js @@ -336,8 +336,8 @@ App.Pages.Admins = (function () { $admins.find('.record-details').find('input, select, textarea').val('').prop('disabled', true); $admins.find('.record-details .form-label span').prop('hidden', true); $admins.find('.record-details #calendar-view').val('default'); - $admins.find('.record-details #language').val('english'); - $admins.find('.record-details #timezone').val('UTC'); + $admins.find('.record-details #language').val(vars('default_language')); + $admins.find('.record-details #timezone').val(vars('default_timezone')); $admins.find('.record-details #notifications').prop('checked', true); $('#edit-admin, #delete-admin').prop('disabled', true); diff --git a/assets/js/pages/customers.js b/assets/js/pages/customers.js index fd286d2c..f8c0e235 100644 --- a/assets/js/pages/customers.js +++ b/assets/js/pages/customers.js @@ -252,9 +252,9 @@ App.Pages.Customers = (function () { function resetForm() { $customers.find('.record-details').find('input, select, textarea').val('').prop('disabled', true); $customers.find('.record-details .form-label span').prop('hidden', true); - $customers.find('.record-details #timezone').val('UTC'); + $customers.find('.record-details #timezone').val(vars('default_timezone')); - $language.val('english'); + $language.val(vars('default_language')); $customerAppointments.empty(); diff --git a/assets/js/pages/providers.js b/assets/js/pages/providers.js index 6d284e17..6b9afed0 100755 --- a/assets/js/pages/providers.js +++ b/assets/js/pages/providers.js @@ -340,8 +340,8 @@ App.Pages.Providers = (function () { $providers.find('.record-details').find('input, select, textarea').val('').prop('disabled', true); $providers.find('.record-details .form-label span').prop('hidden', true); $providers.find('.record-details #calendar-view').val('default'); - $providers.find('.record-details #language').val('english'); - $providers.find('.record-details #timezone').val('UTC'); + $providers.find('.record-details #language').val(vars('default_language')); + $providers.find('.record-details #timezone').val(vars('default_timezone')); $providers.find('.record-details #is-private').prop('checked', false); $providers.find('.record-details #notifications').prop('checked', true); $providers.find('.add-break, .add-working-plan-exception, #reset-working-plan').prop('disabled', true); diff --git a/assets/js/pages/secretaries.js b/assets/js/pages/secretaries.js index 75e85a83..bdcf274b 100644 --- a/assets/js/pages/secretaries.js +++ b/assets/js/pages/secretaries.js @@ -344,7 +344,8 @@ App.Pages.Secretaries = (function () { $secretaries.find('.record-details').find('input, select, textarea').val('').prop('disabled', true); $secretaries.find('.record-details .form-label span').prop('hidden', true); $secretaries.find('.record-details #calendar-view').val('default'); - $secretaries.find('.record-details #timezone').val('UTC'); + $secretaries.find('.record-details #timezone').val(vars('default_timezone')); + $secretaries.find('.record-details #language').val(vars('default_language')); $secretaries.find('.record-details #notifications').prop('checked', true); $secretaries.find('.add-edit-delete-group').show(); $secretaries.find('.save-cancel-group').hide(); From 9a24fb6a6bc2aa32720b9dc73ab416548383ae01 Mon Sep 17 00:00:00 2001 From: tm8544 <15167679+tm8544@users.noreply.github.com> Date: Fri, 29 Mar 2024 18:56:08 +0200 Subject: [PATCH 02/72] Update 052_add_default_timezone_to_setting.php Corrected class name --- application/migrations/052_add_default_timezone_to_setting.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/migrations/052_add_default_timezone_to_setting.php b/application/migrations/052_add_default_timezone_to_setting.php index 7e3be9b6..ce39396a 100644 --- a/application/migrations/052_add_default_timezone_to_setting.php +++ b/application/migrations/052_add_default_timezone_to_setting.php @@ -11,7 +11,7 @@ * @since v1.3.2 * ---------------------------------------------------------------------------- */ -class Migration_Add_weekday_start_setting extends EA_Migration +class Migration_Add_default_timezone_setting extends EA_Migration { /** * Upgrade method. From f3b9aa5018e14fc568dac444a5af180b2f24babb Mon Sep 17 00:00:00 2001 From: tm8544 <15167679+tm8544@users.noreply.github.com> Date: Fri, 29 Mar 2024 18:57:01 +0200 Subject: [PATCH 03/72] Update 053_add_default_language_to_settings.php Corrected class name --- application/migrations/053_add_default_language_to_settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/migrations/053_add_default_language_to_settings.php b/application/migrations/053_add_default_language_to_settings.php index 76866ffe..3882e8ad 100644 --- a/application/migrations/053_add_default_language_to_settings.php +++ b/application/migrations/053_add_default_language_to_settings.php @@ -11,7 +11,7 @@ * @since v1.3.2 * ---------------------------------------------------------------------------- */ -class Migration_Add_weekday_start_setting extends EA_Migration +class Migration_Add_default_language_setting extends EA_Migration { /** * Upgrade method. From 1ab1f5b384e6a869c91f3efb1687cfef8d3b6503 Mon Sep 17 00:00:00 2001 From: tm8544 <15167679+tm8544@users.noreply.github.com> Date: Sat, 30 Mar 2024 11:03:00 +0200 Subject: [PATCH 04/72] Rename 052_add_default_timezone_to_setting.php to 054_add_default_timezone_to_setting.php Renamed file to avoid conflict with PR #1479 --- ...one_to_setting.php => 054_add_default_timezone_to_setting.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename application/migrations/{052_add_default_timezone_to_setting.php => 054_add_default_timezone_to_setting.php} (100%) diff --git a/application/migrations/052_add_default_timezone_to_setting.php b/application/migrations/054_add_default_timezone_to_setting.php similarity index 100% rename from application/migrations/052_add_default_timezone_to_setting.php rename to application/migrations/054_add_default_timezone_to_setting.php From f47ce7a1943ffdd5d69f7af3862dc5941e9a03e1 Mon Sep 17 00:00:00 2001 From: tm8544 <15167679+tm8544@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:12:04 +0200 Subject: [PATCH 05/72] Update Calendar.php add script_vars for default values --- application/controllers/Calendar.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/application/controllers/Calendar.php b/application/controllers/Calendar.php index 9f054ddf..b5c98ac2 100644 --- a/application/controllers/Calendar.php +++ b/application/controllers/Calendar.php @@ -145,6 +145,8 @@ class Calendar extends EA_Controller 'secretary_providers' => $secretary_providers, 'edit_appointment' => $edit_appointment, 'customers' => $this->customers_model->get(null, 50, null, 'update_datetime DESC'), + 'default_language' => setting('default_language'), + 'default_timezone' => setting('default_timezone'), ]); html_vars([ From db6c127d3b71f2892146e7b49e47cbb6e7096b59 Mon Sep 17 00:00:00 2001 From: tm8544 <15167679+tm8544@users.noreply.github.com> Date: Mon, 8 Apr 2024 18:35:06 +0300 Subject: [PATCH 06/72] New lines moved to the end of file before // End --- application/language/arabic/translations_lang.php | 8 ++++---- application/language/bulgarian/translations_lang.php | 8 ++++---- application/language/catalan/translations_lang.php | 8 ++++---- application/language/chinese/translations_lang.php | 8 ++++---- application/language/croatian/translations_lang.php | 8 ++++---- application/language/czech/translations_lang.php | 8 ++++---- application/language/danish/translations_lang.php | 8 ++++---- application/language/dutch/translations_lang.php | 8 ++++---- application/language/english/translations_lang.php | 8 ++++---- application/language/estonian/translations_lang.php | 8 ++++---- application/language/finnish/translations_lang.php | 8 ++++---- application/language/french/translations_lang.php | 8 ++++---- application/language/german/translations_lang.php | 8 ++++---- application/language/greek/translations_lang.php | 8 ++++---- application/language/hebrew/translations_lang.php | 8 ++++---- application/language/hindi/translations_lang.php | 8 ++++---- application/language/hungarian/translations_lang.php | 8 ++++---- application/language/italian/translations_lang.php | 8 ++++---- application/language/japanese/translations_lang.php | 8 ++++---- application/language/luxembourgish/translations_lang.php | 8 ++++---- application/language/marathi/translations_lang.php | 8 ++++---- application/language/persian/translations_lang.php | 8 ++++---- application/language/polish/translations_lang.php | 8 ++++---- application/language/portuguese-br/translations_lang.php | 8 ++++---- application/language/portuguese/translations_lang.php | 8 ++++---- application/language/romanian/translations_lang.php | 8 ++++---- application/language/russian/translations_lang.php | 8 ++++---- application/language/serbian/translations_lang.php | 8 ++++---- application/language/slovak/translations_lang.php | 8 ++++---- application/language/spanish/translations_lang.php | 8 ++++---- application/language/swedish/translations_lang.php | 8 ++++---- application/language/thai/translations_lang.php | 8 ++++---- application/language/turkish/translations_lang.php | 8 ++++---- 33 files changed, 132 insertions(+), 132 deletions(-) diff --git a/application/language/arabic/translations_lang.php b/application/language/arabic/translations_lang.php index 849daecc..a0bd3a5e 100755 --- a/application/language/arabic/translations_lang.php +++ b/application/language/arabic/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/bulgarian/translations_lang.php b/application/language/bulgarian/translations_lang.php index 27a5703d..c7098328 100755 --- a/application/language/bulgarian/translations_lang.php +++ b/application/language/bulgarian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/catalan/translations_lang.php b/application/language/catalan/translations_lang.php index a07fc91e..2442f380 100644 --- a/application/language/catalan/translations_lang.php +++ b/application/language/catalan/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Quan està activat, els clients i els usua $lang['check_spam_folder'] = 'Comproveu la vostra carpeta de correu brossa si el correu no arriba en uns minuts.'; $lang['api_token_hint'] = 'Establiu un token secret per permetre l\'autenticació basada en tokens de l\'API d\'Easy!Appointments.'; $lang['timezone'] = 'Zona horària'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Això sobreescriurà els plans de treball existents del proveïdor, esteu segur que voleu continuar?'; $lang['working_plans_got_updated'] = 'S\'han actualitzat tots els plans de treball.'; $lang['apply_to_all_providers'] = 'Aplica-ho a tots els proveïdors'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/chinese/translations_lang.php b/application/language/chinese/translations_lang.php index 50142635..cd7bdcab 100755 --- a/application/language/chinese/translations_lang.php +++ b/application/language/chinese/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/croatian/translations_lang.php b/application/language/croatian/translations_lang.php index 384072e5..8e8765f1 100644 --- a/application/language/croatian/translations_lang.php +++ b/application/language/croatian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Kada je omogućeno, klijenti i korisnici $lang['check_spam_folder'] = 'Provjerite svoju spam mapu ako e-mail ne stigne unutar nekoliko minuta.'; $lang['api_token_hint'] = 'Postavite tajni token kako biste omogućili autentifikaciju temeljenu na tokenima za Easy!Appointments API.'; $lang['timezone'] = 'Vremenska Zona'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Ovo će prebrisati postojeće radne planove pružatelja, jeste li sigurni da želite nastaviti?'; $lang['working_plans_got_updated'] = 'Svi radni planovi su ažurirani.'; $lang['apply_to_all_providers'] = 'Primijeni na sve pružatelje'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/czech/translations_lang.php b/application/language/czech/translations_lang.php index fb0c6f9e..6a9f18a0 100644 --- a/application/language/czech/translations_lang.php +++ b/application/language/czech/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Pokud je zapnuto, uživatelé a zákazníc $lang['check_spam_folder'] = 'Zkontrolujte prosím svou SPAM schránku, pokud email v několika minutách nedorazí.'; $lang['api_token_hint'] = 'Nastavte bezpečnostní token, abyste povolili autentizaci tokenem v API Easy!Appointments.'; $lang['timezone'] = 'Časová zóna'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Tímto nahradíte současné pracovní plány. Opravdu jste si jisti, že chcete pokračovat?'; $lang['working_plans_got_updated'] = 'Všechny pracovní plány byly aktualizovány.'; $lang['apply_to_all_providers'] = 'Použít pro všechny poskytovatele'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/danish/translations_lang.php b/application/language/danish/translations_lang.php index 438da52d..97567b04 100755 --- a/application/language/danish/translations_lang.php +++ b/application/language/danish/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Tjek venligst din uønsket mail (spam) mappe hvis du ikke har modtaget mailen inden for et par minutter.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Tidszone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/dutch/translations_lang.php b/application/language/dutch/translations_lang.php index 286674b2..2bb51780 100755 --- a/application/language/dutch/translations_lang.php +++ b/application/language/dutch/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/english/translations_lang.php b/application/language/english/translations_lang.php index 4b1156a7..04f35a6d 100755 --- a/application/language/english/translations_lang.php +++ b/application/language/english/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/estonian/translations_lang.php b/application/language/estonian/translations_lang.php index ef819757..756d6ed3 100644 --- a/application/language/estonian/translations_lang.php +++ b/application/language/estonian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Kui see on sisse lülitatud, siis klient p $lang['check_spam_folder'] = 'Kui e-maili mõne minuti jooksul ei saabu, siis palun kontrolli enda meili rämpspostikausta.'; $lang['api_token_hint'] = 'Sea sisse juurdepääsuluba et võimaldada pääsuloaga autentimine Easy!Appointments API kasutamiseks.'; $lang['timezone'] = 'Ajavöönd'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'See kirjutab eksisteerivad tööplaanid üle. Oled kindel, et soovid jätkata?'; $lang['working_plans_got_updated'] = 'Kõik tööplaanid uuendatud.'; $lang['apply_to_all_providers'] = 'Rakenda kõikidele teenusepakkujatele'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/finnish/translations_lang.php b/application/language/finnish/translations_lang.php index 63413ea2..df3fdd5c 100755 --- a/application/language/finnish/translations_lang.php +++ b/application/language/finnish/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Jos valittu, asiakkaiden ja käyttäjien o $lang['check_spam_folder'] = 'Tarkista roskapostikansio mikäli viestiä ei näy muutaman minuutin kuluessa.'; $lang['api_token_hint'] = 'Aseta secret token aktivoidaksesi token-pohjaisen autentikoinnin Easy!Appointments API:lle.'; $lang['timezone'] = 'Aikavyöhyke'; -$lang['default_timezone'] = 'Oletusaikavyöhyke'; -$lang['default_timezone_hint'] = 'Tämä tulee uusien käyttäjien ja varausten oletusaikavyöhykkeeksi'; -$lang['default_language'] = 'Oletuskieli'; -$lang['default_language_hint'] = 'Tämä tulee uusien käyttäjien oletuskieleksi'; $lang['overwrite_existing_working_plans'] = 'Tämä korvaa aiemmat työsuunnitelmat, haluatko varmasti jatkaa?'; $lang['working_plans_got_updated'] = 'Kaikki työsuunnitelmat päivitettiin.'; $lang['apply_to_all_providers'] = 'Aseta kaikille palveluntarjoajille'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Oletusaikavyöhyke'; +$lang['default_timezone_hint'] = 'Tämä tulee uusien käyttäjien ja varausten oletusaikavyöhykkeeksi'; +$lang['default_language'] = 'Oletuskieli'; +$lang['default_language_hint'] = 'Tämä tulee uusien käyttäjien oletuskieleksi'; // End diff --git a/application/language/french/translations_lang.php b/application/language/french/translations_lang.php index dcb3a1ad..9478b016 100755 --- a/application/language/french/translations_lang.php +++ b/application/language/french/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Lorsque activé, les clients et les utilis $lang['check_spam_folder'] = 'Veuillez vérifier votre dossier de courrier indésirable si l\'email n\'arrive pas dans les minutes qui suivent.'; $lang['api_token_hint'] = 'Définissez un jeton secret afin d\'activer l\'authentification basée sur le jeton de l\'API Easy!Appointments. '; $lang['timezone'] = 'Fuseau horaire'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Cela écrasera les plannings existants du fournisseur. Êtes-vous sûr de vouloir continuer ?'; $lang['working_plans_got_updated'] = 'Tous les plannings ont été mis à jour.'; $lang['apply_to_all_providers'] = 'Appliquer à tous les fournisseurs'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/german/translations_lang.php b/application/language/german/translations_lang.php index 3ee8300b..58fa0fc0 100755 --- a/application/language/german/translations_lang.php +++ b/application/language/german/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Wenn aktiviert, müssen Kunden und Benutze $lang['check_spam_folder'] = 'Bitte kontrollieren Sie Ihren Spam-Ordner, falls die E-Mail nicht innerhalb weniger Minuten eintrifft.'; $lang['api_token_hint'] = 'Setze einen geheimen Token um die tokenbasierte Authentifizierung für die Easy!Appointments API zu aktivieren.'; $lang['timezone'] = 'Zeitzone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Dies wird bestehende Arbeitspläne von Anbietern überschreiben. Sind sie sicher?'; $lang['working_plans_got_updated'] = 'Alle Arbeitspläne wurden aktualisiert.'; $lang['apply_to_all_providers'] = 'Auf alle Anbieter anwenden'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/greek/translations_lang.php b/application/language/greek/translations_lang.php index 755ea715..097ca11c 100755 --- a/application/language/greek/translations_lang.php +++ b/application/language/greek/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Όταν ενεργοποιημένο, ο $lang['check_spam_folder'] = 'Παρακαλώ ελέγξτε τον φάκελο spam εφόσον το ηλεκτρονικό μήνυμα δεν έχει ληφθεί.'; $lang['api_token_hint'] = 'Καταχωρήστε εναν μυστικό κωδικό για να μπορέσετε να ενεργοποιήσετε την token-based πιστοποίηση του Easy!Appointments API.'; $lang['timezone'] = 'Ζώνη Ώρας'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Αυτό θα αντικαταστήσει το υπάρχον πλάνο εργασίας του παρόχου, είστε σίγουρος ότι θέλετε να συνεχίσετε;'; $lang['working_plans_got_updated'] = 'Όλα τα πλάνα εργασίας έχουν ενημερωθεί.'; $lang['apply_to_all_providers'] = 'Εφαρμογή σε όλους τος παρόχους'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/hebrew/translations_lang.php b/application/language/hebrew/translations_lang.php index 0aaeb30a..e06cd11f 100644 --- a/application/language/hebrew/translations_lang.php +++ b/application/language/hebrew/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'כאשר אפשרות זו מופעלת, $lang['check_spam_folder'] = 'אם הדוא"ל אינו מגיע תוך מספר דקות יש לבדוק את תיקיית הספאם שלך .'; $lang['api_token_hint'] = 'הגדר טוקן סודי על מנת לאפשר אימות מבוסס טוקן בממשק ה- API של Easy! Appointments.'; $lang['timezone'] = 'אזור זמן'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'פעולה זו תחליף את כל תוכניות העבודה של הספקים הקיימים, האם את/ה בטוח/ה שברצונך להמשיך?'; $lang['working_plans_got_updated'] = 'כל תוכניות העבודה עודכנו.'; $lang['apply_to_all_providers'] = 'החל על כל הספקים'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/hindi/translations_lang.php b/application/language/hindi/translations_lang.php index 6c490c09..ceb03e45 100755 --- a/application/language/hindi/translations_lang.php +++ b/application/language/hindi/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/hungarian/translations_lang.php b/application/language/hungarian/translations_lang.php index 3d5415a6..33b21d4f 100755 --- a/application/language/hungarian/translations_lang.php +++ b/application/language/hungarian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/italian/translations_lang.php b/application/language/italian/translations_lang.php index 95099e8d..3e259d2c 100755 --- a/application/language/italian/translations_lang.php +++ b/application/language/italian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Quando abilitato i clienti e gli utenti ne $lang['check_spam_folder'] = 'Controlla la cartella SPAM se non ricevi l\'email di conferma entro pochi minuti.'; $lang['api_token_hint'] = 'Imposta un token segreto per abilitare l\'autenticazione basata su token nelle API di Easy!Appointments.'; $lang['timezone'] = 'Fuso Orario'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Questa operazione sovrascrive il Piano di Lavoro del fornitore esistente, sei sicuro di voler continuare?'; $lang['working_plans_got_updated'] = 'Tutti i Piani di Lavoro sono stati aggiornati.'; $lang['apply_to_all_providers'] = 'Applica a tutti i Fornitori'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/japanese/translations_lang.php b/application/language/japanese/translations_lang.php index 8ab500ba..6bde7eb8 100755 --- a/application/language/japanese/translations_lang.php +++ b/application/language/japanese/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/luxembourgish/translations_lang.php b/application/language/luxembourgish/translations_lang.php index 479d1bcb..e9ba5007 100755 --- a/application/language/luxembourgish/translations_lang.php +++ b/application/language/luxembourgish/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/marathi/translations_lang.php b/application/language/marathi/translations_lang.php index 718d93a5..b78050b0 100644 --- a/application/language/marathi/translations_lang.php +++ b/application/language/marathi/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/persian/translations_lang.php b/application/language/persian/translations_lang.php index 1ed254ff..c9dd3b51 100644 --- a/application/language/persian/translations_lang.php +++ b/application/language/persian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'در صورت فعال بودن ، هنگ $lang['check_spam_folder'] = 'اگر تا دقایقی دیگر ایمیل را دریافت نکردید ، لطفاً پوشه هرزنامه خود را بررسی کنید.'; $lang['api_token_hint'] = 'برای فعال سازی احراز هویت مبتنی بر token برای دسترسی به API برنامه، یک رمز مخفی تنظیم کنید.'; $lang['timezone'] = 'منطقه زمانی'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'این کار باعث بازنویسی برنامه های کاری موجود می شود. آیا از این کار اطمینان دارید؟'; $lang['working_plans_got_updated'] = 'تمامی برنامه های کاری به روز رسانی شدند'; $lang['apply_to_all_providers'] = 'اعمال کردن به همه ارائه دهنده ها'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/polish/translations_lang.php b/application/language/polish/translations_lang.php index 21d42000..a17a1762 100755 --- a/application/language/polish/translations_lang.php +++ b/application/language/polish/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/portuguese-br/translations_lang.php b/application/language/portuguese-br/translations_lang.php index 65cd512c..3097a7c5 100755 --- a/application/language/portuguese-br/translations_lang.php +++ b/application/language/portuguese-br/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Quando ativado, os clientes e usuários pr $lang['check_spam_folder'] = 'Verifique sua pasta de spam se o e-mail não chegar em alguns minutos.'; $lang['api_token_hint'] = 'Defina um token secreto para habilitar a autenticação baseada em token da API Easy!Appointments.'; $lang['timezone'] = 'Fuso horário'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Isso substituirá os planos de trabalho dos fornecedores existentes. Tem certeza de que deseja continuar?'; $lang['working_plans_got_updated'] = 'Todos os planos de trabalho foram atualizados.'; $lang['apply_to_all_providers'] = 'Aplicar a todos os fornecedores'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/portuguese/translations_lang.php b/application/language/portuguese/translations_lang.php index 862b90ab..de80b7cf 100755 --- a/application/language/portuguese/translations_lang.php +++ b/application/language/portuguese/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/romanian/translations_lang.php b/application/language/romanian/translations_lang.php index 5386e8c5..a56f3c67 100755 --- a/application/language/romanian/translations_lang.php +++ b/application/language/romanian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/russian/translations_lang.php b/application/language/russian/translations_lang.php index 472c9d99..aa53efc1 100644 --- a/application/language/russian/translations_lang.php +++ b/application/language/russian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Когда эта функция вклю $lang['check_spam_folder'] = 'Пожалуйста, проверьте папку спама, если письмо не пришло в течение нескольких минут.'; $lang['api_token_hint'] = 'Установите секретный токен, чтобы включить аутентификацию на основе токена в Easy!Appointments API.'; $lang['timezone'] = 'Часовой пояс'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Это перезапишет существующие рабочие планы поставщика - Вы уверены что хотите продолжить?'; $lang['working_plans_got_updated'] = 'Все рабочие планы были обновлены.'; $lang['apply_to_all_providers'] = 'Применяется ко всем поставщикам услуг'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/serbian/translations_lang.php b/application/language/serbian/translations_lang.php index b3dce9ca..4fc84d83 100644 --- a/application/language/serbian/translations_lang.php +++ b/application/language/serbian/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Kada je omogućeno, klijenti i korisnici t $lang['check_spam_folder'] = 'Proverite svoju neželjenu poštu (spam) ako E-mail nije stigao u roku od nekoliko minuta.'; $lang['api_token_hint'] = 'Postavite tajni token kako biste omogućili pristup Easy!Appointments API.'; $lang['timezone'] = 'Vremenska zona'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Ovo će prepisati postojeći plan rada izvršioca, da li ste sigurni da želite da nastavite?'; $lang['working_plans_got_updated'] = 'Svi planovi rada su aktualizovani.'; $lang['apply_to_all_providers'] = 'Primeni na sve izvršioce'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/slovak/translations_lang.php b/application/language/slovak/translations_lang.php index e32424de..b27c7697 100755 --- a/application/language/slovak/translations_lang.php +++ b/application/language/slovak/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'When enabled, customers and users will nee $lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; $lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; $lang['timezone'] = 'Timezone'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'All the working plans got updated.'; $lang['apply_to_all_providers'] = 'Apply To All Providers'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/spanish/translations_lang.php b/application/language/spanish/translations_lang.php index b3cda78c..ca4a4912 100755 --- a/application/language/spanish/translations_lang.php +++ b/application/language/spanish/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Cuando está habilitado, clientes y usuari $lang['check_spam_folder'] = 'Por favor, verifique su carpeta de correo no deseado si el correo no llega dentro de unos minutos.'; $lang['api_token_hint'] = 'Defina un token secreto para habilitar la autentificación por token mediante la API de Easy!Appointments.'; $lang['timezone'] = 'Zona horaria'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Esto sobreescribirá los planes de trabajo existentes del proveedor. ¿Seguro que desea continuar?'; $lang['working_plans_got_updated'] = 'Todos los planes de trabajo fueron actualizados.'; $lang['apply_to_all_providers'] = 'Aplicar a todos los proveedores'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/swedish/translations_lang.php b/application/language/swedish/translations_lang.php index b4947b42..44ae8b45 100644 --- a/application/language/swedish/translations_lang.php +++ b/application/language/swedish/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'När denna är aktiv måste kunderna ange $lang['check_spam_folder'] = 'Om eposten inte kommit fram inom några minuter; kolla skräpposten.'; $lang['api_token_hint'] = 'Ställ in en hemlig token för att aktivera tokenbaserad autentisering av Easy!Appointments API.'; $lang['timezone'] = 'Tidszon'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'Detta kommer skriva över befintliga leverantörsscheman. Är du säker på att du vill det?'; $lang['working_plans_got_updated'] = 'Alla scheman uppdaterades.'; $lang['apply_to_all_providers'] = 'Tilldela till alla leverantörer'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/thai/translations_lang.php b/application/language/thai/translations_lang.php index b0755a92..55894c5b 100644 --- a/application/language/thai/translations_lang.php +++ b/application/language/thai/translations_lang.php @@ -319,10 +319,6 @@ $lang['require_phone_number_hint'] = 'เมื่อเปิดใช้งา $lang['check_spam_folder'] = 'โปรดตรวจสอบโฟลเดอร์สแปมของคุณ หากคุณไม่ได้รับอีเมลภายในไม่กี่นาที'; $lang['api_token_hint'] = 'ตั้งค่าโทเค็นลับเพื่อเปิดใช้งานการตรวจสอบสิทธิ์โดยใช้โทเค็นของ Easy!Appointments API'; $lang['timezone'] = 'เขตเวลา'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'การดำเนินการนี้จะเขียนทับแผนการทำงานของผู้ให้บริการที่มีอยู่ คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ'; $lang['working_plans_got_updated'] = 'แผนการทำงานทั้งหมดได้รับการปรับปรุง'; $lang['apply_to_all_providers'] = 'นำไปใช้กับผู้ให้บริการทั้งหมด'; @@ -458,4 +454,8 @@ $lang['sync_method_prompt'] = 'คุณต้องการใช้วิธ $lang['caldav_server'] = 'เซิร์ฟเวอร์ CalDAV'; $lang['caldav_connection_info_prompt'] = 'โปรดป้อนข้อมูลการเชื่อมต่อของเซิร์ฟเวอร์ CalDAV เป้าหมาย'; $lang['connect'] = 'เชื่อมต่อ'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End diff --git a/application/language/turkish/translations_lang.php b/application/language/turkish/translations_lang.php index ca419416..a66d7c80 100755 --- a/application/language/turkish/translations_lang.php +++ b/application/language/turkish/translations_lang.php @@ -322,10 +322,6 @@ $lang['require_phone_number_hint'] = 'Etkinleştirildiğinde, müşterilerin ve $lang['check_spam_folder'] = 'E-posta birkaç dakika içinde gelmezse lütfen spam klasörünüzü kontrol edin.'; $lang['api_token_hint'] = 'Easy!Appointments Api sinin belirteç tabanlı kimlik doğrulamasını etkinleştirmek için gizli bir belirteç ayarlayın.'; $lang['timezone'] = 'Saat Dilimi'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; $lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; $lang['working_plans_got_updated'] = 'Tüm çalışma planları güncellendi.'; $lang['apply_to_all_providers'] = 'Tüm H.Sağlayıcılara Uygula'; @@ -457,4 +453,8 @@ $lang['webhook_saved'] = 'Webhook saved successfully.'; $lang['webhook_deleted'] = 'Webhook deleted successfully.'; $lang['delete_webhook'] = 'Delete Webhook'; $lang['contact_info'] = 'Contact Info'; +$lang['default_timezone'] = 'Default Timezone'; +$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; +$lang['default_language'] = 'Default Language'; +$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; // End From 3105ae6db508a9ef7e4e0b46ac67e40bd48e2c1f Mon Sep 17 00:00:00 2001 From: tm8544 <15167679+tm8544@users.noreply.github.com> Date: Fri, 26 Apr 2024 21:49:43 +0300 Subject: [PATCH 07/72] Update 054_add_default_timezone_to_setting.php --- application/migrations/054_add_default_timezone_to_setting.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/migrations/054_add_default_timezone_to_setting.php b/application/migrations/054_add_default_timezone_to_setting.php index ce39396a..584ca2d7 100644 --- a/application/migrations/054_add_default_timezone_to_setting.php +++ b/application/migrations/054_add_default_timezone_to_setting.php @@ -21,7 +21,7 @@ class Migration_Add_default_timezone_setting extends EA_Migration if (!$this->db->get_where('settings', ['name' => 'default_timezone'])->num_rows()) { $this->db->insert('settings', [ 'name' => 'default_timezone', - 'value' => 'UTC', + 'value' => date_default_timezone_get(), ]); } } From bbf8869d3bca94f6b7c068a6b26a9aae486f58fd Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Thu, 28 Mar 2024 11:08:55 +0000 Subject: [PATCH 08/72] Automatically redirect logged in users to the calendar page --- application/controllers/Login.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/application/controllers/Login.php b/application/controllers/Login.php index f7945144..735d2d23 100644 --- a/application/controllers/Login.php +++ b/application/controllers/Login.php @@ -40,6 +40,11 @@ class Login extends EA_Controller */ public function index() { + if (session('user_id')) { + redirect('calendar'); + return; + } + html_vars([ 'page_title' => lang('login'), 'base_url' => config('base_url'), From 4570d0859ee3734c14953a9402f6e553a44d9fe8 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Mon, 8 Apr 2024 15:48:53 +0200 Subject: [PATCH 09/72] Do not allow user to submit login without a username and a password --- application/views/pages/login.php | 8 ++++++-- assets/js/pages/login.js | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/application/views/pages/login.php b/application/views/pages/login.php index d54cff4a..f68e5763 100644 --- a/application/views/pages/login.php +++ b/application/views/pages/login.php @@ -18,14 +18,18 @@ - +
- +
diff --git a/assets/js/pages/login.js b/assets/js/pages/login.js index 06282cb5..3ad7bd35 100644 --- a/assets/js/pages/login.js +++ b/assets/js/pages/login.js @@ -32,6 +32,10 @@ App.Pages.Login = (function () { const username = $username.val(); const password = $password.val(); + if (!username || !password) { + return; + } + const $alert = $('.alert'); $alert.addClass('d-none'); From 67a64e4eaf90aa316ebd2c97dee1339122acefeb Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Mon, 8 Apr 2024 15:57:43 +0200 Subject: [PATCH 10/72] Include the status to the appointment notification --- .../views/emails/appointment_deleted_email.php | 11 +++++++++++ application/views/emails/appointment_saved_email.php | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/application/views/emails/appointment_deleted_email.php b/application/views/emails/appointment_deleted_email.php index 92fd37e6..35d55a3d 100644 --- a/application/views/emails/appointment_deleted_email.php +++ b/application/views/emails/appointment_deleted_email.php @@ -81,6 +81,17 @@ + + + + + + + + + + + diff --git a/application/views/emails/appointment_saved_email.php b/application/views/emails/appointment_saved_email.php index 1962f3e0..cbfb85be 100644 --- a/application/views/emails/appointment_saved_email.php +++ b/application/views/emails/appointment_saved_email.php @@ -85,6 +85,17 @@ + + + + + + + + + + + From e81058a05dde6f7b752ee061902992786b11adfe Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Mon, 15 Apr 2024 14:09:55 +0200 Subject: [PATCH 11/72] Patch the empty month and year selection of blocked periods (#1494) --- assets/js/pages/blocked_periods.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/js/pages/blocked_periods.js b/assets/js/pages/blocked_periods.js index 1b5e70e5..b4b7ba0f 100644 --- a/assets/js/pages/blocked_periods.js +++ b/assets/js/pages/blocked_periods.js @@ -80,6 +80,9 @@ App.Pages.BlockedPeriods = (function () { $blockedPeriods.find('.record-details .form-label span').prop('hidden', false); $filterBlockedPeriods.find('button').prop('disabled', true); $filterBlockedPeriods.find('.results').css('color', '#AAA'); + + App.Utils.UI.setDateTimePickerValue($startDateTime, moment('00:00', 'HH:mm').toDate()); + App.Utils.UI.setDateTimePickerValue($endDateTime, moment('00:00', 'HH:mm').add(1, 'day').toDate()); }); /** From dfeb213f5b428789b0dda911bd7e31f6ae36dcc6 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Mon, 15 Apr 2024 14:16:56 +0200 Subject: [PATCH 12/72] Reset the time selection when the user changes the non-working switch --- .../js/components/working_plan_exceptions_modal.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/assets/js/components/working_plan_exceptions_modal.js b/assets/js/components/working_plan_exceptions_modal.js index bb3b6418..c257ca35 100644 --- a/assets/js/components/working_plan_exceptions_modal.js +++ b/assets/js/components/working_plan_exceptions_modal.js @@ -215,6 +215,11 @@ App.Components.WorkingPlanExceptionsModal = (function () { ); } + function resetTimeSelection() { + App.Utils.UI.setDateTimePickerValue($start, moment('08:00', 'HH:mm').toDate()); + App.Utils.UI.setDateTimePickerValue($end, moment('20:00', 'HH:mm').toDate()); + } + /** * Open the modal and start adding a new working plan exception. * @@ -224,8 +229,8 @@ App.Components.WorkingPlanExceptionsModal = (function () { deferred = $.Deferred(); App.Utils.UI.setDateTimePickerValue($date, new Date()); - App.Utils.UI.setDateTimePickerValue($start, moment('08:00', 'HH:mm').toDate()); - App.Utils.UI.setDateTimePickerValue($end, moment('20:00', 'HH:mm').toDate()); + + resetTimeSelection(); $isNonWorkingDay.prop('checked', false); @@ -450,11 +455,11 @@ App.Components.WorkingPlanExceptionsModal = (function () { } /** - * Event: Is Non Working Day "Change" + * Event: Is Non-Working Day "Change" */ function onIsNonWorkingDayChange() { const isNonWorkingDay = $isNonWorkingDay.prop('checked'); - + resetTimeSelection(); toggleFieldsByNonWorkingDay(isNonWorkingDay); } From 01ddd00554883a3b4b5ff64d997dfa08ec658aa9 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Mon, 15 Apr 2024 14:40:03 +0200 Subject: [PATCH 13/72] Move the blocked period end date automatically on start date change (#1499) --- assets/js/pages/blocked_periods.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/assets/js/pages/blocked_periods.js b/assets/js/pages/blocked_periods.js index b4b7ba0f..be225d64 100644 --- a/assets/js/pages/blocked_periods.js +++ b/assets/js/pages/blocked_periods.js @@ -26,6 +26,7 @@ App.Pages.BlockedPeriods = (function () { let filterResults = {}; let filterLimit = 20; + let backupStartDateTimeObject = undefined; /** * Add the page event listeners. @@ -159,6 +160,27 @@ App.Pages.BlockedPeriods = (function () { select(id, true); } }); + + $blockedPeriods.on('focus', '#start-date-time', () => { + backupStartDateTimeObject = App.Utils.UI.getDateTimePickerValue($startDateTime); + }); + + /** + * Event: Start Date Time Input "Change" + */ + $blockedPeriods.on('change', '#start-date-time', (event) => { + const endDateTimeObject = App.Utils.UI.getDateTimePickerValue($endDateTime); + + if (!backupStartDateTimeObject || !endDateTimeObject) { + return; + } + + const endDateTimeMoment = moment(endDateTimeObject); + const backupStartDateTimeMoment = moment(backupStartDateTimeObject); + const diff = endDateTimeMoment.diff(backupStartDateTimeMoment); + const newEndDateTimeMoment = endDateTimeMoment.clone().add(diff, 'milliseconds'); + App.Utils.UI.setDateTimePickerValue($endDateTime, newEndDateTimeMoment.toDate()); + }); } /** @@ -298,6 +320,8 @@ App.Pages.BlockedPeriods = (function () { $blockedPeriods.find('.record-details .is-invalid').removeClass('is-invalid'); $blockedPeriods.find('.record-details .form-message').hide(); + + backupStartDateTimeObject = undefined; } /** From 363ddeede7fb13e1d8b28636dc7878dd9259185a Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Mon, 15 Apr 2024 18:22:28 +0200 Subject: [PATCH 14/72] Fix the array_find call --- application/helpers/array_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/helpers/array_helper.php b/application/helpers/array_helper.php index 1f47c14e..2381f894 100644 --- a/application/helpers/array_helper.php +++ b/application/helpers/array_helper.php @@ -48,7 +48,7 @@ if (!function_exists('array_find')) { throw new InvalidArgumentException('No filter function provided.'); } - return array_filter($array, $callback)[0] ?? null; + return array_values(array_filter($array, $callback))[0] ?? null; } } From 68431e361e7ca6c44f717d13432392c6fbd3395b Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 12:18:56 +0200 Subject: [PATCH 15/72] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20c90b76..f5f13c8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ developers to maintain and readjust their custom modifications on the main proje - Have an option to hide customer data fields during booking (#1081) - Add a SECURITY.md file to the repository (#1122) - Add support for custom fields on customers (#1133) +- Add from email/name and reply-to settings in the email.php configuration file (#1465) ### Changed From 07884d2096410e7693f0e18268046e51cf2e0ce9 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 12:23:52 +0200 Subject: [PATCH 16/72] Update the Baikal Docker configuration and the related documentation file --- docker-compose.yml | 9 +++++---- docs/docker.md | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ba3775ee..e2dcda17 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ -version: '3.1' services: php-fpm: build: docker/php-fpm @@ -57,7 +56,9 @@ services: baikal: image: ckulka/baikal:0.9.4-apache ports: - - "9000:80" + - "8100:80" volumes: - - ./docker/baikal:/var/www/baikal - + - ./docker/baikal:/var/www/html + - ./docker/baikal/config:/var/www/baikal/config + - ./docker/baikal/data:/var/www/baikal/Specific + diff --git a/docs/docker.md b/docs/docker.md index d9baadf0..debdccc0 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -39,6 +39,8 @@ In the host machine the server is accessible from `http://localhost` and the dat You can additionally access phpMyAdmin from `http://localhost:8080` (credentials are `root` / `secret`) and Mailpit from `http://localhost:8025`. +Baikal, a self-hosted CalDAV server used to develop the CalDAV syncing integration is available on `http://localhost:8100`. + **Attention:** This configuration is meant to make development easier. It is not intended to server as a production environment! A production image of Easy!Appointments can be found at: https://github.com/alextselegidis/easyappointments-docker From a364e777bf6181c99457500df9edf0816d703458 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 12:57:13 +0200 Subject: [PATCH 17/72] Update the HTTP client param comment --- assets/js/http/calendar_http_client.js | 14 +++++++------- assets/js/http/google_http_client.js | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/assets/js/http/calendar_http_client.js b/assets/js/http/calendar_http_client.js index 41125abd..b0db1c51 100755 --- a/assets/js/http/calendar_http_client.js +++ b/assets/js/http/calendar_http_client.js @@ -28,7 +28,7 @@ App.Http.Calendar = (function () { * @param {Function} [successCallback] Optional, if defined, this function is going to be executed on post success. * @param {Function} [errorCallback] Optional, if defined, this function is going to be executed on post failure. * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function saveAppointment(appointment, customer, successCallback, errorCallback) { const url = App.Utils.Url.siteUrl('calendar/save_appointment'); @@ -61,7 +61,7 @@ App.Http.Calendar = (function () { * @param {Number} appointmentId * @param {String} cancellationReason * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function deleteAppointment(appointmentId, cancellationReason) { const url = App.Utils.Url.siteUrl('calendar/delete_appointment'); @@ -82,7 +82,7 @@ App.Http.Calendar = (function () { * @param {Function} [successCallback] The ajax success callback function. * @param {Function} [errorCallback] The ajax failure callback function. * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function saveUnavailability(unavailability, successCallback, errorCallback) { const url = App.Utils.Url.siteUrl('calendar/save_unavailability'); @@ -110,7 +110,7 @@ App.Http.Calendar = (function () { * * @param {Number} unavailabilityId * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function deleteUnavailability(unavailabilityId) { const url = App.Utils.Url.siteUrl('calendar/delete_unavailability'); @@ -132,7 +132,7 @@ App.Http.Calendar = (function () { * @param {Function} successCallback The ajax success callback function. * @param {Function} errorCallback The ajax failure callback function. * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function saveWorkingPlanException(date, workingPlanException, providerId, successCallback, errorCallback) { const url = App.Utils.Url.siteUrl('calendar/save_working_plan_exception'); @@ -165,7 +165,7 @@ App.Http.Calendar = (function () { * @param {Function} [successCallback] * @param {Function} [errorCallback] * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function deleteWorkingPlanException(date, providerId, successCallback, errorCallback) { const url = App.Utils.Url.siteUrl('calendar/delete_working_plan_exception'); @@ -219,7 +219,7 @@ App.Http.Calendar = (function () { * @param {Date} startDate * @param {Date} endDate * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function getCalendarAppointmentsForTableView(startDate, endDate) { const url = App.Utils.Url.siteUrl('calendar/get_calendar_appointments_for_table_view'); diff --git a/assets/js/http/google_http_client.js b/assets/js/http/google_http_client.js index 05f29508..59c2dc41 100755 --- a/assets/js/http/google_http_client.js +++ b/assets/js/http/google_http_client.js @@ -21,7 +21,7 @@ App.Http.Google = (function () { * @param {Number} providerId * @param {String} googleCalendarId * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function selectGoogleCalendar(providerId, googleCalendarId) { const url = App.Utils.Url.siteUrl('google/select_google_calendar'); @@ -40,7 +40,7 @@ App.Http.Google = (function () { * * @param {Number} providerId * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function disableProviderSync(providerId) { const url = App.Utils.Url.siteUrl('google/disable_provider_sync'); @@ -58,7 +58,7 @@ App.Http.Google = (function () { * * @param {Number} providerId * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function getGoogleCalendars(providerId) { const url = App.Utils.Url.siteUrl('google/get_google_calendars'); @@ -76,7 +76,7 @@ App.Http.Google = (function () { * * @param {Number} providerId * - * @return {*|jQuery.jqXHR} + * @return {*|jQuery} */ function syncWithGoogle(providerId) { const url = App.Utils.Url.siteUrl('google/sync/' + providerId); From a9149fff5d687bc910130ce860cb56040c32fada Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:11:08 +0200 Subject: [PATCH 18/72] Add the Baikal credentials to docker.md --- docs/docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docker.md b/docs/docker.md index debdccc0..6a6edd6a 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -39,7 +39,7 @@ In the host machine the server is accessible from `http://localhost` and the dat You can additionally access phpMyAdmin from `http://localhost:8080` (credentials are `root` / `secret`) and Mailpit from `http://localhost:8025`. -Baikal, a self-hosted CalDAV server used to develop the CalDAV syncing integration is available on `http://localhost:8100`. +Baikal, a self-hosted CalDAV server used to develop the CalDAV syncing integration is available on `http://localhost:8100` (credentials are `admin` / `admin`). **Attention:** This configuration is meant to make development easier. It is not intended to server as a production environment! From fe7b406cb327f182a3acdc48e87f5d8c4854ca3a Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:11:17 +0200 Subject: [PATCH 19/72] Return the message modal selector for better DOM handling if needed --- assets/js/utils/message.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/js/utils/message.js b/assets/js/utils/message.js index 54045cd3..6188fa4f 100644 --- a/assets/js/utils/message.js +++ b/assets/js/utils/message.js @@ -27,10 +27,12 @@ window.App.Utils.Message = (function () { * @param {String} message The message of the dialog. * @param {Array} [buttons] Contains the dialog buttons along with their functions. * @param {Boolean} [isDismissible] If true, the button will show the close X in the header and close with the press of the Escape button. + * + * @return {jQuery|null} Return the #message-modal selector or null if the arguments are invalid. */ function show(title, message, buttons = null, isDismissible = true) { if (!title || !message) { - return; + return null; } if (!buttons) { @@ -105,7 +107,9 @@ window.App.Utils.Message = (function () { messageModal.show(); - $('#message-modal').css('z-index', '99999').next().css('z-index', '9999'); + $messageModal.css('z-index', '99999').next().css('z-index', '9999'); + + return $messageModal; } return { From ebb682f5188ffd5b6a123d0d79d48d58afee3ca3 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:15:58 +0200 Subject: [PATCH 20/72] Add additional handling for the next days filter --- assets/js/http/booking_http_client.js | 30 +++++++++++++-------------- assets/js/pages/booking.js | 9 ++++++-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/assets/js/http/booking_http_client.js b/assets/js/http/booking_http_client.js index 67bc89b7..8b7dfe7a 100755 --- a/assets/js/http/booking_http_client.js +++ b/assets/js/http/booking_http_client.js @@ -233,9 +233,9 @@ App.Http.Booking = (function () { * @param {Number} providerId The selected provider ID. * @param {Number} serviceId The selected service ID. * @param {String} selectedDateString Y-m-d value of the selected date. - * @param {Number} monthChangeStep Whether to add or subtract months. + * @param {Number} [monthChangeStep] Whether to add or subtract months. */ - function getUnavailableDates(providerId, serviceId, selectedDateString, monthChangeStep) { + function getUnavailableDates(providerId, serviceId, selectedDateString, monthChangeStep = 1) { if (processingUnavailableDates) { return; } @@ -268,7 +268,7 @@ App.Http.Booking = (function () { searchedMonthStart = selectedDateString; } - if (searchedMonthCounter >= 3) { + if (searchedMonthCounter >= 2) { // Need to mark the current month dates as unavailable const selectedDateMoment = moment(searchedMonthStart); const startOfMonthMoment = selectedDateMoment.clone().startOf('month'); @@ -278,7 +278,7 @@ App.Http.Booking = (function () { unavailableDates.push(startOfMonthMoment.format('YYYY-MM-DD')); startOfMonthMoment.add(monthChangeStep, 'days'); // Move to the next day } - applyUnavailableDates(unavailableDates, searchedMonthStart, false); + applyUnavailableDates(unavailableDates, searchedMonthStart, true); searchedMonthStart = undefined; searchedMonthCounter = 0; return; // Stop searching @@ -312,6 +312,17 @@ App.Http.Booking = (function () { const selectedDate = selectedDateMoment.toDate(); const numberOfDays = selectedDateMoment.daysInMonth(); + // If all the days are unavailable then hide the appointments hours. + if (unavailableDates.length === numberOfDays) { + $availableHours.text(lang('no_available_hours')); + } + + // Grey out unavailable dates. + $('#select-date')[0]._flatpickr.set( + 'disable', + unavailableDates.map((unavailableDate) => new Date(unavailableDate)), + ); + if (setDate && !vars('manage_mode')) { for (let i = 1; i <= numberOfDays; i++) { const currentDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), i); @@ -324,17 +335,6 @@ App.Http.Booking = (function () { } } - // If all the days are unavailable then hide the appointments hours. - if (unavailableDates.length === numberOfDays) { - $availableHours.text(lang('no_available_hours')); - } - - // Grey out unavailable dates. - $('#select-date')[0]._flatpickr.set( - 'disable', - unavailableDates.map((unavailableDate) => new Date(unavailableDate)), - ); - const dateQueryParam = App.Utils.Url.queryParam('date'); if (dateQueryParam) { diff --git a/assets/js/pages/booking.js b/assets/js/pages/booking.js index fab6f9cc..b89124d4 100644 --- a/assets/js/pages/booking.js +++ b/assets/js/pages/booking.js @@ -321,10 +321,15 @@ App.Pages.Booking = (function () { $selectProvider.on('change', (event) => { const $target = $(event.target); + const todayDateTimeObject = new Date(); + const todayDateTimeMoment = moment(todayDateTimeObject); + + App.Utils.UI.setDateTimePickerValue($selectDate, todayDateTimeObject); + App.Http.Booking.getUnavailableDates( $target.val(), $selectService.val(), - moment(App.Utils.UI.getDateTimePickerValue($selectDate)).format('YYYY-MM-DD'), + todayDateTimeMoment.format('YYYY-MM-DD'), ); updateConfirmFrame(); }); @@ -887,7 +892,7 @@ App.Pages.Booking = (function () { } if (Number(service.price) > 0) { - additionalInfoParts.push(`${lang('price')}: ${service.price} ${service.currency}`); + additionalInfoParts.push(`${lang('price')}: ${Number(service.price).toFixed(2)} ${service.currency}`); } if (service.location) { From 6304391fd96ee88044d6e0ff51f91f266b6916a2 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:20:25 +0200 Subject: [PATCH 21/72] Various minor JS errors in calendar_default_view.js --- assets/js/utils/calendar_default_view.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/js/utils/calendar_default_view.js b/assets/js/utils/calendar_default_view.js index e8e625d5..4d7b7805 100755 --- a/assets/js/utils/calendar_default_view.js +++ b/assets/js/utils/calendar_default_view.js @@ -211,7 +211,7 @@ App.Utils.CalendarDefaultView = (function () { $popoverTarget.popover('dispose'); } - if (lastFocusedEventData.extendedProps.data.workingPlanException) { + if (lastFocusedEventData.extendedProps.data.workingPlanException !== undefined) { const providerId = $selectFilterItem.val(); const provider = vars('available_providers').find( @@ -1256,7 +1256,7 @@ App.Utils.CalendarDefaultView = (function () { calendarEventSource.push(unavailabilityEvent); }); - response.blocked_periods.forEach((blockedPeriod) => { + response?.blocked_periods?.forEach((blockedPeriod) => { const blockedPeriodEvent = { title: blockedPeriod.name, start: moment(blockedPeriod.start_datetime).toDate(), From eb19482c1f4f1b2dc7d6da99192002ea32153eb1 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:23:45 +0200 Subject: [PATCH 22/72] Various minor fixes in the appointment and provider models --- application/models/Appointments_model.php | 12 +++++----- application/models/Providers_model.php | 28 ++++++++++++----------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/application/models/Appointments_model.php b/application/models/Appointments_model.php index 69c49024..314ea219 100644 --- a/application/models/Appointments_model.php +++ b/application/models/Appointments_model.php @@ -75,7 +75,7 @@ class Appointments_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $appointment) + public function validate(array $appointment): void { // If an appointment ID is provided then check whether the record really exists in the database. if (!empty($appointment['id'])) { @@ -323,7 +323,7 @@ class Appointments_model extends EA_Model * * @param int $provider_id Matching provider ID. */ - public function clear_google_sync_ids(int $provider_id) + public function clear_google_sync_ids(int $provider_id): void { $this->db->update('appointments', ['id_google_calendar' => null], ['id_users_provider' => $provider_id]); } @@ -482,7 +482,7 @@ class Appointments_model extends EA_Model * * @throws InvalidArgumentException */ - public function load(array &$appointment, array $resources) + public function load(array &$appointment, array $resources): void { if (empty($appointment) || empty($resources)) { return; @@ -527,7 +527,7 @@ class Appointments_model extends EA_Model * * @param array $appointment Appointment data. */ - public function api_encode(array &$appointment) + public function api_encode(array &$appointment): void { $encoded_resource = [ 'id' => array_key_exists('id', $appointment) ? (int) $appointment['id'] : null, @@ -543,7 +543,7 @@ class Appointments_model extends EA_Model 'providerId' => $appointment['id_users_provider'] !== null ? (int) $appointment['id_users_provider'] : null, 'serviceId' => $appointment['id_services'] !== null ? (int) $appointment['id_services'] : null, 'googleCalendarId' => - $appointment['id_google_calendar'] !== null ? (int) $appointment['id_google_calendar'] : null, + $appointment['id_google_calendar'] !== null ? $appointment['id_google_calendar'] : null, ]; $appointment = $encoded_resource; @@ -555,7 +555,7 @@ class Appointments_model extends EA_Model * @param array $appointment API resource. * @param array|null $base Base appointment data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$appointment, array $base = null) + public function api_decode(array &$appointment, array $base = null): void { $decoded_request = $base ?: []; diff --git a/application/models/Providers_model.php b/application/models/Providers_model.php index 92918841..402b4d3c 100755 --- a/application/models/Providers_model.php +++ b/application/models/Providers_model.php @@ -78,7 +78,7 @@ class Providers_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $provider) + public function validate(array $provider): void { // If a provider ID is provided then check whether the record really exists in the database. if (!empty($provider['id'])) { @@ -303,7 +303,7 @@ class Providers_model extends EA_Model * * @throws InvalidArgumentException */ - protected function save_settings(int $provider_id, array $settings) + protected function save_settings(int $provider_id, array $settings): void { if (empty($settings)) { throw new InvalidArgumentException('The settings argument cannot be empty.'); @@ -341,7 +341,7 @@ class Providers_model extends EA_Model * @param string $name Setting name. * @param mixed|null $value Setting value. */ - public function set_setting(int $provider_id, string $name, mixed $value = null) + public function set_setting(int $provider_id, string $name, mixed $value = null): void { if (!$this->db->update('user_settings', [$name => $value], ['id_users' => $provider_id])) { throw new RuntimeException('Could not set the new provider setting value: ' . $name); @@ -397,7 +397,7 @@ class Providers_model extends EA_Model * @param int $provider_id Provider ID. * @param array $service_ids Service IDs. */ - protected function save_service_ids(int $provider_id, array $service_ids) + protected function save_service_ids(int $provider_id, array $service_ids): void { // Re-insert the provider-service connections. $this->db->delete('services_providers', ['id_users' => $provider_id]); @@ -489,13 +489,15 @@ class Providers_model extends EA_Model * * @param int $provider_id Provider ID. * @param string $date Working plan exception date (in YYYY-MM-DD format). - * @param array $working_plan_exception Associative array with the working plan exception data. + * @param array|null $working_plan_exception Associative array with the working plan exception data. * - * @throws InvalidArgumentException * @throws Exception */ - public function save_working_plan_exception(int $provider_id, string $date, array $working_plan_exception = null) - { + public function save_working_plan_exception( + int $provider_id, + string $date, + array $working_plan_exception = null, + ): void { // Validate the working plan exception data. $start = date('H:i', strtotime($working_plan_exception['start'])); @@ -577,7 +579,7 @@ class Providers_model extends EA_Model * * @throws Exception If $provider_id argument is invalid. */ - public function delete_working_plan_exception(int $provider_id, string $date) + public function delete_working_plan_exception(int $provider_id, string $date): void { $provider = $this->find($provider_id); @@ -591,7 +593,7 @@ class Providers_model extends EA_Model $provider['settings']['working_plan_exceptions'] = empty($working_plan_exceptions) ? '{}' - : $working_plan_exceptions; + : json_encode($working_plan_exceptions); $this->update($provider); } @@ -722,7 +724,7 @@ class Providers_model extends EA_Model * * @throws InvalidArgumentException */ - public function load(array &$provider, array $resources) + public function load(array &$provider, array $resources): void { if (empty($provider) || empty($resources)) { return; @@ -749,7 +751,7 @@ class Providers_model extends EA_Model * * @param array $provider Provider data. */ - public function api_encode(array &$provider) + public function api_encode(array &$provider): void { $encoded_resource = [ 'id' => array_key_exists('id', $provider) ? (int) $provider['id'] : null, @@ -808,7 +810,7 @@ class Providers_model extends EA_Model * @param array $provider API resource. * @param array|null $base Base provider data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$provider, array $base = null) + public function api_decode(array &$provider, array $base = null): void { $decoded_resource = $base ?: []; From 840286899a423654a0dd3c3755c2852d8deaaeef Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:23:58 +0200 Subject: [PATCH 23/72] Various fixes in the Calendar controller --- application/controllers/Calendar.php | 34 +++++++++++++++++++--------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/application/controllers/Calendar.php b/application/controllers/Calendar.php index b5c98ac2..fb568cf6 100644 --- a/application/controllers/Calendar.php +++ b/application/controllers/Calendar.php @@ -50,7 +50,7 @@ class Calendar extends EA_Controller * * @param string $appointment_hash Appointment hash. */ - public function reschedule(string $appointment_hash) + public function reschedule(string $appointment_hash): void { $this->index($appointment_hash); } @@ -64,7 +64,7 @@ class Calendar extends EA_Controller * * @param string $appointment_hash Appointment hash. */ - public function index(string $appointment_hash = '') + public function index(string $appointment_hash = ''): void { session(['dest_url' => site_url('backend/index' . (!empty($appointment_hash) ? '/' . $appointment_hash : ''))]); @@ -178,7 +178,7 @@ class Calendar extends EA_Controller /** * Save appointment changes that are made from the backend calendar page. */ - public function save_appointment() + public function save_appointment(): void { try { $customer_data = request('customer_data'); @@ -211,6 +211,11 @@ class Calendar extends EA_Controller 'timezone', 'language', 'notes', + 'custom_field_1', + 'custom_field_2', + 'custom_field_3', + 'custom_field_4', + 'custom_field_5', ]); $customer['id'] = $this->customers_model->save($customer); @@ -248,7 +253,6 @@ class Calendar extends EA_Controller 'notes', 'color', 'status', - 'notes', 'is_unavailability', 'id_users_provider', 'id_users_customer', @@ -320,7 +324,7 @@ class Calendar extends EA_Controller * Notification emails are send to both provider and customer and the delete action is executed to the Google * Calendar account of the provider, if the "google_sync" setting is enabled. */ - public function delete_appointment() + public function delete_appointment(): void { try { if (cannot('delete', 'appointments')) { @@ -378,7 +382,7 @@ class Calendar extends EA_Controller /** * Insert of update unavailability to database. */ - public function save_unavailability() + public function save_unavailability(): void { try { // Check privileges @@ -418,7 +422,7 @@ class Calendar extends EA_Controller /** * Delete an unavailability from database. */ - public function delete_unavailability() + public function delete_unavailability(): void { try { if (cannot('delete', PRIV_APPOINTMENTS)) { @@ -450,7 +454,7 @@ class Calendar extends EA_Controller /** * Insert of update working plan exceptions to database. */ - public function save_working_plan_exception() + public function save_working_plan_exception(): void { try { if (cannot('edit', PRIV_USERS)) { @@ -480,7 +484,7 @@ class Calendar extends EA_Controller /** * Delete a working plan exceptions time period to database. */ - public function delete_working_plan_exception() + public function delete_working_plan_exception(): void { try { $required_permissions = can('edit', PRIV_CUSTOMERS); @@ -508,7 +512,7 @@ class Calendar extends EA_Controller * * This method will return all the calendar events within a specified period. */ - public function get_calendar_appointments_for_table_view() + public function get_calendar_appointments_for_table_view(): void { try { $required_permissions = can('view', PRIV_APPOINTMENTS); @@ -584,6 +588,12 @@ class Calendar extends EA_Controller $response['unavailabilities'] = array_values($response['unavailabilities']); } + foreach ($response['unavailabilities'] as &$unavailability) { + $unavailability['provider'] = $this->providers_model->find($unavailability['id_users_provider']); + } + + unset($unavailability); + // Add blocked periods to the response. $start_date = request('start_date'); $end_date = request('end_date'); @@ -601,7 +611,7 @@ class Calendar extends EA_Controller * This method returns the database appointments and unavailability periods for the user selected date period and * record type (provider or service). */ - public function get_calendar_appointments() + public function get_calendar_appointments(): void { try { if (cannot('view', PRIV_APPOINTMENTS)) { @@ -722,6 +732,8 @@ class Calendar extends EA_Controller } } + unset($unavailability); + $response['unavailabilities'] = array_values($response['unavailabilities']); } From 5d823985de310e1469e4cc010951f8774d9640cb Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:36:14 +0200 Subject: [PATCH 24/72] Add return types to all class methods --- application/controllers/About.php | 2 +- application/controllers/Account.php | 6 +- application/controllers/Admins.php | 12 ++-- application/controllers/Api_settings.php | 4 +- application/controllers/Appointments.php | 10 +-- application/controllers/Backend.php | 12 ++-- application/controllers/Backend_api.php | 66 +++++++++---------- application/controllers/Blocked_periods.php | 12 ++-- application/controllers/Booking.php | 10 +-- .../controllers/Booking_cancellation.php | 2 +- .../controllers/Booking_confirmation.php | 2 +- application/controllers/Booking_settings.php | 4 +- application/controllers/Business_settings.php | 4 +- application/controllers/Captcha.php | 2 +- application/controllers/Consents.php | 2 +- application/controllers/Console.php | 17 +++-- application/controllers/Customers.php | 12 ++-- application/controllers/General_settings.php | 4 +- .../controllers/Google_analytics_settings.php | 4 +- application/controllers/Installation.php | 2 +- application/controllers/Integrations.php | 2 +- application/controllers/Legal_settings.php | 4 +- application/controllers/Localization.php | 2 +- application/controllers/Login.php | 4 +- application/controllers/Logout.php | 2 +- .../controllers/Matomo_analytics_settings.php | 4 +- application/controllers/Privacy.php | 2 +- application/controllers/Providers.php | 12 ++-- application/controllers/Recovery.php | 2 +- application/controllers/Secretaries.php | 12 ++-- .../controllers/Service_categories.php | 12 ++-- application/controllers/Services.php | 12 ++-- application/controllers/Unavailabilities.php | 10 +-- application/controllers/Update.php | 2 +- application/controllers/User.php | 2 +- application/controllers/Webhooks.php | 12 ++-- .../controllers/api/v1/Settings_api_v1.php | 2 +- application/models/Admins_model.php | 10 +-- application/models/Blocked_periods_model.php | 8 ++- application/models/Consents_model.php | 2 +- application/models/Customers_model.php | 6 +- application/models/Roles_model.php | 2 +- application/models/Secretaries_model.php | 14 ++-- .../models/Service_categories_model.php | 6 +- application/models/Services_model.php | 8 +-- application/models/Settings_model.php | 6 +- application/models/Unavailabilities_model.php | 8 +-- application/models/Users_model.php | 6 +- application/models/Webhooks_model.php | 4 +- 49 files changed, 186 insertions(+), 181 deletions(-) diff --git a/application/controllers/About.php b/application/controllers/About.php index e6580b6c..ba709f32 100644 --- a/application/controllers/About.php +++ b/application/controllers/About.php @@ -44,7 +44,7 @@ class About extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('about')]); diff --git a/application/controllers/Account.php b/application/controllers/Account.php index a69a9656..c13e953c 100644 --- a/application/controllers/Account.php +++ b/application/controllers/Account.php @@ -44,7 +44,7 @@ class Account extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('account')]); @@ -79,7 +79,7 @@ class Account extends EA_Controller /** * Save general settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_USER_SETTINGS)) { @@ -131,7 +131,7 @@ class Account extends EA_Controller /** * Make sure the username is valid and unique in the database. */ - public function validate_username() + public function validate_username(): void { try { $username = request('username'); diff --git a/application/controllers/Admins.php b/application/controllers/Admins.php index 7573acde..eea99651 100644 --- a/application/controllers/Admins.php +++ b/application/controllers/Admins.php @@ -41,7 +41,7 @@ class Admins extends EA_Controller * On this page admin users will be able to manage admins, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('admins')]); @@ -82,7 +82,7 @@ class Admins extends EA_Controller /** * Filter admins by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_USERS)) { @@ -108,7 +108,7 @@ class Admins extends EA_Controller /** * Store a new admin. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_USERS)) { @@ -153,7 +153,7 @@ class Admins extends EA_Controller /** * Find an admin. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_USERS)) { @@ -173,7 +173,7 @@ class Admins extends EA_Controller /** * Update an admin. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_USERS)) { @@ -219,7 +219,7 @@ class Admins extends EA_Controller /** * Remove an admin. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_USERS)) { diff --git a/application/controllers/Api_settings.php b/application/controllers/Api_settings.php index 77b05adf..d46d9177 100644 --- a/application/controllers/Api_settings.php +++ b/application/controllers/Api_settings.php @@ -35,7 +35,7 @@ class Api_settings extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('api_settings')]); @@ -71,7 +71,7 @@ class Api_settings extends EA_Controller /** * Save general settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_SYSTEM_SETTINGS)) { diff --git a/application/controllers/Appointments.php b/application/controllers/Appointments.php index fc566197..e4241b22 100644 --- a/application/controllers/Appointments.php +++ b/application/controllers/Appointments.php @@ -53,7 +53,7 @@ class Appointments extends EA_Controller /** * Filter appointments by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_APPOINTMENTS)) { @@ -79,7 +79,7 @@ class Appointments extends EA_Controller /** * Store a new appointment. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_APPOINTMENTS)) { @@ -118,7 +118,7 @@ class Appointments extends EA_Controller /** * Find an appointment. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_APPOINTMENTS)) { @@ -138,7 +138,7 @@ class Appointments extends EA_Controller /** * Update a appointment. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_APPOINTMENTS)) { @@ -174,7 +174,7 @@ class Appointments extends EA_Controller /** * Remove a appointment. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_APPOINTMENTS)) { diff --git a/application/controllers/Backend.php b/application/controllers/Backend.php index b7eb42bc..2065b515 100755 --- a/application/controllers/Backend.php +++ b/application/controllers/Backend.php @@ -46,7 +46,7 @@ class Backend extends EA_Controller * * @param string $appointment_hash Appointment edit dialog will appear when the page loads (default ''). */ - public function index(string $appointment_hash = '') + public function index(string $appointment_hash = ''): void { if (empty($appointment_hash)) { redirect('calendar'); @@ -58,7 +58,7 @@ class Backend extends EA_Controller /** * Display the customers page. */ - public function customers() + public function customers(): void { redirect('customers'); } @@ -66,7 +66,7 @@ class Backend extends EA_Controller /** * Display the services page. */ - public function services() + public function services(): void { redirect('services'); } @@ -77,7 +77,7 @@ class Backend extends EA_Controller * Notice: Since the "users" page is split into multiple pages (providers, secretaries, admins), this method will * redirect to "providers" page by default */ - public function users() + public function users(): void { redirect('providers'); } @@ -88,7 +88,7 @@ class Backend extends EA_Controller * Notice: Since the "settings" page is split into multiple pages (general, business, booking etc), this method will * redirect to "general" page by default. */ - public function settings() + public function settings(): void { redirect('general_settings'); } @@ -96,7 +96,7 @@ class Backend extends EA_Controller /** * Display the update page. */ - public function update() + public function update(): void { redirect('update'); } diff --git a/application/controllers/Backend_api.php b/application/controllers/Backend_api.php index b0798d19..af9dcbfd 100755 --- a/application/controllers/Backend_api.php +++ b/application/controllers/Backend_api.php @@ -44,7 +44,7 @@ class Backend_api extends EA_Controller /** * Get Calendar Events */ - public function ajax_get_calendar_events() + public function ajax_get_calendar_events(): void { redirect('calendar/get_calendar_appointments_for_table_view'); } @@ -52,7 +52,7 @@ class Backend_api extends EA_Controller /** * Get the registered appointments for the given date period and record. */ - public function ajax_get_calendar_appointments() + public function ajax_get_calendar_appointments(): void { redirect('calendar/get_calendar_appointments'); } @@ -60,7 +60,7 @@ class Backend_api extends EA_Controller /** * Save appointment changes that are made from the backend calendar page. */ - public function ajax_save_appointment() + public function ajax_save_appointment(): void { redirect('calendar/save_appointment'); } @@ -68,7 +68,7 @@ class Backend_api extends EA_Controller /** * Delete appointment from the database. */ - public function ajax_delete_appointment() + public function ajax_delete_appointment(): void { redirect('calendar/delete_appointment'); } @@ -76,7 +76,7 @@ class Backend_api extends EA_Controller /** * Disable a providers sync setting. */ - public function ajax_disable_provider_sync() + public function ajax_disable_provider_sync(): void { redirect('google/disable_provider_sync'); } @@ -84,7 +84,7 @@ class Backend_api extends EA_Controller /** * Filter the customer records with the given key string. */ - public function ajax_filter_customers() + public function ajax_filter_customers(): void { redirect('customers/search'); } @@ -92,7 +92,7 @@ class Backend_api extends EA_Controller /** * Insert or update an unavailability. */ - public function ajax_save_unavailability() + public function ajax_save_unavailability(): void { redirect('calendar/save_unavailability'); } @@ -100,7 +100,7 @@ class Backend_api extends EA_Controller /** * Delete an unavailability time period from database. */ - public function ajax_delete_unavailability() + public function ajax_delete_unavailability(): void { redirect('calendar/delete_unavailability'); } @@ -108,7 +108,7 @@ class Backend_api extends EA_Controller /** * Insert of update working plan exceptions to database. */ - public function ajax_save_working_plan_exception() + public function ajax_save_working_plan_exception(): void { redirect('calendar/save_working_plan_exception'); } @@ -116,7 +116,7 @@ class Backend_api extends EA_Controller /** * Delete a working plan exceptions time period to database. */ - public function ajax_delete_working_plan_exception() + public function ajax_delete_working_plan_exception(): void { redirect('calendar/delete_working_plan_exception'); } @@ -124,7 +124,7 @@ class Backend_api extends EA_Controller /** * Save (insert or update) a customer record. */ - public function ajax_save_customer() + public function ajax_save_customer(): void { redirect('customers/create'); // or "customers/update" } @@ -132,7 +132,7 @@ class Backend_api extends EA_Controller /** * Delete customer from database. */ - public function ajax_delete_customer() + public function ajax_delete_customer(): void { redirect('customers/destroy'); } @@ -140,7 +140,7 @@ class Backend_api extends EA_Controller /** * Save (insert or update) service record. */ - public function ajax_save_service() + public function ajax_save_service(): void { redirect('services/create'); // or "services/update" } @@ -148,7 +148,7 @@ class Backend_api extends EA_Controller /** * Delete service record from database. */ - public function ajax_delete_service() + public function ajax_delete_service(): void { redirect('services/destroy'); } @@ -156,7 +156,7 @@ class Backend_api extends EA_Controller /** * Filter service records by given key string. */ - public function ajax_filter_services() + public function ajax_filter_services(): void { redirect('services/search'); } @@ -164,7 +164,7 @@ class Backend_api extends EA_Controller /** * Save (insert or update) category record. */ - public function ajax_save_service_category() + public function ajax_save_service_category(): void { redirect('categories/create'); // or "categories/update" } @@ -172,7 +172,7 @@ class Backend_api extends EA_Controller /** * Delete category record from database. */ - public function ajax_delete_service_category() + public function ajax_delete_service_category(): void { redirect('categories/destroy'); } @@ -180,7 +180,7 @@ class Backend_api extends EA_Controller /** * Filter services categories with key string. */ - public function ajax_filter_service_categories() + public function ajax_filter_service_categories(): void { redirect('categories/search'); } @@ -188,7 +188,7 @@ class Backend_api extends EA_Controller /** * Filter admin records with string key. */ - public function ajax_filter_admins() + public function ajax_filter_admins(): void { redirect('admins/search'); } @@ -196,7 +196,7 @@ class Backend_api extends EA_Controller /** * Save (insert or update) admin record into database. */ - public function ajax_save_admin() + public function ajax_save_admin(): void { redirect('admins/create'); // or "admins/update" } @@ -204,7 +204,7 @@ class Backend_api extends EA_Controller /** * Delete an admin record from the database. */ - public function ajax_delete_admin() + public function ajax_delete_admin(): void { redirect('admins/destroy'); } @@ -212,7 +212,7 @@ class Backend_api extends EA_Controller /** * Filter provider records with string key. */ - public function ajax_filter_providers() + public function ajax_filter_providers(): void { redirect('providers/search'); } @@ -220,7 +220,7 @@ class Backend_api extends EA_Controller /** * Save (insert or update) a provider record into database. */ - public function ajax_save_provider() + public function ajax_save_provider(): void { redirect('providers/create'); // or "providers/update" } @@ -228,7 +228,7 @@ class Backend_api extends EA_Controller /** * Delete a provider record from the database. */ - public function ajax_delete_provider() + public function ajax_delete_provider(): void { redirect('providers/destroy'); } @@ -236,7 +236,7 @@ class Backend_api extends EA_Controller /** * Filter secretary records with string key. */ - public function ajax_filter_secretaries() + public function ajax_filter_secretaries(): void { redirect('secretaries/search'); } @@ -244,7 +244,7 @@ class Backend_api extends EA_Controller /** * Save (insert or update) a secretary record into database. */ - public function ajax_save_secretary() + public function ajax_save_secretary(): void { redirect('secretaries/create'); // or "secretaries/update" } @@ -252,7 +252,7 @@ class Backend_api extends EA_Controller /** * Delete a secretary record from the database. */ - public function ajax_delete_secretary() + public function ajax_delete_secretary(): void { redirect('secretaries/destroy'); } @@ -260,7 +260,7 @@ class Backend_api extends EA_Controller /** * Save a setting or multiple settings in the database. */ - public function ajax_save_settings() + public function ajax_save_settings(): void { redirect('general_settings/save'); // or "business_settings/save", "booking_settings/save", "legal_settings/save" } @@ -268,7 +268,7 @@ class Backend_api extends EA_Controller /** * This method checks whether the username already exists in the database. */ - public function ajax_validate_username() + public function ajax_validate_username(): void { redirect('account/validate_username'); } @@ -276,7 +276,7 @@ class Backend_api extends EA_Controller /** * Change system language for current user. */ - public function ajax_change_language() + public function ajax_change_language(): void { redirect('account/change_language'); } @@ -284,7 +284,7 @@ class Backend_api extends EA_Controller /** * This method will return a list of the available Google Calendars. */ - public function ajax_get_google_calendars() + public function ajax_get_google_calendars(): void { redirect('google/get_google_calendars'); } @@ -292,7 +292,7 @@ class Backend_api extends EA_Controller /** * Select a specific google calendar for a provider. */ - public function ajax_select_google_calendar() + public function ajax_select_google_calendar(): void { redirect('google/select_google_calendar'); } @@ -300,7 +300,7 @@ class Backend_api extends EA_Controller /** * Apply global working plan to all providers. */ - public function ajax_apply_global_working_plan() + public function ajax_apply_global_working_plan(): void { redirect('business_settings/apply_global_working_plan'); } diff --git a/application/controllers/Blocked_periods.php b/application/controllers/Blocked_periods.php index 3a8ca58c..f56a4f21 100644 --- a/application/controllers/Blocked_periods.php +++ b/application/controllers/Blocked_periods.php @@ -41,7 +41,7 @@ class Blocked_periods extends EA_Controller * On this page admin users will be able to manage blocked-periods, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('blocked_periods')]); @@ -81,7 +81,7 @@ class Blocked_periods extends EA_Controller /** * Filter blocked-periods by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_BLOCKED_PERIODS)) { @@ -107,7 +107,7 @@ class Blocked_periods extends EA_Controller /** * Store a new service-category. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_BLOCKED_PERIODS)) { @@ -136,7 +136,7 @@ class Blocked_periods extends EA_Controller /** * Find a service-category. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_BLOCKED_PERIODS)) { @@ -156,7 +156,7 @@ class Blocked_periods extends EA_Controller /** * Update a service-category. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_BLOCKED_PERIODS)) { @@ -191,7 +191,7 @@ class Blocked_periods extends EA_Controller /** * Remove a service-category. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_BLOCKED_PERIODS)) { diff --git a/application/controllers/Booking.php b/application/controllers/Booking.php index e23597bb..cc0fae4b 100755 --- a/application/controllers/Booking.php +++ b/application/controllers/Booking.php @@ -54,7 +54,7 @@ class Booking extends EA_Controller * * @param string $appointment_hash */ - public function reschedule(string $appointment_hash) + public function reschedule(string $appointment_hash): void { html_vars(['appointment_hash' => $appointment_hash]); @@ -66,7 +66,7 @@ class Booking extends EA_Controller * * This method creates the appointment book wizard. */ - public function index() + public function index(): void { if (!is_app_installed()) { redirect('installation'); @@ -289,7 +289,7 @@ class Booking extends EA_Controller /** * Register the appointment to the database. */ - public function register() + public function register(): void { try { $disable_booking = setting('disable_booking'); @@ -584,7 +584,7 @@ class Booking extends EA_Controller * This method answers to an AJAX request. It calculates the available hours for the given service, provider and * date. */ - public function get_available_hours() + public function get_available_hours(): void { try { $disable_booking = setting('disable_booking'); @@ -666,7 +666,7 @@ class Booking extends EA_Controller * * Outputs a JSON string with the unavailability dates. that are unavailability. */ - public function get_unavailable_dates() + public function get_unavailable_dates(): void { try { $disable_booking = setting('disable_booking'); diff --git a/application/controllers/Booking_cancellation.php b/application/controllers/Booking_cancellation.php index 950ac461..d5ec7647 100755 --- a/application/controllers/Booking_cancellation.php +++ b/application/controllers/Booking_cancellation.php @@ -46,7 +46,7 @@ class Booking_cancellation extends EA_Controller * * @param string $appointment_hash This appointment hash identifier. */ - public function of(string $appointment_hash) + public function of(string $appointment_hash): void { try { $disable_booking = setting('disable_booking'); diff --git a/application/controllers/Booking_confirmation.php b/application/controllers/Booking_confirmation.php index 7e6fb689..d743678f 100755 --- a/application/controllers/Booking_confirmation.php +++ b/application/controllers/Booking_confirmation.php @@ -40,7 +40,7 @@ class Booking_confirmation extends EA_Controller * * @throws Exception */ - public function of() + public function of(): void { $appointment_hash = $this->uri->segment(3); diff --git a/application/controllers/Booking_settings.php b/application/controllers/Booking_settings.php index c3901cdb..15c5f88b 100644 --- a/application/controllers/Booking_settings.php +++ b/application/controllers/Booking_settings.php @@ -44,7 +44,7 @@ class Booking_settings extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('booking_settings')]); @@ -80,7 +80,7 @@ class Booking_settings extends EA_Controller /** * Save booking settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_SYSTEM_SETTINGS)) { diff --git a/application/controllers/Business_settings.php b/application/controllers/Business_settings.php index 55b0e45a..cef2806b 100644 --- a/application/controllers/Business_settings.php +++ b/application/controllers/Business_settings.php @@ -44,7 +44,7 @@ class Business_settings extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('business_settings')]); @@ -82,7 +82,7 @@ class Business_settings extends EA_Controller /** * Save general settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_SYSTEM_SETTINGS)) { diff --git a/application/controllers/Captcha.php b/application/controllers/Captcha.php index 31b69a39..467bbbc2 100644 --- a/application/controllers/Captcha.php +++ b/application/controllers/Captcha.php @@ -33,7 +33,7 @@ class Captcha extends EA_Controller /** * Make a request to this method to get a captcha image. */ - public function index() + public function index(): void { $this->captcha_builder->setDistortion(true); $this->captcha_builder->setMaxBehindLines(1); diff --git a/application/controllers/Consents.php b/application/controllers/Consents.php index 3104deb0..bc8c3b3e 100644 --- a/application/controllers/Consents.php +++ b/application/controllers/Consents.php @@ -33,7 +33,7 @@ class Consents extends EA_Controller /** * Save (insert or update) the consent */ - public function save() + public function save(): void { try { $consent = request('consent'); diff --git a/application/controllers/Console.php b/application/controllers/Console.php index a81ad3d0..ce991d87 100644 --- a/application/controllers/Console.php +++ b/application/controllers/Console.php @@ -50,8 +50,10 @@ class Console extends EA_Controller * Usage: * * php index.php console install + * + * @throws Exception */ - public function install() + public function install(): void { $this->instance->migrate('fresh'); @@ -70,7 +72,7 @@ class Console extends EA_Controller * Notice: * * Do not use this method to install the app as it will not seed the database with the initial entries (admin, - * provider, service, settings etc). + * provider, service, settings etc.). * * Usage: * @@ -80,7 +82,7 @@ class Console extends EA_Controller * * @param string $type */ - public function migrate(string $type = '') + public function migrate(string $type = ''): void { $this->instance->migrate($type); } @@ -93,8 +95,9 @@ class Console extends EA_Controller * Usage: * * php index.php console seed + * @throws Exception */ - public function seed() + public function seed(): void { $this->instance->seed(); } @@ -112,7 +115,7 @@ class Console extends EA_Controller * * @throws Exception */ - public function backup() + public function backup(): void { $this->instance->backup($GLOBALS['argv'][3] ?? null); } @@ -130,7 +133,7 @@ class Console extends EA_Controller * * php index.php console sync */ - public function sync() + public function sync(): void { $providers = $this->providers_model->get(); @@ -152,7 +155,7 @@ class Console extends EA_Controller * * php index.php console help */ - public function help() + public function help(): void { $help = [ '', diff --git a/application/controllers/Customers.php b/application/controllers/Customers.php index 134dfd83..2985d270 100644 --- a/application/controllers/Customers.php +++ b/application/controllers/Customers.php @@ -44,7 +44,7 @@ class Customers extends EA_Controller * On this page admin users will be able to manage customers, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('customers')]); @@ -114,7 +114,7 @@ class Customers extends EA_Controller /** * Find a customer. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_CUSTOMERS)) { @@ -140,7 +140,7 @@ class Customers extends EA_Controller /** * Filter customers by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_CUSTOMERS)) { @@ -184,7 +184,7 @@ class Customers extends EA_Controller /** * Store a new customer. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_CUSTOMERS)) { @@ -234,7 +234,7 @@ class Customers extends EA_Controller /** * Update a customer. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_CUSTOMERS)) { @@ -287,7 +287,7 @@ class Customers extends EA_Controller /** * Remove a customer. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_CUSTOMERS)) { diff --git a/application/controllers/General_settings.php b/application/controllers/General_settings.php index 06354fc9..08c1f436 100644 --- a/application/controllers/General_settings.php +++ b/application/controllers/General_settings.php @@ -36,7 +36,7 @@ class General_settings extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('general_settings')]); @@ -81,7 +81,7 @@ class General_settings extends EA_Controller /** * Save general settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_SYSTEM_SETTINGS)) { diff --git a/application/controllers/Google_analytics_settings.php b/application/controllers/Google_analytics_settings.php index 18c49e6a..ec48ce72 100644 --- a/application/controllers/Google_analytics_settings.php +++ b/application/controllers/Google_analytics_settings.php @@ -35,7 +35,7 @@ class Google_analytics_settings extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('google_analytics_settings')]); @@ -71,7 +71,7 @@ class Google_analytics_settings extends EA_Controller /** * Save general settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_SYSTEM_SETTINGS)) { diff --git a/application/controllers/Installation.php b/application/controllers/Installation.php index 64a1b513..3cb571c9 100644 --- a/application/controllers/Installation.php +++ b/application/controllers/Installation.php @@ -39,7 +39,7 @@ class Installation extends EA_Controller /** * Display the installation page. */ - public function index() + public function index(): void { if (is_app_installed()) { redirect(); diff --git a/application/controllers/Integrations.php b/application/controllers/Integrations.php index ccc76a15..1f76480b 100644 --- a/application/controllers/Integrations.php +++ b/application/controllers/Integrations.php @@ -44,7 +44,7 @@ class Integrations extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('about')]); diff --git a/application/controllers/Legal_settings.php b/application/controllers/Legal_settings.php index f327b09c..aa16cda0 100644 --- a/application/controllers/Legal_settings.php +++ b/application/controllers/Legal_settings.php @@ -35,7 +35,7 @@ class Legal_settings extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('legal_settings')]); @@ -71,7 +71,7 @@ class Legal_settings extends EA_Controller /** * Save legal settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_SYSTEM_SETTINGS)) { diff --git a/application/controllers/Localization.php b/application/controllers/Localization.php index 1cb6aa99..e7d605ef 100644 --- a/application/controllers/Localization.php +++ b/application/controllers/Localization.php @@ -27,7 +27,7 @@ class Localization extends EA_Controller * * Notice: This method used to be in the Backend_api.php. */ - public function change_language() + public function change_language(): void { try { // Check if language exists in the available languages. diff --git a/application/controllers/Login.php b/application/controllers/Login.php index 735d2d23..65884558 100644 --- a/application/controllers/Login.php +++ b/application/controllers/Login.php @@ -38,7 +38,7 @@ class Login extends EA_Controller /** * Render the login page. */ - public function index() + public function index(): void { if (session('user_id')) { redirect('calendar'); @@ -58,7 +58,7 @@ class Login extends EA_Controller /** * Validate the provided credentials and start a new session if the validation was successful. */ - public function validate() + public function validate(): void { try { $username = request('username'); diff --git a/application/controllers/Logout.php b/application/controllers/Logout.php index bab759b1..144099ed 100644 --- a/application/controllers/Logout.php +++ b/application/controllers/Logout.php @@ -23,7 +23,7 @@ class Logout extends EA_Controller /** * Render the logout page. */ - public function index() + public function index(): void { $this->session->sess_destroy(); diff --git a/application/controllers/Matomo_analytics_settings.php b/application/controllers/Matomo_analytics_settings.php index f77cf558..b643db60 100644 --- a/application/controllers/Matomo_analytics_settings.php +++ b/application/controllers/Matomo_analytics_settings.php @@ -35,7 +35,7 @@ class Matomo_analytics_settings extends EA_Controller /** * Render the settings page. */ - public function index() + public function index(): void { session(['dest_url' => site_url('matomo_analytics_settings')]); @@ -71,7 +71,7 @@ class Matomo_analytics_settings extends EA_Controller /** * Save general settings. */ - public function save() + public function save(): void { try { if (cannot('edit', PRIV_SYSTEM_SETTINGS)) { diff --git a/application/controllers/Privacy.php b/application/controllers/Privacy.php index 2e1b1be1..08d14b5f 100644 --- a/application/controllers/Privacy.php +++ b/application/controllers/Privacy.php @@ -35,7 +35,7 @@ class Privacy extends EA_Controller /** * Remove all customer data (including appointments) from the system. */ - public function delete_personal_information() + public function delete_personal_information(): void { try { $display_delete_personal_information = setting('display_delete_personal_information'); diff --git a/application/controllers/Providers.php b/application/controllers/Providers.php index ee3ca765..67552880 100644 --- a/application/controllers/Providers.php +++ b/application/controllers/Providers.php @@ -42,7 +42,7 @@ class Providers extends EA_Controller * On this page admin users will be able to manage providers, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('providers')]); @@ -95,7 +95,7 @@ class Providers extends EA_Controller /** * Filter providers by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_USERS)) { @@ -121,7 +121,7 @@ class Providers extends EA_Controller /** * Store a new provider. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_USERS)) { @@ -180,7 +180,7 @@ class Providers extends EA_Controller /** * Find a provider. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_USERS)) { @@ -200,7 +200,7 @@ class Providers extends EA_Controller /** * Update a provider. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_USERS)) { @@ -260,7 +260,7 @@ class Providers extends EA_Controller /** * Remove a provider. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_USERS)) { diff --git a/application/controllers/Recovery.php b/application/controllers/Recovery.php index ce6f156c..dc257315 100644 --- a/application/controllers/Recovery.php +++ b/application/controllers/Recovery.php @@ -34,7 +34,7 @@ class Recovery extends EA_Controller /** * Display the password recovery page. */ - public function index() + public function index(): void { $company_name = setting('company_name'); diff --git a/application/controllers/Secretaries.php b/application/controllers/Secretaries.php index 196a8450..65ffc1ae 100644 --- a/application/controllers/Secretaries.php +++ b/application/controllers/Secretaries.php @@ -42,7 +42,7 @@ class Secretaries extends EA_Controller * On this page secretary users will be able to manage secretaries, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('secretaries')]); @@ -91,7 +91,7 @@ class Secretaries extends EA_Controller /** * Filter secretaries by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_USERS)) { @@ -117,7 +117,7 @@ class Secretaries extends EA_Controller /** * Store a new secretary. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_USERS)) { @@ -174,7 +174,7 @@ class Secretaries extends EA_Controller /** * Find a secretary. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_USERS)) { @@ -194,7 +194,7 @@ class Secretaries extends EA_Controller /** * Update a secretary. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_USERS)) { @@ -252,7 +252,7 @@ class Secretaries extends EA_Controller /** * Remove a secretary. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_USERS)) { diff --git a/application/controllers/Service_categories.php b/application/controllers/Service_categories.php index 32e96c6a..ad53e542 100644 --- a/application/controllers/Service_categories.php +++ b/application/controllers/Service_categories.php @@ -41,7 +41,7 @@ class Service_categories extends EA_Controller * On this page admin users will be able to manage service-categories, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('service_categories')]); @@ -78,7 +78,7 @@ class Service_categories extends EA_Controller /** * Filter service-categories by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_SERVICES)) { @@ -104,7 +104,7 @@ class Service_categories extends EA_Controller /** * Store a new service-category. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_SERVICES)) { @@ -133,7 +133,7 @@ class Service_categories extends EA_Controller /** * Find a service-category. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_SERVICES)) { @@ -153,7 +153,7 @@ class Service_categories extends EA_Controller /** * Update a service-category. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_SERVICES)) { @@ -182,7 +182,7 @@ class Service_categories extends EA_Controller /** * Remove a service-category. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_SERVICES)) { diff --git a/application/controllers/Services.php b/application/controllers/Services.php index 12c65c05..aff2aa96 100644 --- a/application/controllers/Services.php +++ b/application/controllers/Services.php @@ -41,7 +41,7 @@ class Services extends EA_Controller * On this page admin users will be able to manage services, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('services')]); @@ -79,7 +79,7 @@ class Services extends EA_Controller /** * Filter services by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_SERVICES)) { @@ -105,7 +105,7 @@ class Services extends EA_Controller /** * Store a new service. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_SERVICES)) { @@ -150,7 +150,7 @@ class Services extends EA_Controller /** * Find a service. */ - public function find() + public function find(): void { try { if (cannot('delete', PRIV_SERVICES)) { @@ -170,7 +170,7 @@ class Services extends EA_Controller /** * Update a service. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_SERVICES)) { @@ -216,7 +216,7 @@ class Services extends EA_Controller /** * Remove a service. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_SERVICES)) { diff --git a/application/controllers/Unavailabilities.php b/application/controllers/Unavailabilities.php index 368ae794..ad19fd67 100644 --- a/application/controllers/Unavailabilities.php +++ b/application/controllers/Unavailabilities.php @@ -38,7 +38,7 @@ class Unavailabilities extends EA_Controller /** * Filter unavailabilities by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_APPOINTMENTS)) { @@ -64,7 +64,7 @@ class Unavailabilities extends EA_Controller /** * Store a new unavailability. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_APPOINTMENTS)) { @@ -109,7 +109,7 @@ class Unavailabilities extends EA_Controller /** * Find an unavailability. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_APPOINTMENTS)) { @@ -129,7 +129,7 @@ class Unavailabilities extends EA_Controller /** * Update a unavailability. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_APPOINTMENTS)) { @@ -160,7 +160,7 @@ class Unavailabilities extends EA_Controller /** * Remove a unavailability. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_APPOINTMENTS)) { diff --git a/application/controllers/Update.php b/application/controllers/Update.php index f083314a..a4eae4ab 100644 --- a/application/controllers/Update.php +++ b/application/controllers/Update.php @@ -45,7 +45,7 @@ class Update extends EA_Controller * This method can be used either by loading the page in the browser or by an ajax request. But it will answer with * JSON encoded data. */ - public function index() + public function index(): void { try { $user_id = session('user_id'); diff --git a/application/controllers/User.php b/application/controllers/User.php index 10af0024..a71df12c 100644 --- a/application/controllers/User.php +++ b/application/controllers/User.php @@ -34,7 +34,7 @@ class User extends EA_Controller /** * Redirect to the login page. */ - public function index() + public function index(): void { redirect('login'); } diff --git a/application/controllers/Webhooks.php b/application/controllers/Webhooks.php index 57b3045c..3314d7f4 100644 --- a/application/controllers/Webhooks.php +++ b/application/controllers/Webhooks.php @@ -40,7 +40,7 @@ class Webhooks extends EA_Controller * On this page admin users will be able to manage webhooks, which are eventually selected by customers during the * booking process. */ - public function index() + public function index(): void { session(['dest_url' => site_url('webhooks')]); @@ -97,7 +97,7 @@ class Webhooks extends EA_Controller /** * Filter webhooks by the provided keyword. */ - public function search() + public function search(): void { try { if (cannot('view', PRIV_WEBHOOKS)) { @@ -123,7 +123,7 @@ class Webhooks extends EA_Controller /** * Store a new webhook. */ - public function store() + public function store(): void { try { if (cannot('add', PRIV_WEBHOOKS)) { @@ -155,7 +155,7 @@ class Webhooks extends EA_Controller /** * Update a webhook. */ - public function update() + public function update(): void { try { if (cannot('edit', PRIV_WEBHOOKS)) { @@ -188,7 +188,7 @@ class Webhooks extends EA_Controller /** * Remove a webhook. */ - public function destroy() + public function destroy(): void { try { if (cannot('delete', PRIV_WEBHOOKS)) { @@ -210,7 +210,7 @@ class Webhooks extends EA_Controller /** * Find a webhook. */ - public function find() + public function find(): void { try { if (cannot('view', PRIV_WEBHOOKS)) { diff --git a/application/controllers/api/v1/Settings_api_v1.php b/application/controllers/api/v1/Settings_api_v1.php index e32f237c..ee8cbb13 100644 --- a/application/controllers/api/v1/Settings_api_v1.php +++ b/application/controllers/api/v1/Settings_api_v1.php @@ -35,7 +35,7 @@ class Settings_api_v1 extends EA_Controller /** * Get a setting collection. */ - public function index() + public function index(): void { try { $keyword = $this->api->request_keyword(); diff --git a/application/models/Admins_model.php b/application/models/Admins_model.php index 8fe7d650..ac5fc5d8 100644 --- a/application/models/Admins_model.php +++ b/application/models/Admins_model.php @@ -76,7 +76,7 @@ class Admins_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $admin) + public function validate(array $admin): void { // If an admin ID is provided then check whether the record really exists in the database. if (!empty($admin['id'])) { @@ -277,7 +277,7 @@ class Admins_model extends EA_Model * * @throws InvalidArgumentException */ - protected function save_settings(int $admin_id, array $settings) + protected function save_settings(int $admin_id, array $settings): void { if (empty($settings)) { throw new InvalidArgumentException('The settings argument cannot be empty.'); @@ -302,7 +302,7 @@ class Admins_model extends EA_Model * @param string $name Setting name. * @param mixed|null $value Setting value. */ - public function set_setting(int $admin_id, string $name, mixed $value = null) + public function set_setting(int $admin_id, string $name, mixed $value = null): void { if (!$this->db->update('user_settings', [$name => $value], ['id_users' => $admin_id])) { throw new RuntimeException('Could not set the new admin setting value: ' . $name); @@ -534,7 +534,7 @@ class Admins_model extends EA_Model * * @param array $admin Admin data. */ - public function api_encode(array &$admin) + public function api_encode(array &$admin): void { $encoded_resource = [ 'id' => array_key_exists('id', $admin) ? (int) $admin['id'] : null, @@ -565,7 +565,7 @@ class Admins_model extends EA_Model * @param array $admin API resource. * @param array|null $base Base admin data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$admin, array $base = null) + public function api_decode(array &$admin, array $base = null): void { $decoded_resource = $base ?? []; diff --git a/application/models/Blocked_periods_model.php b/application/models/Blocked_periods_model.php index e42c5846..f8cd04ef 100644 --- a/application/models/Blocked_periods_model.php +++ b/application/models/Blocked_periods_model.php @@ -46,6 +46,7 @@ class Blocked_periods_model extends EA_Model * @return int Returns the blocked-period ID. * * @throws InvalidArgumentException + * @throws Exception */ public function save(array $blocked_period): int { @@ -64,8 +65,9 @@ class Blocked_periods_model extends EA_Model * @param array $blocked_period Associative array with the blocked-period data. * * @throws InvalidArgumentException + * @throws Exception */ - public function validate(array $blocked_period) + public function validate(array $blocked_period): void { // If a blocked-period ID is provided then check whether the record really exists in the database. if (!empty($blocked_period['id'])) { @@ -301,7 +303,7 @@ class Blocked_periods_model extends EA_Model * * @param array $blocked_period Blocked period data. */ - public function api_encode(array &$blocked_period) + public function api_encode(array &$blocked_period): void { $encoded_resource = [ 'id' => array_key_exists('id', $blocked_period) ? (int) $blocked_period['id'] : null, @@ -320,7 +322,7 @@ class Blocked_periods_model extends EA_Model * @param array $blocked_period API resource. * @param array|null $base Base blocked-period data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$blocked_period, array $base = null) + public function api_decode(array &$blocked_period, array $base = null): void { $decoded_resource = $base ?: []; diff --git a/application/models/Consents_model.php b/application/models/Consents_model.php index a58b247b..c7b8fc91 100644 --- a/application/models/Consents_model.php +++ b/application/models/Consents_model.php @@ -54,7 +54,7 @@ class Consents_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $consent) + public function validate(array $consent): void { if (empty($consent['ip']) || empty($consent['type'])) { throw new InvalidArgumentException('Not all required fields are provided: ' . print_r($consent, true)); diff --git a/application/models/Customers_model.php b/application/models/Customers_model.php index d97ac0f7..c698fd41 100644 --- a/application/models/Customers_model.php +++ b/application/models/Customers_model.php @@ -82,7 +82,7 @@ class Customers_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $customer) + public function validate(array $customer): void { // If a customer ID is provided then check whether the record really exists in the database. if (!empty($customer['id'])) { @@ -443,7 +443,7 @@ class Customers_model extends EA_Model * * @param array $customer Customer data. */ - public function api_encode(array &$customer) + public function api_encode(array &$customer): void { $encoded_resource = [ 'id' => array_key_exists('id', $customer) ? (int) $customer['id'] : null, @@ -472,7 +472,7 @@ class Customers_model extends EA_Model * @param array $customer API resource. * @param array|null $base Base customer data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$customer, array $base = null) + public function api_decode(array &$customer, array $base = null): void { $decoded_resource = $base ?: []; diff --git a/application/models/Roles_model.php b/application/models/Roles_model.php index 7f71d6f8..7f7fefd8 100644 --- a/application/models/Roles_model.php +++ b/application/models/Roles_model.php @@ -61,7 +61,7 @@ class Roles_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $role) + public function validate(array $role): void { // If a role ID is provided then check whether the record really exists in the database. if (!empty($role['id'])) { diff --git a/application/models/Secretaries_model.php b/application/models/Secretaries_model.php index d76428a9..904e72f3 100644 --- a/application/models/Secretaries_model.php +++ b/application/models/Secretaries_model.php @@ -76,7 +76,7 @@ class Secretaries_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $secretary) + public function validate(array $secretary): void { // If a secretary ID is provided then check whether the record really exists in the database. if (!empty($secretary['id'])) { @@ -306,7 +306,7 @@ class Secretaries_model extends EA_Model * * @throws InvalidArgumentException */ - protected function save_settings(int $secretary_id, array $settings) + protected function save_settings(int $secretary_id, array $settings): void { if (empty($settings)) { throw new InvalidArgumentException('The settings argument cannot be empty.'); @@ -331,7 +331,7 @@ class Secretaries_model extends EA_Model * @param string $name Setting name. * @param mixed|null $value Setting value. */ - public function set_setting(int $secretary_id, string $name, mixed $value = null) + public function set_setting(int $secretary_id, string $name, mixed $value = null): void { if (!$this->db->update('user_settings', [$name => $value], ['id_users' => $secretary_id])) { throw new RuntimeException('Could not set the new secretary setting value: ' . $name); @@ -387,7 +387,7 @@ class Secretaries_model extends EA_Model * @param int $secretary_id Secretary ID. * @param array $provider_ids Provider IDs. */ - protected function save_provider_ids(int $secretary_id, array $provider_ids) + protected function save_provider_ids(int $secretary_id, array $provider_ids): void { // Re-insert the secretary-provider connections. $this->db->delete('secretaries_providers', ['id_users_secretary' => $secretary_id]); @@ -554,7 +554,7 @@ class Secretaries_model extends EA_Model * * @throws InvalidArgumentException */ - public function load(array &$secretary, array $resources) + public function load(array &$secretary, array $resources): void { if (empty($secretary) || empty($resources)) { return; @@ -581,7 +581,7 @@ class Secretaries_model extends EA_Model * * @param array $secretary Secretary data. */ - public function api_encode(array &$secretary) + public function api_encode(array &$secretary): void { $encoded_resource = [ 'id' => array_key_exists('id', $secretary) ? (int) $secretary['id'] : null, @@ -613,7 +613,7 @@ class Secretaries_model extends EA_Model * @param array $secretary API resource. * @param array|null $base Base secretary data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$secretary, array $base = null) + public function api_decode(array &$secretary, array $base = null): void { $decoded_resource = $base ?: []; diff --git a/application/models/Service_categories_model.php b/application/models/Service_categories_model.php index 88d624d2..c0dda2e4 100644 --- a/application/models/Service_categories_model.php +++ b/application/models/Service_categories_model.php @@ -63,7 +63,7 @@ class Service_categories_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $service_category) + public function validate(array $service_category): void { // If a service-category ID is provided then check whether the record really exists in the database. if (!empty($service_category['id'])) { @@ -297,7 +297,7 @@ class Service_categories_model extends EA_Model * * @param array $service_category Category data. */ - public function api_encode(array &$service_category) + public function api_encode(array &$service_category): void { $encoded_resource = [ 'id' => array_key_exists('id', $service_category) ? (int) $service_category['id'] : null, @@ -316,7 +316,7 @@ class Service_categories_model extends EA_Model * @param array $service_category API resource. * @param array|null $base Base service-category data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$service_category, array $base = null) + public function api_decode(array &$service_category, array $base = null): void { $decoded_resource = $base ?: []; diff --git a/application/models/Services_model.php b/application/models/Services_model.php index 388610ea..f117f83b 100644 --- a/application/models/Services_model.php +++ b/application/models/Services_model.php @@ -76,7 +76,7 @@ class Services_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $service) + public function validate(array $service): void { // If a service ID is provided then check whether the record really exists in the database. if (!empty($service['id'])) { @@ -380,7 +380,7 @@ class Services_model extends EA_Model * * @throws InvalidArgumentException */ - public function load(array &$service, array $resources) + public function load(array &$service, array $resources): void { if (empty($service) || empty($resources)) { return; @@ -405,7 +405,7 @@ class Services_model extends EA_Model * * @param array $service Service data. */ - public function api_encode(array &$service) + public function api_encode(array &$service): void { $encoded_resource = [ 'id' => array_key_exists('id', $service) ? (int) $service['id'] : null, @@ -430,7 +430,7 @@ class Services_model extends EA_Model * @param array $service API resource. * @param array|null $base Base service data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$service, array $base = null) + public function api_decode(array &$service, array $base = null): void { $decoded_resource = $base ?: []; diff --git a/application/models/Settings_model.php b/application/models/Settings_model.php index a3fb7416..93dc8030 100644 --- a/application/models/Settings_model.php +++ b/application/models/Settings_model.php @@ -62,7 +62,7 @@ class Settings_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $setting) + public function validate(array $setting): void { // If a setting ID is provided then check whether the record really exists in the database. if (!empty($setting['id'])) { @@ -288,7 +288,7 @@ class Settings_model extends EA_Model * * @param array $setting Setting data. */ - public function api_encode(array &$setting) + public function api_encode(array &$setting): void { $encoded_resource = [ 'name' => $setting['name'], @@ -304,7 +304,7 @@ class Settings_model extends EA_Model * @param array $setting API resource. * @param array|null $base Base setting data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$setting, array $base = null) + public function api_decode(array &$setting, array $base = null): void { $decoded_resource = $base ?: []; diff --git a/application/models/Unavailabilities_model.php b/application/models/Unavailabilities_model.php index d2711e52..86ad4253 100644 --- a/application/models/Unavailabilities_model.php +++ b/application/models/Unavailabilities_model.php @@ -73,7 +73,7 @@ class Unavailabilities_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $unavailability) + public function validate(array $unavailability): void { // If an unavailability ID is provided then check whether the record really exists in the database. if (!empty($unavailability['id'])) { @@ -349,7 +349,7 @@ class Unavailabilities_model extends EA_Model * * @throws InvalidArgumentException */ - public function load(array &$unavailability, array $resources) + public function load(array &$unavailability, array $resources): void { if (empty($unavailability) || empty($resources)) { return; @@ -374,7 +374,7 @@ class Unavailabilities_model extends EA_Model * * @param array $unavailability Unavailability data. */ - public function api_encode(array &$unavailability) + public function api_encode(array &$unavailability): void { $encoded_resource = [ 'id' => array_key_exists('id', $unavailability) ? (int) $unavailability['id'] : null, @@ -399,7 +399,7 @@ class Unavailabilities_model extends EA_Model * @param array $unavailability API resource. * @param array|null $base Base unavailability data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$unavailability, array $base = null) + public function api_decode(array &$unavailability, array $base = null): void { $decoded_request = $base ?: []; diff --git a/application/models/Users_model.php b/application/models/Users_model.php index 3bc01245..1b071234 100644 --- a/application/models/Users_model.php +++ b/application/models/Users_model.php @@ -76,7 +76,7 @@ class Users_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $user) + public function validate(array $user): void { // If a user ID is provided then check whether the record really exists in the database. if (!empty($user['id'])) { @@ -138,7 +138,7 @@ class Users_model extends EA_Model * * @throws InvalidArgumentException */ - protected function save_settings(int $user_id, array $settings) + protected function save_settings(int $user_id, array $settings): void { if (empty($settings)) { throw new InvalidArgumentException('The settings argument cannot be empty.'); @@ -163,7 +163,7 @@ class Users_model extends EA_Model * @param string $name Setting name. * @param string $value Setting value. */ - public function set_setting(int $user_id, string $name, string $value) + public function set_setting(int $user_id, string $name, string $value): void { if (!$this->db->update('user_settings', [$name => $value], ['id_users' => $user_id])) { throw new RuntimeException('Could not set the new user setting value: ' . $name); diff --git a/application/models/Webhooks_model.php b/application/models/Webhooks_model.php index 5ccc936a..e7eb1680 100644 --- a/application/models/Webhooks_model.php +++ b/application/models/Webhooks_model.php @@ -70,7 +70,7 @@ class Webhooks_model extends EA_Model * * @throws InvalidArgumentException */ - public function validate(array $webhook) + public function validate(array $webhook): void { if (empty($webhook['name']) || empty($webhook['url']) || empty($webhook['actions'])) { throw new InvalidArgumentException('Not all required fields are provided: ' . print_r($webhook, true)); @@ -304,7 +304,7 @@ class Webhooks_model extends EA_Model * @param array $webhook API resource. * @param array|null $base Base webhook data to be overwritten with the provided values (useful for updates). */ - public function api_decode(array &$webhook, array $base = null) + public function api_decode(array &$webhook, array $base = null): void { $decoded_resource = $base ?: []; From 6e8778919e77631a3dafc48d2ccae872a1d94fbf Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:40:33 +0200 Subject: [PATCH 25/72] Unset foreach variable --- application/controllers/Calendar.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/application/controllers/Calendar.php b/application/controllers/Calendar.php index fb568cf6..3761b85a 100644 --- a/application/controllers/Calendar.php +++ b/application/controllers/Calendar.php @@ -621,8 +621,9 @@ class Calendar extends EA_Controller $record_id = request('record_id'); $filter_type = request('filter_type'); + $is_all = request('record_id') === FILTER_TYPE_ALL; - if (!$filter_type && $record_id !== FILTER_TYPE_ALL) { + if (!$filter_type && !$is_all) { json_response([ 'appointments' => [], 'unavailabilities' => [], @@ -676,6 +677,8 @@ class Calendar extends EA_Controller $appointment['customer'] = $this->customers_model->find($appointment['id_users_customer']); } + unset($appointment); + // Get unavailability periods (only for provider). $response['unavailabilities'] = []; From d8845eca23bb4d91eec85d5a8e50a3b125af2f5a Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:41:38 +0200 Subject: [PATCH 26/72] Allow users to edit events in all views --- assets/js/utils/calendar_default_view.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/assets/js/utils/calendar_default_view.js b/assets/js/utils/calendar_default_view.js index 4d7b7805..0e05f230 100755 --- a/assets/js/utils/calendar_default_view.js +++ b/assets/js/utils/calendar_default_view.js @@ -303,12 +303,8 @@ App.Utils.CalendarDefaultView = (function () { $selectFilterItem.val() === 'all' ) { $('#google-sync, #enable-sync, #insert-appointment, #insert-dropdown').prop('disabled', true); - fullCalendar.setOption('selectable', false); - fullCalendar.setOption('editable', false); } else { $('#google-sync, #enable-sync, #insert-appointment, #insert-dropdown').prop('disabled', false); - fullCalendar.setOption('selectable', true); - fullCalendar.setOption('editable', true); const providerId = $selectFilterItem.val(); From a8ac22fe006b417bc4a27cfe25a164975a20429e Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 16:45:31 +0200 Subject: [PATCH 27/72] Include the unavailabilities to the "all" display in the calendar --- application/controllers/Calendar.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/application/controllers/Calendar.php b/application/controllers/Calendar.php index 3761b85a..8beef71e 100644 --- a/application/controllers/Calendar.php +++ b/application/controllers/Calendar.php @@ -620,9 +620,10 @@ class Calendar extends EA_Controller $record_id = request('record_id'); - $filter_type = request('filter_type'); $is_all = request('record_id') === FILTER_TYPE_ALL; + $filter_type = request('filter_type'); + if (!$filter_type && !$is_all) { json_response([ 'appointments' => [], @@ -682,7 +683,7 @@ class Calendar extends EA_Controller // Get unavailability periods (only for provider). $response['unavailabilities'] = []; - if ($filter_type == FILTER_TYPE_PROVIDER) { + if ($filter_type == FILTER_TYPE_PROVIDER || $is_all) { $where_clause = $where_id . ' = ' . From 1e4fa887341f673cf14d4da91586bae414db2b54 Mon Sep 17 00:00:00 2001 From: Thomas Ingles Date: Wed, 24 Apr 2024 22:31:32 +0200 Subject: [PATCH 28/72] Fix untranslated secretaries + providers js (errors) Fix provider : MIN_PASSWORD_LENGTH is undefined A constant in php :) --- assets/js/pages/providers.js | 2 +- assets/js/pages/secretaries.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/assets/js/pages/providers.js b/assets/js/pages/providers.js index 6b9afed0..93429fd5 100755 --- a/assets/js/pages/providers.js +++ b/assets/js/pages/providers.js @@ -288,7 +288,7 @@ App.Pages.Providers = (function () { if ($password.val().length < vars('min_password_length') && $password.val() !== '') { $('#password, #password-confirm').addClass('is-invalid'); - throw new Error(lang('password_length_notice').replace('$number', MIN_PASSWORD_LENGTH)); + throw new Error(lang('password_length_notice').replace('$number', vars('min_password_length'))); } // Validate user email. diff --git a/assets/js/pages/secretaries.js b/assets/js/pages/secretaries.js index bdcf274b..bf71b0d8 100644 --- a/assets/js/pages/secretaries.js +++ b/assets/js/pages/secretaries.js @@ -285,24 +285,24 @@ App.Pages.Secretaries = (function () { } }); if (missingRequired) { - throw new Error('Fields with * are required.'); + throw new Error(lang('fields_are_required')); } // Validate passwords. if ($password.val() !== $passwordConfirmation.val()) { $('#password, #password-confirm').addClass('is-invalid'); - throw new Error('Passwords mismatch!'); + throw new Error(lang('passwords_mismatch')); } if ($password.val().length < vars('min_password_length') && $password.val() !== '') { $('#password, #password-confirm').addClass('is-invalid'); - throw new Error('Password must be at least ' + vars('min_password_length') + ' characters long.'); + throw new Error(lang('password_length_notice').replace('$number', vars('min_password_length'))); } // Validate user email. if (!App.Utils.Validation.email($email.val())) { $email.addClass('is-invalid'); - throw new Error('Invalid email address!'); + throw new Error(lang('invalid_email')); } // Validate phone number. @@ -324,7 +324,7 @@ App.Pages.Secretaries = (function () { // Check if username exists if ($username.attr('already-exists') === 'true') { $username.addClass('is-invalid'); - throw new Error('Username already exists.'); + throw new Error(lang('username_already_exists')); } return true; From b9a4efc3e8cfcd0ffeb10b5fd8fa192ca85dce72 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 19:28:31 +0200 Subject: [PATCH 29/72] Resolve conflicts --- assets/js/pages/customers.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/assets/js/pages/customers.js b/assets/js/pages/customers.js index f8c0e235..cf371f4d 100644 --- a/assets/js/pages/customers.js +++ b/assets/js/pages/customers.js @@ -253,8 +253,7 @@ App.Pages.Customers = (function () { $customers.find('.record-details').find('input, select, textarea').val('').prop('disabled', true); $customers.find('.record-details .form-label span').prop('hidden', true); $customers.find('.record-details #timezone').val(vars('default_timezone')); - - $language.val(vars('default_language')); + $customers.find('.record-details #language').val(vars('default_language')); $customerAppointments.empty(); From 9ebeb89cb05f31016f0321e3f03ab6a11438016e Mon Sep 17 00:00:00 2001 From: Thomas Ingles Date: Wed, 24 Apr 2024 13:29:10 +0200 Subject: [PATCH 30/72] Fix controller Booking : typo default phone_number --- application/controllers/Booking.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/Booking.php b/application/controllers/Booking.php index cc0fae4b..c67064d7 100755 --- a/application/controllers/Booking.php +++ b/application/controllers/Booking.php @@ -321,7 +321,7 @@ class Booking extends EA_Controller } if (!array_key_exists('phone_number', $customer)) { - $customer['address'] = ''; + $customer['phone_number'] = ''; } // Check appointment availability before registering it to the database. From d99709f39af347be1f05d85e6a7ff7ddd093dd80 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 17:03:00 +0200 Subject: [PATCH 31/72] Add the reload button to the page notifications so that users can see the UI changes (#1510) --- assets/js/pages/general_settings.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/js/pages/general_settings.js b/assets/js/pages/general_settings.js index e0e7bbca..751c74b2 100644 --- a/assets/js/pages/general_settings.js +++ b/assets/js/pages/general_settings.js @@ -104,14 +104,18 @@ App.Pages.GeneralSettings = (function () { function onSaveSettingsClick() { if (isInvalid()) { App.Layouts.Backend.displayNotification(lang('settings_are_invalid')); - return; } const generalSettings = serialize(); App.Http.GeneralSettings.save(generalSettings).done(() => { - App.Layouts.Backend.displayNotification(lang('settings_saved')); + App.Layouts.Backend.displayNotification(lang('settings_saved'), [ + { + label: lang('reload'), // Reload Page + function: () => window.location.reload(), + }, + ]); }); } From 39350c79b01e03fb5fc8f3cf7fe6eb62b11a3a78 Mon Sep 17 00:00:00 2001 From: Thomas Ingles Date: Wed, 24 Apr 2024 01:47:00 +0200 Subject: [PATCH 32/72] css layouts bg by theme Found with Darkly theme --- assets/css/layouts/account_layout.scss | 2 -- assets/css/layouts/backend_layout.scss | 2 +- assets/css/layouts/booking_layout.scss | 7 +------ 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/assets/css/layouts/account_layout.scss b/assets/css/layouts/account_layout.scss index 23f95a4b..e24f322e 100644 --- a/assets/css/layouts/account_layout.scss +++ b/assets/css/layouts/account_layout.scss @@ -14,13 +14,11 @@ body { height: 100vh; display: table-cell; vertical-align: middle; - background-color: #f5f8fa; } #login-frame { width: 630px; margin: auto; - background: #fff; border: 1px solid #dddada; padding: 70px; } diff --git a/assets/css/layouts/backend_layout.scss b/assets/css/layouts/backend_layout.scss index bc4a9956..43f0516b 100644 --- a/assets/css/layouts/backend_layout.scss +++ b/assets/css/layouts/backend_layout.scss @@ -75,7 +75,7 @@ root { } #footer { - background-color: #f7f7f7; + background-color: var(--bs-body-bg); border-top: 1px solid #ddd; font-size: 11px; } diff --git a/assets/css/layouts/booking_layout.scss b/assets/css/layouts/booking_layout.scss index f60c1c88..1ad039d9 100644 --- a/assets/css/layouts/booking_layout.scss +++ b/assets/css/layouts/booking_layout.scss @@ -18,10 +18,6 @@ body { height: 100%; } -body { - background-color: #f5f8fa; -} - #main { min-height: 100%; } @@ -30,7 +26,6 @@ body { ------------------------------------------------------------------------------ */ #book-appointment-wizard { - background: #fff; min-height: 480px; padding: 0; margin: auto; @@ -285,7 +280,7 @@ body { #book-appointment-wizard { border-radius: 0.25rem; overflow: hidden; - box-shadow: rgba(45, 62, 80, 0.12) 0 1px 5px 0; + box-shadow: rgba(138, 195, 255, 0.12) 0 1px 5px 0; } #book-appointment-wizard #company-name { From 3b5a2e76a7dd0452b9a9b5c30e4a5c5da6043869 Mon Sep 17 00:00:00 2001 From: Thomas Ingles Date: Tue, 23 Apr 2024 19:20:46 +0200 Subject: [PATCH 33/72] Fix french typos, improve & add missing translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit \' TO ’ --- application/language/french/calendar_lang.php | 6 +- application/language/french/date_lang.php | 2 +- application/language/french/db_lang.php | 26 +-- application/language/french/email_lang.php | 28 +-- application/language/french/ftp_lang.php | 24 +- application/language/french/imglib_lang.php | 36 +-- .../language/french/migration_lang.php | 10 +- application/language/french/number_lang.php | 10 +- .../language/french/pagination_lang.php | 4 +- .../language/french/translations_lang.php | 212 +++++++++--------- application/language/french/upload_lang.php | 32 +-- 11 files changed, 193 insertions(+), 197 deletions(-) diff --git a/application/language/french/calendar_lang.php b/application/language/french/calendar_lang.php index 72acd4c6..9b2acce6 100644 --- a/application/language/french/calendar_lang.php +++ b/application/language/french/calendar_lang.php @@ -65,7 +65,7 @@ $lang['cal_apr'] = 'Avr'; $lang['cal_may'] = 'Mai'; $lang['cal_jun'] = 'Jun'; $lang['cal_jul'] = 'Jul'; -$lang['cal_aug'] = 'Aou'; +$lang['cal_aug'] = 'Aoû'; $lang['cal_sep'] = 'Sep'; $lang['cal_oct'] = 'Oct'; $lang['cal_nov'] = 'Nov'; @@ -73,11 +73,11 @@ $lang['cal_dec'] = 'Déc'; $lang['cal_january'] = 'Janvier'; $lang['cal_february'] = 'Février'; $lang['cal_march'] = 'Mars'; -$lang['cal_april'] = 'April'; +$lang['cal_april'] = 'Avril'; $lang['cal_mayl'] = 'Mai'; $lang['cal_june'] = 'Juin'; $lang['cal_july'] = 'Juillet'; -$lang['cal_august'] = 'Aout'; +$lang['cal_august'] = 'Août'; $lang['cal_september'] = 'Septembre'; $lang['cal_october'] = 'Octobre'; $lang['cal_november'] = 'Novembre'; diff --git a/application/language/french/date_lang.php b/application/language/french/date_lang.php index b1e1f4e6..67778783 100644 --- a/application/language/french/date_lang.php +++ b/application/language/french/date_lang.php @@ -45,7 +45,7 @@ $lang['date_week'] = 'Semaine'; $lang['date_weeks'] = 'Semaines'; $lang['date_day'] = 'Jour'; $lang['date_days'] = 'Jours'; -$lang['date_hour'] = 'Hoeure'; +$lang['date_hour'] = 'Heure'; $lang['date_hours'] = 'Heures'; $lang['date_minute'] = 'Minute'; $lang['date_minutes'] = 'Minutes'; diff --git a/application/language/french/db_lang.php b/application/language/french/db_lang.php index 96b62361..153fa6e5 100644 --- a/application/language/french/db_lang.php +++ b/application/language/french/db_lang.php @@ -8,27 +8,27 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['db_invalid_connection_str'] = "Impossible de déterminer les paramètres d'accès à la base de données en se basant sur la chaîne de connexion que vous avez fournie."; +$lang['db_invalid_connection_str'] = 'Impossible de déterminer les paramètres d’accès à la base de données en se basant sur la chaîne de connexion que vous avez fournie.'; $lang['db_unable_to_connect'] = 'Impossible de se connecter à la base de données en utilisant les paramètres fournis.'; $lang['db_unable_to_select'] = 'Impossible de sélectionner cette base de données : %s'; $lang['db_unable_to_create'] = 'Impossible de créer cette base de données : %s'; $lang['db_invalid_query'] = 'La requête que vous avez fournie est invalide.'; $lang['db_must_set_table'] = 'Vous devez spécifier une table pour effectuer votre requête.'; -$lang['db_must_use_set'] = "Vous devez utiliser la méthode \"set()\" pour mettre à jour une entrée."; +$lang['db_must_use_set'] = 'Vous devez utiliser la méthode "set()" pour mettre à jour une entrée.'; $lang['db_must_use_index'] = 'Vous devez spécifier un index pour les mises à jour groupées.'; -$lang['db_batch_missing_index'] = "Une ou plusieurs rangées de la mise à jour groupée ne disposent pas de l'index requis."; -$lang['db_must_use_where'] = "Il faut obligatoirement spécifier la clause \"WHERE\" pour mettre à jour une entrée."; -$lang['db_del_must_use_where'] = "Il faut obligatoirement spécifier la clause \"WHERE\" pour supprimer une entrée."; -$lang['db_field_param_missing'] = "La méthode \"fetch_fields()\" requiert le nom de la table cible en paramètre."; -$lang['db_unsupported_function'] = "Cette fonctionnalité n'est pas disponible pour la base de données utilisée."; +$lang['db_batch_missing_index'] = 'Une ou plusieurs rangées de la mise à jour groupée ne disposent pas de l’index requis.'; +$lang['db_must_use_where'] = 'Il faut obligatoirement spécifier la clause "WHERE" pour mettre à jour une entrée.'; +$lang['db_del_must_use_where'] = 'Il faut obligatoirement spécifier la clause "WHERE" pour supprimer une entrée.'; +$lang['db_field_param_missing'] = 'La méthode "fetch_fields()" requiert le nom de la table cible en paramètre.'; +$lang['db_unsupported_function'] = 'Cette fonctionnalité n’est pas disponible pour la base de données utilisée.'; $lang['db_transaction_failure'] = 'Erreur de transaction : la transaction est annulée.'; -$lang['db_unable_to_drop'] = "Impossible d'effacer la base de données spécifiée."; -$lang['db_unsupported_feature'] = "Cette fonctionnalité n'est pas supportée par le système de gestion de bases de données utilisé."; -$lang['db_unsupported_compression'] = "Le format de compression choisi n'est pas supporté par votre serveur."; -$lang['db_filepath_error'] = "Impossible d'écrire des données au chemin de fichiers indiqué."; -$lang['db_invalid_cache_path'] = "Le chemin de mise en cache indiqué n'est pas valide ou inscriptible."; +$lang['db_unable_to_drop'] = 'Impossible d’effacer la base de données spécifiée.'; +$lang['db_unsupported_feature'] = 'Cette fonctionnalité n’est pas supportée par le système de gestion de bases de données utilisé.'; +$lang['db_unsupported_compression'] = 'Le format de compression choisi n’est pas supporté par votre serveur.'; +$lang['db_filepath_error'] = 'Impossible d’écrire des données au chemin de fichiers indiqué.'; +$lang['db_invalid_cache_path'] = 'Le chemin de mise en cache indiqué n’est pas valide ou inscriptible.'; $lang['db_table_name_required'] = 'Un nom de table est requis pour cette opération.'; $lang['db_column_name_required'] = 'Un nom de champ est requis pour cette opération.'; $lang['db_column_definition_required'] = 'Une définition de champ est requise pour cette opération.'; $lang['db_unable_to_set_charset'] = 'Impossible de définir le jeu de caractères de la connexion client : %s'; -$lang['db_error_heading'] = "Une erreur de la base de données s'est produite."; +$lang['db_error_heading'] = 'Une erreur de la base de données s’est produite.'; diff --git a/application/language/french/email_lang.php b/application/language/french/email_lang.php index ca37d2e9..9c11b423 100644 --- a/application/language/french/email_lang.php +++ b/application/language/french/email_lang.php @@ -8,22 +8,22 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['email_must_be_array'] = "La méthode de validation d'email n'accepte que les tableaux associatifs (array)."; +$lang['email_must_be_array'] = 'La méthode de validation d’email n’accepte que les tableaux associatifs (array).'; $lang['email_invalid_address'] = 'Adresse email invalide : %s'; $lang['email_attachment_missing'] = 'Impossible de localiser le fichier joint suivant : %s'; -$lang['email_attachment_unreadable'] = "Impossible d'ouvrir ce fichier joint : %s"; -$lang['email_no_from'] = "Impossible d'envoyer un email sans en-tête \"From\"."; +$lang['email_attachment_unreadable'] = 'Impossible d’ouvrir ce fichier joint : %s'; +$lang['email_no_from'] = 'Impossible d’envoyer un email sans en-tête "From".'; $lang['email_no_recipients'] = 'Vous devez spécifier des destinataires: To, Cc, ou Bcc'; -$lang['email_send_failure_phpmail'] = "Impossible d'envoyer des emails avec la fonction mail() de PHP. Votre serveur ne doit pas être configuré pour pouvoir utiliser cette méthode."; -$lang['email_send_failure_sendmail'] = "Impossible d'envoyer des emails avec la méthode Sendmail de PHP. Votre serveur ne doit pas être configuré pour pouvoir utiliser cette méthode."; -$lang['email_send_failure_smtp'] = "Impossible d'envoyer des emails avec la méthode SMTP de PHP. Votre serveur ne doit pas être configuré pour pouvoir utiliser cette méthode."; +$lang['email_send_failure_phpmail'] = 'Impossible d’envoyer des emails avec la fonction mail() de PHP. Votre serveur ne doit pas être configuré pour pouvoir utiliser cette méthode.'; +$lang['email_send_failure_sendmail'] = 'Impossible d’envoyer des emails avec la méthode Sendmail de PHP. Votre serveur ne doit pas être configuré pour pouvoir utiliser cette méthode.'; +$lang['email_send_failure_smtp'] = 'Impossible d’envoyer des emails avec la méthode SMTP de PHP. Votre serveur ne doit pas être configuré pour pouvoir utiliser cette méthode.'; $lang['email_sent'] = 'Votre message a bien été expédié par le protocole suivant : %s'; -$lang['email_no_socket'] = "Impossible d'ouvrir un socket avec Sendmail. Veuillez vérifier la configuration de votre environnement."; -$lang['email_no_hostname'] = "Vous n'avez pas spécificé d'hôte SMTP."; -$lang['email_smtp_error'] = "L'erreur SMTP suivante s'est produite : %s"; -$lang['email_no_smtp_unpw'] = "Erreur : Vous devez spécifier un nom d'utilisateur et un mot de passe SMTP."; -$lang['email_failed_smtp_login'] = "Échec lors de l'envoi de la commande AUTH LOGIN. Erreur : %s"; -$lang['email_smtp_auth_un'] = "Impossible d'identifier le nom d'utilisateur. Erreur : %s"; -$lang['email_smtp_auth_pw'] = "Impossible d'identifier le mot de passe. Erreur : %s"; -$lang['email_smtp_data_failure'] = "Impossible d'envoyer les données : %s"; +$lang['email_no_socket'] = 'Impossible d’ouvrir un socket avec Sendmail. Veuillez vérifier la configuration de votre environnement.'; +$lang['email_no_hostname'] = 'Vous n’avez pas spécificé d’hôte SMTP.'; +$lang['email_smtp_error'] = 'L’erreur SMTP suivante s’est produite : %s'; +$lang['email_no_smtp_unpw'] = 'Erreur : Vous devez spécifier un nom d’utilisateur et un mot de passe SMTP.'; +$lang['email_failed_smtp_login'] = 'Échec lors de l’envoi de la commande AUTH LOGIN. Erreur : %s'; +$lang['email_smtp_auth_un'] = 'Impossible d’identifier le nom d’utilisateur. Erreur : %s'; +$lang['email_smtp_auth_pw'] = 'Impossible d’identifier le mot de passe. Erreur : %s'; +$lang['email_smtp_data_failure'] = 'Impossible d’envoyer les données : %s'; $lang['email_exit_status'] = 'Code de retour : %s'; diff --git a/application/language/french/ftp_lang.php b/application/language/french/ftp_lang.php index a15def8b..fb5a357e 100644 --- a/application/language/french/ftp_lang.php +++ b/application/language/french/ftp_lang.php @@ -37,15 +37,15 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['ftp_no_connection'] = 'Unable to locate a valid connection ID. Please make sure you are connected before performing any file routines.'; -$lang['ftp_unable_to_connect'] = 'Unable to connect to your FTP server using the supplied hostname.'; -$lang['ftp_unable_to_login'] = 'Unable to login to your FTP server. Please check your username and password.'; -$lang['ftp_unable_to_mkdir'] = 'Unable to create the directory you have specified.'; -$lang['ftp_unable_to_changedir'] = 'Unable to change directories.'; -$lang['ftp_unable_to_chmod'] = 'Unable to set file permissions. Please check your path.'; -$lang['ftp_unable_to_upload'] = 'Unable to upload the specified file. Please check your path.'; -$lang['ftp_unable_to_download'] = 'Unable to download the specified file. Please check your path.'; -$lang['ftp_no_source_file'] = 'Unable to locate the source file. Please check your path.'; -$lang['ftp_unable_to_rename'] = 'Unable to rename the file.'; -$lang['ftp_unable_to_delete'] = 'Unable to delete the file.'; -$lang['ftp_unable_to_move'] = 'Unable to move the file. Please make sure the destination directory exists.'; +$lang['ftp_no_connection'] = 'Impossible de trouver un ID de connexion valide. Assurez-vous d’être connecté avant d’effectuer des routines de fichiers.'; +$lang['ftp_unable_to_connect'] = 'Impossible de se connecter à votre serveur FTP à l’aide du nom d’hôte fourni.'; +$lang['ftp_unable_to_login'] = 'Impossible de se connecter à votre serveur FTP. Veuillez vérifier votre nom d’utilisateur et votre mot de passe.'; +$lang['ftp_unable_to_mkdir'] = 'Impossible de créer le répertoire que vous avez spécifié.'; +$lang['ftp_unable_to_changedir'] = 'Impossible de changer de répertoire.'; +$lang['ftp_unable_to_chmod'] = 'Impossible de définir les autorisations de fichier. S’il vous plaît vérifier votre chemin.'; +$lang['ftp_unable_to_upload'] = 'Impossible de téléverser le fichier spécifié. S’il vous plaît vérifier votre chemin.'; +$lang['ftp_unable_to_download'] = 'Impossible de télécharger le fichier spécifié. S’il vous plaît vérifier votre chemin.'; +$lang['ftp_no_source_file'] = 'Impossible de localiser le fichier source. S’il vous plaît vérifier votre chemin.'; +$lang['ftp_unable_to_rename'] = 'Impossible de renommer le fichier.'; +$lang['ftp_unable_to_delete'] = 'Impossible de supprimer le fichier.'; +$lang['ftp_unable_to_move'] = 'Impossible de déplacer le fichier. Assurez-vous que le répertoire de destination existe.'; diff --git a/application/language/french/imglib_lang.php b/application/language/french/imglib_lang.php index 383e9cda..5e98afec 100644 --- a/application/language/french/imglib_lang.php +++ b/application/language/french/imglib_lang.php @@ -37,21 +37,21 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['imglib_source_image_required'] = 'You must specify a source image in your preferences.'; -$lang['imglib_gd_required'] = 'The GD image library is required for this feature.'; -$lang['imglib_gd_required_for_props'] = 'Your server must support the GD image library in order to determine the image properties.'; -$lang['imglib_unsupported_imagecreate'] = 'Your server does not support the GD function required to process this type of image.'; -$lang['imglib_gif_not_supported'] = 'GIF images are often not supported due to licensing restrictions. You may have to use JPG or PNG images instead.'; -$lang['imglib_jpg_not_supported'] = 'JPG images are not supported.'; -$lang['imglib_png_not_supported'] = 'PNG images are not supported.'; -$lang['imglib_jpg_or_png_required'] = 'The image resize protocol specified in your preferences only works with JPEG or PNG image types.'; -$lang['imglib_copy_error'] = 'An error was encountered while attempting to replace the file. Please make sure your file directory is writable.'; -$lang['imglib_rotate_unsupported'] = 'Image rotation does not appear to be supported by your server.'; -$lang['imglib_libpath_invalid'] = 'The path to your image library is not correct. Please set the correct path in your image preferences.'; -$lang['imglib_image_process_failed'] = 'Image processing failed. Please verify that your server supports the chosen protocol and that the path to your image library is correct.'; -$lang['imglib_rotation_angle_required'] = 'An angle of rotation is required to rotate the image.'; -$lang['imglib_invalid_path'] = 'The path to the image is not correct.'; -$lang['imglib_invalid_image'] = 'The provided image is not valid.'; -$lang['imglib_copy_failed'] = 'The image copy routine failed.'; -$lang['imglib_missing_font'] = 'Unable to find a font to use.'; -$lang['imglib_save_failed'] = 'Unable to save the image. Please make sure the image and file directory are writable.'; +$lang['imglib_source_image_required'] = 'Vous devez spécifier une image source dans vos préférences.'; +$lang['imglib_gd_required'] = 'La bibliothèque d’images GD est requise pour cette fonctionnalité.'; +$lang['imglib_gd_required_for_props'] = 'Votre serveur doit prendre en charge la bibliothèque d’images GD afin de déterminer les propriétés de l’image.'; +$lang['imglib_unsupported_imagecreate'] = 'Votre serveur ne prend pas en charge la fonction GD requise pour traiter ce type d’image.'; +$lang['imglib_gif_not_supported'] = 'Les images GIF ne sont souvent pas prises en charge en raison de restrictions de licence. Vous devrez peut-être utiliser des images JPG ou PNG à la place.'; +$lang['imglib_jpg_not_supported'] = 'Les images JPG ne sont pas prises en charge.'; +$lang['imglib_png_not_supported'] = 'Les images PNG ne sont pas prises en charge.'; +$lang['imglib_jpg_or_png_required'] = 'Le protocole de redimensionnement d’image spécifié dans vos préférences ne fonctionne qu’avec les types d’images JPEG ou PNG.'; +$lang['imglib_copy_error'] = 'Une erreur s’est produite lors de la tentative de remplacement du fichier. Assurez-vous que votre répertoire de fichiers est accessible en écriture.'; +$lang['imglib_rotate_unsupported'] = 'La rotation des images ne semble pas être prise en charge par votre serveur.'; +$lang['imglib_libpath_invalid'] = 'Le chemin d’accès à votre bibliothèque d’images n’est pas correct. Veuillez définir le chemin correct dans vos préférences d’image.'; +$lang['imglib_image_process_failed'] = 'Echec du traitement de l’image. Veuillez vérifier que votre serveur prend en charge le protocole choisi et que le chemin d’accès à votre bibliothèque d’images est correct.'; +$lang['imglib_rotation_angle_required'] = 'Un angle de rotation est nécessaire pour faire pivoter l’image.'; +$lang['imglib_invalid_path'] = 'Le chemin d’accès à l’image n’est pas correct.'; +$lang['imglib_invalid_image'] = 'L’image fournie n’est pas valide.'; +$lang['imglib_copy_failed'] = 'La routine de copie d’image a échoué.'; +$lang['imglib_missing_font'] = 'Impossible de trouver une police à utiliser.'; +$lang['imglib_save_failed'] = 'Impossible d’enregistrer l’image. Assurez-vous que l’image et le répertoire de fichiers sont accessibles en écriture.'; diff --git a/application/language/french/migration_lang.php b/application/language/french/migration_lang.php index cae13ba4..e6ff3843 100644 --- a/application/language/french/migration_lang.php +++ b/application/language/french/migration_lang.php @@ -9,10 +9,10 @@ defined('BASEPATH') or exit('No direct script access allowed'); $lang['migration_none_found'] = 'Aucune migration trouvée.'; -$lang['migration_not_found'] = "Aucune migration n'a été trouvée avec le numéro de version : %d."; +$lang['migration_not_found'] = 'Aucune migration n’a été trouvée avec le numéro de version : %d.'; $lang['migration_sequence_gap'] = 'Il y a un trou dans la séquence de migration près de la version numéro : %s.'; $lang['migration_multiple_version'] = 'Il y a plusieurs migrations avec le même numéro de version : %d.'; -$lang['migration_class_doesnt_exist'] = "La classe de migration \"%s\" n'a pas pu être trouvée."; -$lang['migration_missing_up_method'] = "La classe de migration \"%s\" ne dispose pas d'une méthode 'up'."; -$lang['migration_missing_down_method'] = "La classe de migration \"%s\" ne dispose pas d'une méthode 'down'."; -$lang['migration_invalid_filename'] = "Le nom de fichier de la migration \"%s\" n'est pas valide."; +$lang['migration_class_doesnt_exist'] = 'La classe de migration "%s" n’a pas pu être trouvée.'; +$lang['migration_missing_up_method'] = 'La classe de migration "%s" ne dispose pas d’une méthode "up".'; +$lang['migration_missing_down_method'] = 'La classe de migration "%s" ne dispose pas d’une méthode "down".'; +$lang['migration_invalid_filename'] = 'Le nom de fichier de la migration "%s" est invalide.'; diff --git a/application/language/french/number_lang.php b/application/language/french/number_lang.php index af3d06d1..dfc0ba03 100644 --- a/application/language/french/number_lang.php +++ b/application/language/french/number_lang.php @@ -37,8 +37,8 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['terabyte_abbr'] = 'TB'; -$lang['gigabyte_abbr'] = 'GB'; -$lang['megabyte_abbr'] = 'MB'; -$lang['kilobyte_abbr'] = 'KB'; -$lang['bytes'] = 'Bytes'; +$lang['terabyte_abbr'] = 'To'; +$lang['gigabyte_abbr'] = 'Go'; +$lang['megabyte_abbr'] = 'Mo'; +$lang['kilobyte_abbr'] = 'Ko'; +$lang['bytes'] = 'Octets'; diff --git a/application/language/french/pagination_lang.php b/application/language/french/pagination_lang.php index 9a62cf94..8661f074 100644 --- a/application/language/french/pagination_lang.php +++ b/application/language/french/pagination_lang.php @@ -37,7 +37,7 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['pagination_first_link'] = '‹ First'; +$lang['pagination_first_link'] = '‹ Début'; $lang['pagination_next_link'] = '>'; $lang['pagination_prev_link'] = '<'; -$lang['pagination_last_link'] = 'Last ›'; +$lang['pagination_last_link'] = 'Fin ›'; diff --git a/application/language/french/translations_lang.php b/application/language/french/translations_lang.php index 9478b016..71f39e3b 100755 --- a/application/language/french/translations_lang.php +++ b/application/language/french/translations_lang.php @@ -8,9 +8,9 @@ $lang['duration'] = 'Durée'; $lang['minutes'] = 'Minutes'; $lang['price'] = 'Prix'; $lang['back'] = 'Retour'; -$lang['appointment_date_and_time'] = 'Choisissez la date et l\'heure de votre rendez-vous'; -$lang['no_available_hours'] = 'Il n\'y a pas d\'heures de rendez-vous disponibles pour la date sélectionnée. Choisissez une autre date s\'il vous plaît.'; -$lang['appointment_hour_missing'] = 'S\'il vous plaît, choisissez une heure de rendez-vous avant de pouvoir poursuivre.'; +$lang['appointment_date_and_time'] = 'Choisissez la date et l’heure de votre rendez-vous'; +$lang['no_available_hours'] = 'Il n’y a pas d’heures de rendez-vous disponibles pour la date sélectionnée. Choisissez une autre date s’il vous plaît.'; +$lang['appointment_hour_missing'] = 'S’il vous plaît, choisissez une heure de rendez-vous avant de pouvoir poursuivre.'; $lang['customer_information'] = 'Remplissez vos informations'; $lang['first_name'] = 'Prénom'; $lang['last_name'] = 'Nom'; @@ -27,14 +27,14 @@ $lang['fields_are_required'] = 'Les champs avec * sont obligatoires'; $lang['appointment_confirmation'] = 'Confirmez votre rendez-vous'; $lang['confirm'] = 'Confirmation'; $lang['update'] = 'Mise à jour'; -$lang['cancel_appointment_hint'] = 'Appuyer sur le bouton "Annuler" pour supprimer un rendez-vous de l\'agenda.'; +$lang['cancel_appointment_hint'] = 'Appuyer sur le bouton "Annuler" pour supprimer un rendez-vous de l’agenda.'; $lang['cancel'] = 'Annuler'; $lang['appointment_registered'] = 'Votre rendez-vous a été enregistré avec succès.'; $lang['cancel_appointment_title'] = 'Annuler le rendez-vous'; $lang['appointment_cancelled'] = 'Votre rendez-vous a bien été annulé.'; $lang['appointment_cancelled_title'] = 'Rendez-vous annulé'; $lang['reason'] = 'Motif'; -$lang['appointment_removed_from_schedule'] = 'Le rendez-vous suivant a été supprimé de l\'agenda.'; +$lang['appointment_removed_from_schedule'] = 'Le rendez-vous suivant a été supprimé de l’agenda.'; $lang['appointment_details_was_sent_to_you'] = 'Un email reprenant les détails de votre rendez-vous vient de vous être envoyé.'; $lang['add_to_google_calendar'] = 'Ajouter à Google Calendar'; $lang['appointment_booked'] = 'Votre rendez-vous a été confirmé avec succès.'; @@ -56,7 +56,7 @@ $lang['appointment_link_description'] = 'Vous pouvez faire des modifications en $lang['appointment_locked'] = 'Modification impossible.'; $lang['appointment_locked_message'] = 'Le rendez-vous ne peut pas être modifié moins de {$limit} heures avant.'; $lang['appointment_not_found'] = 'Rendez-vous introuvable.'; -$lang['appointment_does_not_exist_in_db'] = 'Le rendez-vous demandé n\'existe plus dans la base de données système.'; +$lang['appointment_does_not_exist_in_db'] = 'Le rendez-vous demandé n’existe plus dans la base de données système.'; $lang['display_calendar'] = 'Afficher le calendrier.'; $lang['calendar'] = 'Calendrier'; $lang['users'] = 'Utilisateurs'; @@ -71,7 +71,7 @@ $lang['appointment'] = 'Rendez-vous'; $lang['unavailability'] = 'Indisponible'; $lang['week'] = 'Semaine'; $lang['month'] = 'Mois'; -$lang['today'] = 'Aujourd\'hui'; +$lang['today'] = 'Aujourd’hui'; $lang['not_working'] = 'Pas en fonction'; $lang['break'] = 'Pause'; $lang['add'] = 'Ajouter'; @@ -79,14 +79,14 @@ $lang['edit'] = 'Éditer'; $lang['hello'] = 'Bonjour'; $lang['all_day'] = 'Toute la journée'; $lang['manage_appointment_record_hint'] = 'Gérer tous les enregistrements de rendez-vous des exécutants et des prestations actives.'; -$lang['select_filter_item_hint'] = 'Choisir un exécutant ou une prestation et visualisez les rendez-vous sur l\'agenda.'; -$lang['enable_appointment_sync_hint'] = 'Activer la synchronisation des rendez-vous avec le calendrier Google de l\'exécutant.'; +$lang['select_filter_item_hint'] = 'Choisir un exécutant ou une prestation et visualisez les rendez-vous sur l’agenda.'; +$lang['enable_appointment_sync_hint'] = 'Activer la synchronisation des rendez-vous avec le calendrier Google de l’exécutant.'; $lang['manage_customers_hint'] = 'Gérer les clients enregistrés et voir leur historique de rendez-vous.'; $lang['manage_services_hint'] = 'Gérer les prestations et les catégories actives du système.'; -$lang['manage_users_hint'] = 'Gérer les utilisateurs back office (administrateurs, exécutants, secrétaires).'; +$lang['manage_users_hint'] = 'Gérer les utilisateurs du système (administrateurs, exécutants, secrétaires).'; $lang['settings_hint'] = 'Régler les paramètres système et utilisateurs.'; $lang['log_out_hint'] = 'Déconnexion du système.'; -$lang['unavailability_periods_hint'] = 'Durant les périodes d\'indisponibilité l\'exécutant n\'acceptera pas de nouvelle prestation.'; +$lang['unavailability_periods_hint'] = 'Durant les périodes d’indisponibilité l’exécutant n’acceptera pas de nouvelle prestation.'; $lang['new_appointment_hint'] = 'Créer un nouveau rendez-vous et le stocker dans la base de données.'; $lang['reload_appointments_hint'] = 'Actualiser le calendrier des rendez-vous.'; $lang['trigger_google_sync_hint'] = 'Démarrer la procédure de synchronisation du calendrier Google.'; @@ -104,17 +104,17 @@ $lang['pick_existing_customer_hint'] = 'Rechercher un client existant.'; $lang['new_appointment_title'] = 'Nouveau rendez-vous'; $lang['edit_appointment_title'] = 'Éditer rendez-vous'; $lang['delete_appointment_title'] = 'Effacer rendez-vous'; -$lang['write_appointment_removal_reason'] = 'S\'il vous plaît, veuillez bien prendre quelques secondes pour nous expliquer les raisons de l\'annulation du rendez-vous.'; +$lang['write_appointment_removal_reason'] = 'S’il vous plaît, veuillez bien prendre quelques secondes pour nous expliquer les raisons de l’annulation du rendez-vous.'; $lang['appointment_saved'] = 'Rendez-vous sauvegardé avec succès.'; -$lang['new_unavailability_title'] = 'Nouvelle période d\'indisponibilité'; -$lang['edit_unavailability_title'] = 'Éditer une période d\'indisponibilité'; -$lang['unavailability_saved'] = 'Période d\'indisponibilité sauvegardée avec succès.'; +$lang['new_unavailability_title'] = 'Nouvelle période d’indisponibilité'; +$lang['edit_unavailability_title'] = 'Éditer une période d’indisponibilité'; +$lang['unavailability_saved'] = 'Période d’indisponibilité sauvegardée avec succès.'; $lang['start_date_before_end_error'] = 'La date de début est ultérieure à la date de fin.'; $lang['invalid_duration'] = 'Durée invalide.'; -$lang['invalid_email'] = 'Adresse email non valide.'; +$lang['invalid_email'] = 'Adresse email invalide .'; $lang['customers'] = 'Clients'; $lang['details'] = 'Détails'; -$lang['no_records_found'] = 'Pas d\'enregistrement trouvé...'; +$lang['no_records_found'] = 'Pas d’enregistrement trouvé...'; $lang['services'] = 'Prestations'; $lang['duration_minutes'] = 'Durée (Minutes)'; $lang['currency'] = 'Devise'; @@ -128,7 +128,7 @@ $lang['secretaries'] = 'Secrétaires'; $lang['mobile_number'] = 'Téléphone portable'; $lang['mobile'] = 'Portable'; $lang['state'] = 'État / Pays'; -$lang['username'] = 'Nom d\'utilisateur'; +$lang['username'] = 'Nom d’utilisateur'; $lang['password'] = 'Mot de passe'; $lang['retype_password'] = 'Réinscription du mot de passe'; $lang['receive_notifications'] = 'Recevoir les notifications'; @@ -156,51 +156,51 @@ $lang['friday'] = 'Vendredi'; $lang['saturday'] = 'Samedi'; $lang['sunday'] = 'Dimanche'; $lang['breaks'] = 'Pauses'; -$lang['add_breaks_during_each_day'] = 'Ajoutez ici les périodes de pause pour chaque jour. Pendant ces pauses l\'exécutant n\'acceptera pas de rendez-vous...'; +$lang['add_breaks_during_each_day'] = 'Ajoutez ici les périodes de pause pour chaque jour. Pendant ces pauses l’exécutant n’acceptera pas de rendez-vous...'; $lang['day'] = 'Jour'; $lang['days'] = 'Jours'; $lang['actions'] = 'Actions'; -$lang['reset_working_plan_hint'] = 'Restaurer les valeurs d\'origine du planning de travail.'; +$lang['reset_working_plan_hint'] = 'Restaurer les valeurs d’origine du planning de travail.'; $lang['company_name'] = 'Nom de la société'; $lang['company_name_hint'] = 'Le nom de la société sera affiché et utilisé un peu partout dans le système (obligatoire).'; $lang['company_email'] = 'Email de la société'; -$lang['company_email_hint'] = 'Ceci sera l\'adresse email de la société. Elle sera utilisée comme adresse d\'envoi et de réponse par le système de messagerie électronique (obligatoire).'; +$lang['company_email_hint'] = 'Ceci sera l’adresse email de la société. Elle sera utilisée comme adresse d’envoi et de réponse par le système de messagerie électronique (obligatoire).'; $lang['company_link'] = 'Site web de la société'; $lang['company_link_hint'] = 'Le lien de la société doit pointer vers le site web officiel de la société (obligatoire).'; $lang['go_to_booking_page'] = 'Aller à la page de rendez-vous'; $lang['settings_saved'] = 'Paramètres sauvegardés avec succès.'; $lang['general'] = 'Général'; -$lang['booking'] = 'Booking'; +$lang['booking'] = 'Réservation'; $lang['visible'] = 'Visible'; $lang['hidden'] = 'Caché'; $lang['business_logic'] = 'Logique commerciale'; $lang['current_user'] = 'Utilisateur actuel'; -$lang['about_app'] = 'Au sujet d\'Easy!Appointments'; -$lang['edit_working_plan_hint'] = 'Indiquer ici les jours et les heures pendant lesquels votre société accepte les rendez-vous. Il est possible de fixer vous-même un rendez-vous en dehors des heures de travail tandis que les clients ne pourront pas prendre d\'eux-mêmes un rendez-vous en dehors des périodes de travail indiquées ici. Ce planning de travail sera celui proposé par défaut pour chaque nouvel enregistrement. Toutefois il vous sera possible de changer séparément chaque planning de travail individuel en l\'éditant. Après cela vous pouvez encore ajouter les périodes de pause.'; +$lang['about_app'] = 'Au sujet d’Easy!Appointments'; +$lang['edit_working_plan_hint'] = 'Indiquer ici les jours et les heures pendant lesquels votre société accepte les rendez-vous. Il est possible de fixer vous-même un rendez-vous en dehors des heures de travail tandis que les clients ne pourront pas prendre d’eux-mêmes un rendez-vous en dehors des périodes de travail indiquées ici. Ce planning de travail sera celui proposé par défaut pour chaque nouvel enregistrement. Toutefois il vous sera possible de changer séparément chaque planning de travail individuel en l’éditant. Après cela vous pouvez encore ajouter les périodes de pause.'; $lang['edit_breaks_hint'] = 'Indiquer ici les périodes des pauses quotidiennes. Ces pauses seront disponibles à chaque nouvel exécutant.'; $lang['book_advance_timeout'] = 'Paramètres de réservation'; $lang['book_advance_timeout_hint'] = 'Les réservations ne peuvent pas être créées, modifiées ou annulées moins de ## heures avant le rendez-vous.'; $lang['timeout_minutes'] = 'Délai de réservation (en minutes)'; -$lang['about_app_info'] = 'Easy!Appointments est une application Web hautement personnalisable qui permet à vos clients de prendre rendez-vous avec vous via le web. En outre, elle offre la possibilité de synchroniser vos données avec un calendrier Google afin que vous puissiez les utiliser avec d\'autres services. Easy!Appointments est un projet open source et vous pouvez le télécharger et l\'installer même pour un usage commercial. Easy!Appointments fonctionnera sans problème avec votre site web existant car il peut être installé dans un dossier spécifique du serveur et bien sûr, les deux sites peuvent partager la même base de données.'; +$lang['about_app_info'] = 'Easy!Appointments est une application Web hautement personnalisable qui permet à vos clients de prendre rendez-vous avec vous via le web. En outre, elle offre la possibilité de synchroniser vos données avec un calendrier Google afin que vous puissiez les utiliser avec d’autres services. Easy!Appointments est un projet open source et vous pouvez le télécharger et l’installer même pour un usage commercial. Easy!Appointments fonctionnera sans problème avec votre site web existant car il peut être installé dans un dossier spécifique du serveur et bien sûr, les deux sites peuvent partager la même base de données.'; $lang['current_version'] = 'Version actuelle'; $lang['support'] = 'Support'; -$lang['about_app_support'] = 'Si vous rencontrez des problèmes pour installer ou configurer l\'application, allez chercher les réponses dans le groupe Google officiel. Vous pouvez également avoir besoin de créer une demande sur la page code de Google pour permettre l\'avancée du projet.'; +$lang['about_app_support'] = 'Si vous rencontrez des problèmes pour installer ou configurer l’application, allez chercher les réponses dans le groupe Google officiel. Vous pouvez également avoir besoin de créer une demande sur la page code de Google pour permettre l’avancée du projet.'; $lang['official_website'] = 'Site Web officiel'; $lang['google_plus_community'] = 'Communauté Google+'; $lang['support_group'] = 'Groupe de soutien'; $lang['project_issues'] = 'Questions sur le projet'; $lang['license'] = 'Licence'; -$lang['about_app_license'] = 'Easy!Appointments est fourni sous licence GPLv3. En utilisant le code d\'Easy!Appointments, quelqu\'en soit l\'usage, vous êtes tenu d\'accepter les termes décrits dans l\'URL suivante :'; -$lang['logout_success'] = 'Vous avez bien été déconnecté ! Cliquez sur l\'un des boutons suivants pour naviguer dans les différentes pages'; +$lang['about_app_license'] = 'Easy!Appointments est fourni sous licence GPLv3. En utilisant le code d’Easy!Appointments, quelqu’en soit l’usage, vous êtes tenu d’accepter les termes décrits dans l’URL suivante :'; +$lang['logout_success'] = 'Vous avez bien été déconnecté ! Cliquez sur l’un des boutons suivants pour naviguer dans les différentes pages'; $lang['book_appointment_title'] = 'Carnet de rendez-vous'; -$lang['backend_section'] = 'Section back office'; -$lang['you_need_to_login'] = 'Bonjour ! Vous devez vous connecter pour voir les pages back office.'; -$lang['enter_username_here'] = 'Entrez votre nom d\'utilisateur ici...'; +$lang['backend_section'] = 'Administration'; +$lang['you_need_to_login'] = 'Bonjour ! Vous devez vous connecter pour voir les pages d’administration.'; +$lang['enter_username_here'] = 'Entrez votre nom d’utilisateur ici...'; $lang['enter_password_here'] = 'Entrez votre mot de passe ici...'; $lang['login'] = 'Connexion'; $lang['forgot_your_password'] = 'Mot de passe oublié ?'; -$lang['login_failed'] = 'La connexion a échoué. S\'il vous plaît entrez les informations d\'identification correctes et ré-essayez.'; -$lang['type_username_and_email_for_new_password'] = 'Inscrivez votre nom d\'utilisateur et adresse email pour recevoir un nouveau mot de passe.'; +$lang['login_failed'] = 'La connexion a échoué. S’il vous plaît entrez les informations d’identification correctes et ré-essayez.'; +$lang['type_username_and_email_for_new_password'] = 'Inscrivez votre nom d’utilisateur et adresse email pour recevoir un nouveau mot de passe.'; $lang['enter_email_here'] = 'Entrez votre email ici...'; $lang['regenerate_password'] = 'Régénération du mot de passe'; $lang['go_to_login'] = 'Retourner à la page de connexion'; @@ -208,38 +208,38 @@ $lang['new_password_sent_with_email'] = 'Votre nouveau mot de passe vous a été $lang['new_account_password'] = 'Nouveau mot de passe du compte'; $lang['new_password_is'] = 'Votre nouveau mot de passe est $password. Conservez cet email afin de pouvoir retrouver votre mot de passe si nécessaire. Vous pouvez aussi modifier ce mot de passe par un nouveau dans la page des paramètres.'; $lang['delete_record_prompt'] = 'Êtes-vous sûr de vouloir supprimer cet enregistrement ? Cette action est irréversible.'; -$lang['delete_admin'] = 'Supprimer l\'administrateur'; +$lang['delete_admin'] = 'Supprimer l’administrateur'; $lang['delete_customer'] = 'Supprimer le client'; $lang['delete_service'] = 'Supprimer la prestation'; $lang['delete_service_category'] = 'Supprimer la catégorie de prestation'; $lang['delete_provider'] = 'Supprimer un exécutant'; $lang['delete_secretary'] = 'Supprimer un·e secrétaire'; $lang['delete_appointment'] = 'Supprimer un rendez-vous'; -$lang['delete_unavailability'] = 'Supprimer une période d\'indisponibilité'; +$lang['delete_unavailability'] = 'Supprimer une période d’indisponibilité'; $lang['delete'] = 'Supprimer'; $lang['unexpected_issues'] = 'Résultats inattendus'; -$lang['unexpected_issues_message'] = 'L\'opération n\'a pu être terminée à cause de résultats inattendus.'; +$lang['unexpected_issues_message'] = 'L’opération n’a pu être terminée à cause de résultats inattendus.'; $lang['close'] = 'Fermer'; $lang['page_not_found'] = 'Page non trouvée'; -$lang['page_not_found_message'] = 'Malheureusement la page demandée n\'existe pas. Vérifiez l\'URL de votre navigateur ou naviguez vers une autre page en utilisant les boutons ci-dessous.'; +$lang['page_not_found_message'] = 'Malheureusement la page demandée n’existe pas. Vérifiez l’URL de votre navigateur ou naviguez vers une autre page en utilisant les boutons ci-dessous.'; $lang['error'] = 'Erreur'; $lang['no_privileges'] = 'Aucun privilège'; -$lang['no_privileges_message'] = 'Vous n\'avez pas les privilèges nécessaires pour voir cette page. Veuillez s\'il vous plaît naviguer vers une section différente.'; -$lang['backend_calendar'] = 'Back office du calendrier'; +$lang['no_privileges_message'] = 'Vous n’avez pas les privilèges nécessaires pour voir cette page. Veuillez s’il vous plaît naviguer vers une section différente.'; +$lang['backend_calendar'] = 'Administration du calendrier'; $lang['start_date_time'] = 'Date/heure de début'; $lang['end_date_time'] = 'Date/heure de fin'; $lang['licensed_under'] = 'Licencié sous'; $lang['unexpected_issues_occurred'] = 'Une erreur inattendue est survenue.'; -$lang['service_communication_error'] = 'Erreur de communication avec le serveur, Veuillez s\'il vous plait réessayer.'; -$lang['no_privileges_edit_appointments'] = 'Vous n\'avez pas les privilèges nécessaires pour modifier les rendez-vous.'; -$lang['unavailability_updated'] = 'La période d\'indisponibilité a bien été actualisée.'; +$lang['service_communication_error'] = 'Erreur de communication avec le serveur, Veuillez s’il vous plait réessayer.'; +$lang['no_privileges_edit_appointments'] = 'Vous n’avez pas les privilèges nécessaires pour modifier les rendez-vous.'; +$lang['unavailability_updated'] = 'La période d’indisponibilité a bien été actualisée.'; $lang['appointments'] = 'Rendez-vous'; $lang['unexpected_warnings'] = 'Avertissements inattendus'; $lang['unexpected_warnings_message'] = 'Opération terminée mais des avertissements sont survenus.'; $lang['filter'] = 'Filtrer'; $lang['clear'] = 'Effacer'; $lang['uncategorized'] = 'Non catégorisé'; -$lang['username_already_exists'] = 'Ce nom d\'utilisateur existe déjà.'; +$lang['username_already_exists'] = 'Ce nom d’utilisateur existe déjà.'; $lang['password_length_notice'] = 'Le mot de passe doit avoir au moins $number caractères de long.'; $lang['general_settings'] = 'Paramètres généraux'; $lang['personal_information'] = 'Informations personnelles'; @@ -261,41 +261,41 @@ $lang['december'] = 'Décembre'; $lang['previous'] = 'Précédent'; $lang['next'] = 'Suivant'; $lang['now'] = 'Maintenant'; -$lang['select_time'] = 'Choisir l\'heure'; +$lang['select_time'] = 'Choisir l’heure'; $lang['time'] = 'Heure du RDV'; $lang['hour'] = 'Heure'; $lang['minute'] = 'Minute'; -$lang['google_sync_completed'] = 'La synchronisation Google s\'est terminée avec succès.'; +$lang['google_sync_completed'] = 'La synchronisation Google s’est terminée avec succès.'; $lang['google_sync_failed'] = 'La synchronisation Google a échoué : Échec de connexion avec le serveur.'; $lang['select_google_calendar'] = 'Choisir un calendrier Google'; $lang['select_google_calendar_prompt'] = 'Sélectionnez le calendrier souhaité pour synchroniser votre rendez-vous. Si vous ne sélectionnez pas de calendrier spécifique, le calendrier par défaut sera sélectionné pour vous.'; $lang['google_calendar_selected'] = 'Le calendrier Google a été sélectionné avec succès.'; -$lang['oops_something_went_wrong'] = 'Oups ! Une erreur s\'est produite.'; +$lang['oops_something_went_wrong'] = 'Oups ! Une erreur s’est produite.'; $lang['could_not_add_to_google_calendar'] = 'Votre rendez-vous ne peut pas être ajouté à votre calendrier Google.'; $lang['ea_update_success'] = 'Easy!Appointments à été mis à jour avec succès.'; $lang['require_captcha'] = 'CAPTCHA obligatoire'; -$lang['require_captcha_hint'] = 'Lorsque l\'option est activée, les clients doivent taper un code de vérification CAPTCHA avant de pouvoir réserver ou mettre à jour un rendez-vous.'; +$lang['require_captcha_hint'] = 'Lorsque l’option est activée, les clients doivent taper un code de vérification CAPTCHA avant de pouvoir réserver ou mettre à jour un rendez-vous.'; $lang['captcha_is_wrong'] = 'Le code de vérification CAPTCHA est erroné, merci de réessayer.'; $lang['any_provider'] = 'Toute personne disponible'; -$lang['requested_hour_is_unavailable'] = 'Cette heure de rendez n\'est malheureusement pas disponible. Merci de sélectionner une autre heure pour votre rendez-vous.'; +$lang['requested_hour_is_unavailable'] = 'Cette heure de rendez n’est malheureusement pas disponible. Merci de sélectionner une autre heure pour votre rendez-vous.'; $lang['customer_notifications'] = 'Notifications aux clients'; -$lang['customer_notifications_hint'] = 'Définit si les clients reçoivent des notifications par email chaque fois qu\'il y a un changement d\'horaire de l\'un de leurs rendez-vous.'; +$lang['customer_notifications_hint'] = 'Définit si les clients reçoivent des notifications par email chaque fois qu’il y a un changement d’horaire de l’un de leurs rendez-vous.'; $lang['date_format'] = 'Format des dates'; -$lang['date_format_hint'] = 'Change le format d\'affichage des dates (D - Jour, M - Mois, Y - Année).'; -$lang['time_format'] = 'Format de l\'heure'; -$lang['time_format_hint'] = 'Change le format d\'affichage de l\'heure (H - Heures, M - Minutes).'; +$lang['date_format_hint'] = 'Change le format d’affichage des dates (D - Jour, M - Mois, Y - Année).'; +$lang['time_format'] = 'Format de l’heure'; +$lang['time_format_hint'] = 'Change le format d’affichage de l’heure (H - Heures, M - Minutes).'; $lang['first_weekday'] = 'Premier jour de la semaine'; $lang['first_weekday_hint'] = 'Définit le premier jour de la semaine calendaire.'; -$lang['google_analytics_code_hint'] = 'Renseigner l\'ID Google Analytics à utiliser dans la page des réservations.'; +$lang['google_analytics_code_hint'] = 'Renseigner l’ID Google Analytics à utiliser dans la page des réservations.'; $lang['availabilities_type'] = 'Type de disponibilités'; $lang['flexible'] = 'Flexible'; $lang['fixed'] = 'Fixe'; $lang['attendants_number'] = 'Nombre de participants'; -$lang['reset_working_plan'] = 'Restaurer les valeurs d\'origine du planning de travail.'; +$lang['reset_working_plan'] = 'Restaurer les valeurs d’origine du planning de travail.'; $lang['legal_contents'] = 'Contenu juridique'; $lang['cookie_notice'] = 'Informations sur les cookies'; $lang['display_cookie_notice'] = 'Afficher les informations sur les cookies'; -$lang['cookie_notice_content'] = 'Description de la politique d\'utilisation des cookies'; +$lang['cookie_notice_content'] = 'Description de la politique d’utilisation des cookies'; $lang['terms_and_conditions'] = 'Conditions générales'; $lang['display_terms_and_conditions'] = 'Afficher les conditions générales'; $lang['terms_and_conditions_content'] = 'Description des conditions générales'; @@ -303,15 +303,15 @@ $lang['privacy_policy'] = 'Politique de confidentialité'; $lang['display_privacy_policy'] = 'Afficher la politique de confidentialité'; $lang['privacy_policy_content'] = 'Description de la politique de confidentialité'; $lang['website_using_cookies_to_ensure_best_experience'] = 'Ce site web utilise des cookies pour vous assurer la meilleure expérience utilisateur.'; -$lang['read_and_agree_to_terms_and_conditions'] = 'J\'ai lu, compris et accepte les {$link}Conditions Générales{/$link}.'; -$lang['read_and_agree_to_privacy_policy'] = 'J\'ai lu, compris et accepte la {$link}politique de confidentialité{/$link}.'; +$lang['read_and_agree_to_terms_and_conditions'] = 'J’ai lu, compris et accepte les {$link}Conditions Générales{/$link}.'; +$lang['read_and_agree_to_privacy_policy'] = 'J’ai lu, compris et accepte la {$link}politique de confidentialité{/$link}.'; $lang['delete_personal_information_hint'] = 'Effacer toutes vos données personnelles du système.'; $lang['delete_personal_information'] = 'Effacer toutes mes données personnelles'; $lang['delete_personal_information_prompt'] = 'Êtes-vous sûr·e de vouloir effacer toutes vos données personnelles ? Cette action est irréversible.'; -$lang['location'] = 'Location'; +$lang['location'] = 'Emplacement'; $lang['working_plan_exception'] = 'Exception au planning'; $lang['working_plan_exceptions'] = 'Exceptions au planning'; -$lang['working_plan_exceptions_hint'] = 'Ajouter un jour d\'exception au planning, en dehors du planning.'; +$lang['working_plan_exceptions_hint'] = 'Ajouter un jour d’exception au planning, en dehors du planning.'; $lang['new_working_plan_exception_title'] = 'Nouvelle exception au planning'; $lang['working_plan_exception_saved'] = 'Exception au planning enregistrée avec succès.'; $lang['working_plan_exception_deleted'] = 'Exception au planning supprimée avec succès.'; @@ -319,8 +319,8 @@ $lang['add_working_plan_exceptions_during_each_day'] = 'Ajouter des exceptions a $lang['add_working_plan_exception'] = 'Ajouter une exception au planning'; $lang['require_phone_number'] = 'Exiger un numéro de téléphone'; $lang['require_phone_number_hint'] = 'Lorsque activé, les clients et les utilisateurs devront entrer le numéro de téléphone du client lors de la prise de rendez-vous.'; -$lang['check_spam_folder'] = 'Veuillez vérifier votre dossier de courrier indésirable si l\'email n\'arrive pas dans les minutes qui suivent.'; -$lang['api_token_hint'] = 'Définissez un jeton secret afin d\'activer l\'authentification basée sur le jeton de l\'API Easy!Appointments. '; +$lang['check_spam_folder'] = 'Veuillez vérifier votre dossier de courrier indésirable si l’email n’arrive pas dans les minutes qui suivent.'; +$lang['api_token_hint'] = 'Définissez un jeton secret afin d’activer l’authentification basée sur le jeton de l’API Easy!Appointments. '; $lang['timezone'] = 'Fuseau horaire'; $lang['overwrite_existing_working_plans'] = 'Cela écrasera les plannings existants du fournisseur. Êtes-vous sûr de vouloir continuer ?'; $lang['working_plans_got_updated'] = 'Tous les plannings ont été mis à jour.'; @@ -337,7 +337,7 @@ $lang['booking_settings'] = 'Paramètres de réservation'; $lang['display'] = 'Afficher'; $lang['require'] = 'Requis'; $lang['color'] = 'Couleur'; -$lang['matomo_analytics_url_hint'] = 'Ajoutez l\'URL à votre propre installation Matomo pour activer le suivi Matomo sur les pages de réservation.'; +$lang['matomo_analytics_url_hint'] = 'Ajoutez l’URL à votre propre installation Matomo pour activer le suivi Matomo sur les pages de réservation.'; $lang['invalid_phone'] = 'Numéro de téléphone invalide.'; $lang['legal'] = 'Juridique'; $lang['business'] = 'Entreprise'; @@ -347,10 +347,10 @@ $lang['disable_booking_hint'] = 'La page de réservation sera désactivée tant $lang['display_message'] = 'Afficher le message'; $lang['booking_is_disabled'] = 'La réservation est désactivée!'; $lang['appearance'] = 'Apparence'; -$lang['company_logo'] = 'Logo d\'entreprise'; -$lang['company_logo_hint'] = 'Le logo de l\'entreprise sera affiché dans de nombreux endroits de l\'application, y compris la page de réservation et les e-mails de notification (fichier image, max 2 Mo).'; -$lang['company_color'] = 'Couleur de l\'entreprise'; -$lang['company_color_hint'] = 'La couleur de l\'entreprise sera appliquée dans l\'application afin qu\'elle utilise votre marque.'; +$lang['company_logo'] = 'Logo d’entreprise'; +$lang['company_logo_hint'] = 'Le logo de l’entreprise sera affiché dans de nombreux endroits de l’application, y compris la page de réservation et les e-mails de notification (fichier image, max 2 Mo).'; +$lang['company_color'] = 'Couleur de l’entreprise'; +$lang['company_color_hint'] = 'La couleur de l’entreprise sera appliquée dans l’application afin qu’elle utilise votre marque.'; $lang['localization'] = 'Localisation'; $lang['integrations'] = 'Intégrations'; $lang['company'] = 'Entreprise'; @@ -363,51 +363,51 @@ $lang['reset'] = 'Réinitialiser'; $lang['all'] = 'Tout'; $lang['booking_link'] = 'Lien de réservation'; $lang['add_new_event'] = 'Ajouter un nouvel événement'; -$lang['what_kind_of_event'] = 'Quel genre d\'événement aimeriez-vous ajouter?'; +$lang['what_kind_of_event'] = 'Quel genre d’événement aimeriez-vous ajouter?'; $lang['theme'] = 'Thème'; -$lang['limit_customer_access'] = 'Limiter l\'accès des clients'; -$lang['limit_customer_access_hint'] = 'S\'ils sont activés, les fournisseurs et les secrétaires ne pourront accéder qu\'à des clients avec lesquels ils ont rendez-vous.'; +$lang['limit_customer_access'] = 'Limiter l’accès des clients'; +$lang['limit_customer_access_hint'] = 'S’ils sont activés, les fournisseurs et les secrétaires ne pourront accéder qu’à des clients avec lesquels ils ont rendez-vous.'; $lang['url'] = 'URL'; $lang['secret_token'] = 'Token secret'; $lang['verify_ssl'] = 'Vérifiez SSL'; $lang['appointment_save'] = 'Sauver le rendez-vous'; $lang['appointment_delete'] = 'Effacer le rendez-vous'; -$lang['unavailability_save'] = 'Sauver l\'indisponibilité'; -$lang['unavailability_delete'] = 'Effacer l\'indisponibilité'; +$lang['unavailability_save'] = 'Sauver l’indisponibilité'; +$lang['unavailability_delete'] = 'Effacer l’indisponibilité'; $lang['customer_save'] = 'Sauvegarde du client'; $lang['customer_delete'] = 'Supprimer le client'; $lang['service_save'] = 'Sauvegarde du service'; $lang['service_delete'] = 'Supprimer le service'; $lang['service_category_save'] = 'Sauvegarde de la catégorie'; $lang['service_category_delete'] = 'Supprimer la catégorie'; -$lang['provider_save'] = 'Sauvegarde de l\'exécutant'; -$lang['provider_delete'] = 'Supprimer l\'exécutant'; +$lang['provider_save'] = 'Sauvegarde de l’exécutant'; +$lang['provider_delete'] = 'Supprimer l’exécutant'; $lang['secretary_save'] = 'Sauvegarde de la secrétaire'; $lang['secretary_delete'] = 'Supprimer la secrétaire'; -$lang['admin_save'] = 'Sauvegarde de l\administrateur'; -$lang['admin_delete'] = 'Supprimer l\'administrateur'; +$lang['admin_save'] = 'Sauvegarde de l’administrateur'; +$lang['admin_delete'] = 'Supprimer l’administrateur'; $lang['options'] = 'Options'; $lang['webhooks'] = 'Webhooks'; -$lang['webhooks_info'] = 'les Webhooks vous permettent d\'envoyer des notifications HTTP aux applications Web externes en réponse à divers événements d\'application, tels que la création d\'un rendez-vous ou la suppression d\'un client.'; -$lang['integrations_info'] = 'Les intégrations vous permettent d\'établir des connexions tierces avec des applications externes et des API.'; +$lang['webhooks_info'] = 'les Webhooks vous permettent d’envoyer des notifications HTTP aux applications Web externes en réponse à divers événements d’application, tels que la création d’un rendez-vous ou la suppression d’un client.'; +$lang['integrations_info'] = 'Les intégrations vous permettent d’établir des connexions tierces avec des applications externes et des API.'; $lang['configure'] = 'Configurer'; $lang['google_analytics'] = 'Google Analytics'; -$lang['google_analytics_info'] = 'Google Analytics vous permet d\'ajouter automatiquement le code de suivi et le balisage HTML à la page publique et de suivre toutes les sessions de réservation publique.'; +$lang['google_analytics_info'] = 'Google Analytics vous permet d’ajouter automatiquement le code de suivi et le balisage HTML à la page publique et de suivre toutes les sessions de réservation publique.'; $lang['matomo_analytics'] = 'Matomo Analytics'; -$lang['matomo_analytics_info'] = 'MATOMO Analytics vous permet d\'ajouter automatiquement le code de suivi et le balisage HTML à la page publique et de suivre toutes les sessions de réservation publique.'; +$lang['matomo_analytics_info'] = 'Matomo Analytics vous permet d’ajouter automatiquement le code de suivi et le balisage HTML à la page publique et de suivre toutes les sessions de réservation publique.'; $lang['api'] = 'API'; -$lang['api_info'] = 'L\'API vous permet d\'interagir avec toutes les données de Easy!Appointments via le protocole HTTP et les points de terminaison API disponibles et créer vos propres intégrations.'; -$lang['google_analytics_code'] = 'Google Analytics Code'; -$lang['matomo_analytics_url'] = 'Matomo Analytics URL'; -$lang['future_booking_limit'] = 'Future Booking Limit'; +$lang['api_info'] = 'L’API vous permet d’interagir avec toutes les données de Easy!Appointments via le protocole HTTP et les points de terminaison API disponibles et créer vos propres intégrations.'; +$lang['google_analytics_code'] = 'Code de Google analytics'; +$lang['matomo_analytics_url'] = 'URL de Matomo analytics'; +$lang['future_booking_limit'] = 'Limite des réservations futures'; $lang['limit_days'] = 'Limite (jours)'; $lang['future_booking_limit_hint'] = 'Définissez la limite future en jours que les clients peuvent prendre rendez-vous via la page de réservation publique.'; -$lang['api_token'] = 'API Token'; +$lang['api_token'] = 'Jeton de l’API'; $lang['allow_rescheduling_cancellation_before'] = 'Autoriser le reprogrammation/annulation passée'; $lang['at_least_one_field'] = 'Au moins un champ doit être affiché dans la page de réservation.'; $lang['status'] = 'Statut'; $lang['appointment_status_options'] = 'Options de statut de rendez-vous'; -$lang['appointment_status_options_info'] = 'Définissez une liste des options d\'état de rendez-vous disponibles qui peuvent être utilisées dans la page du calendrier (la première deviendra automatiquement la valeur par défaut).'; +$lang['appointment_status_options_info'] = 'Définissez une liste des options d’état de rendez-vous disponibles qui peuvent être utilisées dans la page du calendrier (la première deviendra automatiquement la valeur par défaut).'; $lang['sunday_short'] = 'Dim'; $lang['monday_short'] = 'Lun'; $lang['tuesday_short'] = 'Mar'; @@ -434,27 +434,23 @@ $lang['click_to_toggle'] = 'Cliquez pour basculer'; $lang['week_short'] = 'Se'; $lang['scroll_to_increment'] = 'Faire défiler pour incrémenter'; $lang['year'] = 'Année'; -$lang['make_non_working_day'] = 'This provider will not be available for work on the selected day.'; -$lang['no_breaks'] = 'No Breaks'; -$lang['service_categories'] = 'Service Categories'; -$lang['service_category'] = 'Service Category'; -$lang['blocked_period_saved'] = 'Blocked period saved successfully.'; -$lang['blocked_period_deleted'] = 'Blocked period deleted successfully.'; -$lang['delete_blocked_period'] = 'Delete Blocked Period'; -$lang['blocked_period'] = 'Blocked Period'; -$lang['blocked_periods'] = 'Blocked Periods'; -$lang['blocked_period_save'] = 'Blocked Period Save'; -$lang['blocked_period_delete'] = 'Blocked Period Delete'; -$lang['blocked_periods_hint'] = 'Define periods of time where public bookings will be disabled for all providers (e.g. closed dates, holidays etc.).'; -$lang['custom_field'] = 'Custom Field'; -$lang['custom_fields'] = 'Custom Fields'; -$lang['label'] = 'Label'; -$lang['webhook_saved'] = 'Webhook saved successfully.'; -$lang['webhook_deleted'] = 'Webhook deleted successfully.'; -$lang['delete_webhook'] = 'Delete Webhook'; -$lang['contact_info'] = 'Contact Info'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; +$lang['make_non_working_day'] = 'Cet exécutant ne sera pas disponible pour travailler le jour sélectionné.'; +$lang['no_breaks'] = 'Pas de pauses'; +$lang['service_categories'] = 'Catégories de services'; +$lang['service_category'] = 'Catégorie de service'; +$lang['blocked_period_saved'] = 'La période bloquée a été enregistrée avec succès.'; +$lang['blocked_period_deleted'] = 'La période bloquée a été supprimée avec succès.'; +$lang['delete_blocked_period'] = 'Supprimer la période bloquée'; +$lang['blocked_period'] = 'Période bloquée'; +$lang['blocked_periods'] = 'Périodes bloquées'; +$lang['blocked_period_save'] = 'Sauvegarde de la période bloquée'; +$lang['blocked_period_delete'] = 'Suppression de la période bloquée'; +$lang['blocked_periods_hint'] = 'Définissez des périodes pendant lesquelles les réservations publiques seront désactivées pour tous les fournisseurs (par exemple, les dates de fermeture, les jours fériés, etc.).'; +$lang['custom_field'] = 'Champ personnalisé'; +$lang['custom_fields'] = 'Champs personnalisés'; +$lang['label'] = 'Étiquette'; +$lang['webhook_saved'] = 'Webhook enregistré avec succès.'; +$lang['webhook_deleted'] = 'Webhook supprimé avec succès.'; +$lang['delete_webhook'] = 'Supprimer le webhook'; +$lang['contact_info'] = 'Coordonnées'; // End diff --git a/application/language/french/upload_lang.php b/application/language/french/upload_lang.php index c2d4c41f..e60459cf 100644 --- a/application/language/french/upload_lang.php +++ b/application/language/french/upload_lang.php @@ -37,19 +37,19 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['upload_userfile_not_set'] = 'Unable to find a post variable called userfile.'; -$lang['upload_file_exceeds_limit'] = 'The uploaded file exceeds the maximum allowed size in your PHP configuration file.'; -$lang['upload_file_exceeds_form_limit'] = 'The uploaded file exceeds the maximum size allowed by the submission form.'; -$lang['upload_file_partial'] = 'The file was only partially uploaded.'; -$lang['upload_no_temp_directory'] = 'The temporary folder is missing.'; -$lang['upload_unable_to_write_file'] = 'The file could not be written to disk.'; -$lang['upload_stopped_by_extension'] = 'The file upload was stopped by extension.'; -$lang['upload_no_file_selected'] = 'You did not select a file to upload.'; -$lang['upload_invalid_filetype'] = 'The filetype you are attempting to upload is not allowed.'; -$lang['upload_invalid_filesize'] = 'The file you are attempting to upload is larger than the permitted size.'; -$lang['upload_invalid_dimensions'] = 'The image you are attempting to upload doesn\'t fit into the allowed dimensions.'; -$lang['upload_destination_error'] = 'A problem was encountered while attempting to move the uploaded file to the final destination.'; -$lang['upload_no_filepath'] = 'The upload path does not appear to be valid.'; -$lang['upload_no_file_types'] = 'You have not specified any allowed file types.'; -$lang['upload_bad_filename'] = 'The file name you submitted already exists on the server.'; -$lang['upload_not_writable'] = 'The upload destination folder does not appear to be writable.'; +$lang['upload_userfile_not_set'] = 'Impossible de trouver une variable post appelée userfile.'; +$lang['upload_file_exceeds_limit'] = 'Le fichier téléversé dépasse la taille maximale autorisée dans votre fichier de configuration PHP.'; +$lang['upload_file_exceeds_form_limit'] = 'Le fichier téléversé dépasse la taille maximale autorisée par le formulaire de soumission.'; +$lang['upload_file_partial'] = 'Le fichier n’a été que partiellement téléversé.'; +$lang['upload_no_temp_directory'] = 'Le dossier temporaire est manquant.'; +$lang['upload_unable_to_write_file'] = 'Le fichier n’a pas pu être écrit sur le disque.'; +$lang['upload_stopped_by_extension'] = 'Le téléversement du fichier a été arrêté par extension.'; +$lang['upload_no_file_selected'] = 'Vous n’avez pas sélectionné de fichier à télécharger.'; +$lang['upload_invalid_filetype'] = 'Le type de fichier que vous tentez de télécharger n’est pas autorisé.'; +$lang['upload_invalid_filesize'] = 'Le fichier que vous tentez de télécharger est plus volumineux que la taille autorisée.'; +$lang['upload_invalid_dimensions'] = 'L’image que vous tentez de télécharger ne rentre pas dans les dimensions autorisées.'; +$lang['upload_destination_error'] = 'Un problème s’est produit lors de la tentative de déplacement du fichier téléversé vers la destination finale.'; +$lang['upload_no_filepath'] = 'Le chemin de téléversement ne semble pas valide.'; +$lang['upload_no_file_types'] = 'Vous n’avez spécifié aucun type de fichier autorisé.'; +$lang['upload_bad_filename'] = 'Le nom de fichier que vous avez envoyé existe déjà sur le serveur.'; +$lang['upload_not_writable'] = 'Le dossier de destination du téléversement ne semble pas être accessible en écriture.'; From 626d777bbbb5235b1e7852d31118bd8c2e1acd54 Mon Sep 17 00:00:00 2001 From: Thomas Ingles Date: Tue, 23 Apr 2024 21:04:13 +0200 Subject: [PATCH 34/72] Idea : initialize calendar view scroll at time https://www.freecodecamp.org/news/the-ultimate-guide-to-javascript-date-and-moment-js/#format-the-date-and-time-with-moment-js --- assets/js/utils/calendar_default_view.js | 2 +- assets/js/utils/calendar_table_view.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/js/utils/calendar_default_view.js b/assets/js/utils/calendar_default_view.js index 0e05f230..2484f2ea 100755 --- a/assets/js/utils/calendar_default_view.js +++ b/assets/js/utils/calendar_default_view.js @@ -1485,7 +1485,7 @@ App.Utils.CalendarDefaultView = (function () { firstDay: firstWeekdayNumber, slotDuration: '00:15:00', snapDuration: '00:15:00', - scrollTime: '07:00:00', + scrollTime: moment().format('HH') + ':00:00', slotLabelInterval: '01:00', eventTimeFormat: timeFormat, eventTextColor: '#333', diff --git a/assets/js/utils/calendar_table_view.js b/assets/js/utils/calendar_table_view.js index 0f1e9490..c436effc 100755 --- a/assets/js/utils/calendar_table_view.js +++ b/assets/js/utils/calendar_table_view.js @@ -697,7 +697,7 @@ App.Utils.CalendarTableView = (function () { firstDay: firstWeekdayNumber, slotDuration: '00:15:00', snapDuration: '00:15:00', - scrollTime: '07:00:00', + scrollTime: moment().format('HH') + ':00:00', slotLabelInterval: '01:00', eventTimeFormat: timeFormat, eventTextColor: '#333', From f3209b5c10d4f7bd85f9a4f94b34e528af5abb69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Krn=C3=A1=C4=8D?= Date: Wed, 17 Apr 2024 08:02:36 +0200 Subject: [PATCH 35/72] Slovak translations --- .../language/slovak/translations_lang.php | 302 +++++++++--------- 1 file changed, 149 insertions(+), 153 deletions(-) diff --git a/application/language/slovak/translations_lang.php b/application/language/slovak/translations_lang.php index b27c7697..3c155bf3 100755 --- a/application/language/slovak/translations_lang.php +++ b/application/language/slovak/translations_lang.php @@ -284,177 +284,173 @@ $lang['date_format'] = 'Formát dátumu'; $lang['date_format_hint'] = 'Zmeňte formát zobrazenia dátumu (D - Dátum, M - Mesiac, Y - Rok).'; $lang['time_format'] = ''; $lang['time_format_hint'] = ''; -$lang['first_weekday'] = 'First day of week'; -$lang['first_weekday_hint'] = 'Set the first day of the calendar week.'; +$lang['first_weekday'] = 'Prvý deň v týždni'; +$lang['first_weekday_hint'] = 'Nastavte prvý deň kalendárneho týždňa.'; $lang['google_analytics_code_hint'] = 'Pridajte svoje ID služby Google Analytics, aby ste bola zahrnutá do stránky rezervácie.'; $lang['availabilities_type'] = 'Typ dostupnosti'; $lang['flexible'] = 'Flexibilný'; $lang['fixed'] = 'Fixný'; $lang['attendants_number'] = 'Počet účastníkov'; $lang['reset_working_plan'] = 'Obnovte pracovný plán späť na predvolené hodnoty.'; -$lang['legal_contents'] = 'Legal Contents'; -$lang['cookie_notice'] = 'Cookie Notice'; -$lang['display_cookie_notice'] = 'Display Cookie Notice'; -$lang['cookie_notice_content'] = 'Cookie Notice Content'; -$lang['terms_and_conditions'] = 'Terms & Conditions'; -$lang['display_terms_and_conditions'] = 'Display Terms & Conditions'; -$lang['terms_and_conditions_content'] = 'Terms & Conditions Content'; -$lang['privacy_policy'] = 'Privacy Policy'; -$lang['display_privacy_policy'] = 'Display Privacy Policy'; -$lang['privacy_policy_content'] = 'Privacy Policy Content'; -$lang['website_using_cookies_to_ensure_best_experience'] = 'This website uses cookies to ensure you get the best experience on our website.'; -$lang['read_and_agree_to_terms_and_conditions'] = 'I have read and agree to the {$link}Terms & Conditions{/$link}.'; -$lang['read_and_agree_to_privacy_policy'] = 'I have read and agree to the {$link}Privacy Policy{/$link}.'; -$lang['delete_personal_information_hint'] = 'Remove all your appointments and personal information from the system.'; -$lang['delete_personal_information'] = 'Delete Personal Information'; -$lang['delete_personal_information_prompt'] = 'Are you sure that you want to delete your personal information? This action cannot be undone.'; -$lang['location'] = 'Location'; -$lang['working_plan_exception'] = 'Working Plan Exception'; -$lang['working_plan_exceptions'] = 'Working Plan Exceptions'; -$lang['working_plan_exceptions_hint'] = 'Add a working plan exception day, outside the working plan.'; -$lang['new_working_plan_exception_title'] = 'New Working Plan Exception'; -$lang['working_plan_exception_saved'] = 'Working plan exception saved successfully.'; -$lang['working_plan_exception_deleted'] = 'Working plan exception deleted successfully.'; -$lang['add_working_plan_exceptions_during_each_day'] = 'Add working plan exceptions, outside the working plan.'; -$lang['add_working_plan_exception'] = 'Add Working Plan Exception'; -$lang['require_phone_number'] = 'Require phone number'; -$lang['require_phone_number_hint'] = 'When enabled, customers and users will need to enter the customer\'s phone number when booking an appointment'; -$lang['check_spam_folder'] = 'Please check your spam folder if the email does not arrive within a few minutes.'; -$lang['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the Easy!Appointments API.'; -$lang['timezone'] = 'Timezone'; -$lang['overwrite_existing_working_plans'] = 'This will overwrite the existing provider working plans, are you sure that you want to continue?'; -$lang['working_plans_got_updated'] = 'All the working plans got updated.'; -$lang['apply_to_all_providers'] = 'Apply To All Providers'; -$lang['display_any_provider'] = 'Display Any Provider Option'; -$lang['display_any_provider_hint'] = 'The booking page will get an additional option that allows customers to book without specifying a provider.'; -$lang['load_more'] = 'Load More'; -$lang['list'] = 'List'; -$lang['default'] = 'Default'; -$lang['table'] = 'Table'; -$lang['date'] = 'Date'; -$lang['about'] = 'About'; -$lang['booking_settings'] = 'Booking Settings'; -$lang['display'] = 'Display'; -$lang['require'] = 'Require'; -$lang['color'] = 'Color'; -$lang['matomo_analytics_url_hint'] = 'Add the URL to your own Matomo installation to enable Matomo tracking on the booking pages.'; -$lang['invalid_phone'] = 'Invalid phone number.'; -$lang['legal'] = 'Legal'; -$lang['business'] = 'Business'; -$lang['account'] = 'Account'; -$lang['disable_booking'] = 'Disable Booking'; -$lang['disable_booking_hint'] = 'The booking page will be disabled for as long as this setting is active and customers will not be able to register new appointments.'; -$lang['display_message'] = 'Display Message'; -$lang['booking_is_disabled'] = 'Booking Is Disabled!'; -$lang['appearance'] = 'Appearance'; -$lang['company_logo'] = 'Company Logo'; -$lang['company_logo_hint'] = 'The company logo will be displayed in many places of the app, including the booking page and the notification emails (image file, max 2MB).'; -$lang['company_color'] = 'Company Color'; -$lang['company_color_hint'] = 'The company color will be applied across the app so that it the app uses your branding.'; -$lang['localization'] = 'Localization'; -$lang['integrations'] = 'Integrations'; -$lang['company'] = 'Company'; -$lang['remove'] = 'Remove'; -$lang['login_button'] = 'Login Button'; -$lang['display_login_button_hint'] = 'Defines whether the login button is being displayed in the booking page.'; -$lang['private'] = 'Private'; -$lang['private_hint'] = 'Private records will not be displayed or processed in public pages such as the booking page.'; -$lang['reset'] = 'Reset'; -$lang['all'] = 'All'; -$lang['booking_link'] = 'Booking Link'; -$lang['add_new_event'] = 'Add New Event'; -$lang['what_kind_of_event'] = 'What kind of event would you like to add?'; -$lang['theme'] = 'Theme'; -$lang['limit_customer_access'] = 'Limit Customer Access'; -$lang['limit_customer_access_hint'] = 'If enabled, providers and secretaries will only be able to access customers they have an appointment with.'; +$lang['legal_contents'] = 'Právny obsah'; +$lang['cookie_notice'] = 'Oznámenie o súboroch cookie'; +$lang['display_cookie_notice'] = 'Zobraziť oznámenie o súboroch cookie'; +$lang['cookie_notice_content'] = 'Obsah oznámenia o súboroch cookie'; +$lang['terms_and_conditions'] = 'Zmluvné podmienky'; +$lang['display_terms_and_conditions'] = 'Zobraziť zmluvné podmienky'; +$lang['terms_and_conditions_content'] = 'Obsah zmluvných podmienok'; +$lang['privacy_policy'] = 'Zásady ochrany osobných údajov'; +$lang['display_privacy_policy'] = 'Zobraziť Zásady ochrany osobných údajov'; +$lang['privacy_policy_content'] = 'Obsah Zásad ochrany osobných údajov'; +$lang['website_using_cookies_to_ensure_best_experience'] = 'Táto webová stránka používa súbory cookie, aby sme vám zabezpečili čo najlepší zážitok z našej webovej stránky.'; +$lang['read_and_agree_to_terms_and_conditions'] = 'Súhlasím so {$link}spracovaním osobných údajov{/$link}.'; +$lang['read_and_agree_to_privacy_policy'] = 'Súhlasím so {$link}spracovaním osobných údajov{/$link}.'; +$lang['delete_personal_information_hint'] = 'Odstráňte všetky svoje stretnutia a osobné informácie zo systému.'; +$lang['delete_personal_information'] = 'Vymazať osobné údaje'; +$lang['delete_personal_information_prompt'] = 'Ste si istý, že chcete vymazať svoje osobné údaje? Túto akciu nie je možné vrátiť späť.'; +$lang['location'] = 'Miesto'; +$lang['working_plan_exception'] = 'Výnimka pracovného plánu'; +$lang['working_plan_exceptions'] = 'Výnimky pracovného plánu'; +$lang['working_plan_exceptions_hint'] = 'Pridajte deň výnimky pracovného plánu mimo pracovného plánu.'; +$lang['new_working_plan_exception_title'] = 'Výnimka nového pracovného plánu'; +$lang['working_plan_exception_saved'] = 'Výnimka pracovného plánu bola úspešne uložená.'; +$lang['working_plan_exception_deleted'] = 'Výnimka pracovného plánu bola úspešne odstránená.'; +$lang['add_working_plan_exceptions_during_each_day'] = 'Pridajte výnimky pracovného plánu mimo pracovného plánu.'; +$lang['add_working_plan_exception'] = 'Pridať výnimku pracovného plánu'; +$lang['require_phone_number'] = 'Pridať výnimku pracovného plánu'; +$lang['require_phone_number_hint'] = 'Keď je táto možnosť povolená, zákazníci a používatelia budú musieť pri rezervácii stretnutia zadať telefónne číslo zákazníka'; +$lang['check_spam_folder'] = 'Ak e-mail nepríde do niekoľkých minút, skontrolujte priečinok so spamom.'; +$lang['api_token_hint'] = 'Nastavte tajný token, aby ste povolili autentifikáciu na základe tokenov rozhrania Easy!Appointments API.'; +$lang['timezone'] = 'Časové pásmo'; +$lang['overwrite_existing_working_plans'] = 'Týmto sa prepíšu existujúce pracovné plány poskytovateľa. Ste si istý, že chcete pokračovať?'; +$lang['working_plans_got_updated'] = 'Všetky pracovné plány boli aktualizované.'; +$lang['apply_to_all_providers'] = 'Použiť pre všetkých poskytovateľov'; +$lang['display_any_provider'] = 'Zobraziť možnosť ľubovoľného poskytovateľa'; +$lang['display_any_provider_hint'] = 'Rezervačná stránka získa dodatočnú možnosť, ktorá umožňuje zákazníkom rezervovať bez uvedenia poskytovateľa.'; +$lang['load_more'] = 'Zobraziť viac'; +$lang['list'] = 'Zoznam'; +$lang['default'] = 'Prevolené'; +$lang['table'] = 'Tabuľka'; +$lang['date'] = 'Dátum'; +$lang['about'] = 'O programe'; +$lang['booking_settings'] = 'Nastavenia rezervácie'; +$lang['display'] = 'Zobraziť'; +$lang['require'] = 'Vyžadovať'; +$lang['color'] = 'Farba'; +$lang['matomo_analytics_url_hint'] = 'Zadajte URL svojej vlastnej inštalácie Matomo, aby ste povolili sledovanie Matomo na rezervačných stránkach.'; +$lang['invalid_phone'] = 'Neplatné telefónne číslo.'; +$lang['legal'] = 'Právne'; +$lang['business'] = 'Obchod'; +$lang['account'] = 'Účet'; +$lang['disable_booking'] = 'Zakázať rezerváciu'; +$lang['disable_booking_hint'] = 'Rezervačná stránka bude zakázaná, kým bude toto nastavenie aktívne a zákazníci nebudú môcť registrovať nové stretnutia.'; +$lang['display_message'] = 'Zobraziť správu'; +$lang['booking_is_disabled'] = 'Rezervácia je zakázaná!'; +$lang['appearance'] = 'Vzhľad'; +$lang['company_logo'] = 'Logo spoločnosti'; +$lang['company_logo_hint'] = 'Logo spoločnosti bude zobrazené na mnohých miestach aplikácie, vrátane rezervačnej stránky a e-mailov s upozornením (súbor s obrázkom, max 2 MB).'; +$lang['company_color'] = 'Farba spoločnosti'; +$lang['company_color_hint'] = 'Farba spoločnosti bude použitá v celej aplikácii, aby aplikácia používala vašu značku.'; +$lang['localization'] = 'Lokalizácia'; +$lang['integrations'] = 'Integrácie'; +$lang['company'] = 'Spoločnosť'; +$lang['remove'] = 'Odstrániť'; +$lang['login_button'] = 'Tlačidlo na prihlásenie'; +$lang['display_login_button_hint'] = 'Definuje, či sa prihlasovacie tlačidlo zobrazuje na stránke rezervácie.'; +$lang['private'] = 'Súkromné'; +$lang['private_hint'] = 'Súkromné záznamy nebudú zobrazené ani spracované na verejných stránkach, ako je napríklad stránka rezervácie.'; +$lang['reset'] = 'Resetovať'; +$lang['all'] = 'Všetko'; +$lang['booking_link'] = 'Odkaz na rezerváciu'; +$lang['add_new_event'] = 'Pridať novú udalosť'; +$lang['what_kind_of_event'] = 'Aký druh udalosti by ste chceli pridať?'; +$lang['theme'] = 'Téma'; +$lang['limit_customer_access'] = 'Obmedziť zákaznícky prístup'; +$lang['limit_customer_access_hint'] = 'Ak je povolené, poskytovatelia a sekretárky budú mať prístup len k zákazníkom, s ktorými majú stretnutie.'; $lang['url'] = 'URL'; -$lang['secret_token'] = 'Secret Token'; -$lang['verify_ssl'] = 'Verify SSL'; -$lang['appointment_save'] = 'Appointment Save'; -$lang['appointment_delete'] = 'Appointment Delete'; -$lang['unavailability_save'] = 'Unavailability Save'; -$lang['unavailability_delete'] = 'Unavailability Delete'; -$lang['customer_save'] = 'Customer Save'; -$lang['customer_delete'] = 'Customer Delete'; -$lang['service_save'] = 'Service Save'; -$lang['service_delete'] = 'Service Delete'; -$lang['service_category_save'] = 'Category Save'; -$lang['service_category_delete'] = 'Category Delete'; -$lang['provider_save'] = 'Provider Save'; -$lang['provider_delete'] = 'Provider Delete'; -$lang['secretary_save'] = 'Secretary Save'; -$lang['secretary_delete'] = 'Secretary Delete'; -$lang['admin_save'] = 'Admin Save'; -$lang['admin_delete'] = 'Admin Delete'; -$lang['options'] = 'Options'; -$lang['webhooks'] = 'Webhooks'; -$lang['webhooks_info'] = 'Webhooks enable you to send HTTP notifications to external web applications in response to various application events, such as the creation of an appointment or the removal of a customer.'; -$lang['integrations_info'] = 'Integrations enable you to make third-party connections with external applications and APIs.'; -$lang['configure'] = 'Configure'; +$lang['secret_token'] = 'Tajný token'; +$lang['verify_ssl'] = 'Overiť SSL'; +$lang['appointment_save'] = 'Uloženie stretnutia'; +$lang['appointment_delete'] = 'Vymazanie schôdzky'; +$lang['unavailability_save'] = 'Uložiť pre nedostupnosť'; +$lang['unavailability_delete'] = 'Vymazanie nedostupnosti'; +$lang['customer_save'] = 'Uložiť zákazníka'; +$lang['customer_delete'] = 'Vymazanie zákazníka'; +$lang['service_save'] = 'Uloženie služby'; +$lang['service_delete'] = 'Vymazanie služby'; +$lang['service_category_save'] = 'Uložiť kategóriu'; +$lang['service_category_delete'] = 'Vymazanie kategórie'; +$lang['provider_save'] = 'Uložiť poskytovateľa'; +$lang['provider_delete'] = 'Vymazať poskytovateľa'; +$lang['secretary_save'] = 'Uložiť sekretárku'; +$lang['secretary_delete'] = 'Vymazanie sekretárky'; +$lang['admin_save'] = 'Uloženie správcu'; +$lang['admin_delete'] = 'Odstrániť správcu'; +$lang['options'] = 'Možnosti'; +$lang['webhooks'] = 'Webhooky'; +$lang['webhooks_info'] = 'Webhooky vám umožňujú odosielať upozornenia HTTP externým webovým aplikáciám v reakcii na rôzne udalosti aplikácie, ako je vytvorenie stretnutia alebo odstránenie zákazníka.'; +$lang['integrations_info'] = 'Integrácie vám umožňujú vytvárať spojenia tretích strán s externými aplikáciami a API.'; +$lang['configure'] = 'Konfigurovať'; $lang['google_analytics'] = 'Google Analytics'; -$lang['google_analytics_info'] = 'Google Analytics enable you to automatically add the tracking code and HTML markup to the public page and track all the public booking sessions.'; +$lang['google_analytics_info'] = 'Google Analytics vám umožňuje automaticky pridať sledovací kód a označenie HTML na verejnú stránku a sledovať všetky relácie verejnej rezervácie.'; $lang['matomo_analytics'] = 'Matomo Analytics'; -$lang['matomo_analytics_info'] = 'Matomo Analytics enable you to automatically add the tracking code and HTML markup to the public page and track all the public booking sessions.'; +$lang['matomo_analytics_info'] = 'Matomo Analytics vám umožňuje automaticky pridať sledovací kód a označenie HTML na verejnú stránku a sledovať všetky relácie verejnej rezervácie.'; $lang['api'] = 'API'; -$lang['api_info'] = 'API enable you to interact with all the Easy!Appointments data via the HTTP protocol and the available API endpoints and create your own integrations.'; -$lang['google_analytics_code'] = 'Google Analytics Code'; -$lang['matomo_analytics_url'] = 'Matomo Analytics URL'; -$lang['future_booking_limit'] = 'Future Booking Limit'; -$lang['limit_days'] = 'Limit (Days)'; -$lang['future_booking_limit_hint'] = 'Set the future limit in days customers can make appointments via the public booking page.'; -$lang['api_token'] = 'API Token'; -$lang['allow_rescheduling_cancellation_before'] = 'Allow Rescheduling/Cancellation Before'; -$lang['at_least_one_field'] = 'At least one field must be displayed in the booking page.'; -$lang['status'] = 'Status'; -$lang['appointment_status_options'] = 'Appointment Status Options'; -$lang['appointment_status_options_info'] = 'Define a list of available appointment status options that can be used in the the calendar page (the first one will automatically become the default value).'; -$lang['sunday_short'] = 'Sun'; -$lang['monday_short'] = 'Mon'; -$lang['tuesday_short'] = 'Tue'; -$lang['wednesday_short'] = 'Wed'; -$lang['thursday_short'] = 'Thu'; -$lang['friday_short'] = 'Fri'; -$lang['saturday_short'] = 'Sat'; +$lang['api_info'] = 'API umožňuje interakciu so všetkými údajmi Easy!Appointments cez protokol HTTP a dostupné koncové body API a vytváranie vlastných integrácií.'; +$lang['google_analytics_code'] = 'Kód Google Analytics'; +$lang['matomo_analytics_url'] = 'Adresa URL Matomo Analytics'; +$lang['future_booking_limit'] = 'Budúci limit rezervácie'; +$lang['limit_days'] = 'Limit (dni)'; +$lang['future_booking_limit_hint'] = 'Nastavte budúci limit v dňoch, kedy si zákazníci môžu dohodnúť schôdzky cez verejnú rezervačnú stránku.'; +$lang['api_token'] = 'Token API'; +$lang['allow_rescheduling_cancellation_before'] = 'Povoliť preplánovanie/zrušenie skôr'; +$lang['at_least_one_field'] = 'Na rezervačnej stránke musí byť zobrazené aspoň jedno pole.'; +$lang['status'] = 'Stav'; +$lang['appointment_status_options'] = 'Možnosti stavu stretnutia'; +$lang['appointment_status_options_info'] = 'Definujte zoznam dostupných možností stavu stretnutia, ktoré možno použiť na stránke kalendára (prvá sa automaticky stane predvolenou hodnotou).'; +$lang['sunday_short'] = 'Ned'; +$lang['monday_short'] = 'Pon'; +$lang['tuesday_short'] = 'Ut'; +$lang['wednesday_short'] = 'Str'; +$lang['thursday_short'] = 'Št'; +$lang['friday_short'] = 'Pia'; +$lang['saturday_short'] = 'So'; $lang['january_short'] = 'Jan'; $lang['february_short'] = 'Feb'; $lang['march_short'] = 'Mar'; $lang['april_short'] = 'Apr'; -$lang['may_short'] = 'May'; -$lang['june_short'] = 'Jun'; -$lang['july_short'] = 'Jul'; +$lang['may_short'] = 'Máj'; +$lang['june_short'] = 'Jún'; +$lang['july_short'] = 'Júl'; $lang['august_short'] = 'Aug'; -$lang['september_short'] = 'Sep'; +$lang['september_short'] = 'Sept'; $lang['october_short'] = 'Oct'; $lang['november_short'] = 'Nov'; $lang['december_short'] = 'Dec'; $lang['am'] = 'am'; $lang['pm'] = 'pm'; -$lang['to'] = 'to'; -$lang['click_to_toggle'] = 'Click To Toggle'; -$lang['week_short'] = 'Wk'; -$lang['scroll_to_increment'] = 'Scroll To Increment'; -$lang['year'] = 'Year'; -$lang['make_non_working_day'] = 'This provider will not be available for work on the selected day.'; -$lang['no_breaks'] = 'No Breaks'; -$lang['service_categories'] = 'Service Categories'; -$lang['service_category'] = 'Service Category'; -$lang['blocked_period_saved'] = 'Blocked period saved successfully.'; -$lang['blocked_period_deleted'] = 'Blocked period deleted successfully.'; -$lang['delete_blocked_period'] = 'Delete Blocked Period'; -$lang['blocked_period'] = 'Blocked Period'; -$lang['blocked_periods'] = 'Blocked Periods'; -$lang['blocked_period_save'] = 'Blocked Period Save'; -$lang['blocked_period_delete'] = 'Blocked Period Delete'; -$lang['blocked_periods_hint'] = 'Define periods of time where public bookings will be disabled for all providers (e.g. closed dates, holidays etc.).'; -$lang['custom_field'] = 'Custom Field'; -$lang['custom_fields'] = 'Custom Fields'; -$lang['label'] = 'Label'; -$lang['webhook_saved'] = 'Webhook saved successfully.'; -$lang['webhook_deleted'] = 'Webhook deleted successfully.'; -$lang['delete_webhook'] = 'Delete Webhook'; -$lang['contact_info'] = 'Contact Info'; -$lang['default_timezone'] = 'Default Timezone'; -$lang['default_timezone_hint'] = 'This will be the Default Timezome for new Users, new Customers and new Appointments'; -$lang['default_language'] = 'Default Language'; -$lang['default_language_hint'] = 'This will be the Default Language for new Users and new Customers'; +$lang['to'] = 'do'; +$lang['click_to_toggle'] = 'Prepnite kliknutím'; +$lang['week_short'] = 'Týž.'; +$lang['scroll_to_increment'] = 'Posunúť sa na prírastok'; +$lang['year'] = 'Rok'; +$lang['make_non_working_day'] = 'Tento poskytovateľ nebude vo vybratý deň k dispozícii pre prácu.'; +$lang['no_breaks'] = 'Žiadne prestávky'; +$lang['service_categories'] = 'Kategórie služieb'; +$lang['service_category'] = 'Kategória služieb'; +$lang['blocked_period_saved'] = 'Blokované obdobie bolo úspešne uložené.'; +$lang['blocked_period_deleted'] = 'Blokované obdobie bolo úspešne odstránené.'; +$lang['delete_blocked_period'] = 'Odstrániť blokované obdobie'; +$lang['blocked_period'] = 'Blokované obdobie'; +$lang['blocked_periods'] = 'Blokované obdobia'; +$lang['blocked_period_save'] = 'Uloženie zablokovaného obdobia'; +$lang['blocked_period_delete'] = 'Vymazanie blokovaného obdobia'; +$lang['blocked_periods_hint'] = 'Definujte časové obdobia, počas ktorých budú verejné rezervácie pre všetkých poskytovateľov zakázané (napr. dátumy zatvorenia, sviatky atď.).'; +$lang['custom_field'] = 'Vlastné pole'; +$lang['custom_fields'] = 'Vlastné polia'; +$lang['label'] = 'Štítok'; +$lang['webhook_saved'] = 'Webhook bol úspešne uložený.'; +$lang['webhook_deleted'] = 'Webhook bol úspešne odstránený.'; +$lang['delete_webhook'] = 'Odstrániť webhook'; +$lang['contact_info'] = 'Kontaktné informácie'; // End From a5aa7da361868d40f2514bd9a223f234055df939 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 17:13:50 +0200 Subject: [PATCH 36/72] Revert scroll down --- assets/js/utils/calendar_default_view.js | 4 ++-- assets/js/utils/calendar_table_view.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/js/utils/calendar_default_view.js b/assets/js/utils/calendar_default_view.js index 2484f2ea..85a67166 100755 --- a/assets/js/utils/calendar_default_view.js +++ b/assets/js/utils/calendar_default_view.js @@ -868,7 +868,7 @@ App.Utils.CalendarDefaultView = (function () { .add({days: -info.delta.days, milliseconds: -info.delta.milliseconds}) .format('YYYY-MM-DD HH:mm:ss'); - App.Http.Calendar.saveAppointment(unavailability).done(() => { + App.Http.Calendar.saveUnavailability(unavailability).done(() => { $notification.hide('blind'); }); @@ -1485,7 +1485,7 @@ App.Utils.CalendarDefaultView = (function () { firstDay: firstWeekdayNumber, slotDuration: '00:15:00', snapDuration: '00:15:00', - scrollTime: moment().format('HH') + ':00:00', + scrollTime: '07:00:00', slotLabelInterval: '01:00', eventTimeFormat: timeFormat, eventTextColor: '#333', diff --git a/assets/js/utils/calendar_table_view.js b/assets/js/utils/calendar_table_view.js index c436effc..0f1e9490 100755 --- a/assets/js/utils/calendar_table_view.js +++ b/assets/js/utils/calendar_table_view.js @@ -697,7 +697,7 @@ App.Utils.CalendarTableView = (function () { firstDay: firstWeekdayNumber, slotDuration: '00:15:00', snapDuration: '00:15:00', - scrollTime: moment().format('HH') + ':00:00', + scrollTime: '07:00:00', slotLabelInterval: '01:00', eventTimeFormat: timeFormat, eventTextColor: '#333', From 171623c6a0e95506ffd6ca2f91a9cd7a1d8edf42 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 17:25:31 +0200 Subject: [PATCH 37/72] Fix the calendar drop and resize "undo" functionality --- assets/js/utils/calendar_default_view.js | 6 +++--- assets/js/utils/calendar_table_view.js | 12 ++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/assets/js/utils/calendar_default_view.js b/assets/js/utils/calendar_default_view.js index 85a67166..a02cc737 100755 --- a/assets/js/utils/calendar_default_view.js +++ b/assets/js/utils/calendar_default_view.js @@ -865,7 +865,7 @@ App.Utils.CalendarDefaultView = (function () { unavailability.end_datetime = info.event.extendedProps.data.end_datetime = moment( unavailability.end_datetime, ) - .add({days: -info.delta.days, milliseconds: -info.delta.milliseconds}) + .add({days: -info.endDelta.days, milliseconds: -info.endDelta.milliseconds}) .format('YYYY-MM-DD HH:mm:ss'); App.Http.Calendar.saveUnavailability(unavailability).done(() => { @@ -955,7 +955,7 @@ App.Utils.CalendarDefaultView = (function () { .add({days: info.delta.days, millisecond: info.delta.milliseconds}) .format('YYYY-MM-DD HH:mm:ss'); - appointment.is_unavailability = Number(appointment.is_unavailability); + appointment.is_unavailability = 0; info.event.extendedProps.data.start_datetime = appointment.start_datetime; info.event.extendedProps.data.end_datetime = appointment.end_datetime; @@ -1014,7 +1014,7 @@ App.Utils.CalendarDefaultView = (function () { .add({days: -info.delta.days, milliseconds: -info.delta.milliseconds}) .format('YYYY-MM-DD HH:mm:ss'); - unavailability.is_unavailability = Number(unavailability.is_unavailability); + unavailability.is_unavailability = 1; info.event.extendedProps.data.start_datetime = unavailability.start_datetime; info.event.extendedProps.data.end_datetime = unavailability.end_datetime; diff --git a/assets/js/utils/calendar_table_view.js b/assets/js/utils/calendar_table_view.js index 0f1e9490..f2ab0bcf 100755 --- a/assets/js/utils/calendar_table_view.js +++ b/assets/js/utils/calendar_table_view.js @@ -1514,6 +1514,8 @@ App.Utils.CalendarTableView = (function () { const appointment = {...info.event.extendedProps.data}; + appointment.is_unavailability = 0; + // Must delete the following because only appointment data should be provided to the AJAX call. delete appointment.customer; delete appointment.provider; @@ -1546,7 +1548,7 @@ App.Utils.CalendarTableView = (function () { $footer.css('position', 'static'); // Footer position fix. // Update the event data for later use. - info.event.setProp('data', event.extendedProps.data); + info.event.setProp('data', info.event.extendedProps.data); }; // Update appointment data. @@ -1634,7 +1636,7 @@ App.Utils.CalendarTableView = (function () { .add({days: info.delta.days, millisecond: info.delta.milliseconds}) .format('YYYY-MM-DD HH:mm:ss'); - appointment.is_unavailability = Number(appointment.is_unavailability); + appointment.is_unavailability = 0; info.event.extendedProps.data.start_datetime = appointment.start_datetime; info.event.extendedProps.data.end_datetime = appointment.end_datetime; @@ -1688,13 +1690,15 @@ App.Utils.CalendarTableView = (function () { successCallback = () => { const undoFunction = () => { unavailability.start_datetime = moment(unavailability.start_datetime) - .add({days: -info.endDelta.days, milliseconds: -info.endDelta.milliseconds}) + .add({days: -info.delta.days, milliseconds: -info.delta.milliseconds}) .format('YYYY-MM-DD HH:mm:ss'); unavailability.end_datetime = moment(unavailability.end_datetime) - .add({days: -info.endDelta.days, milliseconds: -info.endDelta.milliseconds}) + .add({days: -info.delta.days, milliseconds: -info.delta.milliseconds}) .format('YYYY-MM-DD HH:mm:ss'); + unavailability.is_unavailability = 1; + info.event.extendedProps.data.start_datetime = unavailability.start_datetime; info.event.extendedProps.data.end_datetime = unavailability.end_datetime; From 078442719c3eecf81bc4efa153984fb8e0fd31f3 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 17:28:02 +0200 Subject: [PATCH 38/72] Set the Google attendee data only if all the values are available --- application/libraries/Google_sync.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/libraries/Google_sync.php b/application/libraries/Google_sync.php index fb2e4e08..42ea5c5c 100644 --- a/application/libraries/Google_sync.php +++ b/application/libraries/Google_sync.php @@ -181,7 +181,7 @@ class Google_sync $event_provider->setEmail($provider['email']); $event->attendees[] = $event_provider; - if (!empty($customer)) { + if (!empty($customer['first_name']) && !empty($customer['last_name']) && !empty($customer['email'])) { $event_customer = new Google_Service_Calendar_EventAttendee(); $event_customer->setDisplayName($customer['first_name'] . ' ' . $customer['last_name']); $event_customer->setEmail($customer['email']); @@ -243,7 +243,7 @@ class Google_sync $event_provider->setEmail($provider['email']); $event->attendees[] = $event_provider; - if (!empty($customer)) { + if (!empty($customer['first_name']) && !empty($customer['last_name']) && !empty($customer['email'])) { $event_customer = new Google_Service_Calendar_EventAttendee(); $event_customer->setDisplayName($customer['first_name'] . ' ' . $customer['last_name']); $event_customer->setEmail($customer['email']); From 55bdcf49a108aeba35b0252f71692b64d515addd Mon Sep 17 00:00:00 2001 From: Nikke <62788198+zikkee@users.noreply.github.com> Date: Tue, 20 Feb 2024 16:03:57 +0200 Subject: [PATCH 39/72] Added and improved Finnish translations --- .../language/finnish/translations_lang.php | 86 +++++++++---------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/application/language/finnish/translations_lang.php b/application/language/finnish/translations_lang.php index df3fdd5c..d0602c22 100755 --- a/application/language/finnish/translations_lang.php +++ b/application/language/finnish/translations_lang.php @@ -126,7 +126,7 @@ $lang['admins'] = 'Järjestelmänvalvojat'; $lang['providers'] = 'Palveluntuottajat'; $lang['secretaries'] = 'Sihteerit'; $lang['mobile_number'] = 'Matkapuhelinnumero'; -$lang['mobile'] = 'Mobile'; +$lang['mobile'] = 'Matkapuhelin'; $lang['state'] = 'Maa'; $lang['username'] = 'Käyttäjätunnus'; $lang['password'] = 'Salasana'; @@ -263,8 +263,8 @@ $lang['next'] = 'Seuraava'; $lang['now'] = 'Nyt'; $lang['select_time'] = 'Valitse aika'; $lang['time'] = 'Aika'; -$lang['hour'] = 'Tunti'; -$lang['minute'] = 'Minuutti'; +$lang['hour'] = 'tunti'; +$lang['minute'] = 'minuutti'; $lang['google_sync_completed'] = 'Google synkronointi onnistui.'; $lang['google_sync_failed'] = 'Google synkronointi epäonnistui: Palvelimeen ei saatu muodostettua yhteyttä.'; $lang['select_google_calendar'] = 'Valitse Google-kalenteri'; @@ -415,46 +415,42 @@ $lang['wednesday_short'] = 'Wed'; $lang['thursday_short'] = 'Thu'; $lang['friday_short'] = 'Fri'; $lang['saturday_short'] = 'Sat'; -$lang['january_short'] = 'Jan'; -$lang['february_short'] = 'Feb'; -$lang['march_short'] = 'Mar'; -$lang['april_short'] = 'Apr'; -$lang['may_short'] = 'May'; -$lang['june_short'] = 'Jun'; -$lang['july_short'] = 'Jul'; -$lang['august_short'] = 'Aug'; -$lang['september_short'] = 'Sep'; -$lang['october_short'] = 'Oct'; -$lang['november_short'] = 'Nov'; -$lang['december_short'] = 'Dec'; -$lang['am'] = 'am'; -$lang['pm'] = 'pm'; -$lang['to'] = 'to'; -$lang['click_to_toggle'] = 'Click To Toggle'; -$lang['week_short'] = 'Wk'; -$lang['scroll_to_increment'] = 'Scroll To Increment'; -$lang['year'] = 'Year'; -$lang['make_non_working_day'] = 'This provider will not be available for work on the selected day.'; -$lang['no_breaks'] = 'No Breaks'; -$lang['service_categories'] = 'Service Categories'; -$lang['service_category'] = 'Service Category'; -$lang['blocked_period_saved'] = 'Blocked period saved successfully.'; -$lang['blocked_period_deleted'] = 'Blocked period deleted successfully.'; -$lang['delete_blocked_period'] = 'Delete Blocked Period'; -$lang['blocked_period'] = 'Blocked Period'; -$lang['blocked_periods'] = 'Blocked Periods'; -$lang['blocked_period_save'] = 'Blocked Period Save'; -$lang['blocked_period_delete'] = 'Blocked Period Delete'; -$lang['blocked_periods_hint'] = 'Define periods of time where public bookings will be disabled for all providers (e.g. closed dates, holidays etc.).'; -$lang['custom_field'] = 'Custom Field'; -$lang['custom_fields'] = 'Custom Fields'; -$lang['label'] = 'Label'; -$lang['webhook_saved'] = 'Webhook saved successfully.'; -$lang['webhook_deleted'] = 'Webhook deleted successfully.'; -$lang['delete_webhook'] = 'Delete Webhook'; -$lang['contact_info'] = 'Contact Info'; -$lang['default_timezone'] = 'Oletusaikavyöhyke'; -$lang['default_timezone_hint'] = 'Tämä tulee uusien käyttäjien ja varausten oletusaikavyöhykkeeksi'; -$lang['default_language'] = 'Oletuskieli'; -$lang['default_language_hint'] = 'Tämä tulee uusien käyttäjien oletuskieleksi'; +$lang['january_short'] = 'Tammi'; +$lang['february_short'] = 'Helmi'; +$lang['march_short'] = 'Maalis'; +$lang['april_short'] = 'Huhti'; +$lang['may_short'] = 'Touko'; +$lang['june_short'] = 'Kesä'; +$lang['july_short'] = 'Heinä'; +$lang['august_short'] = 'Elo'; +$lang['september_short'] = 'Syys'; +$lang['october_short'] = 'Loka'; +$lang['november_short'] = 'Marras'; +$lang['december_short'] = 'Joulu'; +$lang['am'] = 'ap'; +$lang['pm'] = 'ip'; +$lang['to'] = '->'; +$lang['click_to_toggle'] = 'Klikkaa kytkeäksesi'; +$lang['week_short'] = 'vk'; +$lang['scroll_to_increment'] = 'Vieritä kohtaan Lisäys'; +$lang['year'] = 'vuosi'; +$lang['make_non_working_day'] = 'Tämä palveluntarjoaja ei ole käytettävissä töihin valittuna päivänä.'; +$lang['no_breaks'] = 'Ei taukoja'; +$lang['service_categories'] = 'Palveluluokat'; +$lang['service_category'] = 'Palveluluokka'; +$lang['blocked_period_saved'] = 'Estetty ajanjakso tallennettu onnistuneesti.'; +$lang['blocked_period_deleted'] = 'Estetty ajanjakso poistettu onnistuneesti.'; +$lang['delete_blocked_period'] = 'Poistettu estetty ajanjakso'; +$lang['blocked_period'] = 'Estetty ajanjakso'; +$lang['blocked_periods'] = 'Estetyt ajanjaksot'; +$lang['blocked_period_save'] = 'Tallenna estetty ajanjakso'; +$lang['blocked_period_delete'] = 'Poista estetty ajanjakso'; +$lang['blocked_periods_hint'] = 'Määritä ajanjaksot, jolloin julkiset varaukset poistetaan käytöstä kaikilta palveluntarjoajilta (esim. suljetut päivämäärät, lomat jne.).'; +$lang['custom_field'] = 'Mukautettu kenttä'; +$lang['custom_fields'] = 'Mukautetut kentät'; +$lang['label'] = 'Merkki'; +$lang['webhook_saved'] = 'Webhook tallennettu onnistuneesti.'; +$lang['webhook_deleted'] = 'Webhook poistettu onnistuneesti.'; +$lang['delete_webhook'] = 'Poista Webhook'; +$lang['contact_info'] = 'Yhteystiedot'; // End From b0c0acde6217af0a6779ca2e58f56c0dad328d92 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Fri, 26 Apr 2024 17:32:39 +0200 Subject: [PATCH 40/72] French translation fixes --- application/language/french/calendar_lang.php | 8 ++++---- application/language/french/pagination_lang.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/application/language/french/calendar_lang.php b/application/language/french/calendar_lang.php index 9b2acce6..59a27114 100644 --- a/application/language/french/calendar_lang.php +++ b/application/language/french/calendar_lang.php @@ -54,7 +54,7 @@ $lang['cal_sat'] = 'Sam'; $lang['cal_sunday'] = 'Dimanche'; $lang['cal_monday'] = 'Lundi'; $lang['cal_tuesday'] = 'Mardi'; -$lang['cal_wednesday'] = 'mercredi'; +$lang['cal_wednesday'] = 'Mercredi'; $lang['cal_thursday'] = 'Jeudi'; $lang['cal_friday'] = 'Vendredi'; $lang['cal_saturday'] = 'Samedi'; @@ -63,9 +63,9 @@ $lang['cal_feb'] = 'Fév'; $lang['cal_mar'] = 'Mar'; $lang['cal_apr'] = 'Avr'; $lang['cal_may'] = 'Mai'; -$lang['cal_jun'] = 'Jun'; -$lang['cal_jul'] = 'Jul'; -$lang['cal_aug'] = 'Aoû'; +$lang['cal_jun'] = 'Jui'; +$lang['cal_jul'] = 'Jui'; +$lang['cal_aug'] = 'Aou'; $lang['cal_sep'] = 'Sep'; $lang['cal_oct'] = 'Oct'; $lang['cal_nov'] = 'Nov'; diff --git a/application/language/french/pagination_lang.php b/application/language/french/pagination_lang.php index 8661f074..d3c72d59 100644 --- a/application/language/french/pagination_lang.php +++ b/application/language/french/pagination_lang.php @@ -37,7 +37,7 @@ */ defined('BASEPATH') or exit('No direct script access allowed'); -$lang['pagination_first_link'] = '‹ Début'; +$lang['pagination_first_link'] = '‹ Première'; $lang['pagination_next_link'] = '>'; $lang['pagination_prev_link'] = '<'; -$lang['pagination_last_link'] = 'Fin ›'; +$lang['pagination_last_link'] = 'Dernière ›'; From 0d89bb7a6ada63ab892cdfd32269031cc906e7a3 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Wed, 8 May 2024 21:41:37 +0200 Subject: [PATCH 41/72] Switch the duration with the appointment date time in the confirmation step --- assets/js/pages/booking.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/js/pages/booking.js b/assets/js/pages/booking.js index b89124d4..608b5841 100644 --- a/assets/js/pages/booking.js +++ b/assets/js/pages/booking.js @@ -673,14 +673,14 @@ App.Pages.Booking = (function () {
${providerOptionText}
-
- - ${service.duration} ${lang('minutes')} -
${formattedSelectedDate}
+
+ + ${service.duration} ${lang('minutes')} +
${timezoneOptionText} From 2b490775af2f35bed7e903499272a5f9e7aabbd3 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Thu, 9 May 2024 18:52:59 +0200 Subject: [PATCH 42/72] Suppress session warnings --- system/libraries/Session/Session.php | 24 +++++++++---------- .../Session/drivers/Session_files_driver.php | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/system/libraries/Session/Session.php b/system/libraries/Session/Session.php index 6daf8dae..19a63223 100644 --- a/system/libraries/Session/Session.php +++ b/system/libraries/Session/Session.php @@ -105,7 +105,7 @@ class CI_Session { $class = new $class($this->_config); if ($class instanceof SessionHandlerInterface) { - session_set_save_handler($class, TRUE); + @session_set_save_handler($class, TRUE); } else { @@ -260,14 +260,14 @@ class CI_Session { } else { - ini_set('session.name', $params['cookie_name']); + @ini_set('session.name', $params['cookie_name']); } isset($params['cookie_path']) OR $params['cookie_path'] = config_item('cookie_path'); isset($params['cookie_domain']) OR $params['cookie_domain'] = config_item('cookie_domain'); isset($params['cookie_secure']) OR $params['cookie_secure'] = (bool) config_item('cookie_secure'); - session_set_cookie_params( + @session_set_cookie_params( $params['cookie_lifetime'], $params['cookie_path'], $params['cookie_domain'], @@ -282,7 +282,7 @@ class CI_Session { else { $params['expiration'] = (int) $expiration; - ini_set('session.gc_maxlifetime', $expiration); + @ini_set('session.gc_maxlifetime', $expiration); } $params['match_ip'] = (bool) (isset($params['match_ip']) ? $params['match_ip'] : config_item('sess_match_ip')); @@ -292,10 +292,10 @@ class CI_Session { $this->_config = $params; // Security is king - ini_set('session.use_trans_sid', 0); - ini_set('session.use_strict_mode', 1); - ini_set('session.use_cookies', 1); - ini_set('session.use_only_cookies', 1); + @ini_set('session.use_trans_sid', 0); + @ini_set('session.use_strict_mode', 1); + @ini_set('session.use_cookies', 1); + @ini_set('session.use_only_cookies', 1); $this->_configure_sid_length(); } @@ -326,19 +326,19 @@ class CI_Session { { if ($hash_function !== '1') { - ini_set('session.hash_function', 1); + @ini_set('session.hash_function', 1); } $bits = 160; } elseif ( ! in_array($hash_function, hash_algos(), TRUE)) { - ini_set('session.hash_function', 1); + @ini_set('session.hash_function', 1); $bits = 160; } elseif (($bits = strlen(hash($hash_function, 'dummy', false)) * 4) < 160) { - ini_set('session.hash_function', 1); + @ini_set('session.hash_function', 1); $bits = 160; } @@ -353,7 +353,7 @@ class CI_Session { { // Add as many more characters as necessary to reach at least 160 bits $sid_length += (int) ceil((160 % $bits) / $bits_per_character); - ini_set('session.sid_length', $sid_length); + @ini_set('session.sid_length', $sid_length); } } diff --git a/system/libraries/Session/drivers/Session_files_driver.php b/system/libraries/Session/drivers/Session_files_driver.php index ecbf6093..272ce6f8 100644 --- a/system/libraries/Session/drivers/Session_files_driver.php +++ b/system/libraries/Session/drivers/Session_files_driver.php @@ -105,7 +105,7 @@ class CI_Session_files_driver extends CI_Session_driver implements SessionHandle if (isset($this->_config['save_path'])) { $this->_config['save_path'] = rtrim($this->_config['save_path'], '/\\'); - ini_set('session.save_path', $this->_config['save_path']); + @ini_set('session.save_path', $this->_config['save_path']); } else { From f1a00b8f39430b338ac1f5764e627ad924893d43 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 14:58:56 +0200 Subject: [PATCH 43/72] Update composer and NPM dependencies --- composer.lock | 964 ++++++++++------- package-lock.json | 2540 ++++++++++++++++++++++----------------------- 2 files changed, 1815 insertions(+), 1689 deletions(-) diff --git a/composer.lock b/composer.lock index 3715a6cd..bbfc435a 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "firebase/php-jwt", - "version": "v6.7.0", + "version": "v6.10.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "71278f20b0a623389beefe87a641d03948a38870" + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/71278f20b0a623389beefe87a641d03948a38870", - "reference": "71278f20b0a623389beefe87a641d03948a38870", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff", "shasum": "" }, "require": { @@ -65,41 +65,41 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.7.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.0" }, - "time": "2023-06-14T15:29:26+00:00" + "time": "2023-12-01T16:26:39+00:00" }, { "name": "google/apiclient", - "version": "v2.15.0", + "version": "v2.16.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client.git", - "reference": "49787fa30b8d8313146a61efbf77ed1fede723c2" + "reference": "017400f609c1fb71ab5ad824c50eabd4c3eaf779" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/49787fa30b8d8313146a61efbf77ed1fede723c2", - "reference": "49787fa30b8d8313146a61efbf77ed1fede723c2", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/017400f609c1fb71ab5ad824c50eabd4c3eaf779", + "reference": "017400f609c1fb71ab5ad824c50eabd4c3eaf779", "shasum": "" }, "require": { "firebase/php-jwt": "~6.0", - "google/apiclient-services": "~0.200", - "google/auth": "^1.28", - "guzzlehttp/guzzle": "~6.5||~7.0", - "guzzlehttp/psr7": "^1.8.4||^2.2.1", + "google/apiclient-services": "~0.350", + "google/auth": "^1.37", + "guzzlehttp/guzzle": "^6.5.8||^7.4.5", + "guzzlehttp/psr7": "^1.9.1||^2.2.1", "monolog/monolog": "^2.9||^3.0", "php": "^7.4|^8.0", - "phpseclib/phpseclib": "^3.0.2" + "phpseclib/phpseclib": "^3.0.36" }, "require-dev": { "cache/filesystem-adapter": "^1.1", - "composer/composer": "^1.10.22", + "composer/composer": "^1.10.23", "phpcompatibility/php-compatibility": "^9.2", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.0", + "squizlabs/php_codesniffer": "^3.8", "symfony/css-selector": "~2.1", "symfony/dom-crawler": "~2.1" }, @@ -134,22 +134,22 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client/issues", - "source": "https://github.com/googleapis/google-api-php-client/tree/v2.15.0" + "source": "https://github.com/googleapis/google-api-php-client/tree/v2.16.0" }, - "time": "2023-05-18T13:51:33+00:00" + "time": "2024-04-24T00:59:47+00:00" }, { "name": "google/apiclient-services", - "version": "v0.305.0", + "version": "v0.354.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "6731fd0d3e2f1ff2794f36108b55c0a3480edf3d" + "reference": "ea6f4a01c9113cb4661d1243baf5af0f69a926c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/6731fd0d3e2f1ff2794f36108b55c0a3480edf3d", - "reference": "6731fd0d3e2f1ff2794f36108b55c0a3480edf3d", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/ea6f4a01c9113cb4661d1243baf5af0f69a926c2", + "reference": "ea6f4a01c9113cb4661d1243baf5af0f69a926c2", "shasum": "" }, "require": { @@ -178,40 +178,42 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.305.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.354.0" }, - "time": "2023-06-07T02:11:36+00:00" + "time": "2024-05-10T16:30:18+00:00" }, { "name": "google/auth", - "version": "v1.28.0", + "version": "v1.39.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "07f7f6305f1b7df32b2acf6e101c1225c839c7ac" + "reference": "23e8e696d87f8d7dfefbd347ca1c99ce17ecb368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/07f7f6305f1b7df32b2acf6e101c1225c839c7ac", - "reference": "07f7f6305f1b7df32b2acf6e101c1225c839c7ac", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/23e8e696d87f8d7dfefbd347ca1c99ce17ecb368", + "reference": "23e8e696d87f8d7dfefbd347ca1c99ce17ecb368", "shasum": "" }, "require": { "firebase/php-jwt": "^6.0", - "guzzlehttp/guzzle": "^6.2.1|^7.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.4.5", - "php": "^7.4||^8.0", - "psr/cache": "^1.0||^2.0||^3.0", + "php": "^8.0", + "psr/cache": "^2.0||^3.0", "psr/http-message": "^1.1||^2.0" }, "require-dev": { - "guzzlehttp/promises": "^1.3", - "kelvinmo/simplejwt": "0.7.0", - "phpseclib/phpseclib": "^3.0", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.0.0", + "guzzlehttp/promises": "^2.0", + "kelvinmo/simplejwt": "0.7.1", + "phpseclib/phpseclib": "^3.0.35", + "phpspec/prophecy-phpunit": "^2.1", + "phpunit/phpunit": "^9.6", "sebastian/comparator": ">=1.2.3", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^6.0||^7.0", + "webmozart/assert": "^1.11" }, "suggest": { "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." @@ -236,22 +238,22 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.28.0" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.39.0" }, - "time": "2023-05-11T21:58:18+00:00" + "time": "2024-05-02T16:03:51+00:00" }, { "name": "gregwar/captcha", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/Gregwar/Captcha.git", - "reference": "6e5b61b66ac89885b505153f4ef9a74ffa5b3074" + "reference": "229d3cdfe33d6f1349e0aec94a26e9205a6db08e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Gregwar/Captcha/zipball/6e5b61b66ac89885b505153f4ef9a74ffa5b3074", - "reference": "6e5b61b66ac89885b505153f4ef9a74ffa5b3074", + "url": "https://api.github.com/repos/Gregwar/Captcha/zipball/229d3cdfe33d6f1349e0aec94a26e9205a6db08e", + "reference": "229d3cdfe33d6f1349e0aec94a26e9205a6db08e", "shasum": "" }, "require": { @@ -293,28 +295,28 @@ ], "support": { "issues": "https://github.com/Gregwar/Captcha/issues", - "source": "https://github.com/Gregwar/Captcha/tree/v1.2.0" + "source": "https://github.com/Gregwar/Captcha/tree/v1.2.1" }, - "time": "2023-03-24T22:12:41+00:00" + "time": "2023-09-26T13:45:37+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.7.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -323,11 +325,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -405,7 +407,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" }, "funding": [ { @@ -421,28 +423,28 @@ "type": "tidelift" } ], - "time": "2023-05-21T14:04:53+00:00" + "time": "2023-12-03T20:35:24+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "type": "library", "extra": { @@ -488,7 +490,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.0" + "source": "https://github.com/guzzle/promises/tree/2.0.2" }, "funding": [ { @@ -504,20 +506,20 @@ "type": "tidelift" } ], - "time": "2023-05-21T13:50:22+00:00" + "time": "2023-12-03T20:19:20+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.5.0", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", "shasum": "" }, "require": { @@ -531,9 +533,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -604,7 +606,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" + "source": "https://github.com/guzzle/psr7/tree/2.6.2" }, "funding": [ { @@ -620,7 +622,7 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:11:26+00:00" + "time": "2023-12-03T20:05:35+00:00" }, { "name": "jsvrcek/ics", @@ -676,16 +678,16 @@ }, { "name": "monolog/monolog", - "version": "2.9.1", + "version": "2.9.3", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", + "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", "shasum": "" }, "require": { @@ -706,8 +708,8 @@ "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", "predis/predis": "^1.1 || ^2.0", "rollbar/rollbar": "^1.3 || ^2 || ^3", "ruflin/elastica": "^7", @@ -762,7 +764,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + "source": "https://github.com/Seldaek/monolog/tree/2.9.3" }, "funding": [ { @@ -774,20 +776,20 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:44:46+00:00" + "time": "2024-04-12T20:52:51+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v2.6.3", + "version": "v2.7.0", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "58c3f47f650c94ec05a151692652a868995d2938" + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", - "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105", + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105", "shasum": "" }, "require": { @@ -841,7 +843,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2022-06-14T06:56:20+00:00" + "time": "2024-05-08T12:18:48+00:00" }, { "name": "paragonie/random_compat", @@ -895,16 +897,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.20", + "version": "3.0.37", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "543a1da81111a0bfd6ae7bbc2865c5e89ed3fc67" + "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/543a1da81111a0bfd6ae7bbc2865c5e89ed3fc67", - "reference": "543a1da81111a0bfd6ae7bbc2865c5e89ed3fc67", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cfa2013d0f68c062055180dd4328cc8b9d1f30b8", + "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8", "shasum": "" }, "require": { @@ -985,7 +987,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.20" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.37" }, "funding": [ { @@ -1001,7 +1003,7 @@ "type": "tidelift" } ], - "time": "2023-06-13T06:30:34+00:00" + "time": "2024-03-03T02:14:58+00:00" }, { "name": "psr/cache", @@ -1054,16 +1056,16 @@ }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { @@ -1100,26 +1102,26 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" + "source": "https://github.com/php-fig/http-client" }, - "time": "2023-04-10T20:12:12+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -1143,7 +1145,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -1155,9 +1157,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -1308,25 +1310,25 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -1355,7 +1357,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -1371,24 +1373,27 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/finder", - "version": "v6.0.19", + "version": "v7.0.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" + "reference": "4d58f0f4fe95a30d7b538d71197135483560b97c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", + "url": "https://api.github.com/repos/symfony/finder/zipball/4d58f0f4fe95a30d7b538d71197135483560b97c", + "reference": "4d58f0f4fe95a30d7b538d71197135483560b97c", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -1416,7 +1421,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.19" + "source": "https://github.com/symfony/finder/tree/v7.0.7" }, "funding": [ { @@ -1432,36 +1437,36 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2024-04-28T11:44:19+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.5.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -1488,7 +1493,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -1504,7 +1509,7 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "myclabs/deep-copy", @@ -1567,25 +1572,27 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.5", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/11e2663a5bc9db5d714eedb4277ee300403b4a9e", - "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -1593,7 +1600,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1617,26 +1624,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "time": "2023-05-19T20:20:00+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1677,9 +1685,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -1734,23 +1748,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.26", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1799,7 +1813,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, "funding": [ { @@ -1807,7 +1822,7 @@ "type": "github" } ], - "time": "2023-03-06T12:58:08+00:00" + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2052,16 +2067,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.9", + "version": "9.6.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a9aceaf20a682aeacf28d582654a1670d8826778" + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a9aceaf20a682aeacf28d582654a1670d8826778", - "reference": "a9aceaf20a682aeacf28d582654a1670d8826778", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", "shasum": "" }, "require": { @@ -2076,7 +2091,7 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-code-coverage": "^9.2.28", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -2135,7 +2150,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.9" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" }, "funding": [ { @@ -2151,7 +2166,7 @@ "type": "tidelift" } ], - "time": "2023-06-11T06:13:56+00:00" + "time": "2024-04-05T04:35:58+00:00" }, { "name": "roave/security-advisories", @@ -2159,56 +2174,71 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e47f876d3b2df4a1354964c32820b4d7c10b8675" + "reference": "6bdc6b064ecc2d47fd9aad5f3dce20f2a7dfcd64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e47f876d3b2df4a1354964c32820b4d7c10b8675", - "reference": "e47f876d3b2df4a1354964c32820b4d7c10b8675", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/6bdc6b064ecc2d47fd9aad5f3dce20f2a7dfcd64", + "reference": "6bdc6b064ecc2d47fd9aad5f3dce20f2a7dfcd64", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.2.8", + "admidio/admidio": "<4.2.13", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", - "aheinze/cockpit": "<=2.2.1", + "aheinze/cockpit": "<2.2", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", "amphp/artax": "<1.0.6|>=2,<2.0.6", - "amphp/http": "<1.0.1", + "amphp/http": "<=1.7.2|>=2,<=2.1", "amphp/http-client": ">=4,<4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", - "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<=1.0.1|>=2,<=2.2.4", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "apache-solr-for-typo3/solr": "<2.8.3", "apereo/phpcas": "<1.6", "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", "appwrite/server-ce": "<=1.2.1", "arc/web": "<3", "area17/twill": "<1.2.5|>=2,<2.5.3", - "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", - "automad/automad": "<1.8", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "automad/automad": "<=1.10.9", + "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": ">=3,<3.2.1", + "aws/aws-sdk-php": "<3.288.1", "azuracast/azuracast": "<0.18.3", "backdrop/backdrop": "<1.24.2", + "backpack/crud": "<3.4.9", + "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", "badaso/core": "<2.7", - "bagisto/bagisto": "<0.1.5", + "bagisto/bagisto": "<2.1", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.2", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<4.7.5", + "baserproject/basercms": "<5.0.9", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", - "bigfork/silverstripe-form-capture": ">=3,<=3.1", - "billz/raspap-webgui": "<=2.6.6", + "bbpress/bbpress": "<2.6.5", + "bcosca/fatfree": "<3.7.2", + "bedita/bedita": "<4", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<2.9.5", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "blueimp/jquery-file-upload": "==6.4.4", "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.17", "brightlocal/phpwhois": "<=4.2.5", "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", @@ -2217,129 +2247,167 @@ "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10|= 1.3.7|>=4.1,<4.1.4", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", - "centreon/centreon": "<22.10-beta.1", + "causal/oidc": "<2.1", + "cecil/cecil": "<7.47.1", + "centreon/centreon": "<22.10.15", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", - "cockpit-hq/cockpit": "<2.4.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", + "ckeditor/ckeditor": "<4.24", + "cockpit-hq/cockpit": "<=2.6.3|==2.7", "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<=3.0.6", - "codeigniter4/framework": "<4.3.5", - "codeigniter4/shield": "<1-beta.4|= 1.0.0-beta", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<4.4.7", + "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5", - "concrete5/concrete5": "<9.2|>= 9.0.0RC1, < 9.1.3", + "composer/composer": "<1.10.27|>=2,<2.2.23|>=2.3,<2.7", + "concrete5/concrete5": "<9.2.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", - "contao/core": ">=2,<3.5.39", - "contao/core-bundle": "<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4|= 4.10.0", - "contao/listing-bundle": ">=4,<4.4.8", + "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", + "contao/core": "<3.5.39", + "contao/core-bundle": "<4.13.40|>=5,<5.3.4", + "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", - "craftcms/cms": "<4.4.6|>= 4.0.0-RC1, < 4.4.12|>= 4.0.0-RC1, <= 4.4.5|>= 4.0.0-RC1, <= 4.4.6|>= 4.0.0-RC1, < 4.4.6|>= 4.0.0-RC1, < 4.3.7|>= 4.0.0-RC1, < 4.2.1", - "croogo/croogo": "<3.0.7", + "corveda/phpsandbox": "<1.3.5", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<4.6.2", + "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", + "dapphp/securimage": "<3.6.6", "darylldoyle/safe-svg": "<1.9.10", "datadog/dd-trace": ">=0.30,<0.30.2", + "datatables/datatables": "<1.10.10", "david-garcia/phpwhois": "<=4.3.1", "dbrisinajumi/d2files": "<1", - "dcat/laravel-admin": "<=2.1.3-beta", + "dcat/laravel-admin": "<=2.1.3.0-beta", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", - "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", - "directmailteam/direct-mail": "<5.2.4", - "doctrine/annotations": ">=1,<1.2.7", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", + "desperado/xml-bundle": "<=0.1.7", + "devgroup/dotplant": "<2020.09.14-dev", + "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "doctrine/annotations": "<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", + "doctrine/common": "<2.4.3|>=2.5,<2.5.1", "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", "doctrine/doctrine-module": "<=0.7.1", - "doctrine/mongodb-odm": ">=1,<1.0.2", - "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", + "doctrine/mongodb-odm": "<1.0.2", + "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<17.0.1|= 12.0.5|>= 3.3.beta1, < 13.0.2", - "dompdf/dompdf": "<2.0.2|= 2.0.2", - "drupal/core": ">=7,<7.96|>=8,<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", - "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "dolibarr/dolibarr": "<=19", + "dompdf/dompdf": "<2.0.4", + "doublethreedigital/guest-entries": "<3.1.2", + "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", + "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", - "elefant/cms": "<1.3.13", + "egroupware/egroupware": "<16.1.20170922", + "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "elijaa/phpmemcacheadmin": "<=1.3", "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", + "enhavo/enhavo-app": "<=0.13.1", "enshrined/svg-sanitize": "<0.15", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", + "evolutioncms/evolution": "<=3.2.3", "exceedone/exment": "<4.4.3|>=5,<5.0.3", - "exceedone/laravel-admin": "= 3.0.0|<2.2.3", - "ezsystems/demobundle": ">=5.4,<5.4.6.1", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", "ezsystems/ez-support-tools": ">=2.2,<2.2.3", - "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", - "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-graphql": ">=1-rc.1,<1.0.13|>=2-beta.1,<2.3.12", - "ezsystems/ezplatform-kernel": "<1.2.5.1|>=1.3,<1.3.26", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", + "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2|>=7,<7.5.30", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1|>=2.5,<2.5.15", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<4.1.1", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2022.8", + "facturascripts/facturascripts": "<=2022.08", + "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", "filegator/filegator": "<7.8", + "filp/whoops": "<2.1.13", + "fineuploader/php-traditional-server": "<=1.2.2", "firebase/php-jwt": "<6", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.7", + "flarum/core": "<1.8.5", + "flarum/flarum": "<0.1.0.0-beta8", + "flarum/framework": "<1.8.5", "flarum/mentions": "<1.6.3", - "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", - "flarum/tags": "<=0.1-beta.13", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", + "floriangaerber/magnesium": "<0.3.1", "fluidtypo3/vhs": "<5.1.1", - "fof/byobu": ">=0.3-beta.2,<1.1.7", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", "fof/upload": "<1.2.3", + "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", "fooman/tcpdf": "<6.2.22", "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<11", + "francoisjacquet/rosariosis": "<=11.5.1", "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", + "friendsofsymfony1/symfony1": ">=1.1,<1.15.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", - "froala/wysiwyg-editor": "<3.2.7", - "froxlor/froxlor": "<2.1", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", + "froxlor/froxlor": "<2.1.9", + "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=3.2", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getgrav/grav": "<1.7.42", - "getkirby/cms": "= 3.8.0|<3.5.8.2|>=3.6,<3.6.6.2|>=3.7,<3.7.5.1", + "getgrav/grav": "<1.7.45", + "getkirby/cms": "<4.1.1", + "getkirby/kirby": "<=2.5.12", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", - "gilacms/gila": "<=1.11.4", + "gilacms/gila": "<=1.15.4", + "gleez/cms": "<=1.3|==2", "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", "google/protobuf": "<3.15", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6", + "grumpydictator/firefly-iii": "<6.1.7", + "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", "harvesthq/chosen": "<1.8.7", - "helloxz/imgurl": "= 2.31|<=2.31", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", "hillelcoren/invoice-ninja": "<5.3.35", "himiklab/yii2-jqgrid-widget": "<1.0.8", "hjue/justwriting": "<=1", @@ -2347,249 +2415,336 @@ "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", "ibexa/admin-ui": ">=4.2,<4.2.3", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/post-install": "<=1.0.4", + "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", + "ilicmiljan/secure-props": ">=1.2,<1.2.2", + "illuminate/auth": "<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "impresscms/impresscms": "<=1.4.3", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", + "imdbphp/imdbphp": "<=5.1.1", + "impresscms/impresscms": "<=1.4.5", + "impresspages/impresspages": "<=1.0.12", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", "innologi/typo3-appointments": "<2.0.6", - "intelliants/subrion": "<=4.2.1", + "intelliants/subrion": "<4.2.2", + "inter-mediator/inter-mediator": "==5.5", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "james-heinrich/getid3": "<1.9.21", + "james-heinrich/phpthumb": "<1.7.12", "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.3.3", + "johnbillion/wp-crontrol": "<1.16.2", + "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": ">=2.5,<3.9.12", "joomla/session": "<1.3.1", "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", + "juzaweb/cms": "<=3.4", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", - "kimai/kimai": "<1.1", - "kitodo/presentation": "<3.1.2", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<2.16", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", - "knplabs/knp-snappy": "<1.4.2", + "knplabs/knp-snappy": "<=1.4.2", + "kohana/core": "<3.3.3", "krayin/laravel-crm": "<1.2.2", "kreait/firebase-php": ">=3.2,<3.8.1", + "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", - "laminas/laminas-diactoros": "<2.18.1|>=2.24,<2.24.2|>=2.25,<2.25.2|= 2.23.0|= 2.22.0|= 2.21.0|= 2.20.0|= 2.19.0", + "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/laravel": ">=5.4,<5.4.22", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "latte/latte": "<2.10.8", - "lavalite/cms": "<=9", + "lavalite/cms": "<=9|==10.1", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", "league/commonmark": "<0.18.3", "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<22.10", + "libreform/libreform": ">=2,<=2.0.8", + "librenms/librenms": "<2017.08.18", "liftkit/database": "<2.13.2", + "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", + "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", - "magento/magento1ce": "<1.9.4.3", - "magento/magento1ee": ">=1,<1.14.4.3", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", + "magento/community-edition": "<2.4.3.0-patch3|>=2.4.4,<2.4.5", + "magento/core": "<=1.9.4.5", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", + "magneto/core": "<1.9.4.4-dev", "maikuolan/phpmussel": ">=1,<1.6", - "mantisbt/mantisbt": "<=2.25.5", + "mainwp/mainwp": "<=4.4.3.3", + "mantisbt/mantisbt": "<2.26.1", "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.3|= 2.13.1", - "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "mautic/core": "<4.4.12|>=5.0.0.0-alpha,<5.0.4", + "mdanter/ecc": "<2", + "mediawiki/core": "<1.36.2", "mediawiki/matomo": "<2.4.3", + "mediawiki/semantic-media-wiki": "<4.0.2", "melisplatform/melis-asset-manager": "<5.0.1", "melisplatform/melis-cms": "<5.0.1", "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", - "microweber/microweber": "<=1.3.4", + "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", + "microsoft/microsoft-graph-beta": "<2.0.1", + "microsoft/microsoft-graph-core": "<2.0.2", + "microweber/microweber": "<=2.0.4", + "mikehaertl/php-shellcommand": "<1.6.1", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", - "modx/revolution": "<= 2.8.3-pl|<2.8", + "modx/revolution": "<=2.8.3.0-patch", "mojo42/jirafeau": "<4.4", + "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.2-rc.2|= 3.11", + "moodle/moodle": "<=4.3.3", + "mos/cimage": "<0.7.19", + "movim/moxl": ">=0.8,<=0.10", + "movingbytes/social-network": "<=1.2.1", + "mpdf/mpdf": "<=7.1.7", + "munkireport/comment": "<4.1", + "munkireport/managedinstalls": "<2.6", + "munkireport/munki_facts": "<1.5", + "munkireport/munkireport": ">=2.5.3,<5.6.3", + "munkireport/reportdata": "<3.5", + "munkireport/softwareupdate": "<1.6", "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", "neoan3-apps/template": "<1.1.1", - "neorazorx/facturascripts": "<2022.4", + "neorazorx/facturascripts": "<2022.04", "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", + "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<3.0.9", + "nilsteampassnet/teampass": "<3.0.10", + "nonfiction/nterchange": "<4.1.1", "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", - "nukeviet/nukeviet": "<4.5.2", + "novaksolutions/infusionsoft-php-sdk": "<1", + "nukeviet/nukeviet": "<4.5.02", "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", + "nzedb/nzedb": "<0.8", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", - "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", - "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", + "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.2", + "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.10.4", - "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", + "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.7", + "opencart/opencart": "<=3.0.3.7|>=4,<4.0.2.3-dev", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<19.4.22|>=20,<20.0.19", - "orchid/platform": ">=9,<9.4.4", - "oro/commerce": ">=4.1,<5.0.6", + "openmage/magento-lts": "<20.5", + "opensolutions/vimbadmin": "<=3.0.15", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", + "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", + "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", + "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", + "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": ">=0,<3", + "pagarme/pagarme-php": "<3", "pagekit/pagekit": "<=1.0.18", + "paragonie/ecc": "<2.0.1", "paragonie/random_compat": "<2", - "passbolt/passbolt_api": "<2.11", + "passbolt/passbolt_api": "<4.6.2", + "paypal/adaptivepayments-sdk-php": "<=3.9.2", + "paypal/invoice-sdk-php": "<=3.9", "paypal/merchant-sdk-php": "<3.12", + "paypal/permissions-sdk-php": "<=3.9.1", "pear/archive_tar": "<1.4.14", + "pear/auth": "<1.2.4", "pear/crypt_gpg": "<1.6.7", + "pear/pear": "<=1.10.1", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "phanan/koel": "<5.1.4", + "phenx/php-svg-lib": "<0.5.2", "php-mod/curl": "<2.3.2", - "phpbb/phpbb": ">=3.2,<3.2.10|>=3.3,<3.3.1", + "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpems/phpems": ">=6,<=6.1.3", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<=3.1.7", + "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpoffice/common": "<0.2.9", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", - "phpservermon/phpservermon": "<=3.5.2", - "phpsysinfo/phpsysinfo": "<3.2.5", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", + "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpservermon/phpservermon": "<3.6", + "phpsysinfo/phpsysinfo": "<3.4.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", - "pimcore/customer-management-framework-bundle": "<3.3.10", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.3.4", + "pimcore/customer-management-framework-bundle": "<4.0.6", "pimcore/data-hub": "<1.2.4", + "pimcore/demo": "<10.3", + "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<10.5.23", - "pixelfed/pixelfed": "<=0.11.4", + "pimcore/pimcore": "<11.1.6.5-dev|>=11.2,<11.2.3", + "pixelfed/pixelfed": "<0.11.11", + "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<4.20.5|>=4.21,<4.21.1|< 4.18.0-ALPHA2|>= 4.0.0-BETA5, < 4.4.2", + "pocketmine/pocketmine-mp": "<5.11.2", + "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockreassurance": "<=5.1.3", "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.0.4", + "prestashop/prestashop": "<8.1.4", "prestashop/productcomments": "<5.0.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4", - "processwire/processwire": "<=3.0.200", - "propel/propel": ">=2-alpha.1,<=2-alpha.7", + "processwire/processwire": "<=3.0.210", + "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.7", + "pterodactyl/panel": "<1.11.6", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", + "pubnub/pubnub": "<6.1", "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6-beta", + "pwweb/laravel-core": "<=0.3.6.0-beta", "pyrocms/pyrocms": "<=3.9.1", + "qcubed/qcubed": "<=3.1.1", + "quickapps/cms": "<=2.0.0.0-beta2", + "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "remdex/livehelperchat": "<3.99", + "redaxo/source": "<=5.15.1", + "remdex/livehelperchat": "<4.29", + "reportico-web/reportico": "<=8.1", + "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<3.0.4", + "robrichards/xmlseclibs": ">=1,<3.0.4", "roots/soil": "<4.1", "rudloff/alltube": "<3.0.3", "s-cart/core": "<6.9", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", + "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.4.20", - "shopware/platform": "<=6.4.20", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<6.5.8.8-dev|>=6.6.0.0-RC1-dev,<6.6.1", + "shopware/platform": "<6.5.8.8-dev|>=6.6.0.0-RC1-dev,<6.6.1", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.14", - "shopware/storefront": "<=6.4.8.1", + "shopware/shopware": "<6.2.3", + "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", - "silverstripe/admin": "<1.12.7", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.12.5", - "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3|= 4.0.0-alpha1", + "silverstripe/framework": "<4.13.39|>=5,<5.1.11", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", - "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", + "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", "silverstripe/subsites": ">=2,<2.6.1", "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", - "silverstripe/userforms": "<3", + "silverstripe/userforms": "<3|>=5,<5.4.2", "silverstripe/versioned-admin": ">=1,<1.11.1", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-security": "==1.6.11", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", + "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", + "slub/slub-events": "<3.0.3", "smarty/smarty": "<3.1.48|>=4,<4.3.1", - "snipe/snipe-it": "<=6.0.14|>= 6.0.0-RC-1, <= 6.0.0-RC-5", + "snipe/snipe-it": "<=6.2.2", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spatie/browsershot": "<3.57.4", - "spipu/html2pdf": "<5.2.4", + "spipu/html2pdf": "<5.2.8", + "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<22.2.3", - "statamic/cms": "<3.2.39|>=3.3,<3.3.2", - "stormpath/sdk": ">=0,<9.9.99", + "ssddanbrown/bookstack": "<22.02.3", + "statamic/cms": "<4.46", + "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<2.1.62", - "subrion/cms": "<=4.2.1", + "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", - "sulu/sulu": "= 2.4.0-RC1|<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8", + "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13", "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", "swag/paypal": "<5.4.4", - "swiftmailer/swiftmailer": ">=4,<5.4.5", + "swiftmailer/swiftmailer": "<6.2.5", + "swiftyedit/swiftyedit": "<1.2", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", - "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", + "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/sylius": "<1.12.16|>=1.13.0.0-alpha1,<1.13.1", "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-seed": "<6.0.3", @@ -2599,7 +2754,7 @@ "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3|= 6.0.3|= 5.4.3|= 5.3.14", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", @@ -2615,80 +2770,111 @@ "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/translation": ">=2,<2.0.17", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/ux-autocomplete": "<2.11.2", "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", - "t3/dce": ">=2.2,<2.6.2", + "symfony/webhook": ">=6.3,<6.3.8", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symphonycms/symphony-2": "<2.6.4", + "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", + "t3s/content-consent": "<1.0.3|>=2,<2.0.2", "tastyigniter/tastyigniter": "<3.3", "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<6.2.22", + "tecnickcom/tcpdf": "<=6.7.4", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1-beta.1,<2.1.3", + "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", - "thinkcmf/thinkcmf": "<=5.1.7", - "thorsten/phpmyfaq": "<3.2-beta", - "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", + "thinkcmf/thinkcmf": "<6.0.8", + "thorsten/phpmyfaq": "<3.2.2", + "tikiwiki/tiki-manager": "<=17.1", + "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", + "tinymce/tinymce": "<7", "tinymighty/wiki-seo": "<1.2.2", - "titon/framework": ">=0,<9.9.99", - "tobiasbg/tablepress": "<= 2.0-RC1", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", "topthink/framework": "<6.0.14", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3", + "torrentpier/torrentpier": "<=2.4.1", "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", - "tribalsystems/zenario": "<=9.3.57595", + "tribalsystems/zenario": "<9.5.60602", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", - "typo3/cms": "<2.0.5|>=3,<3.0.3|>=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": "<8.7.51|>=9,<9.5.40|>=10,<10.4.36|>=11,<11.5.23|>=12,<12.2", + "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-core": "<=8.7.56|>=9,<=9.5.45|>=10,<=10.4.42|>=11,<=11.5.34|>=12,<=12.4.10|==13", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/html-sanitizer": ">=1,<1.5|>=2,<2.1.1", + "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", - "unisharp/laravel-filemanager": "<=2.5.1", + "uasoft-indonesia/badaso": "<=2.9.7", + "unisharp/laravel-filemanager": "<2.6.4", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "uvdesk/community-skeleton": "<=1.1.1", + "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", - "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", + "verbb/comments": "<1.5.5", + "verbb/image-resizer": "<2.0.9", + "verbb/knock-knock": "<1.2.8", + "verot/class.upload.php": "<=2.1.6", + "villagedefrance/opencart-overclocked": "<=1.11.1", "vova07/yii2-fileapi-widget": "<0.1.9", "vrana/adminer": "<4.8.1", + "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.5.4", + "wallabag/wallabag": "<2.6.7", "wanglelecc/laracms": "<=1.0.3", "web-auth/webauthn-framework": ">=3.3,<3.3.4", + "web-feet/coastercms": "==5.5", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "wintercms/winter": "<1.0.475|>=1.1,<1.1.10|>=1.2,<1.2.1", + "winter/wn-backend-module": "<1.2.4", + "winter/wn-dusk-plugin": "<2.1", + "winter/wn-system-module": "<1.2.4", + "wintercms/winter": "<=1.2.3", "woocommerce/woocommerce": "<6.6", - "wp-cli/wp-cli": "<2.5", - "wp-graphql/wp-graphql": "<0.3.5", + "wp-cli/wp-cli": ">=0.12,<2.5", + "wp-graphql/wp-graphql": "<=1.14.5", + "wp-premium/gravityforms": "<2.4.21", "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", + "wpglobus/wpglobus": "<=1.9.6", "wwbn/avideo": "<=12.4", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", + "yab/quarx": "<2.4.5", "yeswiki/yeswiki": "<4.1", "yetiforce/yetiforce-crm": "<=6.4", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.27", + "yiisoft/yii": "<1.1.29", "yiisoft/yii2": "<2.0.38", + "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<2.0.43", "yiisoft/yii2-elasticsearch": "<2.0.5", @@ -2698,11 +2884,13 @@ "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", "yourls/yourls": "<=1.8.2", + "yuan1994/tpadmin": "<=1.3.12", + "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", "zendframework/zend-diactoros": "<1.8.4", "zendframework/zend-feed": "<2.10.3", @@ -2710,7 +2898,7 @@ "zendframework/zend-http": "<2.8.1", "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", - "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", "zendframework/zend-validator": ">=2.3,<2.3.6", @@ -2718,13 +2906,22 @@ "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", "zendframework/zendframework": "<=3", "zendframework/zendframework1": "<1.12.20", - "zendframework/zendopenid": ">=2,<2.0.2", + "zendframework/zendopenid": "<2.0.2", + "zendframework/zendrest": "<2.0.2", + "zendframework/zendservice-amazon": "<2.0.3", + "zendframework/zendservice-api": "<1", + "zendframework/zendservice-audioscrobbler": "<2.0.2", + "zendframework/zendservice-nirvanix": "<2.0.2", + "zendframework/zendservice-slideshare": "<2.0.2", + "zendframework/zendservice-technorati": "<2.0.2", + "zendframework/zendservice-windowsazure": "<2.0.2", "zendframework/zendxml": ">=1,<1.0.1", + "zenstruck/collection": "<0.2.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<6.0.22" + "zoujingli/thinkadmin": "<=6.1.53" }, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -2761,20 +2958,20 @@ "type": "tidelift" } ], - "time": "2023-06-16T20:04:13+00:00" + "time": "2024-05-10T22:04:19+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -2809,7 +3006,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -2817,7 +3014,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -3006,20 +3203,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -3051,7 +3248,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -3059,20 +3256,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -3117,7 +3314,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -3125,7 +3322,7 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", @@ -3192,16 +3389,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -3257,7 +3454,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -3265,20 +3462,20 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -3321,7 +3518,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -3329,24 +3526,24 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -3378,7 +3575,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -3386,7 +3583,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -3565,16 +3762,16 @@ }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -3586,7 +3783,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3607,8 +3804,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -3616,7 +3812,7 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", @@ -3729,16 +3925,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -3767,7 +3963,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -3775,7 +3971,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], @@ -3794,5 +3990,5 @@ "ext-fileinfo": "*" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/package-lock.json b/package-lock.json index fe8ff767..879c1d5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,60 +47,61 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -111,14 +112,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -126,63 +127,60 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz", - "integrity": "sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", - "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz", - "integrity": "sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", + "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.21.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6", - "semver": "^6.3.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.24.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -192,14 +190,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz", - "integrity": "sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -209,130 +207,128 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz", - "integrity": "sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", + "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -342,132 +338,132 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz", - "integrity": "sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", + "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/helper-function-name": "^7.23.0", + "@babel/template": "^7.24.0", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.24.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -476,13 +472,29 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", + "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -492,14 +504,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -508,232 +520,27 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, "engines": { "node": ">=6.9.0" }, @@ -741,22 +548,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -821,12 +612,27 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -961,13 +767,47 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", - "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" @@ -977,14 +817,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -994,12 +834,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1009,12 +849,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", + "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1023,20 +863,52 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", + "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-split-export-declaration": "^7.24.5", "globals": "^11.1.0" }, "engines": { @@ -1047,13 +919,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", - "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/template": "^7.20.7" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1063,12 +935,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", + "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1078,13 +950,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1094,12 +966,28 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1109,13 +997,29 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1125,12 +1029,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", - "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1140,14 +1045,30 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1157,12 +1078,28 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1172,12 +1109,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1187,13 +1124,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1203,14 +1140,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz", - "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-simple-access": "^7.21.5" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1220,15 +1157,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1238,13 +1175,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1254,13 +1191,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1270,12 +1207,62 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", + "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1285,13 +1272,46 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", + "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1301,12 +1321,46 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", + "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", + "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1316,12 +1370,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1331,13 +1385,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", - "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "regenerator-transform": "^0.15.1" + "@babel/helper-plugin-utils": "^7.24.0", + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1347,12 +1401,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1362,12 +1416,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1377,13 +1431,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1393,12 +1447,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1408,12 +1462,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1423,12 +1477,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", + "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1438,12 +1492,28 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", - "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1453,13 +1523,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1468,39 +1538,44 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", - "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", + "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1511,45 +1586,61 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.21.5", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.21.5", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.5", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.21.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.21.5", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.5", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.5", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.5", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.5", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.5", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.5", + "@babel/plugin-transform-parameters": "^7.24.5", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.5", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.5", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1559,19 +1650,17 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/regjsgen": { @@ -1581,46 +1670,46 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", + "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1628,13 +1717,13 @@ } }, "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1642,104 +1731,104 @@ } }, "node_modules/@fortawesome/fontawesome-free": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz", - "integrity": "sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz", + "integrity": "sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fullcalendar/core": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.6.tgz", - "integrity": "sha512-Q/3pWgOv7qr/eVpuDz+05jxJZSg7Fdwh4XgQP8DlJFLp5aLlOiiKdkTUIO1BX7clQtYTm8P0v7FqMKbsFiQInw==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.11.tgz", + "integrity": "sha512-TjG7c8sUz+Vkui2FyCNJ+xqyu0nq653Ibe99A66LoW95oBo6tVhhKIaG1Wh0GVKymYiqAQN/OEdYTuj4ay27kA==", "dependencies": { "preact": "~10.12.1" } }, "node_modules/@fullcalendar/daygrid": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.6.tgz", - "integrity": "sha512-HKxprePWXRyg1Shn7p0CWgggFZVwvs+Pg0Z9uSvx6a58wP1yTbOoJHhSVv5CDsfjnq1a0y6DsJbPP/V2LDl6bg==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.11.tgz", + "integrity": "sha512-hF5jJB7cgUIxWD5MVjj8IU407HISyLu7BWXcEIuTytkfr8oolOXeCazqnnjmRbnFOncoJQVstTtq6SIhaT32Xg==", "peerDependencies": { - "@fullcalendar/core": "~6.1.6" + "@fullcalendar/core": "~6.1.11" } }, "node_modules/@fullcalendar/interaction": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.6.tgz", - "integrity": "sha512-6TjKbDHOkF3C9hIzIhxiTX5FCmNcaCeRk5CeKXHZiIi1Y8gQwIkUkwcZps5uj7PIvb3wNVw8FbF+RNRoloPUqQ==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.11.tgz", + "integrity": "sha512-ynOKjzuPwEAMgTQ6R/Z2zvzIIqG4p8/Qmnhi1q0vzPZZxSIYx3rlZuvpEK2WGBZZ1XEafDOP/LGfbWoNZe+qdg==", "peerDependencies": { - "@fullcalendar/core": "~6.1.6" + "@fullcalendar/core": "~6.1.11" } }, "node_modules/@fullcalendar/list": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.6.tgz", - "integrity": "sha512-1zWDrVqQxQl/DLHIhLtig1iz/Gnh7hyOe4gEHSg169Om/+wYf8MRgFy8bGBqIFP2eS3Rk7mY3HVLvrkBxmR+wg==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.11.tgz", + "integrity": "sha512-9Qx8uvik9pXD12u50FiHwNzlHv4wkhfsr+r03ycahW7vEeIAKCsIZGTkUfFP+96I5wHihrfLazu1cFQG4MPiuw==", "peerDependencies": { - "@fullcalendar/core": "~6.1.6" + "@fullcalendar/core": "~6.1.11" } }, "node_modules/@fullcalendar/moment": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@fullcalendar/moment/-/moment-6.1.6.tgz", - "integrity": "sha512-MIGRk1rpICvrU21Ytr1TzVadpBLtoSxsYDiRDo5yWtcKY9vOzCiPp/E/gV9s+A/VH8pzXxyNPRq7xeadmjqkoQ==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@fullcalendar/moment/-/moment-6.1.11.tgz", + "integrity": "sha512-hBZtrP1C1IPrmEg26pY7Gdlp6iyKF8WekVnXkZ4esL9ZwpmFDdrt1ATWzE+21/qycE5h+/hWIzaoPnag+qUKrQ==", "peerDependencies": { - "@fullcalendar/core": "~6.1.6", + "@fullcalendar/core": "~6.1.11", "moment": "^2.29.1" } }, "node_modules/@fullcalendar/multimonth": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@fullcalendar/multimonth/-/multimonth-6.1.6.tgz", - "integrity": "sha512-e/BGKTbVC00QFwkk3olKEYzkV+8sTFCxy6/oKm2CCfDKoWuu9jkCf5fgGhiflZ0Y7V0CLQzADuuZsFIxz9DDJA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@fullcalendar/multimonth/-/multimonth-6.1.11.tgz", + "integrity": "sha512-7DbPC+AAlaKnquGVdw1Z85Q3nSZ4GZ1NcVIk4k7bLnqDlntwHPPsrDlSIzUWKcN0q5/u7jQHm4PU1m3LAl70Sg==", "dependencies": { - "@fullcalendar/daygrid": "~6.1.6" + "@fullcalendar/daygrid": "~6.1.11" }, "peerDependencies": { - "@fullcalendar/core": "~6.1.6" + "@fullcalendar/core": "~6.1.11" } }, "node_modules/@fullcalendar/timegrid": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.6.tgz", - "integrity": "sha512-WqiGGmzNJeeIt4QjXuBlYTGHp4B+OUb7pYwREt1fer+9keNyG7dd48367pBdia8USk9B3Ep2oHC0aGypJGUFdA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.11.tgz", + "integrity": "sha512-0seUHK/ferH89IeuCvV4Bib0zWjgK0nsptNdmAc9wDBxD/d9hm5Mdti0URJX6bDoRtsSfRDu5XsRcrzwoc+AUQ==", "dependencies": { - "@fullcalendar/daygrid": "~6.1.6" + "@fullcalendar/daygrid": "~6.1.11" }, "peerDependencies": { - "@fullcalendar/core": "~6.1.6" + "@fullcalendar/core": "~6.1.11" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1752,21 +1841,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1803,9 +1886,9 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -1958,42 +2041,17 @@ "node": ">=0.10.0" } }, - "node_modules/anymatch/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/anymatch/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/anymatch/node_modules/is-extendable": { @@ -2237,9 +2295,9 @@ } }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "node_modules/async-done": { @@ -2430,42 +2488,42 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-transform-inline-consecutive-adds": { @@ -2627,51 +2685,17 @@ "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/binary-extensions": { @@ -2694,9 +2718,9 @@ } }, "node_modules/bootstrap": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", "funding": [ { "type": "github", @@ -2708,7 +2732,7 @@ } ], "peerDependencies": { - "@popperjs/core": "^2.11.6" + "@popperjs/core": "^2.11.8" } }, "node_modules/brace-expansion": { @@ -2743,9 +2767,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -2755,13 +2779,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -2809,13 +2837,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2831,9 +2865,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001482", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz", - "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==", + "version": "1.0.30001617", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", + "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", "dev": true, "funding": [ { @@ -3073,10 +3107,13 @@ } }, "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -3100,9 +3137,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/cookieconsent": { @@ -3130,12 +3167,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", - "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", "dev": true, "dependencies": { - "browserslist": "^4.21.5" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -3149,13 +3186,16 @@ "dev": true }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dev": true, "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/debug": { @@ -3214,12 +3254,30 @@ "node": ">= 0.10" } }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -3320,9 +3378,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.380", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz", - "integrity": "sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg==", + "version": "1.4.763", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.763.tgz", + "integrity": "sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ==", "dev": true }, "node_modules/end-of-stream": { @@ -3343,15 +3401,37 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "dev": true, "hasInstallScript": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -3370,13 +3450,16 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dev": true, "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/es6-weak-map": { @@ -3392,9 +3475,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -3409,6 +3492,21 @@ "node": ">=0.8.0" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3418,6 +3516,16 @@ "node": ">=0.10.0" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -3472,12 +3580,6 @@ "type": "^2.7.2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3527,51 +3629,17 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/fancy-log": { @@ -3590,9 +3658,9 @@ } }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3612,9 +3680,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -3696,42 +3764,17 @@ "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/findup-sync/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/findup-sync/node_modules/is-extendable": { @@ -3877,9 +3920,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -3929,23 +3972,26 @@ } }, "node_modules/fullcalendar": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/fullcalendar/-/fullcalendar-6.1.6.tgz", - "integrity": "sha512-lVdpPmL5cGXFO6IF/HCMYezQ82mg3G1FjIH9UOsXYzCvnFymFwDNGHCRrhtgPnmjIkC2CNTqSwf4RzXoVYUoSA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/fullcalendar/-/fullcalendar-6.1.11.tgz", + "integrity": "sha512-OOlx/+yFn9k5LnucRzcDmShONBecOVKNN6HHWe8jl7hGzQBmkxO+iD6eBokO6p24EY1PjATqhZkhJqHiCUgx3A==", "dependencies": { - "@fullcalendar/core": "~6.1.6", - "@fullcalendar/daygrid": "~6.1.6", - "@fullcalendar/interaction": "~6.1.6", - "@fullcalendar/list": "~6.1.6", - "@fullcalendar/multimonth": "~6.1.6", - "@fullcalendar/timegrid": "~6.1.6" + "@fullcalendar/core": "~6.1.11", + "@fullcalendar/daygrid": "~6.1.11", + "@fullcalendar/interaction": "~6.1.11", + "@fullcalendar/list": "~6.1.11", + "@fullcalendar/multimonth": "~6.1.11", + "@fullcalendar/timegrid": "~6.1.11" } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -3963,14 +4009,19 @@ "dev": true }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4155,6 +4206,18 @@ "node": ">= 0.10" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4503,18 +4566,6 @@ "node": ">= 0.10" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -4546,12 +4597,24 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4608,6 +4671,18 @@ "node": ">=0.10.0" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -4627,9 +4702,9 @@ "dev": true }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -4642,9 +4717,9 @@ "dev": true }, "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, "node_modules/indent-string": { @@ -4719,27 +4794,15 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, "node_modules/is-arrayish": { @@ -4767,53 +4830,40 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/is-extendable": { @@ -5006,9 +5056,9 @@ } }, "node_modules/jquery": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", - "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "node_modules/jquery-jeditable": { "version": "2.0.19", @@ -5363,42 +5413,17 @@ "node": ">= 0.10" } }, - "node_modules/matchdep/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/matchdep/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/matchdep/node_modules/is-extendable": { @@ -5615,17 +5640,17 @@ } }, "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { "node": "*" } }, "node_modules/moment-timezone": { - "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", "dependencies": { "moment": "^2.29.4" }, @@ -5649,9 +5674,9 @@ } }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", "dev": true, "optional": true }, @@ -5703,42 +5728,17 @@ "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/nanomatch/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/nanomatch/node_modules/is-extendable": { @@ -5781,9 +5781,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/nopt": { @@ -5814,9 +5814,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -5900,13 +5900,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -6292,9 +6292,9 @@ } }, "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -6458,42 +6458,17 @@ "node": ">=0.10.0" } }, - "node_modules/readdirp/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/readdirp/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/readdirp/node_modules/is-extendable": { @@ -6572,9 +6547,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -6584,15 +6559,15 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -6776,12 +6751,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6897,9 +6872,9 @@ } }, "node_modules/sass": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz", - "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", + "version": "1.77.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.1.tgz", + "integrity": "sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -6927,12 +6902,15 @@ } }, "node_modules/sass/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/sass/node_modules/braces": { @@ -6948,16 +6926,10 @@ } }, "node_modules/sass/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -6970,6 +6942,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -6987,9 +6962,9 @@ } }, "node_modules/sass/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -7051,9 +7026,9 @@ "integrity": "sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A==" }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -7077,6 +7052,23 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -7164,51 +7156,17 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/snapdragon-util": { @@ -7269,9 +7227,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7318,9 +7276,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -7334,9 +7292,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/split-string": { @@ -7417,9 +7375,9 @@ "dev": true }, "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", "dev": true }, "node_modules/string_decoder": { @@ -7687,42 +7645,17 @@ "node": ">=0.10.0" } }, - "node_modules/to-regex/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/to-regex/node_modules/is-extendable": { @@ -7749,15 +7682,6 @@ "node": ">=0.10.0" } }, - "node_modules/to-regex/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", @@ -7783,17 +7707,17 @@ } }, "node_modules/trumbowyg": { - "version": "2.27.3", - "resolved": "https://registry.npmjs.org/trumbowyg/-/trumbowyg-2.27.3.tgz", - "integrity": "sha512-mEFhPSrF3dobjnGSSW7BfnmX5Pnv9T4KIoATOHxFOHtb1exE0L2hNPxCr6Bh4iFRJQD4UErleyKCapKf2yImKw==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/trumbowyg/-/trumbowyg-2.28.0.tgz", + "integrity": "sha512-K4KX6psV+hUt03Y3RNdQM5Y+JLfZOUliNnCz5lm12Llfhwvx0P0geBsM0w9ZHeX5g8q7d2MC5X7sPOwGv0Q7Kw==", "peerDependencies": { "jquery": ">=1.8" } }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true }, "node_modules/typedarray": { @@ -7907,9 +7831,9 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -7974,9 +7898,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", + "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", "dev": true, "funding": [ { @@ -7993,7 +7917,7 @@ } ], "dependencies": { - "escalade": "^3.1.1", + "escalade": "^3.1.2", "picocolors": "^1.0.0" }, "bin": { @@ -8119,6 +8043,12 @@ "node": ">= 0.10" } }, + "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/vinyl-sourcemap/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", From 949a73ad58ae045d56eac5276fee7973154f0ea5 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 15:02:12 +0200 Subject: [PATCH 44/72] Make the search method order_by and offset use the provided values --- application/controllers/Admins.php | 4 ++-- application/controllers/Appointments.php | 4 ++-- application/controllers/Blocked_periods.php | 4 ++-- application/controllers/Customers.php | 4 ++-- application/controllers/Providers.php | 4 ++-- application/controllers/Secretaries.php | 4 ++-- application/controllers/Service_categories.php | 4 ++-- application/controllers/Services.php | 4 ++-- application/controllers/Unavailabilities.php | 4 ++-- application/controllers/Webhooks.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/application/controllers/Admins.php b/application/controllers/Admins.php index eea99651..e7a3b270 100644 --- a/application/controllers/Admins.php +++ b/application/controllers/Admins.php @@ -91,11 +91,11 @@ class Admins extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $admins = $this->admins_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Appointments.php b/application/controllers/Appointments.php index e4241b22..3376a734 100644 --- a/application/controllers/Appointments.php +++ b/application/controllers/Appointments.php @@ -62,11 +62,11 @@ class Appointments extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $appointments = $this->appointments_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Blocked_periods.php b/application/controllers/Blocked_periods.php index f56a4f21..570afa7c 100644 --- a/application/controllers/Blocked_periods.php +++ b/application/controllers/Blocked_periods.php @@ -90,11 +90,11 @@ class Blocked_periods extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $blocked_periods = $this->blocked_periods_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Customers.php b/application/controllers/Customers.php index 2985d270..b4ff6c8e 100644 --- a/application/controllers/Customers.php +++ b/application/controllers/Customers.php @@ -149,11 +149,11 @@ class Customers extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $customers = $this->customers_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Providers.php b/application/controllers/Providers.php index 67552880..44c69a4f 100644 --- a/application/controllers/Providers.php +++ b/application/controllers/Providers.php @@ -104,11 +104,11 @@ class Providers extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $providers = $this->providers_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Secretaries.php b/application/controllers/Secretaries.php index 65ffc1ae..15288a07 100644 --- a/application/controllers/Secretaries.php +++ b/application/controllers/Secretaries.php @@ -100,11 +100,11 @@ class Secretaries extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $secretaries = $this->secretaries_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Service_categories.php b/application/controllers/Service_categories.php index ad53e542..fd831cd2 100644 --- a/application/controllers/Service_categories.php +++ b/application/controllers/Service_categories.php @@ -87,11 +87,11 @@ class Service_categories extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $service_categories = $this->service_categories_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Services.php b/application/controllers/Services.php index aff2aa96..c67a6514 100644 --- a/application/controllers/Services.php +++ b/application/controllers/Services.php @@ -88,11 +88,11 @@ class Services extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $services = $this->services_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Unavailabilities.php b/application/controllers/Unavailabilities.php index ad19fd67..347eee6c 100644 --- a/application/controllers/Unavailabilities.php +++ b/application/controllers/Unavailabilities.php @@ -47,11 +47,11 @@ class Unavailabilities extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $unavailabilities = $this->unavailabilities_model->search($keyword, $limit, $offset, $order_by); diff --git a/application/controllers/Webhooks.php b/application/controllers/Webhooks.php index 3314d7f4..ba03c63d 100644 --- a/application/controllers/Webhooks.php +++ b/application/controllers/Webhooks.php @@ -106,11 +106,11 @@ class Webhooks extends EA_Controller $keyword = request('keyword', ''); - $order_by = 'update_datetime DESC'; + $order_by = request('order_by', 'update_datetime DESC'); $limit = request('limit', 1000); - $offset = 0; + $offset = (int) request('offset', '0'); $webhooks = $this->webhooks_model->search($keyword, $limit, $offset, $order_by); From 37bfc08641ebe19b9e9e13c5dfd0b3c079fae698 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 15:21:41 +0200 Subject: [PATCH 45/72] Create constant for future month search --- assets/js/http/booking_http_client.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/assets/js/http/booking_http_client.js b/assets/js/http/booking_http_client.js index 8b7dfe7a..a5bba352 100755 --- a/assets/js/http/booking_http_client.js +++ b/assets/js/http/booking_http_client.js @@ -23,6 +23,8 @@ App.Http.Booking = (function () { const $captchaHint = $('#captcha-hint'); const $captchaTitle = $('.captcha-title'); + const MONTH_SEARCH_LIMIT = 2; // Months in the future + const moment = window.moment; let unavailableDatesBackup; @@ -263,32 +265,41 @@ App.Http.Booking = (function () { data: data, dataType: 'json', }).done((response) => { + // In case the current month has no availability, the app will try the next one or the one after in order to + // find a date that has at least one slot + if (response.is_month_unavailable) { if (!searchedMonthStart) { searchedMonthStart = selectedDateString; } - if (searchedMonthCounter >= 2) { + if (searchedMonthCounter >= MONTH_SEARCH_LIMIT) { // Need to mark the current month dates as unavailable const selectedDateMoment = moment(searchedMonthStart); const startOfMonthMoment = selectedDateMoment.clone().startOf('month'); const endOfMonthMoment = selectedDateMoment.clone().endOf('month'); const unavailableDates = []; + while (startOfMonthMoment.isSameOrBefore(endOfMonthMoment)) { unavailableDates.push(startOfMonthMoment.format('YYYY-MM-DD')); startOfMonthMoment.add(monthChangeStep, 'days'); // Move to the next day } + applyUnavailableDates(unavailableDates, searchedMonthStart, true); searchedMonthStart = undefined; searchedMonthCounter = 0; + return; // Stop searching } searchedMonthCounter++; + const selectedDateMoment = moment(selectedDateString); selectedDateMoment.add(1, 'month'); + const nextSelectedDate = selectedDateMoment.format('YYYY-MM-DD'); getUnavailableDates(providerId, serviceId, nextSelectedDate, monthChangeStep); + return; } From c33ebeded296813a3dcd6cb62b56abd8fef662d1 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 15:33:14 +0200 Subject: [PATCH 46/72] Change the opacity of the datepicker while loading unavailable dates --- assets/js/http/booking_http_client.js | 87 +++++++++++++++------------ assets/js/pages/booking.js | 2 + 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/assets/js/http/booking_http_client.js b/assets/js/http/booking_http_client.js index a5bba352..61fd1a1b 100755 --- a/assets/js/http/booking_http_client.js +++ b/assets/js/http/booking_http_client.js @@ -17,6 +17,7 @@ * Old Name: FrontendBookApi */ App.Http.Booking = (function () { + const $selectDate = $('#select-date'); const $selectService = $('#select-service'); const $selectProvider = $('#select-provider'); const $availableHours = $('#available-hours'); @@ -264,49 +265,53 @@ App.Http.Booking = (function () { type: 'GET', data: data, dataType: 'json', - }).done((response) => { - // In case the current month has no availability, the app will try the next one or the one after in order to - // find a date that has at least one slot + }) + .done((response) => { + // In case the current month has no availability, the app will try the next one or the one after in order to + // find a date that has at least one slot - if (response.is_month_unavailable) { - if (!searchedMonthStart) { - searchedMonthStart = selectedDateString; - } - - if (searchedMonthCounter >= MONTH_SEARCH_LIMIT) { - // Need to mark the current month dates as unavailable - const selectedDateMoment = moment(searchedMonthStart); - const startOfMonthMoment = selectedDateMoment.clone().startOf('month'); - const endOfMonthMoment = selectedDateMoment.clone().endOf('month'); - const unavailableDates = []; - - while (startOfMonthMoment.isSameOrBefore(endOfMonthMoment)) { - unavailableDates.push(startOfMonthMoment.format('YYYY-MM-DD')); - startOfMonthMoment.add(monthChangeStep, 'days'); // Move to the next day + if (response.is_month_unavailable) { + if (!searchedMonthStart) { + searchedMonthStart = selectedDateString; } - applyUnavailableDates(unavailableDates, searchedMonthStart, true); - searchedMonthStart = undefined; - searchedMonthCounter = 0; + if (searchedMonthCounter >= MONTH_SEARCH_LIMIT) { + // Need to mark the current month dates as unavailable + const selectedDateMoment = moment(searchedMonthStart); + const startOfMonthMoment = selectedDateMoment.clone().startOf('month'); + const endOfMonthMoment = selectedDateMoment.clone().endOf('month'); + const unavailableDates = []; - return; // Stop searching + while (startOfMonthMoment.isSameOrBefore(endOfMonthMoment)) { + unavailableDates.push(startOfMonthMoment.format('YYYY-MM-DD')); + startOfMonthMoment.add(monthChangeStep, 'days'); // Move to the next day + } + + applyUnavailableDates(unavailableDates, searchedMonthStart, true); + searchedMonthStart = undefined; + searchedMonthCounter = 0; + + return; // Stop searching + } + + searchedMonthCounter++; + + const selectedDateMoment = moment(selectedDateString); + selectedDateMoment.add(1, 'month'); + + const nextSelectedDate = selectedDateMoment.format('YYYY-MM-DD'); + getUnavailableDates(providerId, serviceId, nextSelectedDate, monthChangeStep); + + return; } - searchedMonthCounter++; - - const selectedDateMoment = moment(selectedDateString); - selectedDateMoment.add(1, 'month'); - - const nextSelectedDate = selectedDateMoment.format('YYYY-MM-DD'); - getUnavailableDates(providerId, serviceId, nextSelectedDate, monthChangeStep); - - return; - } - - unavailableDatesBackup = response; - selectedDateStringBackup = selectedDateString; - applyUnavailableDates(response, selectedDateString, true); - }); + unavailableDatesBackup = response; + selectedDateStringBackup = selectedDateString; + applyUnavailableDates(response, selectedDateString, true); + }) + .fail(() => { + $selectDate.parent().fadeTo(400, 1); + }); } function applyPreviousUnavailableDates() { @@ -316,6 +321,8 @@ App.Http.Booking = (function () { function applyUnavailableDates(unavailableDates, selectedDateString, setDate) { setDate = setDate || false; + $selectDate.parent().fadeTo(400, 1); + processingUnavailableDates = true; // Select first enabled date. @@ -329,7 +336,7 @@ App.Http.Booking = (function () { } // Grey out unavailable dates. - $('#select-date')[0]._flatpickr.set( + $selectDate[0]._flatpickr.set( 'disable', unavailableDates.map((unavailableDate) => new Date(unavailableDate)), ); @@ -339,7 +346,7 @@ App.Http.Booking = (function () { const currentDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), i); if (unavailableDates.indexOf(moment(currentDate).format('YYYY-MM-DD')) === -1) { - App.Utils.UI.setDateTimePickerValue($('#select-date'), currentDate); + App.Utils.UI.setDateTimePickerValue($selectDate, currentDate); getAvailableHours(moment(currentDate).format('YYYY-MM-DD')); break; } @@ -356,7 +363,7 @@ App.Http.Booking = (function () { !unavailableDates.includes(dateQueryParam) && dateQueryParamMoment.format('YYYY-MM') === selectedDateMoment.format('YYYY-MM') ) { - App.Utils.UI.setDateTimePickerValue($('#select-date'), dateQueryParamMoment.toDate()); + App.Utils.UI.setDateTimePickerValue($selectDate, dateQueryParamMoment.toDate()); } } diff --git a/assets/js/pages/booking.js b/assets/js/pages/booking.js index 608b5841..23d442d2 100644 --- a/assets/js/pages/booking.js +++ b/assets/js/pages/booking.js @@ -111,6 +111,8 @@ App.Pages.Booking = (function () { }, onMonthChange: (selectedDates, dateStr, instance) => { + $selectDate.parent().fadeTo(400, 0.3); // Change opacity during loading + if (monthTimeout) { clearTimeout(monthTimeout); } From 9007e977faa5c35bc412208198950c15b4848efb Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 16:12:14 +0200 Subject: [PATCH 47/72] The webhook actions are optional --- application/models/Webhooks_model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/models/Webhooks_model.php b/application/models/Webhooks_model.php index e7eb1680..de190b26 100644 --- a/application/models/Webhooks_model.php +++ b/application/models/Webhooks_model.php @@ -72,7 +72,7 @@ class Webhooks_model extends EA_Model */ public function validate(array $webhook): void { - if (empty($webhook['name']) || empty($webhook['url']) || empty($webhook['actions'])) { + if (empty($webhook['name']) || empty($webhook['url'])) { throw new InvalidArgumentException('Not all required fields are provided: ' . print_r($webhook, true)); } } From e4ef2da4380f84845fbc5e646f510ba38b618ef6 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 16:13:00 +0200 Subject: [PATCH 48/72] Expose the internal JS functions so that they be overriden --- assets/js/pages/admins.js | 43 +++++++++++++------------ assets/js/pages/blocked_periods.js | 45 +++++++++++++++------------ assets/js/pages/booking.js | 21 +++++++------ assets/js/pages/customers.js | 41 +++++++++++++----------- assets/js/pages/providers.js | 43 +++++++++++++------------ assets/js/pages/secretaries.js | 38 ++++++++++++---------- assets/js/pages/service_categories.js | 33 +++++++++++--------- assets/js/pages/services.js | 43 +++++++++++++------------ assets/js/pages/webhooks.js | 41 +++++++++++++----------- 9 files changed, 191 insertions(+), 157 deletions(-) diff --git a/assets/js/pages/admins.js b/assets/js/pages/admins.js index d1c4c04a..3ae8c35c 100644 --- a/assets/js/pages/admins.js +++ b/assets/js/pages/admins.js @@ -92,8 +92,8 @@ App.Pages.Admins = (function () { event.preventDefault(); const key = $('#filter-admins .key').val(); $('#filter-admins .selected').removeClass('selected'); - resetForm(); - filter(key); + App.Pages.Admins.resetForm(); + App.Pages.Admins.filter(key); }); /** @@ -111,7 +111,7 @@ App.Pages.Admins = (function () { const admin = filterResults.find((filterResult) => Number(filterResult.id) === Number(adminId)); - display(admin); + App.Pages.Admins.display(admin); $('#filter-admins .selected').removeClass('selected'); $(event.currentTarget).addClass('selected'); $('#edit-admin, #delete-admin').prop('disabled', false); @@ -121,7 +121,7 @@ App.Pages.Admins = (function () { * Event: Add New Admin Button "Click" */ $admins.on('click', '#add-admin', () => { - resetForm(); + App.Pages.Admins.resetForm(); $admins.find('.add-edit-delete-group').hide(); $admins.find('.save-cancel-group').show(); $admins.find('.record-details').find('input, select, textarea').prop('disabled', false); @@ -160,7 +160,7 @@ App.Pages.Admins = (function () { { text: lang('delete'), click: (event, messageModal) => { - remove(adminId); + App.Pages.Admins.remove(adminId); messageModal.dispose(); }, }, @@ -203,11 +203,11 @@ App.Pages.Admins = (function () { admin.id = $id.val(); } - if (!validate()) { + if (!App.Pages.Admins.validate()) { return; } - save(admin); + App.Pages.Admins.save(admin); }); /** @@ -218,10 +218,10 @@ App.Pages.Admins = (function () { $admins.on('click', '#cancel-admin', () => { const id = $id.val(); - resetForm(); + App.Pages.Admins.resetForm(); if (id) { - select(id, true); + App.Pages.Admins.select(id, true); } }); } @@ -235,9 +235,9 @@ App.Pages.Admins = (function () { function save(admin) { App.Http.Admins.save(admin).then((response) => { App.Layouts.Backend.displayNotification(lang('admin_saved')); - resetForm(); + App.Pages.Admins.resetForm(); $('#filter-admins .key').val(''); - filter('', response.id, true); + App.Pages.Admins.filter('', response.id, true); }); } @@ -249,8 +249,8 @@ App.Pages.Admins = (function () { function remove(id) { App.Http.Admins.destroy(id).then(() => { App.Layouts.Backend.displayNotification(lang('admin_deleted')); - resetForm(); - filter($('#filter-admins .key').val()); + App.Pages.Admins.resetForm(); + App.Pages.Admins.filter($('#filter-admins .key').val()); }); } @@ -386,7 +386,7 @@ App.Pages.Admins = (function () { $filterAdmins.find('.results').empty(); response.forEach((admin) => { - $filterAdmins.find('.results').append(getFilterHtml(admin)).append($('
')); + $filterAdmins.find('.results').append(App.Pages.Admins.getFilterHtml(admin)).append($('
')); }); if (!response.length) { @@ -402,13 +402,13 @@ App.Pages.Admins = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.Admins.filter(keyword, selectId, show); }, }).appendTo('#filter-admins .results'); } if (selectId) { - select(selectId, show); + App.Pages.Admins.select(selectId, show); } }); } @@ -462,7 +462,7 @@ App.Pages.Admins = (function () { if (show) { const admin = filterResults.find((filterResult) => Number(filterResult.id) === Number(id)); - display(admin); + App.Pages.Admins.display(admin); $('#edit-admin, #delete-admin').prop('disabled', false); } @@ -472,9 +472,9 @@ App.Pages.Admins = (function () { * Initialize the module. */ function initialize() { - resetForm(); - filter(''); - addEventListeners(); + App.Pages.Admins.resetForm(); + App.Pages.Admins.filter(''); + App.Pages.Admins.addEventListeners(); } document.addEventListener('DOMContentLoaded', initialize); @@ -483,8 +483,11 @@ App.Pages.Admins = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); diff --git a/assets/js/pages/blocked_periods.js b/assets/js/pages/blocked_periods.js index be225d64..3356f98d 100644 --- a/assets/js/pages/blocked_periods.js +++ b/assets/js/pages/blocked_periods.js @@ -41,8 +41,8 @@ App.Pages.BlockedPeriods = (function () { event.preventDefault(); const key = $('#filter-blocked-periods .key').val(); $('.selected').removeClass('selected'); - resetForm(); - filter(key); + App.Pages.BlockedPeriods.resetForm(); + App.Pages.BlockedPeriods.filter(key); }); /** @@ -64,7 +64,7 @@ App.Pages.BlockedPeriods = (function () { (filterResult) => Number(filterResult.id) === Number(blockedPeriodId), ); - display(blockedPeriod); + App.Pages.BlockedPeriods.display(blockedPeriod); $('#filter-blocked-periods .selected').removeClass('selected'); $(event.currentTarget).addClass('selected'); $('#edit-blocked-period, #delete-blocked-period').prop('disabled', false); @@ -74,7 +74,7 @@ App.Pages.BlockedPeriods = (function () { * Event: Add Blocked-Period Button "Click" */ $blockedPeriods.on('click', '#add-blocked-period', () => { - resetForm(); + App.Pages.BlockedPeriods.resetForm(); $blockedPeriods.find('.add-edit-delete-group').hide(); $blockedPeriods.find('.save-cancel-group').show(); $blockedPeriods.find('.record-details').find('input, select, textarea').prop('disabled', false); @@ -114,7 +114,7 @@ App.Pages.BlockedPeriods = (function () { { text: lang('delete'), click: (event, messageModal) => { - remove(blockedPeriodId); + App.Pages.BlockedPeriods.remove(blockedPeriodId); messageModal.dispose(); }, }, @@ -143,11 +143,11 @@ App.Pages.BlockedPeriods = (function () { blockedPeriod.id = $id.val(); } - if (!validate()) { + if (!App.Pages.BlockedPeriods.validate()) { return; } - save(blockedPeriod); + App.Pages.BlockedPeriods.save(blockedPeriod); }); /** @@ -155,9 +155,9 @@ App.Pages.BlockedPeriods = (function () { */ $blockedPeriods.on('click', '#cancel-blocked-period', () => { const id = $id.val(); - resetForm(); + App.Pages.BlockedPeriods.resetForm(); if (id !== '') { - select(id, true); + App.Pages.BlockedPeriods.select(id, true); } }); @@ -198,7 +198,9 @@ App.Pages.BlockedPeriods = (function () { $('#filter-blocked-periods .results').empty(); response.forEach((blockedPeriod) => { - $('#filter-blocked-periods .results').append(getFilterHtml(blockedPeriod)).append($('
')); + $('#filter-blocked-periods .results') + .append(App.Pages.BlockedPeriods.getFilterHtml(blockedPeriod)) + .append($('
')); }); if (response.length === 0) { @@ -214,13 +216,13 @@ App.Pages.BlockedPeriods = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.BlockedPeriods.filter(keyword, selectId, show); }, }).appendTo('#filter-blocked-periods .results'); } if (selectId) { - select(selectId, show); + App.Pages.BlockedPeriods.select(selectId, show); } }); } @@ -233,9 +235,9 @@ App.Pages.BlockedPeriods = (function () { function save(blockedPeriod) { App.Http.BlockedPeriods.save(blockedPeriod).then((response) => { App.Layouts.Backend.displayNotification(lang('blocked_period_saved')); - resetForm(); + App.Pages.BlockedPeriods.resetForm(); $filterBlockedPeriods.find('.key').val(''); - filter('', response.id, true); + App.Pages.BlockedPeriods.filter('', response.id, true); }); } @@ -247,8 +249,8 @@ App.Pages.BlockedPeriods = (function () { function remove(id) { App.Http.BlockedPeriods.destroy(id).then(() => { App.Layouts.Backend.displayNotification(lang('blocked_period_deleted')); - resetForm(); - filter($('#filter-blocked-periods .key').val()); + App.Pages.BlockedPeriods.resetForm(); + App.Pages.BlockedPeriods.filter($('#filter-blocked-periods .key').val()); }); } @@ -360,7 +362,7 @@ App.Pages.BlockedPeriods = (function () { if (show) { const blockedPeriod = filterResults.find((blockedPeriod) => Number(blockedPeriod.id) === Number(id)); - display(blockedPeriod); + App.Pages.BlockedPeriods.display(blockedPeriod); $('#edit-blocked-period, #delete-blocked-period').prop('disabled', false); } @@ -370,9 +372,9 @@ App.Pages.BlockedPeriods = (function () { * Initialize the module. */ function initialize() { - resetForm(); - filter(''); - addEventListeners(); + App.Pages.BlockedPeriods.resetForm(); + App.Pages.BlockedPeriods.filter(''); + App.Pages.BlockedPeriods.addEventListeners(); App.Utils.UI.initializeDateTimePicker($startDateTime); App.Utils.UI.initializeDateTimePicker($endDateTime); } @@ -383,8 +385,11 @@ App.Pages.BlockedPeriods = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); diff --git a/assets/js/pages/booking.js b/assets/js/pages/booking.js index 23d442d2..0d5b1527 100644 --- a/assets/js/pages/booking.js +++ b/assets/js/pages/booking.js @@ -107,7 +107,7 @@ App.Pages.Booking = (function () { maxDate: moment().add(vars('future_booking_limit'), 'days').toDate(), onChange: (selectedDates) => { App.Http.Booking.getAvailableHours(moment(selectedDates[0]).format('YYYY-MM-DD')); - updateConfirmFrame(); + App.Pages.Booking.updateConfirmFrame(); }, onMonthChange: (selectedDates, dateStr, instance) => { @@ -312,7 +312,7 @@ App.Pages.Booking = (function () { App.Http.Booking.getAvailableHours(moment(date).format('YYYY-MM-DD')); - updateConfirmFrame(); + App.Pages.Booking.updateConfirmFrame(); }); /** @@ -333,7 +333,7 @@ App.Pages.Booking = (function () { $selectService.val(), todayDateTimeMoment.format('YYYY-MM-DD'), ); - updateConfirmFrame(); + App.Pages.Booking.updateConfirmFrame(); }); /** @@ -370,9 +370,9 @@ App.Pages.Booking = (function () { moment(App.Utils.UI.getDateTimePickerValue($selectDate)).format('YYYY-MM-DD'), ); - updateConfirmFrame(); + App.Pages.Booking.updateConfirmFrame(); - updateServiceDescription(serviceId); + App.Pages.Booking.updateServiceDescription(serviceId); }); /** @@ -406,10 +406,10 @@ App.Pages.Booking = (function () { // If we are on the 3rd tab then we will need to validate the user's input before proceeding to the next // step. if ($target.attr('data-step_index') === '3') { - if (!validateCustomerForm()) { + if (!App.Pages.Booking.validateCustomerForm()) { return; // Validation failed, do not continue. } else { - updateConfirmFrame(); + App.Pages.Booking.updateConfirmFrame(); } } @@ -453,7 +453,7 @@ App.Pages.Booking = (function () { $availableHours.on('click', '.available-hour', (event) => { $availableHours.find('.selected-hour').removeClass('selected-hour'); $(event.target).addClass('selected-hour'); - updateConfirmFrame(); + App.Pages.Booking.updateConfirmFrame(); }); if (manageMode) { @@ -855,7 +855,7 @@ App.Pages.Booking = (function () { $customField4.val(customer.custom_field_4); $customField5.val(customer.custom_field_5); - updateConfirmFrame(); + App.Pages.Booking.updateConfirmFrame(); return true; } catch (exc) { @@ -928,7 +928,8 @@ App.Pages.Booking = (function () { return { manageMode, - initialize, updateConfirmFrame, + updateServiceDescription, + validateCustomerForm, }; })(); diff --git a/assets/js/pages/customers.js b/assets/js/pages/customers.js index cf371f4d..04b3ee64 100644 --- a/assets/js/pages/customers.js +++ b/assets/js/pages/customers.js @@ -36,6 +36,8 @@ App.Pages.Customers = (function () { const $formMessage = $('#form-message'); const $customerAppointments = $('#customer-appointments'); + const moment = window.moment; + let filterResults = {}; let filterLimit = 20; @@ -53,8 +55,8 @@ App.Pages.Customers = (function () { const key = $filterCustomers.find('.key').val(); $filterCustomers.find('.selected').removeClass('selected'); filterLimit = 20; - resetForm(); - filter(key); + App.Pages.Customers.resetForm(); + App.Pages.Customers.filter(key); }); /** @@ -82,7 +84,7 @@ App.Pages.Customers = (function () { * Event: Add Customer Button "Click" */ $customers.on('click', '#add-customer', () => { - resetForm(); + App.Pages.Customers.resetForm(); $customers.find('#add-edit-delete-group').hide(); $customers.find('#save-cancel-group').show(); $customers.find('.record-details').find('input, select, textarea').prop('disabled', false); @@ -109,7 +111,7 @@ App.Pages.Customers = (function () { $customers.on('click', '#cancel-customer', () => { const id = $id.val(); - resetForm(); + App.Pages.Customers.resetForm(); if (id) { select(id, true); @@ -142,11 +144,11 @@ App.Pages.Customers = (function () { customer.id = $id.val(); } - if (!validate()) { + if (!App.Pages.Customers.validate()) { return; } - save(customer); + App.Pages.Customers.save(customer); }); /** @@ -164,7 +166,7 @@ App.Pages.Customers = (function () { { text: lang('delete'), click: (event, messageModal) => { - remove(customerId); + App.Pages.Customers.remove(customerId); messageModal.dispose(); }, }, @@ -182,9 +184,9 @@ App.Pages.Customers = (function () { function save(customer) { App.Http.Customers.save(customer).then((response) => { App.Layouts.Backend.displayNotification(lang('customer_saved')); - resetForm(); + App.Pages.Customers.resetForm(); $('#filter-customers .key').val(''); - filter('', response.id, true); + App.Pages.Customers.filter('', response.id, true); }); } @@ -196,8 +198,8 @@ App.Pages.Customers = (function () { function remove(id) { App.Http.Customers.destroy(id).then(() => { App.Layouts.Backend.displayNotification(lang('customer_deleted')); - resetForm(); - filter($('#filter-customers .key').val()); + App.Pages.Customers.resetForm(); + App.Pages.Customers.filter($('#filter-customers .key').val()); }); } @@ -392,7 +394,7 @@ App.Pages.Customers = (function () { $filterCustomers.find('.results').empty(); response.forEach((customer) => { - $('#filter-customers .results').append(getFilterHtml(customer)).append($('
')); + $('#filter-customers .results').append(App.Pages.Customers.getFilterHtml(customer)).append($('
')); }); if (!response.length) { @@ -408,13 +410,13 @@ App.Pages.Customers = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.Customers.filter(keyword, selectId, show); }, }).appendTo('#filter-customers .results'); } if (selectId) { - select(selectId, show); + App.Pages.Customers.select(selectId, show); } }); } @@ -466,7 +468,7 @@ App.Pages.Customers = (function () { if (show) { const customer = filterResults.find((filterResult) => Number(filterResult.id) === Number(id)); - display(customer); + App.Pages.Customers.display(customer); $('#edit-customer, #delete-customer').prop('disabled', false); } @@ -476,9 +478,9 @@ App.Pages.Customers = (function () { * Initialize the module. */ function initialize() { - resetForm(); - addEventListeners(); - filter(''); + App.Pages.Customers.resetForm(); + App.Pages.Customers.addEventListeners(); + App.Pages.Customers.filter(''); } document.addEventListener('DOMContentLoaded', initialize); @@ -487,8 +489,11 @@ App.Pages.Customers = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); diff --git a/assets/js/pages/providers.js b/assets/js/pages/providers.js index 93429fd5..210cee02 100755 --- a/assets/js/pages/providers.js +++ b/assets/js/pages/providers.js @@ -55,8 +55,8 @@ App.Pages.Providers = (function () { event.preventDefault(); const key = $('#filter-providers .key').val(); $('.selected').removeClass('selected'); - resetForm(); - filter(key); + App.Pages.Providers.resetForm(); + App.Pages.Providers.filter(key); }); /** @@ -73,7 +73,7 @@ App.Pages.Providers = (function () { const providerId = $(event.currentTarget).attr('data-id'); const provider = filterResults.find((filterResult) => Number(filterResult.id) === Number(providerId)); - display(provider); + App.Pages.Providers.display(provider); $filterProviders.find('.selected').removeClass('selected'); $(event.currentTarget).addClass('selected'); $('#edit-provider, #delete-provider').prop('disabled', false); @@ -83,7 +83,7 @@ App.Pages.Providers = (function () { * Event: Add New Provider Button "Click" */ $providers.on('click', '#add-provider', () => { - resetForm(); + App.Pages.Providers.resetForm(); $filterProviders.find('button').prop('disabled', true); $filterProviders.find('.results').css('color', '#AAA'); $providers.find('.add-edit-delete-group').hide(); @@ -141,7 +141,7 @@ App.Pages.Providers = (function () { { text: lang('delete'), click: (event, messageModal) => { - remove(providerId); + App.Pages.Providers.remove(providerId); messageModal.dispose(); }, }, @@ -195,11 +195,11 @@ App.Pages.Providers = (function () { provider.id = $id.val(); } - if (!validate()) { + if (!App.Pages.Providers.validate()) { return; } - save(provider); + App.Pages.Providers.save(provider); }); /** @@ -209,9 +209,9 @@ App.Pages.Providers = (function () { */ $providers.on('click', '#cancel-provider', () => { const id = $('#filter-providers .selected').attr('data-id'); - resetForm(); + App.Pages.Providers.resetForm(); if (id) { - select(id, true); + App.Pages.Providers.select(id, true); } }); @@ -237,9 +237,9 @@ App.Pages.Providers = (function () { function save(provider) { App.Http.Providers.save(provider).then((response) => { App.Layouts.Backend.displayNotification(lang('provider_saved')); - resetForm(); + App.Pages.Providers.resetForm(); $('#filter-providers .key').val(''); - filter('', response.id, true); + App.Pages.Providers.filter('', response.id, true); }); } @@ -251,8 +251,8 @@ App.Pages.Providers = (function () { function remove(id) { App.Http.Providers.destroy(id).then(() => { App.Layouts.Backend.displayNotification(lang('provider_deleted')); - resetForm(); - filter($('#filter-providers .key').val()); + App.Pages.Providers.resetForm(); + App.Pages.Providers.filter($('#filter-providers .key').val()); }); } @@ -468,7 +468,7 @@ App.Pages.Providers = (function () { $filterProviders.find('.results').empty(); response.forEach((provider) => { - $('#filter-providers .results').append(getFilterHtml(provider)).append($('
')); + $('#filter-providers .results').append(App.Pages.Providers.getFilterHtml(provider)).append($('
')); }); if (!response.length) { @@ -484,13 +484,13 @@ App.Pages.Providers = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.Providers.filter(keyword, selectId, show); }, }).appendTo('#filter-providers .results'); } if (selectId) { - select(selectId, show); + App.Pages.Providers.select(selectId, show); } }); } @@ -542,7 +542,7 @@ App.Pages.Providers = (function () { if (show) { const provider = filterResults.find((filterResult) => Number(filterResult.id) === Number(id)); - display(provider); + App.Pages.Providers.display(provider); $('#edit-provider, #delete-provider').prop('disabled', false); } @@ -555,9 +555,9 @@ App.Pages.Providers = (function () { workingPlanManager = new App.Utils.WorkingPlan(); workingPlanManager.addEventListeners(); - resetForm(); - filter(''); - addEventListeners(); + App.Pages.Providers.resetForm(); + App.Pages.Providers.filter(''); + App.Pages.Providers.addEventListeners(); vars('services').forEach((service) => { const checkboxId = `provider-service-${service.id}`; @@ -595,8 +595,11 @@ App.Pages.Providers = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); diff --git a/assets/js/pages/secretaries.js b/assets/js/pages/secretaries.js index bf71b0d8..bb4034d7 100644 --- a/assets/js/pages/secretaries.js +++ b/assets/js/pages/secretaries.js @@ -92,8 +92,8 @@ App.Pages.Secretaries = (function () { event.preventDefault(); const key = $('#filter-secretaries .key').val(); $filterSecretaries.find('.selected').removeClass('selected'); - resetForm(); - filter(key); + App.Pages.Secretaries.resetForm(); + App.Pages.Secretaries.filter(key); }); /** @@ -111,7 +111,7 @@ App.Pages.Secretaries = (function () { const secretary = filterResults.find((filterResult) => Number(filterResult.id) === Number(secretaryId)); - display(secretary); + App.Pages.Secretaries.display(secretary); $('#filter-secretaries .selected').removeClass('selected'); $(event.currentTarget).addClass('selected'); @@ -122,7 +122,7 @@ App.Pages.Secretaries = (function () { * Event: Add New Secretary Button "Click" */ $secretaries.on('click', '#add-secretary', () => { - resetForm(); + App.Pages.Secretaries.resetForm(); $filterSecretaries.find('button').prop('disabled', true); $filterSecretaries.find('.results').css('color', '#AAA'); @@ -216,11 +216,11 @@ App.Pages.Secretaries = (function () { secretary.id = $id.val(); } - if (!validate()) { + if (!App.Pages.Secretaries.validate()) { return; } - save(secretary); + App.Pages.Secretaries.save(secretary); }); /** @@ -246,9 +246,9 @@ App.Pages.Secretaries = (function () { function save(secretary) { App.Http.Secretaries.save(secretary).done((response) => { App.Layouts.Backend.displayNotification(lang('secretary_saved')); - resetForm(); + App.Pages.Secretaries.resetForm(); $('#filter-secretaries .key').val(''); - filter('', response.id, true); + App.Pages.Secretaries.filter('', response.id, true); }); } @@ -260,8 +260,8 @@ App.Pages.Secretaries = (function () { function remove(id) { App.Http.Secretaries.destroy(id).done(() => { App.Layouts.Backend.displayNotification(lang('secretary_deleted')); - resetForm(); - filter($('#filter-secretaries .key').val()); + App.Pages.Secretaries.resetForm(); + App.Pages.Secretaries.filter($('#filter-secretaries .key').val()); }); } @@ -407,7 +407,10 @@ App.Pages.Secretaries = (function () { $filterSecretaries.find('.results').empty(); response.forEach((secretary) => { - $filterSecretaries.find('.results').append(getFilterHtml(secretary)).append($('
')); + $filterSecretaries + .find('.results') + .append(App.Pages.Secretaries.getFilterHtml(secretary)) + .append($('
')); }); if (!response.length) { @@ -423,7 +426,7 @@ App.Pages.Secretaries = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.Customers.filter(keyword, selectId, show); }, }).appendTo('#filter-secretaries .results'); } @@ -482,7 +485,7 @@ App.Pages.Secretaries = (function () { if (show) { const secretary = filterResults.find((filterResult) => Number(filterResult.id) === Number(id)); - display(secretary); + App.Pages.Secretaries.display(secretary); $('#edit-secretary, #delete-secretary').prop('disabled', false); } @@ -492,9 +495,9 @@ App.Pages.Secretaries = (function () { * Initialize the module. */ function initialize() { - resetForm(); - filter(''); - addEventListeners(); + App.Pages.Secretaries.resetForm(); + App.Pages.Secretaries.filter(''); + App.Pages.Secretaries.addEventListeners(); vars('providers').forEach((provider) => { const checkboxId = `provider-service-${provider.id}`; @@ -532,8 +535,11 @@ App.Pages.Secretaries = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); diff --git a/assets/js/pages/service_categories.js b/assets/js/pages/service_categories.js index 2f8aad49..8d969931 100644 --- a/assets/js/pages/service_categories.js +++ b/assets/js/pages/service_categories.js @@ -36,8 +36,8 @@ App.Pages.ServiceCategories = (function () { event.preventDefault(); const key = $('#filter-service-categories .key').val(); $('.selected').removeClass('selected'); - resetForm(); - filter(key); + App.Pages.ServiceCategories.resetForm(); + App.Pages.ServiceCategories.filter(key); }); /** @@ -69,7 +69,7 @@ App.Pages.ServiceCategories = (function () { * Event: Add Service-Category Button "Click" */ $serviceCategories.on('click', '#add-service-category', () => { - resetForm(); + App.Pages.ServiceCategories.resetForm(); $serviceCategories.find('.add-edit-delete-group').hide(); $serviceCategories.find('.save-cancel-group').show(); $serviceCategories.find('.record-details').find('input, select, textarea').prop('disabled', false); @@ -132,7 +132,7 @@ App.Pages.ServiceCategories = (function () { return; } - save(serviceCategory); + App.Pages.ServiceCategories.save(serviceCategory); }); /** @@ -140,7 +140,7 @@ App.Pages.ServiceCategories = (function () { */ $serviceCategories.on('click', '#cancel-service-category', () => { const id = $id.val(); - resetForm(); + App.Pages.ServiceCategories.resetForm(); if (id !== '') { select(id, true); } @@ -162,7 +162,9 @@ App.Pages.ServiceCategories = (function () { $('#filter-service-categories .results').empty(); response.forEach((serviceCategory) => { - $('#filter-service-categories .results').append(getFilterHtml(serviceCategory)).append($('
')); + $('#filter-service-categories .results') + .append(App.Pages.ServiceCategories.getFilterHtml(serviceCategory)) + .append($('
')); }); if (response.length === 0) { @@ -178,7 +180,7 @@ App.Pages.ServiceCategories = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.ServiceCategories.filter(keyword, selectId, show); }, }).appendTo('#filter-service-categories .results'); } @@ -197,9 +199,9 @@ App.Pages.ServiceCategories = (function () { function save(serviceCategory) { App.Http.ServiceCategories.save(serviceCategory).then((response) => { App.Layouts.Backend.displayNotification(lang('service_category_saved')); - resetForm(); + App.Pages.ServiceCategories.resetForm(); $filterServiceCategories.find('.key').val(''); - filter('', response.id, true); + App.Pages.ServiceCategories.filter('', response.id, true); }); } @@ -211,8 +213,8 @@ App.Pages.ServiceCategories = (function () { function remove(id) { App.Http.ServiceCategories.destroy(id).then(() => { App.Layouts.Backend.displayNotification(lang('service_category_deleted')); - resetForm(); - filter($('#filter-service-categories .key').val()); + App.Pages.ServiceCategories.resetForm(); + App.Pages.ServiceCategories.filter($('#filter-service-categories .key').val()); }); } @@ -321,9 +323,9 @@ App.Pages.ServiceCategories = (function () { * Initialize the module. */ function initialize() { - resetForm(); - filter(''); - addEventListeners(); + App.Pages.ServiceCategories.resetForm(); + App.Pages.ServiceCategories.filter(''); + App.Pages.ServiceCategories.addEventListeners(); } document.addEventListener('DOMContentLoaded', initialize); @@ -332,8 +334,11 @@ App.Pages.ServiceCategories = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); diff --git a/assets/js/pages/services.js b/assets/js/pages/services.js index f4e85567..d1b191a6 100644 --- a/assets/js/pages/services.js +++ b/assets/js/pages/services.js @@ -45,8 +45,8 @@ App.Pages.Services = (function () { event.preventDefault(); const key = $filterServices.find('.key').val(); $filterServices.find('.selected').removeClass('selected'); - resetForm(); - filter(key); + App.Pages.Services.resetForm(); + App.Pages.Services.filter(key); }); /** @@ -83,7 +83,7 @@ App.Pages.Services = (function () { $services.find('.record-details h4').find('a').remove().end().append($link); - display(service); + App.Pages.Services.display(service); $filterServices.find('.selected').removeClass('selected'); $(event.currentTarget).addClass('selected'); $('#edit-service, #delete-service').prop('disabled', false); @@ -93,7 +93,7 @@ App.Pages.Services = (function () { * Event: Add New Service Button "Click" */ $services.on('click', '#add-service', () => { - resetForm(); + App.Pages.Services.resetForm(); $services.find('.add-edit-delete-group').hide(); $services.find('.save-cancel-group').show(); $services.find('.record-details').find('input, select, textarea').prop('disabled', false); @@ -120,10 +120,10 @@ App.Pages.Services = (function () { $services.on('click', '#cancel-service', () => { const id = $id.val(); - resetForm(); + App.Pages.Services.resetForm(); if (id !== '') { - select(id, true); + App.Pages.Services.select(id, true); } }); @@ -149,11 +149,11 @@ App.Pages.Services = (function () { service.id = $id.val(); } - if (!validate()) { + if (!App.Pages.Services.validate()) { return; } - save(service); + App.Pages.Services.save(service); }); /** @@ -184,7 +184,7 @@ App.Pages.Services = (function () { { text: lang('delete'), click: (event, messageModal) => { - remove(serviceId); + App.Pages.Services.remove(serviceId); messageModal.dispose(); }, }, @@ -203,9 +203,9 @@ App.Pages.Services = (function () { function save(service) { App.Http.Services.save(service).then((response) => { App.Layouts.Backend.displayNotification(lang('service_saved')); - resetForm(); + App.Pages.Services.resetForm(); $filterServices.find('.key').val(''); - filter('', response.id, true); + App.Pages.Services.filter('', response.id, true); }); } @@ -217,8 +217,8 @@ App.Pages.Services = (function () { function remove(id) { App.Http.Services.destroy(id).then(() => { App.Layouts.Backend.displayNotification(lang('service_deleted')); - resetForm(); - filter($filterServices.find('.key').val()); + App.Pages.Services.resetForm(); + App.Pages.Services.filter($filterServices.find('.key').val()); }); } @@ -319,7 +319,7 @@ App.Pages.Services = (function () { $filterServices.find('.results').empty(); response.forEach((service) => { - $filterServices.find('.results').append(getFilterHtml(service)).append($('
')); + $filterServices.find('.results').append(App.Pages.Services.getFilterHtml(service)).append($('
')); }); if (response.length === 0) { @@ -335,13 +335,13 @@ App.Pages.Services = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.Services.filter(keyword, selectId, show); }, }).appendTo('#filter-services .results'); } if (selectId) { - select(selectId, show); + App.Pages.Services.select(selectId, show); } }); } @@ -392,7 +392,7 @@ App.Pages.Services = (function () { if (show) { const service = filterResults.find((filterResult) => Number(filterResult.id) === Number(id)); - display(service); + App.Pages.Services.display(service); $('#edit-service, #delete-service').prop('disabled', false); } @@ -419,9 +419,9 @@ App.Pages.Services = (function () { * Initialize the module. */ function initialize() { - resetForm(); - filter(''); - addEventListeners(); + App.Pages.Services.resetForm(); + App.Pages.Services.filter(''); + App.Pages.Services.addEventListeners(); updateAvailableServiceCategories(); } @@ -431,8 +431,11 @@ App.Pages.Services = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); diff --git a/assets/js/pages/webhooks.js b/assets/js/pages/webhooks.js index 8805ade4..f898e3b2 100644 --- a/assets/js/pages/webhooks.js +++ b/assets/js/pages/webhooks.js @@ -40,8 +40,8 @@ App.Pages.Webhooks = (function () { event.preventDefault(); const key = $filterWebhooks.find('.key').val(); $filterWebhooks.find('.selected').removeClass('selected'); - resetForm(); - filter(key); + App.Pages.Webhooks.resetForm(); + App.Pages.Webhooks.filter(key); }); /** @@ -59,7 +59,7 @@ App.Pages.Webhooks = (function () { const webhook = filterResults.find((filterResult) => Number(filterResult.id) === Number(webhookId)); - display(webhook); + App.Pages.Webhooks.display(webhook); $filterWebhooks.find('.selected').removeClass('selected'); $(event.currentTarget).addClass('selected'); @@ -70,7 +70,7 @@ App.Pages.Webhooks = (function () { * Event: Add New Webhook Button "Click" */ $webhooks.on('click', '#add-webhook', () => { - resetForm(); + App.Pages.Webhooks.resetForm(); $webhooks.find('.add-edit-delete-group').hide(); $webhooks.find('.save-cancel-group').show(); $webhooks.find('.record-details').find('input, select, textarea').prop('disabled', false); @@ -87,7 +87,7 @@ App.Pages.Webhooks = (function () { $webhooks.on('click', '#cancel-webhook', () => { const id = $id.val(); - resetForm(); + App.Pages.Webhooks.resetForm(); if (id !== '') { select(id, true); @@ -120,11 +120,11 @@ App.Pages.Webhooks = (function () { webhook.id = $id.val(); } - if (!validate()) { + if (!App.Pages.Webhooks.validate()) { return; } - save(webhook); + App.Pages.Webhooks.save(webhook); }); /** @@ -154,7 +154,7 @@ App.Pages.Webhooks = (function () { { text: lang('delete'), click: (event, messageModal) => { - remove(webhookId); + App.Pages.Webhooks.remove(webhookId); messageModal.dispose(); }, }, @@ -173,9 +173,9 @@ App.Pages.Webhooks = (function () { function save(webhook) { App.Http.Webhooks.save(webhook).then((response) => { App.Layouts.Backend.displayNotification(lang('webhook_saved')); - resetForm(); + App.Pages.Webhooks.resetForm(); $filterWebhooks.find('.key').val(''); - filter('', response.id, true); + App.Pages.Webhooks.filter('', response.id, true); }); } @@ -187,8 +187,8 @@ App.Pages.Webhooks = (function () { function remove(id) { App.Http.Webhooks.destroy(id).then(() => { App.Layouts.Backend.displayNotification(lang('webhook_deleted')); - resetForm(); - filter($filterWebhooks.find('.key').val()); + App.Pages.Webhooks.resetForm(); + App.Pages.Webhooks.filter($filterWebhooks.find('.key').val()); }); } @@ -280,7 +280,7 @@ App.Pages.Webhooks = (function () { $filterWebhooks.find('.results').empty(); response.forEach((webhook) => { - $filterWebhooks.find('.results').append(getFilterHtml(webhook)).append($('
')); + $filterWebhooks.find('.results').append(App.Pages.Webhooks.getFilterHtml(webhook)).append($('
')); }); if (response.length === 0) { @@ -296,13 +296,13 @@ App.Pages.Webhooks = (function () { 'text': lang('load_more'), 'click': () => { filterLimit += 20; - filter(keyword, selectId, show); + App.Pages.Webhooks.filter(keyword, selectId, show); }, }).appendTo('#filter-webhooks .results'); } if (selectId) { - select(selectId, show); + App.Pages.Webhooks.select(selectId, show); } }); } @@ -355,7 +355,7 @@ App.Pages.Webhooks = (function () { if (show) { const webhook = filterResults.find((filterResult) => Number(filterResult.id) === Number(id)); - display(webhook); + App.Pages.Webhooks.display(webhook); $('#edit-webhook, #delete-webhook').prop('disabled', false); } @@ -365,9 +365,9 @@ App.Pages.Webhooks = (function () { * Initialize the module. */ function initialize() { - resetForm(); - filter(''); - addEventListeners(); + App.Pages.Webhooks.resetForm(); + App.Pages.Webhooks.filter(''); + App.Pages.Webhooks.addEventListeners(); } document.addEventListener('DOMContentLoaded', initialize); @@ -376,8 +376,11 @@ App.Pages.Webhooks = (function () { filter, save, remove, + validate, getFilterHtml, resetForm, + display, select, + addEventListeners, }; })(); From f1abeee560ac6b7dacd6fafb58f67322706be2b1 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 16:42:01 +0200 Subject: [PATCH 49/72] Move the allowed and optional fields to of CRUD controllers to new overridable properties --- application/controllers/Account.php | 37 +++---- application/controllers/Admins.php | 56 +++++------ application/controllers/Appointments.php | 38 +++---- application/controllers/Blocked_periods.php | 12 +-- application/controllers/Booking.php | 74 +++++++------- application/controllers/Booking_settings.php | 4 +- application/controllers/Calendar.php | 67 +++++++------ application/controllers/Customers.php | 59 +++++------ application/controllers/Providers.php | 99 ++++++++----------- application/controllers/Secretaries.php | 88 ++++++----------- .../controllers/Service_categories.php | 6 +- application/controllers/Services.php | 55 +++++------ application/controllers/Unavailabilities.php | 26 ++--- application/controllers/Webhooks.php | 21 +--- 14 files changed, 272 insertions(+), 370 deletions(-) diff --git a/application/controllers/Account.php b/application/controllers/Account.php index c13e953c..806e3d69 100644 --- a/application/controllers/Account.php +++ b/application/controllers/Account.php @@ -20,6 +20,24 @@ */ class Account extends EA_Controller { + public array $allowed_user_fields = [ + 'id', + 'first_name', + 'last_name', + 'email', + 'mobile_number', + 'phone_number', + 'address', + 'city', + 'state', + 'zip_code', + 'notes', + 'timezone', + 'language', + 'settings', + ]; + public array $allowed_user_setting_fields = ['username', 'password', 'notifications', 'calendar_view']; + /** * Account constructor. */ @@ -90,24 +108,9 @@ class Account extends EA_Controller $account['id'] = session('user_id'); - $this->users_model->only($account, [ - 'id', - 'first_name', - 'last_name', - 'email', - 'mobile_number', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'settings', - ]); + $this->users_model->only($account, $this->allowed_user_fields); - $this->users_model->only($account['settings'], ['username', 'password', 'notifications', 'calendar_view']); + $this->users_model->only($account['settings'], $this->allowed_user_setting_fields); if (empty($account['password'])) { unset($account['password']); diff --git a/application/controllers/Admins.php b/application/controllers/Admins.php index e7a3b270..15614458 100644 --- a/application/controllers/Admins.php +++ b/application/controllers/Admins.php @@ -20,6 +20,25 @@ */ class Admins extends EA_Controller { + public array $allowed_admin_fields = [ + 'id', + 'first_name', + 'last_name', + 'email', + 'mobile_number', + 'phone_number', + 'address', + 'city', + 'state', + 'zip_code', + 'notes', + 'timezone', + 'language', + 'settings', + ]; + + public array $allowed_admin_setting_fields = ['username', 'password', 'notifications', 'calendar_view']; + /** * Admins constructor. */ @@ -117,23 +136,9 @@ class Admins extends EA_Controller $admin = request('admin'); - $this->admins_model->only($admin, [ - 'first_name', - 'last_name', - 'email', - 'mobile_number', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'settings', - ]); + $this->admins_model->only($admin, $this->allowed_admin_fields); - $this->admins_model->only($admin['settings'], ['username', 'password', 'notifications', 'calendar_view']); + $this->admins_model->only($admin['settings'], $this->allowed_admin_setting_fields); $admin_id = $this->admins_model->save($admin); @@ -182,24 +187,9 @@ class Admins extends EA_Controller $admin = request('admin'); - $this->admins_model->only($admin, [ - 'id', - 'first_name', - 'last_name', - 'email', - 'mobile_number', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'settings', - ]); + $this->admins_model->only($admin, $this->allowed_admin_fields); - $this->admins_model->only($admin['settings'], ['username', 'password', 'notifications', 'calendar_view']); + $this->admins_model->only($admin['settings'], $this->allowed_admin_setting_fields); $admin_id = $this->admins_model->save($admin); diff --git a/application/controllers/Appointments.php b/application/controllers/Appointments.php index 3376a734..684f3eed 100644 --- a/application/controllers/Appointments.php +++ b/application/controllers/Appointments.php @@ -23,6 +23,19 @@ */ class Appointments extends EA_Controller { + public array $allowed_appointment_fields = [ + 'id', + 'start_datetime', + 'end_datetime', + 'location', + 'notes', + 'color', + 'is_unavailability', + 'id_users_provider', + 'id_users_customer', + 'id_services', + ]; + /** * Appointments constructor. */ @@ -88,17 +101,7 @@ class Appointments extends EA_Controller $appointment = json_decode(request('appointment'), true); - $this->appointments_model->only($appointment, [ - 'start_datetime', - 'end_datetime', - 'location', - 'notes', - 'color', - 'is_unavailability', - 'id_users_provider', - 'id_users_customer', - 'id_services', - ]); + $this->appointments_model->only($appointment, $this->allowed_appointment_fields); $appointment_id = $this->appointments_model->save($appointment); @@ -147,18 +150,7 @@ class Appointments extends EA_Controller $appointment = json_decode(request('appointment'), true); - $this->appointments_model->only($appointment, [ - 'id', - 'start_datetime', - 'end_datetime', - 'location', - 'notes', - 'color', - 'is_unavailability', - 'id_users_provider', - 'id_users_customer', - 'id_services', - ]); + $this->appointments_model->only($appointment, $this->allowed_appointment_fields); $appointment_id = $this->appointments_model->save($appointment); diff --git a/application/controllers/Blocked_periods.php b/application/controllers/Blocked_periods.php index 570afa7c..9c0ca605 100644 --- a/application/controllers/Blocked_periods.php +++ b/application/controllers/Blocked_periods.php @@ -20,6 +20,8 @@ */ class Blocked_periods extends EA_Controller { + public array $allowed_blocked_period_fields = ['id', 'name', 'start_datetime', 'end_datetime', 'notes']; + /** * Blocked_periods constructor. */ @@ -116,7 +118,7 @@ class Blocked_periods extends EA_Controller $blocked_period = request('blocked_period'); - $this->blocked_periods_model->only($blocked_period, ['name', 'start_datetime', 'end_datetime', 'notes']); + $this->blocked_periods_model->only($blocked_period, $this->allowed_blocked_period_fields); $blocked_period_id = $this->blocked_periods_model->save($blocked_period); @@ -165,13 +167,7 @@ class Blocked_periods extends EA_Controller $blocked_period = request('blocked_period'); - $this->blocked_periods_model->only($blocked_period, [ - 'id', - 'name', - 'start_datetime', - 'end_datetime', - 'notes', - ]); + $this->blocked_periods_model->only($blocked_period, $this->allowed_blocked_period_fields); $blocked_period_id = $this->blocked_periods_model->save($blocked_period); diff --git a/application/controllers/Booking.php b/application/controllers/Booking.php index c67064d7..461e91c3 100755 --- a/application/controllers/Booking.php +++ b/application/controllers/Booking.php @@ -23,6 +23,39 @@ */ class Booking extends EA_Controller { + public array $allowed_customer_fields = [ + 'id', + 'first_name', + 'last_name', + 'email', + 'phone_number', + 'address', + 'city', + 'state', + 'zip_code', + 'timezone', + 'language', + 'custom_field_1', + 'custom_field_2', + 'custom_field_3', + 'custom_field_4', + 'custom_field_5', + ]; + public mixed $allowed_provider_fields = ['id', 'first_name', 'last_name', 'services', 'timezone']; + public array $allowed_appointment_fields = [ + 'id', + 'start_datetime', + 'end_datetime', + 'location', + 'notes', + 'color', + 'status', + 'is_unavailability', + 'id_users_provider', + 'id_users_customer', + 'id_services', + ]; + /** * Booking constructor. */ @@ -105,13 +138,7 @@ class Booking extends EA_Controller foreach ($available_providers as &$available_provider) { // Only expose the required provider data. - $this->providers_model->only($available_provider, [ - 'id', - 'first_name', - 'last_name', - 'services', - 'timezone', - ]); + $this->providers_model->only($available_provider, $this->allowed_provider_fields); } $date_format = setting('date_format'); @@ -396,24 +423,7 @@ class Booking extends EA_Controller // Save customer language (the language which is used to render the booking page). $customer['language'] = session('language') ?? config('language'); - $this->customers_model->only($customer, [ - 'id', - 'first_name', - 'last_name', - 'email', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'timezone', - 'language', - 'custom_field_1', - 'custom_field_2', - 'custom_field_3', - 'custom_field_4', - 'custom_field_5', - ]); + $this->customers_model->only($customer, $this->allowed_customer_fields); $customer_id = $this->customers_model->save($customer); $customer = $this->customers_model->find($customer_id); @@ -426,19 +436,7 @@ class Booking extends EA_Controller $appointment_status_options = json_decode($appointment_status_options_json, true) ?? []; $appointment['status'] = $appointment_status_options[0] ?? null; - $this->appointments_model->only($appointment, [ - 'id', - 'start_datetime', - 'end_datetime', - 'location', - 'notes', - 'color', - 'status', - 'is_unavailability', - 'id_users_provider', - 'id_users_customer', - 'id_services', - ]); + $this->appointments_model->only($appointment, $this->allowed_appointment_fields); $appointment_id = $this->appointments_model->save($appointment); $appointment = $this->appointments_model->find($appointment_id); diff --git a/application/controllers/Booking_settings.php b/application/controllers/Booking_settings.php index 15c5f88b..df5df30e 100644 --- a/application/controllers/Booking_settings.php +++ b/application/controllers/Booking_settings.php @@ -20,6 +20,8 @@ */ class Booking_settings extends EA_Controller { + public array $allowed_setting_fields = ['id', 'name', 'value']; + /** * Booking_settings constructor. */ @@ -100,7 +102,7 @@ class Booking_settings extends EA_Controller $setting['id'] = $existing_setting['id']; } - $this->settings_model->only($setting, ['id', 'name', 'value']); + $this->settings_model->only($setting, $this->allowed_setting_fields); $this->settings_model->save($setting); } diff --git a/application/controllers/Calendar.php b/application/controllers/Calendar.php index 8beef71e..e9b1dbf1 100644 --- a/application/controllers/Calendar.php +++ b/application/controllers/Calendar.php @@ -20,6 +20,39 @@ */ class Calendar extends EA_Controller { + public array $allowed_customer_fields = [ + 'id', + 'first_name', + 'last_name', + 'email', + 'phone_number', + 'address', + 'city', + 'state', + 'zip_code', + 'timezone', + 'language', + 'notes', + 'custom_field_1', + 'custom_field_2', + 'custom_field_3', + 'custom_field_4', + 'custom_field_5', + ]; + public array $allowed_appointment_fields = [ + 'id', + 'start_datetime', + 'end_datetime', + 'location', + 'notes', + 'color', + 'status', + 'is_unavailability', + 'id_users_provider', + 'id_users_customer', + 'id_services', + ]; + /** * Calendar constructor. */ @@ -198,25 +231,7 @@ class Calendar extends EA_Controller throw new RuntimeException('You do not have the required permissions for this task.'); } - $this->customers_model->only($customer, [ - 'id', - 'first_name', - 'last_name', - 'email', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'timezone', - 'language', - 'notes', - 'custom_field_1', - 'custom_field_2', - 'custom_field_3', - 'custom_field_4', - 'custom_field_5', - ]); + $this->customers_model->only($customer, $this->allowed_customer_fields); $customer['id'] = $this->customers_model->save($customer); } @@ -245,19 +260,7 @@ class Calendar extends EA_Controller $this->synchronization->remove_appointment_on_provider_change($appointment['id']); } - $this->appointments_model->only($appointment, [ - 'id', - 'start_datetime', - 'end_datetime', - 'location', - 'notes', - 'color', - 'status', - 'is_unavailability', - 'id_users_provider', - 'id_users_customer', - 'id_services', - ]); + $this->appointments_model->only($appointment, $this->allowed_appointment_fields); $appointment['id'] = $this->appointments_model->save($appointment); } diff --git a/application/controllers/Customers.php b/application/controllers/Customers.php index b4ff6c8e..403b2b49 100644 --- a/application/controllers/Customers.php +++ b/application/controllers/Customers.php @@ -20,6 +20,26 @@ */ class Customers extends EA_Controller { + public array $allowed_customer_fields = [ + 'id', + 'first_name', + 'last_name', + 'email', + 'phone_number', + 'address', + 'city', + 'state', + 'zip_code', + 'notes', + 'timezone', + 'language', + 'custom_field_1', + 'custom_field_2', + 'custom_field_3', + 'custom_field_4', + 'custom_field_5', + ]; + /** * Customers constructor. */ @@ -197,24 +217,7 @@ class Customers extends EA_Controller $customer = request('customer'); - $this->customers_model->only($customer, [ - 'first_name', - 'last_name', - 'email', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'custom_field_1', - 'custom_field_2', - 'custom_field_3', - 'custom_field_4', - 'custom_field_5', - ]); + $this->customers_model->only($customer, $this->allowed_customer_fields); $customer_id = $this->customers_model->save($customer); @@ -249,25 +252,7 @@ class Customers extends EA_Controller abort(403, 'Forbidden'); } - $this->customers_model->only($customer, [ - 'id', - 'first_name', - 'last_name', - 'email', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'custom_field_1', - 'custom_field_2', - 'custom_field_3', - 'custom_field_4', - 'custom_field_5', - ]); + $this->customers_model->only($customer, $this->allowed_customer_fields); $customer_id = $this->customers_model->save($customer); diff --git a/application/controllers/Providers.php b/application/controllers/Providers.php index 44c69a4f..b56766cc 100644 --- a/application/controllers/Providers.php +++ b/application/controllers/Providers.php @@ -20,6 +20,38 @@ */ class Providers extends EA_Controller { + public array $allowed_provider_fields = [ + 'id', + 'first_name', + 'last_name', + 'email', + 'alt_number', + 'phone_number', + 'address', + 'city', + 'state', + 'zip_code', + 'notes', + 'timezone', + 'language', + 'is_private', + 'id_roles', + 'settings', + 'services', + ]; + public array $allowed_provider_setting_fields = [ + 'username', + 'password', + 'working_plan', + 'working_plan_exceptions', + 'notifications', + 'calendar_view', + ]; + public array $allowed_service_fields = ['id', 'name']; + public array $optional_provider_fields = [ + 'services' => [], + ]; + /** * Providers constructor. */ @@ -63,7 +95,7 @@ class Providers extends EA_Controller $services = $this->services_model->get(); foreach ($services as &$service) { - $this->services_model->only($service, ['id', 'name']); + $this->services_model->only($service, $this->allowed_service_fields); } script_vars([ @@ -130,37 +162,11 @@ class Providers extends EA_Controller $provider = request('provider'); - $this->providers_model->only($provider, [ - 'first_name', - 'last_name', - 'email', - 'alt_number', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'is_private', - 'id_roles', - 'settings', - 'services', - ]); + $this->providers_model->only($provider, $this->allowed_provider_fields); - $this->providers_model->only($provider['settings'], [ - 'username', - 'password', - 'working_plan', - 'working_plan_exceptions', - 'notifications', - 'calendar_view', - ]); + $this->providers_model->only($provider['settings'], $this->allowed_provider_setting_fields); - $this->providers_model->optional($provider, [ - 'services' => [], - ]); + $this->providers_model->optional($provider, $this->optional_provider_fields); $provider_id = $this->providers_model->save($provider); @@ -209,38 +215,11 @@ class Providers extends EA_Controller $provider = request('provider'); - $this->providers_model->only($provider, [ - 'id', - 'first_name', - 'last_name', - 'email', - 'alt_number', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'is_private', - 'id_roles', - 'settings', - 'services', - ]); + $this->providers_model->only($provider, $this->allowed_provider_fields); - $this->providers_model->only($provider['settings'], [ - 'username', - 'password', - 'working_plan', - 'working_plan_exceptions', - 'notifications', - 'calendar_view', - ]); + $this->providers_model->only($provider['settings'], $this->allowed_provider_setting_fields); - $this->providers_model->optional($provider, [ - 'services' => [], - ]); + $this->providers_model->optional($provider, $this->optional_provider_fields); $provider_id = $this->providers_model->save($provider); diff --git a/application/controllers/Secretaries.php b/application/controllers/Secretaries.php index 15288a07..e16da7c3 100644 --- a/application/controllers/Secretaries.php +++ b/application/controllers/Secretaries.php @@ -20,6 +20,31 @@ */ class Secretaries extends EA_Controller { + public array $allowed_provider_fields = ['id', 'first_name', 'last_name']; + public array $allowed_secretary_fields = [ + 'id', + 'first_name', + 'last_name', + 'email', + 'alt_number', + 'phone_number', + 'address', + 'city', + 'state', + 'zip_code', + 'notes', + 'timezone', + 'language', + 'is_private', + 'id_roles', + 'settings', + 'providers', + ]; + public array $allowed_secretary_setting_fields = ['username', 'password', 'notifications', 'calendar_view']; + public array $optional_secretary_fields = [ + 'providers' => [], + ]; + /** * Secretaries constructor. */ @@ -63,7 +88,7 @@ class Secretaries extends EA_Controller $providers = $this->providers_model->get(); foreach ($providers as &$provider) { - $this->providers_model->only($provider, ['id', 'first_name', 'last_name']); + $this->providers_model->only($provider, $this->allowed_provider_fields); } script_vars([ @@ -126,35 +151,11 @@ class Secretaries extends EA_Controller $secretary = request('secretary'); - $this->secretaries_model->only($secretary, [ - 'first_name', - 'last_name', - 'email', - 'alt_number', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'is_private', - 'id_roles', - 'settings', - 'providers', - ]); + $this->secretaries_model->only($secretary, $this->allowed_secretary_fields); - $this->secretaries_model->only($secretary['settings'], [ - 'username', - 'password', - 'notifications', - 'calendar_view', - ]); + $this->secretaries_model->only($secretary['settings'], $this->allowed_secretary_setting_fields); - $this->secretaries_model->optional($secretary, [ - 'providers' => [], - ]); + $this->secretaries_model->optional($secretary, $this->optional_secretary_fields); $secretary_id = $this->secretaries_model->save($secretary); @@ -203,36 +204,11 @@ class Secretaries extends EA_Controller $secretary = request('secretary'); - $this->secretaries_model->only($secretary, [ - 'id', - 'first_name', - 'last_name', - 'email', - 'alt_number', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - 'is_private', - 'id_roles', - 'settings', - 'providers', - ]); + $this->secretaries_model->only($secretary, $this->allowed_secretary_fields); - $this->secretaries_model->only($secretary['settings'], [ - 'username', - 'password', - 'notifications', - 'calendar_view', - ]); + $this->secretaries_model->only($secretary['settings'], $this->allowed_secretary_setting_fields); - $this->secretaries_model->optional($secretary, [ - 'providers' => [], - ]); + $this->secretaries_model->optional($secretary, $this->optional_secretary_fields); $secretary_id = $this->secretaries_model->save($secretary); diff --git a/application/controllers/Service_categories.php b/application/controllers/Service_categories.php index fd831cd2..e49980de 100644 --- a/application/controllers/Service_categories.php +++ b/application/controllers/Service_categories.php @@ -20,6 +20,8 @@ */ class Service_categories extends EA_Controller { + public array $allowed_service_category_fields = ['id', 'name', 'description']; + /** * Service-categories constructor. */ @@ -113,7 +115,7 @@ class Service_categories extends EA_Controller $service_category = request('service_category'); - $this->service_categories_model->only($service_category, ['name', 'description']); + $this->service_categories_model->only($service_category, $this->allowed_service_category_fields); $service_category_id = $this->service_categories_model->save($service_category); @@ -162,7 +164,7 @@ class Service_categories extends EA_Controller $service_category = request('service_category'); - $this->service_categories_model->only($service_category, ['id', 'name', 'description']); + $this->service_categories_model->only($service_category, $this->allowed_service_category_fields); $service_category_id = $this->service_categories_model->save($service_category); diff --git a/application/controllers/Services.php b/application/controllers/Services.php index c67a6514..da365b16 100644 --- a/application/controllers/Services.php +++ b/application/controllers/Services.php @@ -20,6 +20,24 @@ */ class Services extends EA_Controller { + public array $allowed_service_fields = [ + 'id', + 'name', + 'duration', + 'price', + 'currency', + 'description', + 'color', + 'location', + 'availabilities_type', + 'attendants_number', + 'is_private', + 'id_service_categories', + ]; + public array $optional_service_fields = [ + 'id_service_categories' => null, + ]; + /** * Services constructor. */ @@ -114,23 +132,9 @@ class Services extends EA_Controller $service = request('service'); - $this->services_model->only($service, [ - 'name', - 'duration', - 'price', - 'currency', - 'description', - 'color', - 'location', - 'availabilities_type', - 'attendants_number', - 'is_private', - 'id_service_categories', - ]); + $this->services_model->only($service, $this->allowed_service_fields); - $this->services_model->optional($service, [ - 'id_service_categories' => null, - ]); + $this->services_model->optional($service, $this->optional_service_fields); $service_id = $this->services_model->save($service); @@ -179,24 +183,9 @@ class Services extends EA_Controller $service = request('service'); - $this->services_model->only($service, [ - 'id', - 'name', - 'duration', - 'price', - 'currency', - 'description', - 'color', - 'location', - 'availabilities_type', - 'attendants_number', - 'is_private', - 'id_service_categories', - ]); + $this->services_model->only($service, $this->allowed_service_fields); - $this->services_model->optional($service, [ - 'id_service_categories' => null, - ]); + $this->services_model->optional($service, $this->optional_service_fields); $service_id = $this->services_model->save($service); diff --git a/application/controllers/Unavailabilities.php b/application/controllers/Unavailabilities.php index 347eee6c..326c7eab 100644 --- a/application/controllers/Unavailabilities.php +++ b/application/controllers/Unavailabilities.php @@ -20,6 +20,16 @@ */ class Unavailabilities extends EA_Controller { + public array $allowed_unavailability_fields = [ + 'id', + 'start_datetime', + 'end_datetime', + 'location', + 'notes', + 'is_unavailability', + 'id_users_provider', + ]; + /** * Unavailabilities constructor. */ @@ -73,19 +83,7 @@ class Unavailabilities extends EA_Controller $unavailability = request('unavailability'); - $this->unavailabilities_model->only($unavailability, [ - 'first_name', - 'last_name', - 'email', - 'phone_number', - 'address', - 'city', - 'state', - 'zip_code', - 'notes', - 'timezone', - 'language', - ]); + $this->unavailabilities_model->only($unavailability, $this->allowed_unavailability_fields); $unavailability_id = $this->unavailabilities_model->save($unavailability); @@ -138,6 +136,8 @@ class Unavailabilities extends EA_Controller $unavailability = request('unavailability'); + $this->unavailabilities_model->only($unavailability, $this->allowed_unavailability_fields); + $unavailability_id = $this->unavailabilities_model->save($unavailability); $unavailability = $this->unavailabilities_model->find($unavailability_id); diff --git a/application/controllers/Webhooks.php b/application/controllers/Webhooks.php index ba03c63d..36383c46 100644 --- a/application/controllers/Webhooks.php +++ b/application/controllers/Webhooks.php @@ -20,6 +20,8 @@ */ class Webhooks extends EA_Controller { + public array $allowed_webhook_fields = ['id', 'name', 'url', 'actions', 'secret_token', 'is_ssl_verified', 'notes']; + /** * Webhooks constructor. */ @@ -132,14 +134,7 @@ class Webhooks extends EA_Controller $webhook = request('webhook'); - $this->webhooks_model->only($webhook, [ - 'name', - 'url', - 'actions', - 'secret_token', - 'is_ssl_verified', - 'notes', - ]); + $this->webhooks_model->only($webhook, $this->allowed_webhook_fields); $webhook_id = $this->webhooks_model->save($webhook); @@ -164,15 +159,7 @@ class Webhooks extends EA_Controller $webhook = request('webhook'); - $this->webhooks_model->only($webhook, [ - 'id', - 'name', - 'url', - 'actions', - 'secret_token', - 'is_ssl_verified', - 'notes', - ]); + $this->webhooks_model->only($webhook, $this->allowed_webhook_fields); $webhook_id = $this->webhooks_model->save($webhook); From 08998f3a4a5048c54e44e2ce36260dafdd94c7fc Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 17:03:54 +0200 Subject: [PATCH 50/72] Define get/set methods for related model resources (provider, secretary, admin users) --- application/models/Admins_model.php | 37 ++++--- application/models/Providers_model.php | 117 ++++++++++------------- application/models/Secretaries_model.php | 112 ++++++++++------------ 3 files changed, 125 insertions(+), 141 deletions(-) diff --git a/application/models/Admins_model.php b/application/models/Admins_model.php index ac5fc5d8..507d420d 100644 --- a/application/models/Admins_model.php +++ b/application/models/Admins_model.php @@ -211,10 +211,7 @@ class Admins_model extends EA_Model foreach ($admins as &$admin) { $this->cast($admin); - - $admin['settings'] = $this->db->get_where('user_settings', ['id_users' => $admin['id']])->row_array(); - - unset($admin['settings']['id_users'], $admin['settings']['password'], $admin['settings']['salt']); + $admin['settings'] = $this->get_settings($admin['id']); } return $admins; @@ -264,7 +261,7 @@ class Admins_model extends EA_Model $settings['salt'] = generate_salt(); $settings['password'] = hash_password($settings['salt'], $settings['password']); - $this->save_settings($admin['id'], $settings); + $this->set_settings($admin['id'], $settings); return $admin['id']; } @@ -277,7 +274,7 @@ class Admins_model extends EA_Model * * @throws InvalidArgumentException */ - protected function save_settings(int $admin_id, array $settings): void + public function set_settings(int $admin_id, array $settings): void { if (empty($settings)) { throw new InvalidArgumentException('The settings argument cannot be empty.'); @@ -295,6 +292,22 @@ class Admins_model extends EA_Model } } + /** + * Get the admin settings. + * + * @param int $admin_id Admin ID. + * + * @throws InvalidArgumentException + */ + public function get_settings(int $admin_id): array + { + $settings = $this->db->get_where('user_settings', ['id_users' => $admin_id])->row_array(); + + unset($settings['id_users'], $settings['password'], $settings['salt']); + + return $settings; + } + /** * Set the value of an admin setting. * @@ -347,7 +360,7 @@ class Admins_model extends EA_Model throw new RuntimeException('Could not update admin.'); } - $this->save_settings($admin['id'], $settings); + $this->set_settings($admin['id'], $settings); return $admin['id']; } @@ -390,10 +403,7 @@ class Admins_model extends EA_Model } $this->cast($admin); - - $admin['settings'] = $this->db->get_where('user_settings', ['id_users' => $admin_id])->row_array(); - - unset($admin['settings']['id_users'], $admin['settings']['password'], $admin['settings']['salt']); + $admin['settings'] = $this->get_settings($admin['id']); return $admin; } @@ -507,10 +517,7 @@ class Admins_model extends EA_Model foreach ($admins as &$admin) { $this->cast($admin); - - $admin['settings'] = $this->db->get_where('user_settings', ['id_users' => $admin['id']])->row_array(); - - unset($admin['settings']['id_users'], $admin['settings']['password'], $admin['settings']['salt']); + $admin['settings'] = $this->get_settings($admin['id']); } return $admins; diff --git a/application/models/Providers_model.php b/application/models/Providers_model.php index 402b4d3c..a3db5df6 100755 --- a/application/models/Providers_model.php +++ b/application/models/Providers_model.php @@ -225,20 +225,8 @@ class Providers_model extends EA_Model foreach ($providers as &$provider) { $this->cast($provider); - - $provider['settings'] = $this->db->get_where('user_settings', ['id_users' => $provider['id']])->row_array(); - - unset($provider['settings']['id_users'], $provider['settings']['password'], $provider['settings']['salt']); - - $provider['services'] = []; - - $service_provider_connections = $this->db - ->get_where('services_providers', ['id_users' => $provider['id']]) - ->result_array(); - - foreach ($service_provider_connections as $service_provider_connection) { - $provider['services'][] = (int) $service_provider_connection['id_services']; - } + $provider['settings'] = $this->get_settings($provider['id']); + $provider['services'] = $this->get_service_ids($provider['id']); } return $providers; @@ -289,8 +277,8 @@ class Providers_model extends EA_Model $settings['salt'] = generate_salt(); $settings['password'] = hash_password($settings['salt'], $settings['password']); - $this->save_settings($provider['id'], $settings); - $this->save_service_ids($provider['id'], $service_ids); + $this->set_settings($provider['id'], $settings); + $this->set_service_ids($provider['id'], $service_ids); return $provider['id']; } @@ -303,7 +291,7 @@ class Providers_model extends EA_Model * * @throws InvalidArgumentException */ - protected function save_settings(int $provider_id, array $settings): void + public function set_settings(int $provider_id, array $settings): void { if (empty($settings)) { throw new InvalidArgumentException('The settings argument cannot be empty.'); @@ -334,6 +322,22 @@ class Providers_model extends EA_Model } } + /** + * Get the provider settings. + * + * @param int $provider_id Provider ID. + * + * @throws InvalidArgumentException + */ + public function get_settings(int $provider_id): array + { + $settings = $this->db->get_where('user_settings', ['id_users' => $provider_id])->row_array(); + + unset($settings['id_users'], $settings['password'], $settings['salt']); + + return $settings; + } + /** * Set the value of a provider setting. * @@ -385,8 +389,8 @@ class Providers_model extends EA_Model throw new RuntimeException('Could not update provider.'); } - $this->save_settings($provider['id'], $settings); - $this->save_service_ids($provider['id'], $service_ids); + $this->set_settings($provider['id'], $settings); + $this->set_service_ids($provider['id'], $service_ids); return $provider['id']; } @@ -397,7 +401,7 @@ class Providers_model extends EA_Model * @param int $provider_id Provider ID. * @param array $service_ids Service IDs. */ - protected function save_service_ids(int $provider_id, array $service_ids): void + public function set_service_ids(int $provider_id, array $service_ids): void { // Re-insert the provider-service connections. $this->db->delete('services_providers', ['id_users' => $provider_id]); @@ -412,6 +416,26 @@ class Providers_model extends EA_Model } } + /** + * Get the provider service IDs. + * + * @param int $provider_id Provider ID. + */ + public function get_service_ids(int $provider_id): array + { + $service_provider_connections = $this->db + ->get_where('services_providers', ['id_users' => $provider_id]) + ->result_array(); + + $service_ids = []; + + foreach ($service_provider_connections as $service_provider_connection) { + $service_ids[] = (int) $service_provider_connection['id_services']; + } + + return $service_ids; + } + /** * Remove an existing provider from the database. * @@ -553,20 +577,8 @@ class Providers_model extends EA_Model } $this->cast($provider); - - $provider['settings'] = $this->db->get_where('user_settings', ['id_users' => $provider_id])->row_array(); - - unset($provider['settings']['id_users'], $provider['settings']['password'], $provider['settings']['salt']); - - $service_provider_connections = $this->db - ->get_where('services_providers', ['id_users' => $provider_id]) - ->result_array(); - - $provider['services'] = []; - - foreach ($service_provider_connections as $service_provider_connection) { - $provider['services'][] = (int) $service_provider_connection['id_services']; - } + $provider['settings'] = $this->get_settings($provider['id']); + $provider['services'] = $this->get_service_ids($provider['id']); return $provider; } @@ -622,25 +634,8 @@ class Providers_model extends EA_Model foreach ($providers as &$provider) { $this->cast($provider); - - $provider['settings'] = $this->db->get_where('user_settings', ['id_users' => $provider['id']])->row_array(); - - unset( - $provider['settings']['id_users'], - $provider['settings']['username'], - $provider['settings']['password'], - $provider['settings']['salt'], - ); - - $provider['services'] = []; - - $service_provider_connections = $this->db - ->get_where('services_providers', ['id_users' => $provider['id']]) - ->result_array(); - - foreach ($service_provider_connections as $service_provider_connection) { - $provider['services'][] = (int) $service_provider_connection['id_services']; - } + $provider['settings'] = $this->get_settings($provider['id']); + $provider['services'] = $this->get_service_ids($provider['id']); } return $providers; @@ -697,20 +692,8 @@ class Providers_model extends EA_Model foreach ($providers as &$provider) { $this->cast($provider); - - $provider['settings'] = $this->db->get_where('user_settings', ['id_users' => $provider['id']])->row_array(); - - unset($provider['settings']['id_users'], $provider['settings']['password'], $provider['settings']['salt']); - - $provider['services'] = []; - - $service_provider_connections = $this->db - ->get_where('services_providers', ['id_users' => $provider['id']]) - ->result_array(); - - foreach ($service_provider_connections as $service_provider_connection) { - $provider['services'][] = (int) $service_provider_connection['id_services']; - } + $provider['settings'] = $this->get_settings($provider['id']); + $provider['services'] = $this->get_service_ids($provider['id']); } return $providers; diff --git a/application/models/Secretaries_model.php b/application/models/Secretaries_model.php index 904e72f3..6be14064 100644 --- a/application/models/Secretaries_model.php +++ b/application/models/Secretaries_model.php @@ -222,25 +222,9 @@ class Secretaries_model extends EA_Model $secretaries = $this->db->get_where('users', ['id_roles' => $role_id], $limit, $offset)->result_array(); foreach ($secretaries as &$secretary) { - $secretary['settings'] = $this->db - ->get_where('user_settings', ['id_users' => $secretary['id']]) - ->row_array(); - - unset( - $secretary['settings']['id_users'], - $secretary['settings']['password'], - $secretary['settings']['salt'], - ); - - $secretary_provider_connections = $this->db - ->get_where('secretaries_providers', ['id_users_secretary' => $secretary['id']]) - ->result_array(); - - $secretary['providers'] = []; - - foreach ($secretary_provider_connections as $secretary_provider_connection) { - $secretary['providers'][] = (int) $secretary_provider_connection['id_users_provider']; - } + $this->cast($secretary); + $secretary['settings'] = $this->get_settings($secretary['id']); + $secretary['providers'] = $this->get_provider_ids($secretary['id']); } return $secretaries; @@ -292,21 +276,21 @@ class Secretaries_model extends EA_Model $settings['salt'] = generate_salt(); $settings['password'] = hash_password($settings['salt'], $settings['password']); - $this->save_settings($secretary['id'], $settings); - $this->save_provider_ids($secretary['id'], $provider_ids); + $this->set_settings($secretary['id'], $settings); + $this->set_provider_ids($secretary['id'], $provider_ids); return $secretary['id']; } /** - * Save the secretary settings. + * Set the secretary settings. * * @param int $secretary_id Secretary ID. * @param array $settings Associative array with the settings data. * * @throws InvalidArgumentException */ - protected function save_settings(int $secretary_id, array $settings): void + public function set_settings(int $secretary_id, array $settings): void { if (empty($settings)) { throw new InvalidArgumentException('The settings argument cannot be empty.'); @@ -324,6 +308,22 @@ class Secretaries_model extends EA_Model } } + /** + * Get the secretary settings. + * + * @param int $secretary_id Secretary ID. + * + * @throws InvalidArgumentException + */ + public function get_settings(int $secretary_id): array + { + $settings = $this->db->get_where('user_settings', ['id_users' => $secretary_id])->row_array(); + + unset($settings['id_users'], $settings['password'], $settings['salt']); + + return $settings; + } + /** * Set the value of a secretary setting. * @@ -375,19 +375,19 @@ class Secretaries_model extends EA_Model throw new RuntimeException('Could not update secretary.'); } - $this->save_settings($secretary['id'], $settings); - $this->save_provider_ids($secretary['id'], $provider_ids); + $this->set_settings($secretary['id'], $settings); + $this->set_provider_ids($secretary['id'], $provider_ids); return (int) $secretary['id']; } /** - * Save the secretary provider IDs. + * Set the secretary provider IDs. * * @param int $secretary_id Secretary ID. * @param array $provider_ids Provider IDs. */ - protected function save_provider_ids(int $secretary_id, array $provider_ids): void + public function set_provider_ids(int $secretary_id, array $provider_ids): void { // Re-insert the secretary-provider connections. $this->db->delete('secretaries_providers', ['id_users_secretary' => $secretary_id]); @@ -402,6 +402,26 @@ class Secretaries_model extends EA_Model } } + /** + * Get the secretary provider IDs. + * + * @param int $secretary_id Secretary ID. + */ + public function get_provider_ids(int $secretary_id): array + { + $secretary_provider_connections = $this->db + ->get_where('secretaries_providers', ['id_users_secretary' => $secretary_id]) + ->result_array(); + + $provider_ids = []; + + foreach ($secretary_provider_connections as $secretary_provider_connection) { + $provider_ids[] = (int) $secretary_provider_connection['id_users_provider']; + } + + return $provider_ids; + } + /** * Remove an existing secretary from the database. * @@ -522,25 +542,9 @@ class Secretaries_model extends EA_Model ->result_array(); foreach ($secretaries as &$secretary) { - $secretary['settings'] = $this->db - ->get_where('user_settings', ['id_users' => $secretary['id']]) - ->row_array(); - - unset( - $secretary['settings']['id_users'], - $secretary['settings']['password'], - $secretary['settings']['salt'], - ); - - $secretary_provider_connections = $this->db - ->get_where('secretaries_providers', ['id_users_secretary' => $secretary['id']]) - ->result_array(); - - $secretary['providers'] = []; - - foreach ($secretary_provider_connections as $secretary_provider_connection) { - $secretary['providers'][] = (int) $secretary_provider_connection['id_users_provider']; - } + $this->cast($secretary); + $secretary['settings'] = $this->get_settings($secretary['id']); + $secretary['providers'] = $this->get_provider_ids($secretary['id']); } return $secretaries; @@ -731,19 +735,9 @@ class Secretaries_model extends EA_Model ); } - $secretary['settings'] = $this->db->get_where('user_settings', ['id_users' => $secretary_id])->row_array(); - - unset($secretary['settings']['id_users'], $secretary['settings']['password'], $secretary['settings']['salt']); - - $secretary_provider_connections = $this->db - ->get_where('secretaries_providers', ['id_users_secretary' => $secretary_id]) - ->result_array(); - - $secretary['providers'] = []; - - foreach ($secretary_provider_connections as $secretary_provider_connection) { - $secretary['providers'][] = (int) $secretary_provider_connection['id_users_provider']; - } + $this->cast($secretary); + $secretary['settings'] = $this->get_settings($secretary['id']); + $secretary['providers'] = $this->get_provider_ids($secretary['id']); return $secretary; } From 0e766419f4258ced37a8491c9a2d98490b3e5e80 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 17:04:04 +0200 Subject: [PATCH 51/72] Update exposed calendar page methods --- assets/js/pages/calendar.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/js/pages/calendar.js b/assets/js/pages/calendar.js index b6eaa85f..229ccf49 100755 --- a/assets/js/pages/calendar.js +++ b/assets/js/pages/calendar.js @@ -17,6 +17,8 @@ App.Pages.Calendar = (function () { const $insertWorkingPlanException = $('#insert-working-plan-exception'); + const moment = window.moment; + /** * Add the page event listeners. */ @@ -150,13 +152,13 @@ App.Pages.Calendar = (function () { App.Utils.CalendarDefaultView.initialize(); } - addEventListeners(); + App.Pages.Calendar.addEventListeners(); } document.addEventListener('DOMContentLoaded', initialize); return { - initialize, + addEventListeners, getSelectionEndDate, }; })(); From 3b01f9bf91a864e579f9c3badaed14b3be51e906 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 17:27:28 +0200 Subject: [PATCH 52/72] Echo the slot as a comment so that it can be used by HTML replacement mechanisms --- application/helpers/html_helper.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/application/helpers/html_helper.php b/application/helpers/html_helper.php index 81bb347e..c3edcf3a 100644 --- a/application/helpers/html_helper.php +++ b/application/helpers/html_helper.php @@ -167,6 +167,8 @@ if (!function_exists('slot')) { $section = $layout['sections'][$name] ?? null; + echo '' . PHP_EOL; + if (!$section) { return; } From fd57ddbb2dc2a828e6609a7b95992e80e7a525c4 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Sat, 11 May 2024 17:50:45 +0200 Subject: [PATCH 53/72] Add slots to key positions in the app mark up --- .../views/components/appointments_modal.php | 14 ++++++++++++++ application/views/components/backend_header.php | 5 +++++ .../views/components/booking_final_step.php | 8 ++++++++ .../views/components/booking_info_step.php | 7 +++++++ .../views/components/booking_time_step.php | 7 +++++++ .../views/components/booking_type_step.php | 7 +++++++ .../views/components/unavailabilities_modal.php | 14 ++++++++++---- .../components/working_plan_exceptions_modal.php | 4 ++++ application/views/pages/admins.php | 8 ++++++++ application/views/pages/api_settings.php | 2 ++ application/views/pages/blocked_periods.php | 6 ++++++ application/views/pages/booking_settings.php | 2 ++ application/views/pages/business_settings.php | 2 ++ application/views/pages/calendar.php | 2 ++ application/views/pages/customers.php | 8 ++++++++ application/views/pages/general_settings.php | 2 ++ .../views/pages/google_analytics_settings.php | 2 ++ application/views/pages/integrations.php | 2 ++ application/views/pages/legal_settings.php | 3 ++- .../views/pages/matomo_analytics_settings.php | 2 ++ application/views/pages/providers.php | 15 ++++++++++++++- application/views/pages/secretaries.php | 8 ++++++++ application/views/pages/service_categories.php | 6 ++++++ application/views/pages/services.php | 7 +++++++ application/views/pages/webhooks.php | 6 ++++++ 25 files changed, 143 insertions(+), 6 deletions(-) diff --git a/application/views/components/appointments_modal.php b/application/views/components/appointments_modal.php index 93e55282..879a1aac 100644 --- a/application/views/components/appointments_modal.php +++ b/application/views/components/appointments_modal.php @@ -108,6 +108,8 @@
+ +
+ +
'id="appointment-color"']); ?>
@@ -183,10 +187,14 @@
+ + + +
@@ -335,6 +343,8 @@ + +
@@ -342,10 +352,14 @@
+ + + +