forked from mirrors/easyappointments
187 lines
5.4 KiB
PHP
187 lines
5.4 KiB
PHP
|
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||
|
|
||
|
/* ----------------------------------------------------------------------------
|
||
|
* Easy!Appointments - Open Source Web Scheduler
|
||
|
*
|
||
|
* @package EasyAppointments
|
||
|
* @author A.Tselegidis <alextselegidis@gmail.com>
|
||
|
* @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);
|
||
|
}
|
||
|
}
|
||
|
}
|