diff --git a/application/controllers/Settings.php b/application/controllers/Settings.php deleted file mode 100644 index 0976ea64..00000000 --- a/application/controllers/Settings.php +++ /dev/null @@ -1,186 +0,0 @@ - - * @copyright Copyright (c) 2013 - 2020, Alex Tselegidis - * @license https://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link https://easyappointments.org - * @since v1.5.0 - * ---------------------------------------------------------------------------- */ - -/** - * Settings controller. - * - * Handles settings related operations. - * - * @package Controllers - */ -class Settings extends EA_Controller { - /** - * @var array - */ - protected $permissions; - - /** - * Calendar constructor. - */ - public function __construct() - { - parent::__construct(); - - $this->load->model('appointments_model'); - $this->load->model('customers_model'); - $this->load->model('services_model'); - $this->load->model('providers_model'); - - $this->load->library('google_sync'); - $this->load->library('notifications'); - $this->load->library('synchronization'); - $this->load->library('timezones'); - - $role_slug = session('role_slug'); - - if ($role_slug) - { - $this->permissions = $this->roles_model->get_permissions_by_slug($role_slug); - } - } - - /** - * Save a setting or multiple settings in the database. - */ - public function ajax_save_settings() - { - try - { - $type = request('type'); - - if ($type == SETTINGS_SYSTEM) - { - if ($this->permissions[PRIV_SYSTEM_SETTINGS]['edit'] == FALSE) - { - throw new Exception('You do not have the required permissions for this task.'); - } - - $settings = json_decode(request('settings', FALSE), TRUE); - - // Check if phone number settings are valid. - - $phone_number_required = FALSE; - - $phone_number_shown = FALSE; - - foreach ($settings as $setting) - { - if ($setting['name'] === 'require_phone_number') - { - $phone_number_required = $setting['value']; - } - - if ($setting['name'] === 'show_phone_number') - { - $phone_number_shown = $setting['value']; - } - } - - if ($phone_number_required && ! $phone_number_shown) - { - throw new RuntimeException('You cannot hide the phone number in the booking form while it\'s also required!'); - } - - foreach ($settings as $setting) - { - $existing_setting = $this->settings_model->query()->where('name', $setting['name'])->get()->row_array(); - - if ( ! empty($existing_setting)) - { - $setting['id'] = $existing_setting['id']; - } - - $this->settings_model->save($setting); - } - } - else if ($type == SETTINGS_USER) - { - if ($this->permissions[PRIV_USER_SETTINGS]['edit'] == FALSE) - { - throw new Exception('You do not have the required permissions for this task.'); - } - - $settings = json_decode(request('settings'), TRUE); - - $this->users_model->save($settings); - - session([ - 'user_email' => $settings['email'], - 'username' => $settings['settings']['username'], - 'timezone' => $settings['timezone'], - ]); - } - - response(); - } - catch (Throwable $e) - { - json_exception($e); - } - } - - /** - * This method checks whether the username already exists in the database. - */ - public function ajax_validate_username() - { - try - { - // We will only use the function in the admins_model because it is sufficient for the rest user types for - // now (providers, secretaries). - - $username = request('username'); - - $user_id = request('user_id'); - - $is_valid = $this->admins_model->validate_username($username, $user_id); - - json_response([ - 'is_valid' => $is_valid, - ]); - } - catch (Throwable $e) - { - json_exception($e); - } - } - - /** - * Apply global working plan to all providers. - */ - public function ajax_apply_global_working_plan() - { - try - { - if ($this->permissions[PRIV_SYSTEM_SETTINGS]['edit'] == FALSE) - { - throw new Exception('You do not have the required permissions for this task.'); - } - - $working_plan = request('working_plan'); - - $providers = $this->providers_model->get(); - - foreach ($providers as $provider) - { - $this->providers_model->set_setting($provider['id'], 'working_plan', $working_plan); - } - - response(); - } - catch (Throwable $e) - { - json_exception($e); - } - } -} diff --git a/application/controllers/settings/General.php b/application/controllers/settings/General.php new file mode 100644 index 00000000..7278b715 --- /dev/null +++ b/application/controllers/settings/General.php @@ -0,0 +1,138 @@ + + * @copyright Copyright (c) 2013 - 2020, Alex Tselegidis + * @license https://opensource.org/licenses/GPL-3.0 - GPLv3 + * @link https://easyappointments.org + * @since v1.5.0 + * ---------------------------------------------------------------------------- */ + +/** + * General controller. + * + * Handles general settings related operations. + * + * @package Controllers + */ +class General extends EA_Controller { + /** + * @var array + */ + protected $permissions; + + /** + * Calendar constructor. + */ + public function __construct() + { + parent::__construct(); + + $this->load->model('appointments_model'); + $this->load->model('customers_model'); + $this->load->model('services_model'); + $this->load->model('providers_model'); + $this->load->model('roles_model'); + $this->load->model('settings_model'); + + $this->load->library('accounts'); + $this->load->library('google_sync'); + $this->load->library('notifications'); + $this->load->library('synchronization'); + $this->load->library('timezones'); + + $role_slug = session('role_slug'); + + if ($role_slug) + { + $this->permissions = $this->roles_model->get_permissions_by_slug($role_slug); + } + } + + /** + * Render the settings page. + */ + public function index() + { + session(['dest_url' => site_url('services')]); + + if (cannot('view', 'services')) + { + show_error('Forbidden', 403); + } + + $user_id = session('user_id'); + + $role_slug = session('role_slug'); + + $this->load->view('pages/settings/general/general_page', [ + 'page_title' => lang('settings'), + 'active_menu' => PRIV_SYSTEM_SETTINGS, + 'user_display_name' => $this->accounts->get_user_display_name($user_id), + 'timezones' => $this->timezones->to_array(), + 'privileges' => $this->roles_model->get_permissions_by_slug($role_slug), + 'system_settings' => $this->settings_model->get(), + ]); + } + + /** + * Save general settings. + */ + public function save() + { + try + { + if ($this->permissions[PRIV_SYSTEM_SETTINGS]['edit'] == FALSE) + { + throw new Exception('You do not have the required permissions for this task.'); + } + + $settings = json_decode(request('settings', FALSE), TRUE); + + // Check if phone number settings are valid. + + $phone_number_required = FALSE; + + $phone_number_shown = FALSE; + + foreach ($settings as $setting) + { + if ($setting['name'] === 'require_phone_number') + { + $phone_number_required = $setting['value']; + } + + if ($setting['name'] === 'show_phone_number') + { + $phone_number_shown = $setting['value']; + } + } + + if ($phone_number_required && ! $phone_number_shown) + { + throw new RuntimeException('You cannot hide the phone number in the booking form while it\'s also required!'); + } + + foreach ($settings as $setting) + { + $existing_setting = $this->settings_model->query()->where('name', $setting['name'])->get()->row_array(); + + if ( ! empty($existing_setting)) + { + $setting['id'] = $existing_setting['id']; + } + + $this->settings_model->save($setting); + } + + response(); + } + catch (Throwable $e) + { + json_exception($e); + } + } +} diff --git a/application/views/pages/settings/general/general_page.php b/application/views/pages/settings/general/general_page.php new file mode 100755 index 00000000..81040a5d --- /dev/null +++ b/application/views/pages/settings/general/general_page.php @@ -0,0 +1,158 @@ + + + + + + + + + + +