Enable the change of the brand logo and colors from the backend (#789).

This commit is contained in:
Alex Tselegidis 2022-01-24 18:36:12 +01:00
parent cd51576217
commit e9a9314909
39 changed files with 563 additions and 8 deletions

View file

@ -61,6 +61,8 @@ class Booking extends EA_Controller {
}
$company_name = setting('company_name');
$company_logo = setting('company_logo');
$company_color = setting('company_color');
$disable_booking = setting('disable_booking');
$google_analytics_code = setting('google_analytics_code');
$matomo_analytics_url = setting('matomo_analytics_url');
@ -220,6 +222,8 @@ class Booking extends EA_Controller {
'available_services' => $available_services,
'available_providers' => $available_providers,
'company_name' => $company_name,
'company_logo' => $company_logo,
'company_color' => $company_color,
'date_format' => $date_format,
'time_format' => $time_format,
'first_weekday' => $first_weekday,

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -345,4 +345,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -346,4 +346,13 @@ $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';
// End

View file

@ -0,0 +1,41 @@
<?php defined('BASEPATH') or exit('No direct script access allowed');
/* ----------------------------------------------------------------------------
* Easy!Appointments - Online Appointment Scheduler
*
* @package EasyAppointments
* @author A.Tselegidis <alextselegidis@gmail.com>
* @copyright Copyright (c) Alex Tselegidis
* @license https://opensource.org/licenses/GPL-3.0 - GPLv3
* @link https://easyappointments.org
* @since v1.4.0
* ---------------------------------------------------------------------------- */
class Migration_Add_company_logo_setting extends EA_Migration {
/**
* Upgrade method.
*/
public function up()
{
if ( ! $this->db->get_where('settings', ['name' => 'company_logo'])->num_rows())
{
$this->db->insert('settings', [
'name' => 'company_logo',
'value' => ''
]);
}
}
/**
* Downgrade method.
*/
public function down()
{
if ( ! $this->db->get_where('settings', ['name' => 'company_logo'])->num_rows())
{
$this->db->delete('settings', [
'name' => 'company_logo',
]);
}
}
}

View file

@ -0,0 +1,41 @@
<?php defined('BASEPATH') or exit('No direct script access allowed');
/* ----------------------------------------------------------------------------
* Easy!Appointments - Online Appointment Scheduler
*
* @package EasyAppointments
* @author A.Tselegidis <alextselegidis@gmail.com>
* @copyright Copyright (c) Alex Tselegidis
* @license https://opensource.org/licenses/GPL-3.0 - GPLv3
* @link https://easyappointments.org
* @since v1.4.0
* ---------------------------------------------------------------------------- */
class Migration_Add_company_color_setting extends EA_Migration {
/**
* Upgrade method.
*/
public function up()
{
if ( ! $this->db->get_where('settings', ['name' => 'company_color'])->num_rows())
{
$this->db->insert('settings', [
'name' => 'company_color',
'value' => '#ffffff'
]);
}
}
/**
* Downgrade method.
*/
public function down()
{
if ( ! $this->db->get_where('settings', ['name' => 'company_color'])->num_rows())
{
$this->db->delete('settings', [
'name' => 'company_color',
]);
}
}
}

View file

@ -3,6 +3,7 @@
* Local variables.
*
* @var string $active_menu
* @var string $company_logo
*/
?>

View file

@ -8,8 +8,13 @@
<div id="header">
<div id="company-name">
<img src="<?= vars('company_logo') ?: base_url('assets/img/logo.png') ?>" alt="logo" id="company-logo">
<span>
<?= $company_name ?>
<div class="d-flex justify-content-center">
</span>
<div class="d-flex justify-content-center justify-content-md-start">
<span class="display-selected-service me-2">
[<?= lang('service') ?>]
</span>

View file

@ -0,0 +1,92 @@
<?php
/**
* @var string $company_color
*/
?>
<style>
a {
color: <?= $company_color ?>;
}
a:hover {
color: <?= $company_color ?>;
filter: brightness(120%);
}
.btn-primary {
background-color: <?= $company_color ?>;
border-color: <?= $company_color ?>;
}
.btn-primary:hover {
background-color: <?= $company_color ?>;
border-color: <?= $company_color ?>;
filter: brightness(120%);
}
#book-appointment-wizard #header {
background: <?= $company_color ?>;
}
#book-appointment-wizard #company-name .display-selected-service,
#book-appointment-wizard #company-name .display-selected-provider {
color: <?= $company_color ?>;
filter: brightness(50%);
}
#book-appointment-wizard .book-step {
background: <?= $company_color ?>;
filter: brightness(75%);
}
#book-appointment-wizard .book-step strong {
color: <?= $company_color ?>;
filter: brightness(200%);
}
body .ui-widget.ui-widget-content {
border-color: <?= $company_color ?>;
}
body .ui-datepicker .ui-widget-header {
background-color: <?= $company_color ?>;
}
body .ui-datepicker th {
background-color: <?= $company_color ?>;
}
body .ui-datepicker .ui-datepicker-next-hover,
body .ui-datepicker .ui-datepicker-prev-hover {
background: <?= $company_color ?>;
border-color: <?= $company_color ?>;
filter: brightness(140%);
}
body .ui-datepicker td a, body .ui-datepicker td span {
color: <?= $company_color ?> !important;
}
html body .ui-datepicker td a.ui-state-active {
background: <?= $company_color ?> !important;
}
body .ui-datepicker td a.ui-state-highlight {
background: <?= $company_color ?> !important;
filter: brightness(140%);
}
#book-appointment-wizard #available-hours .selected-hour {
background-color: <?= $company_color ?> ;
border-color: <?= $company_color ?> ;
}
#frame-footer .backend-link {
background-color: <?= $company_color ?> !important;
}
#frame-footer .backend-link:hover {
color: #fff;
}
</style>

View file

@ -18,6 +18,8 @@
<link rel="stylesheet" type="text/css" href="<?= asset_url('assets/css/bootstrap.css') ?>">
<link rel="stylesheet" type="text/css" href="<?= asset_url('assets/css/general.css') ?>">
<link rel="stylesheet" type="text/css" href="<?= asset_url('assets/css/layouts/booking_layout.css') ?>">
<?php component('company_color_style', ['company_color' => vars('company_color')]) ?>
</head>
<body>
@ -25,7 +27,7 @@
<div class="row wrapper">
<div id="book-appointment-wizard" class="col-12 col-lg-10 col-xl-8">
<?php component('booking_header', ['company_name' => vars('company_name')]) ?>
<?php component('booking_header', ['company_name' => vars('company_name'), 'company_logo' => vars('company_logo')]) ?>
<?php slot('content') ?>

View file

@ -19,8 +19,10 @@
<?php endif ?>
</legend>
<div class="row">
<div class="col-lg-6">
<div class="row mb-5">
<div class="col-12">
<h4><?= lang('company') ?></h4>
<div class="mb-3">
<label class="form-label" for="company-name">
<?= lang('company_name') ?>
@ -59,6 +61,48 @@
</small>
</div>
</div>
<div class="mb-3">
<label class="form-label" for="company-logo">
<?= lang('company_logo') ?>
</label>
<input type="file" id="company-logo" data-field="company_logo" class="form-control" accept="image/*">
<div class="form-text text-muted">
<small>
<?= lang('company_logo_hint') ?>
</small>
</div>
<div class="d-flex justify-content-center">
<img src="#" alt="Company Logo Preview" id="company-logo-preview" class="img-thumbnail my-3" hidden>
</div>
<div class="d-flex justify-content-center">
<button type="button" class="btn btn-danger btn-sm mb-3" id="remove-company-logo" hidden>
<i class="fas fa-trash me-2"></i>
<?= lang('remove') ?>
</button>
</div>
</div>
<div class="mb-3">
<label class="form-label" for="company-color">
<?= lang('company_color') ?>
</label>
<input type="color" id="company-color" data-field="company_color" class="form-control">
<div class="form-text text-muted">
<small>
<?= lang('company_color_hint') ?>
</small>
</div>
</div>
</div>
</div>
<div class="row mb-5">
<div class="col-12">
<h4><?= lang('localization') ?></h4>
<div class="mb-3">
<label class="form-label" for="date-format">
<?= lang('date_format') ?>
@ -108,7 +152,12 @@
</div>
</div>
</div>
<div class="col-lg-6">
</div>
<div class="row">
<div class="col-12">
<h4><?= lang('integrations') ?></h4>
<div class="mb-3">
<label class="form-label" for="google-analytics-code">
Google Analytics Code
@ -133,6 +182,7 @@
</small>
</div>
</div>
<div class="mb-3">
<label class="form-label" for="api-token">API Token</label>
<input id="api-token" data-field="api_token" class="form-control">

View file

@ -882,3 +882,12 @@ body .form-horizontal .controls {
#booking-settings-page .fields-row .form-control {
border: 1px dashed #999 !important;
}
#company-logo-preview {
max-width: 256px;
max-height: 256px;
}
#company-color {
min-height: 41px;
}

View file

@ -52,6 +52,12 @@ body {
color: #fff;
margin: 20px 0;
#company-logo {
display: block;
margin: 14px auto;
max-height: 56px;
}
.display-selected-service,
.display-selected-provider {
color: #225d4d;
@ -290,6 +296,16 @@ body {
display: inline-block;
float: left;
margin: 0 auto;
min-width: 400px;
line-height: 1.4;
#company-logo {
display: inline-block;
float: left;
margin-right: 14px;
margin-top: 0;
margin-bottom: 0;
}
}
#book-appointment-wizard #steps {

View file

@ -525,7 +525,7 @@ App.Pages.Booking = (function () {
$('.required').each((index, requiredField) => {
if (!$(requiredField).val()) {
$(requiredField).parents('.form-group').addClass('is-invalid');
$(requiredField).addClass('is-invalid');
missingRequiredField = true;
}
});
@ -548,7 +548,7 @@ App.Pages.Booking = (function () {
// Validate email address.
if ($email.val() && !App.Utils.Validation.email($email.val())) {
$email.parents('.form-group').addClass('is-invalid');
$email.addClass('is-invalid');
throw new Error(lang('invalid_email'));
}

View file

@ -16,6 +16,10 @@
*/
App.Pages.GeneralSettings = (function () {
const $saveSettings = $('#save-settings');
const $companyLogo = $('#company-logo');
const $companyLogoPreview = $('#company-logo-preview');
const $removeCompanyLogo = $('#remove-company-logo');
let companyLogoBase64 = '';
/**
* Check if the form has invalid values.
@ -52,6 +56,14 @@ App.Pages.GeneralSettings = (function () {
function deserialize(generalSettings) {
generalSettings.forEach((generalSetting) => {
if (generalSetting.name === 'company_logo' && generalSetting.value) {
companyLogoBase64 = generalSetting.value;
$companyLogoPreview.attr('src', generalSetting.value);
$companyLogoPreview.prop('hidden', false);
$removeCompanyLogo.prop('hidden', false);
return;
}
$('[data-field="' + generalSetting.name + '"]').val(generalSetting.value);
});
}
@ -68,6 +80,11 @@ App.Pages.GeneralSettings = (function () {
});
});
generalSettings.push({
name: 'company_logo',
value: companyLogoBase64
});
return generalSettings;
}
@ -88,6 +105,36 @@ App.Pages.GeneralSettings = (function () {
});
}
/**
* Convert the selected image to a base64 encoded string.
*/
function onCompanyLogoChange() {
const file = $companyLogo[0].files[0];
if (!file) {
$removeCompanyLogo.trigger('click');
return;
}
App.Utils.File.toBase64(file).then((base64) => {
companyLogoBase64 = base64;
$companyLogoPreview.attr('src', base64);
$companyLogoPreview.prop('hidden', false);
$removeCompanyLogo.prop('hidden', false);
});
}
/**
* Remove the company logo data.
*/
function onRemoveCompanyLogoClick() {
companyLogoBase64 = '';
$companyLogo.val('');
$companyLogoPreview.attr('src', '#');
$companyLogoPreview.prop('hidden', true);
$removeCompanyLogo.prop('hidden', true);
}
/**
* Initialize the module.
*/
@ -98,6 +145,10 @@ App.Pages.GeneralSettings = (function () {
$saveSettings.on('click', onSaveSettingsClick);
$companyLogo.on('change', onCompanyLogoChange);
$removeCompanyLogo.on('click', onRemoveCompanyLogoClick);
App.Layouts.Backend.placeFooterToBottom();
}