Compare commits
33 commits
Author | SHA1 | Date | |
---|---|---|---|
b311a9b59e | |||
b06d335271 | |||
98a37bde1d | |||
|
a02a6118b6 | ||
|
b192b437e0 | ||
|
acafb0da48 | ||
|
fa6f685e13 | ||
|
ac7ca85b88 | ||
|
cd768bda85 | ||
|
02162ee232 | ||
|
c7f2e7f831 | ||
26d909a19b | |||
42c707cea3 | |||
|
cd6280b97d | ||
|
aee7bb80c0 | ||
|
7a8832d311 | ||
|
5a1f604e3d | ||
|
6a1b2b28f1 | ||
|
e0a1282338 | ||
|
c5eafc9552 | ||
|
87cb1e190b | ||
|
10383d407b | ||
1e46fe94ac | |||
890f265bb9 | |||
a2813d235c | |||
c8e8fb64f1 | |||
d7ff69480a | |||
6236546d54 | |||
649f31e9b8 | |||
212b6b732d | |||
514e2ebc18 | |||
d08d1459e2 | |||
f495df0488 |
69 changed files with 825 additions and 685 deletions
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"php.version": "8.2"
|
||||
}
|
|
@ -5,11 +5,11 @@
|
|||
| App Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Declare some of the global config values of Easy!Appointments.
|
||||
| Declare some of the global config values of MaketRandevu.
|
||||
|
|
||||
*/
|
||||
|
||||
$config['version'] = '1.5.0-dev.4'; // This must be changed manually.
|
||||
$config['version'] = '1.5.0-RC2'; // This must be changed manually.
|
||||
|
||||
$config['url'] = Config::BASE_URL;
|
||||
|
||||
|
|
|
@ -94,13 +94,13 @@ $languages = [
|
|||
|
||||
$config['language_codes'] = $languages;
|
||||
|
||||
$language_code = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'en';
|
||||
$language_code = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'tr';
|
||||
|
||||
$config['language'] = isset($_SERVER['HTTP_ACCEPT_LANGUAGE'], $languages[$language_code])
|
||||
? $languages[$language_code]
|
||||
: Config::LANGUAGE;
|
||||
|
||||
$config['language_code'] = array_search($config['language'], $languages) ?: 'en';
|
||||
$config['language_code'] = array_search($config['language'], $languages) ?: 'tr';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
@ -151,7 +151,7 @@ $config['enable_hooks'] = TRUE;
|
|||
| http://codeigniter.com/user_guide/general/creating_libraries.html
|
||||
|
|
||||
*/
|
||||
$config['subclass_prefix'] = 'EA_';
|
||||
$config['subclass_prefix'] = 'EA_'; //TODO create new MAKET_ prefix in future
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// Example: $config['smtp_host'] = 'smtp.gmail.com';
|
||||
// @link https://codeigniter.com/user_guide/libraries/email.html
|
||||
|
||||
$config['useragent'] = 'Easy!Appointments';
|
||||
$config['useragent'] = 'MaketRandevu';
|
||||
$config['protocol'] = 'mail'; // or 'smtp'
|
||||
$config['mailtype'] = 'html'; // or 'text'
|
||||
// $config['smtp_debug'] = '0'; // or '1'
|
||||
|
|
|
@ -52,7 +52,7 @@ class Installation extends EA_Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Installs Easy!Appointments on the server.
|
||||
* Installs MAKET Randevu on the server.
|
||||
*/
|
||||
public function perform()
|
||||
{
|
||||
|
@ -67,7 +67,7 @@ class Installation extends EA_Controller
|
|||
$this->instance->migrate();
|
||||
|
||||
// Insert admin
|
||||
$admin['timezone'] = 'UTC';
|
||||
$admin['timezone'] = 'Europe/Istanbul'; // REVIEW is it working properly ?!
|
||||
$admin['settings']['username'] = $admin['username'];
|
||||
$admin['settings']['password'] = $admin['password'];
|
||||
$admin['settings']['notifications'] = true;
|
||||
|
@ -92,8 +92,8 @@ class Installation extends EA_Controller
|
|||
|
||||
// Service
|
||||
$service_id = $this->services_model->save([
|
||||
'name' => 'Service',
|
||||
'duration' => '30',
|
||||
'name' => 'Hizmet İsmini Buraya Girin',
|
||||
'duration' => '60',
|
||||
'price' => '0',
|
||||
'currency' => '',
|
||||
'availabilities_type' => 'flexible',
|
||||
|
@ -102,13 +102,13 @@ class Installation extends EA_Controller
|
|||
|
||||
// Provider
|
||||
$this->providers_model->save([
|
||||
'first_name' => 'Jane',
|
||||
'last_name' => 'Doe',
|
||||
'email' => 'jane@example.org',
|
||||
'phone_number' => '+1 (000) 000-0000',
|
||||
'first_name' => 'Hizmet Sağlayıcı İsmini Buraya Girin',
|
||||
'last_name' => 'Hizmet Sağlayıcı Soyismini Buraya Girin',
|
||||
'email' => 'hizmet_saglayici_mail@example.org',
|
||||
'phone_number' => '+90 (000) 000-0000',
|
||||
'services' => [$service_id],
|
||||
'settings' => [
|
||||
'username' => 'janedoe',
|
||||
'username' => 'ilkhizmetsaglayici',
|
||||
'password' => random_string(),
|
||||
'working_plan' => setting('company_working_plan'),
|
||||
'notifications' => true,
|
||||
|
@ -121,10 +121,10 @@ class Installation extends EA_Controller
|
|||
|
||||
// Customer
|
||||
$this->customers_model->save([
|
||||
'first_name' => 'James',
|
||||
'last_name' => 'Doe',
|
||||
'email' => 'james@example.org',
|
||||
'phone_number' => '+1 (000) 000-0000',
|
||||
'first_name' => 'Örnek Müşteri İsmi',
|
||||
'last_name' => 'Örnek Müşteri Soyismi',
|
||||
'email' => 'ornek_musteri@example.org',
|
||||
'phone_number' => '+90 (000) 000-0000',
|
||||
]);
|
||||
|
||||
json_response([
|
||||
|
|
|
@ -37,7 +37,7 @@ class Admins_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get an admin collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -79,9 +79,17 @@ class Admins_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Admin ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->admins_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$with = $this->api->request_with();
|
||||
|
@ -98,12 +106,6 @@ class Admins_api_v1 extends EA_Controller
|
|||
$this->admins_model->load($admin, $with);
|
||||
}
|
||||
|
||||
if (!$admin) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($admin);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -113,7 +115,7 @@ class Admins_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new admin.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$admin = request();
|
||||
|
@ -145,7 +147,7 @@ class Admins_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Admin ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->admins_model->get(['id' => $id]);
|
||||
|
@ -179,7 +181,7 @@ class Admins_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Admin ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->admins_model->get(['id' => $id]);
|
||||
|
|
|
@ -43,7 +43,7 @@ class Appointments_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get an appointment collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -143,7 +143,7 @@ class Appointments_api_v1 extends EA_Controller
|
|||
*
|
||||
* @deprecated Since 1.5
|
||||
*/
|
||||
private function aggregates(array &$appointment)
|
||||
private function aggregates(array &$appointment): void
|
||||
{
|
||||
$aggregates = request('aggregates') !== null;
|
||||
|
||||
|
@ -171,9 +171,17 @@ class Appointments_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Appointment ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->appointments_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$with = $this->api->request_with();
|
||||
|
@ -190,12 +198,6 @@ class Appointments_api_v1 extends EA_Controller
|
|||
$this->appointments_model->load($appointment, $with);
|
||||
}
|
||||
|
||||
if (!$appointment) {
|
||||
response('Not Found', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($appointment);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -205,7 +207,7 @@ class Appointments_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new appointment.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$appointment = request();
|
||||
|
@ -295,7 +297,7 @@ class Appointments_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Appointment ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->appointments_model->get(['id' => $id]);
|
||||
|
@ -331,7 +333,7 @@ class Appointments_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Appointment ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->appointments_model->get(['id' => $id]);
|
||||
|
|
|
@ -54,7 +54,7 @@ class Availabilities_api_v1 extends EA_Controller
|
|||
*
|
||||
* If no date parameter is provided then the current date will be used.
|
||||
*/
|
||||
public function get()
|
||||
public function get(): void
|
||||
{
|
||||
try {
|
||||
$provider_id = request('providerId');
|
||||
|
|
|
@ -35,7 +35,7 @@ class Customers_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get a customer collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -77,9 +77,17 @@ class Customers_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Customer ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->customers_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$customer = $this->customers_model->find($id);
|
||||
|
@ -90,12 +98,6 @@ class Customers_api_v1 extends EA_Controller
|
|||
$this->customers_model->only($customer, $fields);
|
||||
}
|
||||
|
||||
if (!$customer) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($customer);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -105,7 +107,7 @@ class Customers_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new customer.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$customer = request();
|
||||
|
@ -133,7 +135,7 @@ class Customers_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Customer ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->customers_model->get(['id' => $id]);
|
||||
|
@ -167,7 +169,7 @@ class Customers_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Customer ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->customers_model->get(['id' => $id]);
|
||||
|
|
|
@ -35,7 +35,7 @@ class Providers_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get a provider collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -77,9 +77,17 @@ class Providers_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Provider ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->providers_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$with = $this->api->request_with();
|
||||
|
@ -96,12 +104,6 @@ class Providers_api_v1 extends EA_Controller
|
|||
$this->providers_model->load($provider, $with);
|
||||
}
|
||||
|
||||
if (!$provider) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($provider);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -111,7 +113,7 @@ class Providers_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new provider.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$provider = request();
|
||||
|
@ -151,7 +153,7 @@ class Providers_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Provider ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->providers_model->get(['id' => $id]);
|
||||
|
@ -185,7 +187,7 @@ class Providers_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Provider ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->providers_model->get(['id' => $id]);
|
||||
|
|
|
@ -35,7 +35,7 @@ class Secretaries_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get a secretary collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -77,9 +77,17 @@ class Secretaries_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Secretary ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->secretaries_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$secretary = $this->secretaries_model->find($id);
|
||||
|
@ -90,12 +98,6 @@ class Secretaries_api_v1 extends EA_Controller
|
|||
$this->secretaries_model->only($secretary, $fields);
|
||||
}
|
||||
|
||||
if (!$secretary) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($secretary);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -105,7 +107,7 @@ class Secretaries_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new secretary.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$secretary = request();
|
||||
|
@ -141,7 +143,7 @@ class Secretaries_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Secretary ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->secretaries_model->get(['id' => $id]);
|
||||
|
@ -175,7 +177,7 @@ class Secretaries_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Secretary ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->secretaries_model->get(['id' => $id]);
|
||||
|
|
|
@ -35,7 +35,7 @@ class Service_categories_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get a service-category collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -77,9 +77,17 @@ class Service_categories_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Service-category ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->service_categories_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$with = $this->api->request_with();
|
||||
|
@ -96,12 +104,6 @@ class Service_categories_api_v1 extends EA_Controller
|
|||
$this->service_categories_model->load($service_category, $with);
|
||||
}
|
||||
|
||||
if (!$service_category) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($service_category);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -111,7 +113,7 @@ class Service_categories_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new service-category.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$service_category = request();
|
||||
|
@ -139,7 +141,7 @@ class Service_categories_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Service-category ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->service_categories_model->get(['id' => $id]);
|
||||
|
@ -173,7 +175,7 @@ class Service_categories_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Service-category ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->service_categories_model->get(['id' => $id]);
|
||||
|
|
|
@ -35,7 +35,7 @@ class Services_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get an service collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -77,9 +77,17 @@ class Services_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Service ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->services_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$with = $this->api->request_with();
|
||||
|
@ -96,12 +104,6 @@ class Services_api_v1 extends EA_Controller
|
|||
$this->services_model->load($service, $with);
|
||||
}
|
||||
|
||||
if (!$service) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($service);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -111,7 +113,7 @@ class Services_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new service.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$service = request();
|
||||
|
@ -139,7 +141,7 @@ class Services_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Service ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->services_model->get(['id' => $id]);
|
||||
|
@ -173,7 +175,7 @@ class Services_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Service ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->services_model->get(['id' => $id]);
|
||||
|
|
|
@ -71,7 +71,7 @@ class Settings_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param string $name Setting name.
|
||||
*/
|
||||
public function show(string $name)
|
||||
public function show(string $name): void
|
||||
{
|
||||
try {
|
||||
$value = setting($name);
|
||||
|
@ -90,7 +90,7 @@ class Settings_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param string $name Setting name.
|
||||
*/
|
||||
public function update(string $name)
|
||||
public function update(string $name): void
|
||||
{
|
||||
try {
|
||||
$value = request('value');
|
||||
|
|
|
@ -35,7 +35,7 @@ class Unavailabilities_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get an unavailability collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -77,9 +77,17 @@ class Unavailabilities_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Unavailability ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->unavailabilities_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$with = $this->api->request_with();
|
||||
|
@ -96,12 +104,6 @@ class Unavailabilities_api_v1 extends EA_Controller
|
|||
$this->unavailabilities_model->load($unavailability, $with);
|
||||
}
|
||||
|
||||
if (!$unavailability) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($unavailability);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -111,7 +113,7 @@ class Unavailabilities_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new unavailability.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$unavailability = request();
|
||||
|
@ -139,7 +141,7 @@ class Unavailabilities_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Unavailability ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->unavailabilities_model->get(['id' => $id]);
|
||||
|
@ -173,7 +175,7 @@ class Unavailabilities_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Unavailability ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->unavailabilities_model->get(['id' => $id]);
|
||||
|
|
|
@ -35,7 +35,7 @@ class Webhooks_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Get a webhook collection.
|
||||
*/
|
||||
public function index()
|
||||
public function index(): void
|
||||
{
|
||||
try {
|
||||
$keyword = $this->api->request_keyword();
|
||||
|
@ -77,9 +77,17 @@ class Webhooks_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int|null $id Webhook ID.
|
||||
*/
|
||||
public function show(int $id = null)
|
||||
public function show(int $id = null): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->webhooks_model->get(['id' => $id]);
|
||||
|
||||
if (empty($occurrences)) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$fields = $this->api->request_fields();
|
||||
|
||||
$with = $this->api->request_with();
|
||||
|
@ -96,12 +104,6 @@ class Webhooks_api_v1 extends EA_Controller
|
|||
$this->webhooks_model->load($webhook, $with);
|
||||
}
|
||||
|
||||
if (!$webhook) {
|
||||
response('', 404);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
json_response($webhook);
|
||||
} catch (Throwable $e) {
|
||||
json_exception($e);
|
||||
|
@ -111,7 +113,7 @@ class Webhooks_api_v1 extends EA_Controller
|
|||
/**
|
||||
* Store a new webhook.
|
||||
*/
|
||||
public function store()
|
||||
public function store(): void
|
||||
{
|
||||
try {
|
||||
$webhook = request();
|
||||
|
@ -139,7 +141,7 @@ class Webhooks_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Webhook ID.
|
||||
*/
|
||||
public function update(int $id)
|
||||
public function update(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->webhooks_model->get(['id' => $id]);
|
||||
|
@ -173,7 +175,7 @@ class Webhooks_api_v1 extends EA_Controller
|
|||
*
|
||||
* @param int $id Webhook ID.
|
||||
*/
|
||||
public function destroy(int $id)
|
||||
public function destroy(int $id): void
|
||||
{
|
||||
try {
|
||||
$occurrences = $this->webhooks_model->get(['id' => $id]);
|
||||
|
|
|
@ -46,8 +46,12 @@ if (!function_exists('branding')) {
|
|||
|
||||
// Yazılım Sağlayıcı Bilgileri
|
||||
$software = array(
|
||||
"name" => "MAKET",
|
||||
"description" => "MAKET Randevu Portalı",
|
||||
"name" => "MAKET Randevu",
|
||||
"name_tr" => "MAKET Randevu",
|
||||
"name_en" => "MAKET Appointment",
|
||||
"description" => "MAKET Randevu",
|
||||
"description_tr" => "MAKET Randevu Portalı",
|
||||
"description_en" => "MAKET Appointment Portal",
|
||||
"maintainers" => "Aliberk Sandıkçı & Alex Tselegidis", // to also give credit to original maintainer
|
||||
"maintainer_nickname" => "asandikci",
|
||||
"maintainer_name" => "Aliberk Sandıkçı",
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||||
// Turkish
|
||||
// English
|
||||
|
||||
$lang['address'] = 'School Name';
|
||||
$lang['city'] = 'School City';
|
||||
$lang['zip_code'] = 'Number of Students';
|
||||
$lang['notes'] = 'Extra Notes';
|
||||
|
||||
$lang['system_installation'] = 'System Installation';
|
||||
$lang['system_installation_welcome_header'] = 'Welcome to the ' . branding("software", "name") . " installation page";
|
||||
$lang['powered_by'] = 'Powered By <a href="' . branding("software", "website") . '" target="_blank">' . branding("software", "name") . '</a>';
|
||||
$lang['system_installation_welcome_header'] = 'Welcome to the ' . branding("software", "name_en") . " installation page";
|
||||
$lang['powered_by'] = 'Powered By <a href="' . branding("software", "website") . '" target="_blank">' . branding("software", "name_en") . '</a>';
|
||||
// End
|
||||
|
|
|
@ -175,22 +175,22 @@ $lang['visible'] = 'Visible';
|
|||
$lang['hidden'] = 'Hidden';
|
||||
$lang['business_logic'] = 'Business Logic';
|
||||
$lang['current_user'] = 'Current User';
|
||||
$lang['about_app'] = 'About Easy!Appointments';
|
||||
$lang['about_app'] = 'About MAKET Randevu';
|
||||
$lang['edit_working_plan_hint'] = 'Mark below the days and hours that your company will accept appointments. You will be able to adjust appointments in non-working hours but the customers will not be able to book appointments by themselves in non-working periods. This working plan will be the default for every new provider record, but you will be able to change each provider\'s plan separately by editing his record. After that you can add break periods.';
|
||||
$lang['edit_breaks_hint'] = 'Add the working breaks during each day. These breaks will be applied for all new providers.';
|
||||
$lang['book_advance_timeout'] = 'Book Advance Timeout';
|
||||
$lang['book_advance_timeout_hint'] = 'Define the timeout (in minutes) before the customers can book or re-arrange appointments with the company.';
|
||||
$lang['timeout_minutes'] = 'Timeout (Minutes)';
|
||||
$lang['about_app_info'] = 'Easy!Appointments is a highly customizable web application that allows your customers to book appointments with you via the web. Moreover, it provides the ability to sync your data with Google Calendar, so you can use them with other services.';
|
||||
$lang['about_app_info'] = 'MAKET Randevu is a highly customizable web application that allows your customers to book appointments with you via the web. Moreover, it provides the ability to sync your data with Google Calendar, so you can use them with other services.';
|
||||
$lang['current_version'] = 'Current Version';
|
||||
$lang['support'] = 'Support';
|
||||
$lang['about_app_support'] = 'If you encounter any problems when using Easy!Appointments you can search the official Google Group for answers. You might also need to create a new issue on the Google Code page in order to help the development progress.';
|
||||
$lang['about_app_support'] = 'If you encounter any problems when using MAKET Randevu you can search the official Google Group for answers. You might also need to create a new issue on the Google Code page in order to help the development progress.';
|
||||
$lang['official_website'] = 'Official Website';
|
||||
$lang['google_plus_community'] = 'Google+ Community';
|
||||
$lang['support_group'] = 'Support Group';
|
||||
$lang['project_issues'] = 'Project Issues';
|
||||
$lang['license'] = 'License';
|
||||
$lang['about_app_license'] = 'Easy!Appointments is licensed under the GPLv3 license. By using the code of Easy!Appointments in any way you are agreeing to the terms described in the following url:';
|
||||
$lang['about_app_license'] = 'MAKET Randevu is licensed under the GPLv3 license. By using the code of MAKET Randevu in any way you are agreeing to the terms described in the following url:';
|
||||
$lang['logout_success'] = 'You have been successfully logged out! Click on one of the following buttons to navigate to a different page.';
|
||||
$lang['book_appointment_title'] = 'Book Appointment';
|
||||
$lang['backend_section'] = 'Backend Section';
|
||||
|
@ -272,7 +272,7 @@ $lang['select_google_calendar_prompt'] = 'Select the calendar that you want to s
|
|||
$lang['google_calendar_selected'] = 'Google calendar has been successfully selected.';
|
||||
$lang['oops_something_went_wrong'] = 'Oops! Something Went Wrong.';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Your appointment could not be added to your Google Calendar account.';
|
||||
$lang['ea_update_success'] = 'Easy!Appointments has been successfully updated.';
|
||||
$lang['ea_update_success'] = 'MAKET Randevu has been successfully updated.';
|
||||
$lang['require_captcha'] = 'Require CAPTCHA';
|
||||
$lang['require_captcha_hint'] = 'When enabled, the customers will have to type a random generated CAPTCHA string before booking/updating an appointment.';
|
||||
$lang['captcha_is_wrong'] = 'CAPTCHA verification failed, please try again.';
|
||||
|
@ -320,7 +320,7 @@ $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['api_token_hint'] = 'Set a secret token in order to enable the token based authentication of the MAKET Randevu 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.';
|
||||
|
@ -396,7 +396,7 @@ $lang['google_analytics_info'] = 'Google Analytics enable you to automatically a
|
|||
$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['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['api_info'] = 'API enable you to interact with all the MAKET Randevu 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';
|
||||
|
@ -449,4 +449,8 @@ $lang['blocked_periods_hint'] = 'Define periods of time where public bookings wi
|
|||
$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';
|
||||
// End
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -37,48 +37,48 @@
|
|||
*/
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
$lang['cal_su'] = 'Su';
|
||||
$lang['cal_mo'] = 'Mo';
|
||||
$lang['cal_tu'] = 'Tu';
|
||||
$lang['cal_we'] = 'We';
|
||||
$lang['cal_th'] = 'Th';
|
||||
$lang['cal_fr'] = 'Fr';
|
||||
$lang['cal_sa'] = 'Sa';
|
||||
$lang['cal_sun'] = 'Sun';
|
||||
$lang['cal_mon'] = 'Mon';
|
||||
$lang['cal_tue'] = 'Tue';
|
||||
$lang['cal_wed'] = 'Wed';
|
||||
$lang['cal_thu'] = 'Thu';
|
||||
$lang['cal_fri'] = 'Fri';
|
||||
$lang['cal_sat'] = 'Sat';
|
||||
$lang['cal_sunday'] = 'Sunday';
|
||||
$lang['cal_monday'] = 'Monday';
|
||||
$lang['cal_tuesday'] = 'Tuesday';
|
||||
$lang['cal_wednesday'] = 'Wednesday';
|
||||
$lang['cal_thursday'] = 'Thursday';
|
||||
$lang['cal_friday'] = 'Friday';
|
||||
$lang['cal_saturday'] = 'Saturday';
|
||||
$lang['cal_jan'] = 'Jan';
|
||||
$lang['cal_feb'] = 'Feb';
|
||||
$lang['cal_su'] = 'Pz';
|
||||
$lang['cal_mo'] = 'Pt';
|
||||
$lang['cal_tu'] = 'Sl';
|
||||
$lang['cal_we'] = 'Çş';
|
||||
$lang['cal_th'] = 'Pş';
|
||||
$lang['cal_fr'] = 'Cm';
|
||||
$lang['cal_sa'] = 'Ct';
|
||||
$lang['cal_sun'] = 'Pzr';
|
||||
$lang['cal_mon'] = 'Pzt';
|
||||
$lang['cal_tue'] = 'Salı';
|
||||
$lang['cal_wed'] = 'Çrş';
|
||||
$lang['cal_thu'] = 'Prş';
|
||||
$lang['cal_fri'] = 'Cuma';
|
||||
$lang['cal_sat'] = 'Cmt';
|
||||
$lang['cal_sunday'] = 'Pazar';
|
||||
$lang['cal_monday'] = 'Pazartesi';
|
||||
$lang['cal_tuesday'] = 'Salı';
|
||||
$lang['cal_wednesday'] = 'Çarşamba';
|
||||
$lang['cal_thursday'] = 'Perşembe';
|
||||
$lang['cal_friday'] = 'Cuma';
|
||||
$lang['cal_saturday'] = 'Cumartesi';
|
||||
$lang['cal_jan'] = 'Oca';
|
||||
$lang['cal_feb'] = 'Şub';
|
||||
$lang['cal_mar'] = 'Mar';
|
||||
$lang['cal_apr'] = 'Apr';
|
||||
$lang['cal_apr'] = 'Nis';
|
||||
$lang['cal_may'] = 'May';
|
||||
$lang['cal_jun'] = 'Jun';
|
||||
$lang['cal_jul'] = 'Jul';
|
||||
$lang['cal_aug'] = 'Aug';
|
||||
$lang['cal_sep'] = 'Sep';
|
||||
$lang['cal_oct'] = 'Oct';
|
||||
$lang['cal_nov'] = 'Nov';
|
||||
$lang['cal_dec'] = 'Dec';
|
||||
$lang['cal_january'] = 'January';
|
||||
$lang['cal_february'] = 'February';
|
||||
$lang['cal_march'] = 'March';
|
||||
$lang['cal_april'] = 'April';
|
||||
$lang['cal_mayl'] = 'May';
|
||||
$lang['cal_june'] = 'June';
|
||||
$lang['cal_july'] = 'July';
|
||||
$lang['cal_august'] = 'August';
|
||||
$lang['cal_september'] = 'September';
|
||||
$lang['cal_october'] = 'October';
|
||||
$lang['cal_november'] = 'November';
|
||||
$lang['cal_december'] = 'December';
|
||||
$lang['cal_jun'] = 'Haz';
|
||||
$lang['cal_jul'] = 'Tem';
|
||||
$lang['cal_aug'] = 'Ağu';
|
||||
$lang['cal_sep'] = 'Eyl';
|
||||
$lang['cal_oct'] = 'Eki';
|
||||
$lang['cal_nov'] = 'Kas';
|
||||
$lang['cal_dec'] = 'Ara';
|
||||
$lang['cal_january'] = 'Ocak';
|
||||
$lang['cal_february'] = 'Şubat';
|
||||
$lang['cal_march'] = 'Mart';
|
||||
$lang['cal_april'] = 'Nisan';
|
||||
$lang['cal_mayl'] = 'Mayıs';
|
||||
$lang['cal_june'] = 'Haziran';
|
||||
$lang['cal_july'] = 'Temmuz';
|
||||
$lang['cal_august'] = 'Ağustos';
|
||||
$lang['cal_september'] = 'Eylül';
|
||||
$lang['cal_october'] = 'Ekim';
|
||||
$lang['cal_november'] = 'Kasım';
|
||||
$lang['cal_december'] = 'Aralık';
|
||||
|
|
|
@ -37,20 +37,20 @@
|
|||
*/
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
$lang['date_year'] = 'Year';
|
||||
$lang['date_years'] = 'Years';
|
||||
$lang['date_month'] = 'Month';
|
||||
$lang['date_months'] = 'Months';
|
||||
$lang['date_week'] = 'Week';
|
||||
$lang['date_weeks'] = 'Weeks';
|
||||
$lang['date_day'] = 'Day';
|
||||
$lang['date_days'] = 'Days';
|
||||
$lang['date_hour'] = 'Hour';
|
||||
$lang['date_hours'] = 'Hours';
|
||||
$lang['date_minute'] = 'Minute';
|
||||
$lang['date_minutes'] = 'Minutes';
|
||||
$lang['date_second'] = 'Second';
|
||||
$lang['date_seconds'] = 'Seconds';
|
||||
$lang['date_year'] = 'Yıl';
|
||||
$lang['date_years'] = 'Yıl';
|
||||
$lang['date_month'] = 'Ay';
|
||||
$lang['date_months'] = 'AY';
|
||||
$lang['date_week'] = 'Hafta';
|
||||
$lang['date_weeks'] = 'Hafta';
|
||||
$lang['date_day'] = 'Gün';
|
||||
$lang['date_days'] = 'Gün';
|
||||
$lang['date_hour'] = 'Saat';
|
||||
$lang['date_hours'] = 'Saat';
|
||||
$lang['date_minute'] = 'Dakika';
|
||||
$lang['date_minutes'] = 'Dakika';
|
||||
$lang['date_second'] = 'Saniye';
|
||||
$lang['date_seconds'] = 'Saniye';
|
||||
|
||||
$lang['UM12'] = '(UTC -12:00) Baker/Howland Island';
|
||||
$lang['UM11'] = '(UTC -11:00) Niue';
|
||||
|
@ -70,7 +70,7 @@ $lang['UM1'] = '(UTC -1:00) Azores, Cape Verde Islands';
|
|||
$lang['UTC'] = '(UTC) Greenwich Mean Time, Western European Time';
|
||||
$lang['UP1'] = '(UTC +1:00) Central European Time, West Africa Time';
|
||||
$lang['UP2'] = '(UTC +2:00) Central Africa Time, Eastern European Time, Kaliningrad Time';
|
||||
$lang['UP3'] = '(UTC +3:00) Moscow Time, East Africa Time, Arabia Standard Time';
|
||||
$lang['UP3'] = '(UTC +3:00) Moscow Time, East Africa Time, Arabia Standard Time, Türkiye Time';
|
||||
$lang['UP35'] = '(UTC +3:30) Iran Standard Time';
|
||||
$lang['UP4'] = '(UTC +4:00) Azerbaijan Standard Time, Samara Time';
|
||||
$lang['UP45'] = '(UTC +4:30) Afghanistan';
|
||||
|
|
|
@ -15,7 +15,7 @@ $lang['db_unable_to_select'] = 'Belirtilen veri tabanı seçilemiyor: %s';
|
|||
$lang['db_unable_to_create'] = 'Belirtilen veri tabanı oluşturulamıyor: %s';
|
||||
$lang['db_invalid_query'] = 'Verilen sorgu geçersiz.';
|
||||
$lang['db_must_set_table'] = 'Sorguda kullanılacak tabloyu belirtmelisiniz.';
|
||||
$lang['db_must_use_set'] = 'Kaydı güncellemek için "set" metodu kullanmalısınız.';
|
||||
$lang['db_must_use_set'] = 'Kaydı güncellemek için "set" metodunu kullanmalısınız.';
|
||||
$lang['db_must_use_index'] = 'Toplu güncellemede eşleştirme için bir indeks belirtmelisiniz.';
|
||||
$lang['db_batch_missing_index'] = 'Toplu güncelleme için verilen bir veya birden fazla kaydın belirtilen indeksi eksik.';
|
||||
$lang['db_must_use_where'] = '"where" sözcüğü olmayan güncellemelere izin verilmez.';
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
*/
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
$lang['form_validation_required'] = 'The {field} field is required.';
|
||||
$lang['form_validation_isset'] = 'The {field} field must have a value.';
|
||||
$lang['form_validation_required'] = '{field} alanı zorunludur.';
|
||||
$lang['form_validation_isset'] = '{field} alanı bir değere sahip olmalıdır.';
|
||||
$lang['form_validation_valid_email'] = 'The {field} field must contain a valid email address.';
|
||||
$lang['form_validation_valid_emails'] = 'The {field} field must contain all valid email addresses.';
|
||||
$lang['form_validation_valid_url'] = 'The {field} field must contain a valid URL.';
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
<?php defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
// Turkish
|
||||
|
||||
$lang['address'] = 'Okulunuzun Adı';
|
||||
$lang['city'] = 'Okulunuzun Bulunduğu Şehir';
|
||||
$lang['zip_code'] = 'Gelecek Öğrenci Sayısı';
|
||||
$lang['notes'] = 'Eklemek İstedikleriniz';
|
||||
|
||||
$lang['system_installation'] = 'Sistem Yüklemesi';
|
||||
$lang['system_installation_welcome_header'] = branding("software", "name") . " sistem yükleme sayfasına hoşgeldiniz";
|
||||
$lang['powered_by'] = '<a href="' . branding("software", "website") . '" target="_blank">' . branding("software", "name") . '</a> Gururla Sunar';
|
||||
$lang['system_installation_welcome_header'] = branding("software", "name_tr") . " sistem yükleme sayfasına hoşgeldiniz";
|
||||
$lang['powered_by'] = '<a href="' . branding("software", "website") . '" target="_blank">' . branding("software", "name_tr") . '</a> Gururla Sunar';
|
||||
// End
|
||||
|
|
|
@ -41,4 +41,4 @@ $lang['terabyte_abbr'] = 'TB';
|
|||
$lang['gigabyte_abbr'] = 'GB';
|
||||
$lang['megabyte_abbr'] = 'MB';
|
||||
$lang['kilobyte_abbr'] = 'KB';
|
||||
$lang['bytes'] = 'Bytes';
|
||||
$lang['bytes'] = 'Bayt';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||||
// Turkish
|
||||
$lang['page_title'] = 'Randevu Alınacak Kişi';
|
||||
$lang['page_title'] = 'Randevu Al | ';
|
||||
$lang['service_and_provider'] = 'Hizmet ve Hizmet Sağlayıcıyı Seçin';
|
||||
$lang['select_service'] = 'Hizmeti Seçin';
|
||||
$lang['select_provider'] = 'Hizmet Sağlayıcıyı Seçin';
|
||||
|
@ -17,10 +17,10 @@ $lang['last_name'] = 'Soyad';
|
|||
$lang['email'] = 'Eposta';
|
||||
$lang['phone_number'] = 'Telefon No';
|
||||
$lang['phone'] = 'Phone';
|
||||
$lang['address'] = 'Adres';
|
||||
$lang['city'] = 'Şehir';
|
||||
$lang['zip_code'] = 'Posta Kodu';
|
||||
$lang['notes'] = 'Notlar';
|
||||
// $lang['address'] = 'Adres';
|
||||
// $lang['city'] = 'Şehir';
|
||||
// $lang['zip_code'] = 'Posta Kodu';
|
||||
// $lang['notes'] = 'Notlar';
|
||||
$lang['language'] = 'Dil';
|
||||
$lang['no_language'] = 'Dil yok';
|
||||
$lang['fields_are_required'] = '* Zorunlu Alanlar.';
|
||||
|
@ -175,22 +175,22 @@ $lang['visible'] = 'Gözle görülür';
|
|||
$lang['hidden'] = 'Gizli';
|
||||
$lang['business_logic'] = 'İş Mantığı';
|
||||
$lang['current_user'] = 'Mevcut Kullanıcı';
|
||||
$lang['about_app'] = 'Easy!Appointments Hakkında';
|
||||
$lang['about_app'] = 'MAKET Randevu Hakkında';
|
||||
$lang['edit_working_plan_hint'] = 'Aağıda şirketinizin kabul edeceği günleri ve saatleri işaretleyin. Çalışma saatleri dışında randevuları ayarlayabilirsiniz, ancak bu saatlere müşterilerin kendileri randevu kaydedemeyecektir. Bu çalışma planı tüm sağlayıcılar için varsayılan değer olup, daha sonra her biri için ayrıca özel plan da girebilir ve araları ekleyebilirsiniz.';
|
||||
$lang['edit_breaks_hint'] = 'Gün içindeki çalışma aralarını ekleyin. Bu aralar tüm yeni hizmet sağlayıcılar için geçerli olacaktır.';
|
||||
$lang['book_advance_timeout'] = 'Erken Randevu Zamanaşımı Değeri';
|
||||
$lang['book_advance_timeout_hint'] = 'Müşterilerin en az ne kadar önceden randevu alması veya randevu düzenlemesi gerektiğini girin (dakika cinsinden).';
|
||||
$lang['timeout_minutes'] = 'Zamanaşımı (Dakika)';
|
||||
$lang['about_app_info'] = 'Easy!Appointments yüksek ölçüde özelleştirilebilen, müşterilerinizin web üzerinden randevu almasını sağlayan bir uygulamadır. Ayrıca, bilgilerinizi Google Takvim ile eşitleyerek diğer uygulamalarla da entegre olmasını sağlar. ';
|
||||
$lang['about_app_info'] = 'MAKET Randevu yüksek ölçüde özelleştirilebilen, müşterilerinizin web üzerinden randevu almasını sağlayan bir uygulamadır. Ayrıca, bilgilerinizi Google Takvim ile eşitleyerek diğer uygulamalarla da entegre olmasını sağlar. ';
|
||||
$lang['current_version'] = 'Mevcut Versiyon';
|
||||
$lang['support'] = 'Destek';
|
||||
$lang['about_app_support'] = 'Easy!Appointments kullanımı sırasında sorun yaşamanız halinde resmi Google Group üzerinde arama yapabilirsiniz. Ayrıca geliştirmeye destek olmak için Google Code sayfasında yeni sorun girişi de yapabilirsiniz.';
|
||||
$lang['about_app_support'] = 'MAKET Randevu kullanımı sırasında sorun yaşamanız halinde resmi Google Group üzerinde arama yapabilirsiniz. Ayrıca geliştirmeye destek olmak için Google Code sayfasında yeni sorun girişi de yapabilirsiniz.';
|
||||
$lang['official_website'] = 'Resmi Web Sitesi';
|
||||
$lang['google_plus_community'] = 'Google+ Çevresi';
|
||||
$lang['support_group'] = 'Destek Grubu';
|
||||
$lang['project_issues'] = 'Proje Sorunları';
|
||||
$lang['license'] = 'Lisans';
|
||||
$lang['about_app_license'] = 'Easy!Appointments GPLv3 kapsamında lisanslıdır. Bu yazılımı herhangi bir biçimde kullanarak aşağıdaki adreste belirtilen koşulları kabul etmiş olursunuz:';
|
||||
$lang['about_app_license'] = 'MAKET Randevu GPLv3 kapsamında lisanslıdır. Bu yazılımı herhangi bir biçimde kullanarak aşağıdaki adreste belirtilen koşulları kabul etmiş olursunuz:';
|
||||
$lang['logout_success'] = 'Başarı ile sistemden çıkış yaptınız! Aşağıdaki butonlara tıklayarak diğer sayfalara geçebilirsiniz.';
|
||||
$lang['book_appointment_title'] = 'Randevu Al';
|
||||
$lang['backend_section'] = 'Yönetim Paneli';
|
||||
|
@ -272,7 +272,7 @@ $lang['select_google_calendar_prompt'] = 'Randevularınızı eşitlemek istediğ
|
|||
$lang['google_calendar_selected'] = 'Google Takvimi başarıyla seçildi.';
|
||||
$lang['oops_something_went_wrong'] = 'Oops! Bir Sorun Oluştu.';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Randevunuz Google Takvim hesabınıza eklenemedi.';
|
||||
$lang['ea_update_success'] = 'Easy!Appointments başarı ile güncellendi.';
|
||||
$lang['ea_update_success'] = 'MAKET Randevu başarı ile güncellendi.';
|
||||
$lang['require_captcha'] = 'CAPTCHA gereklidir';
|
||||
$lang['require_captcha_hint'] = 'When enabled, the customers will have to type a random generated CAPTCHA string before booking/updating an appointment.';
|
||||
$lang['captcha_is_wrong'] = 'CAPTCHA verification failed, please try again.';
|
||||
|
@ -320,7 +320,7 @@ $lang['add_working_plan_exception'] = 'İstisna ekle';
|
|||
$lang['require_phone_number'] = 'Telefon num. gerekli';
|
||||
$lang['require_phone_number_hint'] = 'Etkinleştirildiğinde, müşterilerin ve kullanıcıların randevu alırken müşterinin telefon numarasını girmeleri gerekir.';
|
||||
$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['api_token_hint'] = 'MAKET Randevu Api sinin belirteç tabanlı kimlik doğrulamasını etkinleştirmek için gizli bir belirteç ayarlayın.';
|
||||
$lang['timezone'] = 'Saat Dilimi';
|
||||
$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.';
|
||||
|
@ -362,8 +362,8 @@ $lang['private_hint'] = 'Private records will not be displayed or processed in p
|
|||
$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['add_new_event'] = 'Yeni Etkinlik Ekle';
|
||||
$lang['what_kind_of_event'] = 'Ne tarz bir etkinlik eklemek istersiniz?';
|
||||
$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.';
|
||||
|
@ -396,7 +396,7 @@ $lang['google_analytics_info'] = 'Google Analytics enable you to automatically a
|
|||
$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['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['api_info'] = 'API enable you to interact with all the MAKET Randevu 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';
|
||||
|
@ -408,37 +408,37 @@ $lang['at_least_one_field'] = 'At least one field must be displayed in the booki
|
|||
$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['january_short'] = 'Jan';
|
||||
$lang['february_short'] = 'Feb';
|
||||
$lang['sunday_short'] = 'Pzr';
|
||||
$lang['monday_short'] = 'Pzt';
|
||||
$lang['tuesday_short'] = 'Salı';
|
||||
$lang['wednesday_short'] = 'Çrş';
|
||||
$lang['thursday_short'] = 'Prş';
|
||||
$lang['friday_short'] = 'Cuma';
|
||||
$lang['saturday_short'] = 'Cmt';
|
||||
$lang['january_short'] = 'Oca';
|
||||
$lang['february_short'] = 'Şub';
|
||||
$lang['march_short'] = 'Mar';
|
||||
$lang['april_short'] = 'Apr';
|
||||
$lang['april_short'] = 'Nis';
|
||||
$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['june_short'] = 'Haz';
|
||||
$lang['july_short'] = 'Tem';
|
||||
$lang['august_short'] = 'Ağu';
|
||||
$lang['september_short'] = 'Eyl';
|
||||
$lang['october_short'] = 'Eki';
|
||||
$lang['november_short'] = 'Kas';
|
||||
$lang['december_short'] = 'Ara';
|
||||
$lang['am'] = 'am';
|
||||
$lang['pm'] = 'pm';
|
||||
$lang['to'] = 'to';
|
||||
$lang['click_to_toggle'] = 'Click To Toggle';
|
||||
$lang['week_short'] = 'Wk';
|
||||
$lang['week_short'] = 'Hf';
|
||||
$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['year'] = 'Yıl';
|
||||
$lang['make_non_working_day'] = 'Hizmet sağlayıcı seçilen günlerde müsait olmayacak';
|
||||
$lang['no_breaks'] = 'No Breaks';
|
||||
$lang['service_categories'] = 'Service Categories';
|
||||
$lang['service_category'] = 'Service Category';
|
||||
$lang['blocked_period_saved'] = 'Blocked period saved successfully.';
|
||||
$lang['service_categories'] = 'Hizmet Kategorileri';
|
||||
$lang['service_category'] = 'Hizmet Kategorisi';
|
||||
$lang['blocked_period_saved'] = 'Bloklanan Periyot başarıyla kaydedildi.'; // REVIEW
|
||||
$lang['blocked_period_deleted'] = 'Blocked period deleted successfully.';
|
||||
$lang['delete_blocked_period'] = 'Delete Blocked Period';
|
||||
$lang['blocked_period'] = 'Blocked Period';
|
||||
|
@ -446,7 +446,11 @@ $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['custom_field'] = 'Değiştirilebilir Alan';
|
||||
$lang['custom_fields'] = 'Değiştirilebilir Alanlar';
|
||||
$lang['label'] = 'Etiket';
|
||||
$lang['webhook_saved'] = 'Webhook saved successfully.';
|
||||
$lang['webhook_deleted'] = 'Webhook deleted successfully.';
|
||||
$lang['delete_webhook'] = 'Delete Webhook';
|
||||
$lang['contact_info'] = 'İletişim Bilgisi';
|
||||
// End
|
||||
|
|
|
@ -53,3 +53,5 @@ $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.';
|
||||
|
||||
// REVIEW ileride kullanıcılardan bir belge alınması istenirse çevirileri kontrol et!
|
||||
|
|
|
@ -151,7 +151,7 @@ class Api
|
|||
#[NoReturn]
|
||||
public function request_authentication(): void
|
||||
{
|
||||
header('WWW-Authenticate: Basic realm="Easy!Appointments"');
|
||||
header('WWW-Authenticate: Basic realm="MAKET Randevu"');
|
||||
header('HTTP/1.0 401 Unauthorized');
|
||||
exit('You are not authorized to use the API.');
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Easy!Appointments - Open Source Web Scheduler
|
||||
* MAKET Randevu - Open Source Web Scheduler
|
||||
*
|
||||
* @package EasyAppointments
|
||||
* @author A.Tselegidis <alextselegidis@gmail.com>
|
||||
|
@ -41,6 +41,10 @@ class Captcha_builder
|
|||
* @var array
|
||||
*/
|
||||
protected $lineColor = null;
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $background = null;
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
|
|
|
@ -125,16 +125,15 @@ class Instance
|
|||
// Provider
|
||||
|
||||
$this->CI->providers_model->save([
|
||||
'first_name' => 'Jane',
|
||||
'last_name' => 'Doe',
|
||||
'email' => 'jane@example.org',
|
||||
'phone_number' => '+10000000000',
|
||||
'first_name' => 'Hizmet Sağlayıcı İsmini Buraya Girin',
|
||||
'last_name' => 'Hizmet Sağlayıcı Soyismini Buraya Girin',
|
||||
'email' => 'hizmet_saglayici_mail@example.org',
|
||||
'phone_number' => '+90 (000) 000-0000',
|
||||
'services' => [$service_id],
|
||||
'settings' => [
|
||||
'username' => 'janedoe',
|
||||
'username' => 'ilkhizmetsaglayici',
|
||||
'password' => random_string(),
|
||||
'working_plan' => setting('company_working_plan'),
|
||||
'working_plan_exceptions' => '{}',
|
||||
'notifications' => true,
|
||||
'google_sync' => false,
|
||||
'sync_past_days' => 30,
|
||||
|
@ -146,10 +145,10 @@ class Instance
|
|||
// Customer
|
||||
|
||||
$this->CI->customers_model->save([
|
||||
'first_name' => 'James',
|
||||
'last_name' => 'Doe',
|
||||
'email' => 'james@example.org',
|
||||
'phone_number' => '+10000000000',
|
||||
'first_name' => 'Örnek Müşteri İsmi',
|
||||
'last_name' => 'Örnek Müşteri Soyismi',
|
||||
'email' => 'ornek_musteri@example.org',
|
||||
'phone_number' => '+90 (000) 000-0000',
|
||||
]);
|
||||
|
||||
return $password;
|
||||
|
|
|
@ -63,7 +63,7 @@ class Notifications
|
|||
bool $manage_mode = false,
|
||||
): void {
|
||||
try {
|
||||
$current_language = config('english');
|
||||
$current_language = config('language');
|
||||
|
||||
$customer_link = site_url('booking/reschedule/' . $appointment['hash']);
|
||||
|
||||
|
|
|
@ -28,14 +28,15 @@ class Timezones
|
|||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $default = 'UTC';
|
||||
protected string $default = 'Istanbul (+3:00)'; // REVIEW is it working??
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected array $timezones = [
|
||||
'UTC' => [
|
||||
'General' => [
|
||||
'UTC' => 'UTC',
|
||||
'Europe/Istanbul' => 'Istanbul (+3:00)', // REVIEW is this line proper and working correctly???
|
||||
],
|
||||
'America' => [
|
||||
'America/Adak' => 'Adak (-10:00)',
|
||||
|
@ -317,7 +318,6 @@ class Timezones
|
|||
'Europe/Bucharest' => 'Bucharest (+2:00)',
|
||||
'Europe/Chisinau' => 'Chisinau (+2:00)',
|
||||
'Europe/Helsinki' => 'Helsinki (+2:00)',
|
||||
'Europe/Istanbul' => 'Istanbul (+3:00)',
|
||||
'Europe/Kaliningrad' => 'Kaliningrad (+2:00)',
|
||||
'Europe/Kiev' => 'Kiev (+2:00)',
|
||||
'Europe/Mariehamn' => 'Mariehamn (+2:00)',
|
||||
|
@ -331,6 +331,7 @@ class Timezones
|
|||
'Europe/Uzhgorod' => 'Uzhgorod (+2:00)',
|
||||
'Europe/Vilnius' => 'Vilnius (+2:00)',
|
||||
'Europe/Zaporozhye' => 'Zaporozhye (+2:00)',
|
||||
'Europe/Istanbul' => 'Istanbul (+3:00)',
|
||||
'Europe/Moscow' => 'Moscow (+3:00)',
|
||||
'Europe/Volgograd' => 'Volgograd (+3:00)',
|
||||
'Europe/Samara' => 'Samara (+4:00)',
|
||||
|
@ -343,13 +344,13 @@ class Timezones
|
|||
'Asia/Beirut' => 'Beirut (+2:00)',
|
||||
'Asia/Damascus' => 'Damascus (+2:00)',
|
||||
'Asia/Gaza' => 'Gaza (+2:00)',
|
||||
'Asia/Istanbul' => 'Istanbul (+3:00)',
|
||||
'Asia/Jerusalem' => 'Jerusalem (+2:00)',
|
||||
'Asia/Nicosia' => 'Nicosia (+2:00)',
|
||||
'Asia/Tel_Aviv' => 'Tel_Aviv (+2:00)',
|
||||
'Asia/Aden' => 'Aden (+3:00)',
|
||||
'Asia/Baghdad' => 'Baghdad (+3:00)',
|
||||
'Asia/Bahrain' => 'Bahrain (+3:00)',
|
||||
'Asia/Istanbul' => 'Istanbul (+3:00)',
|
||||
'Asia/Kuwait' => 'Kuwait (+3:00)',
|
||||
'Asia/Qatar' => 'Qatar (+3:00)',
|
||||
'Asia/Tehran' => 'Tehran (+3:30)',
|
||||
|
@ -530,7 +531,7 @@ class Timezones
|
|||
*/
|
||||
public function get_default_timezone(): string
|
||||
{
|
||||
return 'UTC';
|
||||
return 'Europe/Istanbul'; // REVIEW is it working in proper way?
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,7 +23,7 @@ class Migration_Add_timezone_to_users extends EA_Migration
|
|||
'timezone' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => '256',
|
||||
'default' => 'UTC',
|
||||
'default' => 'Europe/Istanbul', // REVIEW Works under migration ?
|
||||
'after' => 'notes',
|
||||
],
|
||||
];
|
||||
|
|
|
@ -96,7 +96,9 @@ class Services_model extends EA_Model
|
|||
|
||||
// If a category was provided then make sure it really exists in the database.
|
||||
if (!empty($service['id_service_categories'])) {
|
||||
$count = $this->db->get_where('categories', ['id' => $service['id_service_categories']])->num_rows();
|
||||
$count = $this->db
|
||||
->get_where('service_categories', ['id' => $service['id_service_categories']])
|
||||
->num_rows();
|
||||
|
||||
if (!$count) {
|
||||
throw new InvalidArgumentException(
|
||||
|
@ -387,7 +389,7 @@ class Services_model extends EA_Model
|
|||
foreach ($resources as $resource) {
|
||||
$service['category'] = match ($resource) {
|
||||
'category' => $this->db
|
||||
->get_where('categories', [
|
||||
->get_where('service_categories', [
|
||||
'id' => $service['id_service_categories'] ?? ($service['serviceCategoryId'] ?? null),
|
||||
])
|
||||
->row_array(),
|
||||
|
|
|
@ -277,4 +277,65 @@ class Webhooks_model extends EA_Model
|
|||
{
|
||||
// Webhooks do not currently have any related resources.
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the database webhook record to the equivalent API resource.
|
||||
*
|
||||
* @param array $webhook Webhook data.
|
||||
*/
|
||||
public function api_encode(array &$webhook): void
|
||||
{
|
||||
$encoded_resource = [
|
||||
'id' => array_key_exists('id', $webhook) ? (int) $webhook['id'] : null,
|
||||
'name' => $webhook['name'],
|
||||
'url' => $webhook['url'],
|
||||
'actions' => $webhook['actions'],
|
||||
'secret_token' => $webhook['secret_token'],
|
||||
'is_ssl_verified' => $webhook['is_ssl_verified'],
|
||||
'notes' => $webhook['notes'],
|
||||
];
|
||||
|
||||
$webhook = $encoded_resource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the API resource to the equivalent database webhook record.
|
||||
*
|
||||
* @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)
|
||||
{
|
||||
$decoded_resource = $base ?: [];
|
||||
|
||||
if (array_key_exists('id', $webhook)) {
|
||||
$decoded_resource['id'] = $webhook['id'];
|
||||
}
|
||||
|
||||
if (array_key_exists('name', $webhook)) {
|
||||
$decoded_resource['name'] = $webhook['name'];
|
||||
}
|
||||
|
||||
if (array_key_exists('url', $webhook)) {
|
||||
$decoded_resource['url'] = $webhook['url'];
|
||||
}
|
||||
|
||||
if (array_key_exists('actions', $webhook)) {
|
||||
$decoded_resource['actions'] = $webhook['actions'];
|
||||
}
|
||||
|
||||
if (array_key_exists('secretToken', $webhook)) {
|
||||
$decoded_resource['secret_token'] = $webhook['secretToken'];
|
||||
}
|
||||
|
||||
if (array_key_exists('isSslVerified', $webhook)) {
|
||||
$decoded_resource['is_ssl_verified'] = $webhook['isSslVerified'];
|
||||
}
|
||||
|
||||
if (array_key_exists('notes', $webhook)) {
|
||||
$decoded_resource['notes'] = $webhook['notes'];
|
||||
}
|
||||
|
||||
$webhook = $decoded_resource;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,7 +172,7 @@
|
|||
<small>
|
||||
<?= lang('current_user') ?>:
|
||||
<span>
|
||||
<?= $timezones[session('timezone', 'UTC')] ?>
|
||||
<?= $timezones[session('timezone', 'Europe/Istanbul')] ?>
|
||||
</span>
|
||||
</small>
|
||||
</div>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
?>
|
||||
<div id="footer" class="d-lg-flex justify-content-lg-start align-items-lg-center p-2 text-center text-lg-left mt-auto">
|
||||
<div class="mb-3 me-lg-5 mb-lg-0">
|
||||
<img class="me-1" src="<?= base_url('assets/img/logo-16x16.png') ?>" alt="Easy!Appointments Logo">
|
||||
<img class="me-1" src="<?= base_url('assets/img/logo-16x16.png') ?>" alt="MAKET Randevu Logo">
|
||||
|
||||
<a href="<?= branding('software','website')?>"><?= branding('software','name')?></a>
|
||||
|
||||
|
|
|
@ -11,13 +11,19 @@
|
|||
<div id="wizard-frame-4" class="wizard-frame" style="display:none;">
|
||||
<div class="frame-container">
|
||||
<h2 class="frame-title"><?= lang('appointment_confirmation') ?></h2>
|
||||
<div class="row frame-content">
|
||||
<div id="appointment-details" class="col-12 col-md-6 text-center text-md-start"></div>
|
||||
<div id="customer-details" class="col-12 col-md-6 text-center text-md-end"></div>
|
||||
|
||||
<div class="row frame-content m-auto pt-md-4 mb-4">
|
||||
<div id="appointment-details" class="col-12 col-md-6 text-center text-md-start mb-2 mb-md-0">
|
||||
<!-- JS -->
|
||||
</div>
|
||||
<div id="customer-details" class="col-12 col-md-6 text-center text-md-end">
|
||||
<!-- JS -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (setting('require_captcha')): ?>
|
||||
<div class="row frame-content">
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="row frame-content m-auto">
|
||||
<div class="col">
|
||||
<label class="captcha-title" for="captcha-text">
|
||||
CAPTCHA
|
||||
<button class="btn btn-link text-dark text-decoration-none py-0">
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
<?= lang('timezone') ?>
|
||||
</label>
|
||||
<?php component('timezone_dropdown', [
|
||||
'attributes' => 'id="select-timezone" class="form-control" value="UTC"',
|
||||
'attributes' => 'id="select-timezone" class="form-control" value="Europe/Istanbul"',
|
||||
'grouped_timezones' => $grouped_timezones,
|
||||
]); ?>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<h2 class="frame-title"><?= lang('service_and_provider') ?></h2>
|
||||
|
||||
<div class="row frame-content">
|
||||
<div class="col">
|
||||
<div class="col col-md-8 offset-md-2 mt-md-5">
|
||||
<div class="mb-3">
|
||||
<label for="select-service">
|
||||
<strong><?= lang('service') ?></strong>
|
||||
|
@ -83,7 +83,9 @@
|
|||
<select id="select-provider" class="form-control"></select>
|
||||
</div>
|
||||
|
||||
<div id="service-description"></div>
|
||||
<div id="service-description" class="small">
|
||||
<!-- JS -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<small>
|
||||
<?= lang('current_user') ?>:
|
||||
<span>
|
||||
<?= $timezones[session('timezone', 'UTC')] ?>
|
||||
<?= $timezones[session('timezone', 'Europe/Istanbul')] ?>
|
||||
</span>
|
||||
</small>
|
||||
</div>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<title>Error | Easy!Appointments</title>
|
||||
<title>Error | MAKET Randevu</title>
|
||||
<style>
|
||||
#error-container {
|
||||
background: #ffffff;
|
||||
|
@ -74,7 +74,7 @@
|
|||
<p>
|
||||
<small>
|
||||
|
||||
<a href="https://easyappointments.org">Easy!Appointments</a>
|
||||
<a href="https://iflpanel.com/about/maketrandevu">MAKET Randevu</a>
|
||||
</small>
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
<?php slot('meta'); ?>
|
||||
|
||||
<title><?= vars('page_title') ?? lang('backend_section') ?> | Easy!Appointments</title>
|
||||
<title><?= vars('page_title') ?? lang('backend_section') ?> | MAKET Randevu</title>
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="<?= asset_url('assets/img/favicon.ico') ?>">
|
||||
<link rel="icon" sizes="192x192" href="<?= asset_url('assets/img/logo.png') ?>">
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<meta name="theme-color" content="#35A768">
|
||||
<meta name="google" content="notranslate">
|
||||
|
||||
<meta property="og:title" content="<?= lang('page_title') . ' ' . vars('company_name') ?> | Easy!Appointments"/>
|
||||
<meta property="og:title" content="<?= lang('page_title') . ' ' . vars('company_name') ?> | MAKET Randevu"/>
|
||||
<meta property="og:description" content="Book Your Appointment With A Few Clicks"/>
|
||||
<meta property="og:url" content="<?= base_url() ?>">
|
||||
<meta property="og:image" content="<?= base_url('assets/img/social-card.png') ?>"/>
|
||||
|
@ -15,7 +15,7 @@
|
|||
|
||||
<?php slot('meta'); ?>
|
||||
|
||||
<title><?= lang('page_title') . ' ' . vars('company_name') ?> | Easy!Appointments</title>
|
||||
<title><?= lang('page_title') . ' ' . vars('company_name') ?> | MAKET Randevu</title>
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="<?= asset_url('assets/img/favicon.ico') ?>">
|
||||
<link rel="icon" sizes="192x192" href="<?= asset_url('assets/img/logo.png') ?>">
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
<?php slot('meta'); ?>
|
||||
|
||||
<title><?= vars('page_title') ?> | Easy!Appointments</title>
|
||||
<title><?= vars('page_title') ?> | MAKET Randevu</title>
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="<?= asset_url('assets/img/favicon.ico') ?>">
|
||||
<link rel="icon" sizes="192x192" href="<?= asset_url('assets/img/logo.png') ?>">
|
||||
|
@ -32,8 +32,7 @@
|
|||
|
||||
<div class="mt-2">
|
||||
<small>
|
||||
|
||||
<a href="https://easyappointments.org">Easy!Appointments</a>
|
||||
<?= lang("powered_by") ?>
|
||||
</small>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
<div id="about" class="col-lg-8 offset-lg-2">
|
||||
|
||||
<div class="text-center my-5">
|
||||
<img src="<?= base_url('assets/img/logo.png') ?>" alt="Easy!Appointments Logo" class="mb-5">
|
||||
<img src="<?= base_url('assets/img/logo.png') ?>" alt="MAKET Randevu Logo" class="mb-5">
|
||||
|
||||
<h3>
|
||||
Easy!Appointments
|
||||
<?= branding("software", "name") ?>
|
||||
</h3>
|
||||
<h6 class="text-primary">
|
||||
Online Appointment Scheduler
|
||||
|
|
|
@ -28,6 +28,11 @@
|
|||
|
||||
<div class="record-details col-12 col-md-5">
|
||||
<div class="btn-toolbar mb-4">
|
||||
<a href="<?= site_url('business_settings') ?>" class="btn btn-outline-primary me-2">
|
||||
<i class="fas fa-chevron-left me-2"></i>
|
||||
<?= lang('back') ?>
|
||||
</a>
|
||||
|
||||
<div class="add-edit-delete-group btn-group">
|
||||
<button id="add-blocked-period" class="btn btn-primary">
|
||||
<i class="fas fa-plus-square me-2"></i>
|
||||
|
@ -52,11 +57,6 @@
|
|||
<?= lang('cancel') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<a href="<?= site_url('business_settings') ?>" class="btn btn-outline-primary ms-4">
|
||||
<i class="fas fa-chevron-left me-2"></i>
|
||||
<?= lang('back') ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h4 class="text-black-50 mb-3 fw-light">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
|
||||
<title>Installation | Easy!Appointments</title>
|
||||
<title>Installation | MAKET Randevu</title>
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="<?= asset_url('assets/img/favicon.ico') ?>">
|
||||
<link rel="stylesheet" type="text/css" href="<?= asset_url('assets/css/themes/default.min.css') ?>">
|
||||
|
@ -17,20 +17,20 @@
|
|||
|
||||
<header>
|
||||
<div class="container">
|
||||
<h1 class="page-title">Easy!Appointments Installation</h1>
|
||||
<h1 class="page-title">MAKET Randevu Installation</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="content container">
|
||||
<div class="welcome">
|
||||
<h3>Welcome to the Easy!Appointments installation page.</h3>
|
||||
<h3>Welcome to the MAKET Randevu installation page.</h3>
|
||||
<p>
|
||||
This page will help you set the main settings of your Easy!Appointments installation. You will be able to
|
||||
This page will help you set the main settings of your MAKET Randevu installation. You will be able to
|
||||
edit these settings and many more in the backend session of your system. Remember to use the
|
||||
<strong class="text-primary"><?= site_url('user/login') ?></strong> URL to connect to the backend section
|
||||
of Easy!Appointments.
|
||||
of MAKET Randevu.
|
||||
|
||||
If you face any problems during the usage of Easy!Appointments you can always check the
|
||||
If you face any problems during the usage of MAKET Randevu you can always check the
|
||||
<a href="https://easyappointments.org/docs.html">Documentation</a> and
|
||||
<a href="https://groups.google.com/group/easy-appointments">Support Group</a> for getting help. You may also
|
||||
submit new issues on
|
||||
|
@ -113,9 +113,9 @@
|
|||
|
||||
<div class="mb-2">
|
||||
<h3>License</h3>
|
||||
Easy!Appointments is licensed under the <span class="badge bg-secondary">GPL-3.0 license</span>. By using the
|
||||
MAKET Randevu is licensed under the <span class="badge bg-secondary">GPL-3.0 license</span>. By using the
|
||||
code
|
||||
of Easy!Appointments in any way <br> you agree with the terms described in the following url:
|
||||
of MAKET Randevu in any way <br> you agree with the terms described in the following url:
|
||||
<a href="https://www.gnu.org/licenses/gpl-3.0.en.html">https://www.gnu.org/licenses/gpl-3.0.en.html</a>
|
||||
</div>
|
||||
|
||||
|
@ -123,13 +123,13 @@
|
|||
|
||||
<button type="button" id="install" class="btn btn-primary">
|
||||
<i class="icon-white icon-ok me-2"></i>
|
||||
Install Easy!Appointments
|
||||
Install MAKET Randevu
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
|
||||
<a href="https://easyappointments.org">Easy!Appointments</a>
|
||||
<a href="https://easyappointments.org">MAKET Randevu</a>
|
||||
</footer>
|
||||
|
||||
<?php component('js_vars_script'); ?>
|
||||
|
|
|
@ -27,6 +27,11 @@
|
|||
|
||||
<div class="record-details column col-12 col-md-5">
|
||||
<div class="btn-toolbar mb-4">
|
||||
<a href="<?= site_url('integrations') ?>" class="btn btn-outline-primary me-2">
|
||||
<i class="fas fa-chevron-left me-2"></i>
|
||||
<?= lang('back') ?>
|
||||
</a>
|
||||
|
||||
<div class="add-edit-delete-group btn-group">
|
||||
<button id="add-webhook" class="btn btn-primary">
|
||||
<i class="fas fa-plus-square me-2"></i>
|
||||
|
@ -51,11 +56,6 @@
|
|||
<?= lang('cancel') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<a href="<?= site_url('integrations') ?>" class="btn btn-outline-primary ms-4">
|
||||
<i class="fas fa-chevron-left me-2"></i>
|
||||
<?= lang('back') ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h4 class="text-black-50 mb-3 fw-light">
|
||||
|
|
|
@ -185,7 +185,7 @@ body {
|
|||
margin: 15px 0;
|
||||
padding-right: 10px;
|
||||
width: auto;
|
||||
max-height: 255px;
|
||||
max-height: 250px;
|
||||
}
|
||||
|
||||
#book-appointment-wizard #available-hours div {
|
||||
|
@ -273,6 +273,10 @@ body {
|
|||
margin: 15px 0;
|
||||
}
|
||||
|
||||
#book-appointment-wizard #wizard-frame-4 .frame-container .frame-content {
|
||||
max-width: 630px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.wrapper {
|
||||
min-height: 100vh;
|
||||
|
|
|
@ -52,6 +52,8 @@ App.Components.AppointmentsModal = (function () {
|
|||
const $customField4 = $('#custom-field-4');
|
||||
const $customField5 = $('#custom-field-5');
|
||||
|
||||
const moment = window.moment;
|
||||
|
||||
/**
|
||||
* Update the displayed timezone.
|
||||
*/
|
||||
|
@ -85,8 +87,11 @@ App.Components.AppointmentsModal = (function () {
|
|||
// ID must exist on the object in order for the model to update the record and not to perform
|
||||
// an insert operation.
|
||||
|
||||
const startDatetime = moment($startDatetime[0]._flatpickr.selectedDates[0]).format('YYYY-MM-DD HH:mm:ss');
|
||||
const endDatetime = moment($endDatetime[0]._flatpickr.selectedDates[0]).format('YYYY-MM-DD HH:mm:ss');
|
||||
const startDateTimeObject = App.Utils.UI.getDateTimePickerValue($startDatetime);
|
||||
const startDatetime = moment(startDateTimeObject).format('YYYY-MM-DD HH:mm:ss');
|
||||
|
||||
const endDateTimeObject = App.Utils.UI.getDateTimePickerValue($endDatetime);
|
||||
const endDatetime = moment(endDateTimeObject).format('YYYY-MM-DD HH:mm:ss');
|
||||
|
||||
const appointment = {
|
||||
id_services: $selectService.val(),
|
||||
|
@ -204,8 +209,8 @@ App.Components.AppointmentsModal = (function () {
|
|||
startMoment.add(1, 'hour').set({minutes: 0});
|
||||
}
|
||||
|
||||
$startDatetime[0]._flatpickr.setDate(startMoment.toDate());
|
||||
$endDatetime[0]._flatpickr.setDate(startMoment.add(duration, 'minutes').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($startDatetime, startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($endDatetime, startMoment.add(duration, 'minutes').toDate());
|
||||
|
||||
// Display modal form.
|
||||
$appointmentsModal.find('.modal-header h3').text(lang('new_appointment_title'));
|
||||
|
@ -362,8 +367,9 @@ App.Components.AppointmentsModal = (function () {
|
|||
|
||||
const duration = service ? service.duration : 60;
|
||||
|
||||
const start = $startDatetime[0]._flatpickr.selectedDates[0];
|
||||
$endDatetime[0]._flatpickr.setDate(new Date(start.getTime() + duration * 60000));
|
||||
const startDateTimeObject = App.Utils.UI.getDateTimePickerValue($startDatetime);
|
||||
const endDateTimeObject = new Date(startDateTimeObject.getTime() + duration * 60000);
|
||||
App.Utils.UI.setDateTimePickerValue($endDatetime, endDateTimeObject);
|
||||
|
||||
// Update the providers select box.
|
||||
|
||||
|
@ -481,7 +487,7 @@ App.Components.AppointmentsModal = (function () {
|
|||
const startDatetime = new Date();
|
||||
const endDatetime = moment().add(duration, 'minutes').toDate();
|
||||
|
||||
App.Utils.UI.initializeDatetimepicker($startDatetime, {
|
||||
App.Utils.UI.initializeDateTimePicker($startDatetime, {
|
||||
onClose: () => {
|
||||
const serviceId = $selectService.val();
|
||||
|
||||
|
@ -490,15 +496,16 @@ App.Components.AppointmentsModal = (function () {
|
|||
(availableService) => Number(availableService.id) === Number(serviceId),
|
||||
);
|
||||
|
||||
const start = $startDatetime[0]._flatpickr.selectedDates[0];
|
||||
$endDatetime[0]._flatpickr.setDate(new Date(start.getTime() + service.duration * 60000));
|
||||
const startDateTimeObject = App.Utils.UI.getDateTimePickerValue($startDatetime);
|
||||
const endDateTimeObject = new Date(startDateTimeObject.getTime() + service.duration * 60000);
|
||||
App.Utils.UI.setDateTimePickerValue($endDatetime, endDateTimeObject);
|
||||
},
|
||||
});
|
||||
|
||||
$startDatetime[0]._flatpickr.setDate(startDatetime);
|
||||
App.Utils.UI.setDateTimePickerValue($startDatetime, startDatetime);
|
||||
|
||||
App.Utils.UI.initializeDatetimepicker($endDatetime);
|
||||
$endDatetime[0]._flatpickr.setDate(endDatetime);
|
||||
App.Utils.UI.initializeDateTimePicker($endDatetime);
|
||||
App.Utils.UI.setDateTimePickerValue($endDatetime, endDatetime);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -538,9 +545,10 @@ App.Components.AppointmentsModal = (function () {
|
|||
}
|
||||
|
||||
// Check appointment start and end time.
|
||||
const start = $startDatetime[0]._flatpickr.selectedDates[0];
|
||||
const end = $endDatetime[0]._flatpickr.selectedDates[0];
|
||||
if (start > end) {
|
||||
const startDateTimeObject = App.Utils.UI.getDateTimePickerValue($startDatetime);
|
||||
const endDateTimeObject = App.Utils.UI.getDateTimePickerValue($endDatetime);
|
||||
|
||||
if (startDateTimeObject > endDateTimeObject) {
|
||||
$startDatetime.addClass('is-invalid');
|
||||
$endDatetime.addClass('is-invalid');
|
||||
throw new Error(lang('start_date_before_end_error'));
|
||||
|
|
|
@ -28,6 +28,8 @@ App.Components.UnavailabilitiesModal = (function () {
|
|||
const $selectFilterItem = $('#select-filter-item');
|
||||
const $reloadAppointments = $('#reload-appointments');
|
||||
|
||||
const moment = window.moment;
|
||||
|
||||
/**
|
||||
* Update the displayed timezone.
|
||||
*/
|
||||
|
@ -68,22 +70,22 @@ App.Components.UnavailabilitiesModal = (function () {
|
|||
return;
|
||||
}
|
||||
|
||||
const startMoment = moment($startDatetime[0]._flatpickr.selectedDates[0]);
|
||||
const startDateTimeMoment = moment(App.Utils.UI.getDateTimePickerValue($startDatetime));
|
||||
|
||||
if (!startMoment.isValid()) {
|
||||
if (!startDateTimeMoment.isValid()) {
|
||||
$startDatetime.addClass('is-invalid');
|
||||
return;
|
||||
}
|
||||
|
||||
const endMoment = moment($endDatetime[0]._flatpickr.selectedDates[0]);
|
||||
const endDateTimeMoment = moment(App.Utils.UI.getDateTimePickerValue($endDatetime));
|
||||
|
||||
if (!endMoment.isValid()) {
|
||||
if (!endDateTimeMoment.isValid()) {
|
||||
$endDatetime.addClass('is-invalid');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (startMoment.isAfter(endMoment)) {
|
||||
if (startDateTimeMoment.isAfter(endDateTimeMoment)) {
|
||||
// Start time is after end time - display message to user.
|
||||
$unavailabilitiesModal
|
||||
.find('.modal-message')
|
||||
|
@ -100,8 +102,8 @@ App.Components.UnavailabilitiesModal = (function () {
|
|||
|
||||
// Unavailability period records go to the appointments table.
|
||||
const unavailability = {
|
||||
start_datetime: startMoment.format('YYYY-MM-DD HH:mm:ss'),
|
||||
end_datetime: endMoment.format('YYYY-MM-DD HH:mm:ss'),
|
||||
start_datetime: startDateTimeMoment.format('YYYY-MM-DD HH:mm:ss'),
|
||||
end_datetime: endDateTimeMoment.format('YYYY-MM-DD HH:mm:ss'),
|
||||
notes: $unavailabilitiesModal.find('#unavailability-notes').val(),
|
||||
id_users_provider: $selectProvider.val(),
|
||||
};
|
||||
|
@ -156,8 +158,8 @@ App.Components.UnavailabilitiesModal = (function () {
|
|||
$selectProvider.val($selectFilterItem.val()).closest('.form-group').hide();
|
||||
}
|
||||
|
||||
$startDatetime[0]._flatpickr.setDate(startMoment.toDate());
|
||||
$endDatetime[0]._flatpickr.setDate(startMoment.add(1, 'hour').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($startDatetime, startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($endDatetime, startMoment.add(1, 'hour').toDate());
|
||||
|
||||
$dialog.find('.modal-header h3').text(lang('new_unavailability_title'));
|
||||
$dialog.modal('show');
|
||||
|
@ -183,11 +185,11 @@ App.Components.UnavailabilitiesModal = (function () {
|
|||
true,
|
||||
);
|
||||
|
||||
App.Utils.UI.initializeDatetimepicker($startDatetime);
|
||||
App.Utils.UI.initializeDateTimePicker($startDatetime);
|
||||
|
||||
$startDatetime.val(start);
|
||||
|
||||
App.Utils.UI.initializeDatetimepicker($endDatetime);
|
||||
App.Utils.UI.initializeDateTimePicker($endDatetime);
|
||||
|
||||
$endDatetime.val(end);
|
||||
|
||||
|
|
|
@ -77,19 +77,19 @@ App.Components.WorkingPlanExceptionsModal = (function () {
|
|||
function validate() {
|
||||
$modal.find('.is-invalid').removeClass('is-invalid');
|
||||
|
||||
const date = $date[0]._flatpickr.selectedDates[0];
|
||||
const date = App.Utils.UI.getDateTimePickerValue($date);
|
||||
|
||||
if (!date) {
|
||||
$date.addClass('is-invalid');
|
||||
}
|
||||
|
||||
const start = $start[0]._flatpickr.selectedDates[0];
|
||||
const start = App.Utils.UI.getDateTimePickerValue($start);
|
||||
|
||||
if (!start) {
|
||||
$start.addClass('is-invalid');
|
||||
}
|
||||
|
||||
const end = $end[0]._flatpickr.selectedDates[0];
|
||||
const end = App.Utils.UI.getDateTimePickerValue($end);
|
||||
|
||||
if (!end) {
|
||||
$end.addClass('is-invalid');
|
||||
|
@ -157,15 +157,15 @@ App.Components.WorkingPlanExceptionsModal = (function () {
|
|||
return;
|
||||
}
|
||||
|
||||
const date = moment($date[0]._flatpickr.selectedDates[0]).format('YYYY-MM-DD');
|
||||
const date = moment(App.Utils.UI.getDateTimePickerValue($date)).format('YYYY-MM-DD');
|
||||
|
||||
const isNonWorkingDay = $isNonWorkingDay.prop('checked');
|
||||
|
||||
const workingPlanException = isNonWorkingDay
|
||||
? null
|
||||
: {
|
||||
start: moment($start[0]._flatpickr.selectedDates[0]).format('HH:mm'),
|
||||
end: moment($end[0]._flatpickr.selectedDates[0]).format('HH:mm'),
|
||||
start: moment(App.Utils.UI.getDateTimePickerValue($start)).format('HH:mm'),
|
||||
end: moment(App.Utils.UI.getDateTimePickerValue($end)).format('HH:mm'),
|
||||
breaks: getBreaks(),
|
||||
};
|
||||
|
||||
|
@ -223,9 +223,9 @@ App.Components.WorkingPlanExceptionsModal = (function () {
|
|||
function add() {
|
||||
deferred = $.Deferred();
|
||||
|
||||
$date[0]._flatpickr.setDate(new Date());
|
||||
$start[0]._flatpickr.setDate(moment('08:00', 'HH:mm').toDate());
|
||||
$end[0]._flatpickr.setDate(moment('20:00', 'HH:mm').toDate());
|
||||
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());
|
||||
|
||||
$isNonWorkingDay.prop('checked', false);
|
||||
|
||||
|
@ -249,11 +249,11 @@ App.Components.WorkingPlanExceptionsModal = (function () {
|
|||
|
||||
const isNonWorkingDay = !Boolean(workingPlanException);
|
||||
|
||||
$date[0]._flatpickr.setDate(moment(date, 'YYYY-MM-DD').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($date, moment(date, 'YYYY-MM-DD').toDate());
|
||||
|
||||
if (isNonWorkingDay === false) {
|
||||
$start[0]._flatpickr.setDate(moment(workingPlanException.start, 'HH:mm').toDate());
|
||||
$end[0]._flatpickr.setDate(moment(workingPlanException.end, 'HH:mm').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($start, moment(workingPlanException.start, 'HH:mm').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($end, moment(workingPlanException.end, 'HH:mm').toDate());
|
||||
|
||||
if (!workingPlanException.breaks) {
|
||||
$breaks.find('tbody').html(renderNoBreaksRow());
|
||||
|
@ -267,8 +267,8 @@ App.Components.WorkingPlanExceptionsModal = (function () {
|
|||
$breaks.find('tbody .working-plan-exceptions-break-start, tbody .working-plan-exceptions-break-end'),
|
||||
);
|
||||
} else {
|
||||
$start[0]._flatpickr.setDate(moment('08:00', 'HH:mm').toDate());
|
||||
$end[0]._flatpickr.setDate(moment('20:00', 'HH:mm').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($start, moment('08:00', 'HH:mm').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($end, moment('20:00', 'HH:mm').toDate());
|
||||
$breaks.find('tbody').html(renderNoBreaksRow());
|
||||
}
|
||||
|
||||
|
@ -380,7 +380,7 @@ App.Components.WorkingPlanExceptionsModal = (function () {
|
|||
// Make all cells in current row editable.
|
||||
let $tr = $(this).closest('tr');
|
||||
$tr.children().trigger('edit');
|
||||
App.Utils.UI.initializeTimepicker(
|
||||
App.Utils.UI.initializeTimePicker(
|
||||
$tr.find('.working-plan-exceptions-break-start input, .working-plan-exceptions-break-end input'),
|
||||
);
|
||||
$(this).closest('tr').find('.working-plan-exceptions-break-start').focus();
|
||||
|
@ -462,9 +462,9 @@ App.Components.WorkingPlanExceptionsModal = (function () {
|
|||
* Initialize the module.
|
||||
*/
|
||||
function initialize() {
|
||||
App.Utils.UI.initializeDatepicker($date);
|
||||
App.Utils.UI.initializeTimepicker($start);
|
||||
App.Utils.UI.initializeTimepicker($end);
|
||||
App.Utils.UI.initializeDatePicker($date);
|
||||
App.Utils.UI.initializeTimePicker($start);
|
||||
App.Utils.UI.initializeTimePicker($end);
|
||||
|
||||
$modal
|
||||
.on('hidden.bs.modal', onModalHidden)
|
||||
|
|
|
@ -300,7 +300,7 @@ App.Http.Booking = (function () {
|
|||
const currentDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), i);
|
||||
|
||||
if (unavailableDates.indexOf(moment(currentDate).format('YYYY-MM-DD')) === -1) {
|
||||
$('#select-date')[0]._flatpickr.setDate(currentDate);
|
||||
App.Utils.UI.setDateTimePickerValue($('#select-date'), currentDate);
|
||||
getAvailableHours(moment(currentDate).format('YYYY-MM-DD'));
|
||||
break;
|
||||
}
|
||||
|
@ -328,7 +328,7 @@ App.Http.Booking = (function () {
|
|||
!unavailableDates.includes(dateQueryParam) &&
|
||||
dateQueryParamMoment.format('YYYY-MM') === selectedDateMoment.format('YYYY-MM')
|
||||
) {
|
||||
$('#select-date')[0]._flatpickr.setDate(dateQueryParamMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($('#select-date'), dateQueryParamMoment.toDate());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -123,9 +123,9 @@ App.Pages.BlockedPeriods = (function () {
|
|||
* Event: Blocked period Save Button "Click"
|
||||
*/
|
||||
$blockedPeriods.on('click', '#save-blocked-period', () => {
|
||||
const startDateTimeObject = App.Utils.UI.getDatetimepickerValue($startDateTime);
|
||||
const startDateTimeObject = App.Utils.UI.getDateTimePickerValue($startDateTime);
|
||||
const startDateTimeMoment = moment(startDateTimeObject);
|
||||
const endDateTimeObject = App.Utils.UI.getDatetimepickerValue($endDateTime);
|
||||
const endDateTimeObject = App.Utils.UI.getDateTimePickerValue($endDateTime);
|
||||
const endDateTimeMoment = moment(endDateTimeObject);
|
||||
|
||||
const blockedPeriod = {
|
||||
|
@ -235,8 +235,8 @@ App.Pages.BlockedPeriods = (function () {
|
|||
function display(blockedPeriod) {
|
||||
$id.val(blockedPeriod.id);
|
||||
$name.val(blockedPeriod.name);
|
||||
App.Utils.UI.setDatetimepickerValue($startDateTime, new Date(blockedPeriod.start_datetime));
|
||||
App.Utils.UI.setDatetimepickerValue($endDateTime, new Date(blockedPeriod.end_datetime));
|
||||
App.Utils.UI.setDateTimePickerValue($startDateTime, new Date(blockedPeriod.start_datetime));
|
||||
App.Utils.UI.setDateTimePickerValue($endDateTime, new Date(blockedPeriod.end_datetime));
|
||||
$notes.val(blockedPeriod.notes);
|
||||
}
|
||||
|
||||
|
@ -263,8 +263,8 @@ App.Pages.BlockedPeriods = (function () {
|
|||
throw new Error(lang('fields_are_required'));
|
||||
}
|
||||
|
||||
const startDateTimeObject = App.Utils.UI.getDatetimepickerValue($startDateTime);
|
||||
const endDateTimeObject = App.Utils.UI.getDatetimepickerValue($endDateTime);
|
||||
const startDateTimeObject = App.Utils.UI.getDateTimePickerValue($startDateTime);
|
||||
const endDateTimeObject = App.Utils.UI.getDateTimePickerValue($endDateTime);
|
||||
|
||||
if (startDateTimeObject >= endDateTimeObject) {
|
||||
$startDateTime.addClass('is-invalid');
|
||||
|
@ -346,8 +346,8 @@ App.Pages.BlockedPeriods = (function () {
|
|||
resetForm();
|
||||
filter('');
|
||||
addEventListeners();
|
||||
App.Utils.UI.initializeDatetimepicker($startDateTime);
|
||||
App.Utils.UI.initializeDatetimepicker($endDateTime);
|
||||
App.Utils.UI.initializeDateTimePicker($startDateTime);
|
||||
App.Utils.UI.initializeDateTimePicker($endDateTime);
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', initialize);
|
||||
|
|
|
@ -82,7 +82,7 @@ App.Pages.Booking = (function () {
|
|||
// Initialize page's components (tooltips, date pickers etc).
|
||||
tippy('[data-tippy-content]');
|
||||
|
||||
App.Utils.UI.initializeDatepicker($selectDate, {
|
||||
App.Utils.UI.initializeDatePicker($selectDate, {
|
||||
inline: true,
|
||||
minDate: moment().subtract(1, 'day').set({hours: 23, minutes: 59, seconds: 59}).toDate(),
|
||||
maxDate: moment().add(vars('future_booking_limit'), 'days').toDate(),
|
||||
|
@ -126,7 +126,7 @@ App.Pages.Booking = (function () {
|
|||
},
|
||||
});
|
||||
|
||||
$selectDate[0]._flatpickr.setDate(new Date());
|
||||
App.Utils.UI.setDateTimePickerValue($selectDate, new Date());
|
||||
|
||||
const browserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
const isTimezoneSupported = $selectTimezone.find(`option[value="${browserTimezone}"]`).length > 0;
|
||||
|
@ -269,7 +269,7 @@ App.Pages.Booking = (function () {
|
|||
* Event: Timezone "Changed"
|
||||
*/
|
||||
$selectTimezone.on('change', () => {
|
||||
const date = $selectDate[0]._flatpickr.selectedDates[0];
|
||||
const date = App.Utils.UI.getDateTimePickerValue($selectDate);
|
||||
|
||||
if (!date) {
|
||||
return;
|
||||
|
@ -291,7 +291,7 @@ App.Pages.Booking = (function () {
|
|||
App.Http.Booking.getUnavailableDates(
|
||||
$target.val(),
|
||||
$selectService.val(),
|
||||
moment($selectDate[0]._flatpickr.selectedDates[0]).format('YYYY-MM-DD'),
|
||||
moment(App.Utils.UI.getDateTimePickerValue($selectDate)).format('YYYY-MM-DD'),
|
||||
);
|
||||
updateConfirmFrame();
|
||||
});
|
||||
|
@ -327,7 +327,7 @@ App.Pages.Booking = (function () {
|
|||
App.Http.Booking.getUnavailableDates(
|
||||
$selectProvider.val(),
|
||||
$target.val(),
|
||||
moment($selectDate[0]._flatpickr.selectedDates[0]).format('YYYY-MM-DD'),
|
||||
moment(App.Utils.UI.getDateTimePickerValue($selectDate)).format('YYYY-MM-DD'),
|
||||
);
|
||||
|
||||
updateConfirmFrame();
|
||||
|
@ -586,141 +586,120 @@ App.Pages.Booking = (function () {
|
|||
* customer settings and input for the appointment booking.
|
||||
*/
|
||||
function updateConfirmFrame() {
|
||||
if ($availableHours.find('.selected-hour').text() === '') {
|
||||
return;
|
||||
const serviceOptionText = $selectService.find('option:selected').text();
|
||||
$('.display-selected-service').text(serviceOptionText).removeClass('invisible');
|
||||
|
||||
const providerOptionText = $selectProvider.find('option:selected').text();
|
||||
$('.display-selected-provider').text(providerOptionText).removeClass('invisible');
|
||||
|
||||
if (!$availableHours.find('.selected-hour').text()) {
|
||||
return; // No time is selected, skip the rest of this function...
|
||||
}
|
||||
|
||||
// Appointment Details
|
||||
let selectedDate = $selectDate[0]._flatpickr.selectedDates[0];
|
||||
|
||||
if (selectedDate !== null) {
|
||||
selectedDate = App.Utils.Date.format(selectedDate, vars('date_format'), vars('time_format'));
|
||||
}
|
||||
// Render the appointment details
|
||||
|
||||
const serviceId = $selectService.val();
|
||||
let servicePrice = '';
|
||||
let serviceCurrency = '';
|
||||
|
||||
vars('available_services').forEach((service) => {
|
||||
if (Number(service.id) === Number(serviceId) && Number(service.price) > 0) {
|
||||
servicePrice = service.price;
|
||||
serviceCurrency = service.currency;
|
||||
return false; // Break loop
|
||||
const service = vars('available_services').find(
|
||||
(availableService) => Number(availableService.id) === Number(serviceId),
|
||||
);
|
||||
|
||||
if (!service) {
|
||||
return; // Service was not found
|
||||
}
|
||||
});
|
||||
|
||||
$(document)
|
||||
.find('.display-selected-service')
|
||||
.text($selectService.find('option:selected').text())
|
||||
.removeClass('invisible');
|
||||
const selectedDateObject = App.Utils.UI.getDateTimePickerValue($selectDate);
|
||||
const selectedDateMoment = moment(selectedDateObject);
|
||||
const selectedDate = selectedDateMoment.format('YYYY-MM-DD');
|
||||
const selectedTime = $availableHours.find('.selected-hour').text();
|
||||
const selectedDateTime = `${selectedDate} ${selectedTime}`;
|
||||
|
||||
$(document)
|
||||
.find('.display-selected-provider')
|
||||
.text($selectProvider.find('option:selected').text())
|
||||
.removeClass('invisible');
|
||||
let formattedSelectedDate;
|
||||
|
||||
$('#appointment-details').empty();
|
||||
if (selectedDateObject) {
|
||||
formattedSelectedDate = App.Utils.Date.format(
|
||||
selectedDateTime,
|
||||
vars('date_format'),
|
||||
vars('time_format'),
|
||||
true,
|
||||
);
|
||||
}
|
||||
|
||||
$('<div/>', {
|
||||
'html': [
|
||||
$('<h4/>', {
|
||||
'text': lang('appointment'),
|
||||
}),
|
||||
$('<p/>', {
|
||||
'html': [
|
||||
$('<span/>', {
|
||||
'text': lang('service') + ': ' + $selectService.find('option:selected').text(),
|
||||
}),
|
||||
$('<br/>'),
|
||||
$('<span/>', {
|
||||
'text': lang('provider') + ': ' + $selectProvider.find('option:selected').text(),
|
||||
}),
|
||||
$('<br/>'),
|
||||
$('<span/>', {
|
||||
'text':
|
||||
lang('start') +
|
||||
': ' +
|
||||
selectedDate +
|
||||
' ' +
|
||||
$availableHours.find('.selected-hour').text(),
|
||||
}),
|
||||
$('<br/>'),
|
||||
$('<span/>', {
|
||||
'text': lang('timezone') + ': ' + $selectTimezone.find('option:selected').text(),
|
||||
}),
|
||||
$('<br/>'),
|
||||
$('<span/>', {
|
||||
'text': lang('price') + ': ' + servicePrice + ' ' + serviceCurrency,
|
||||
'prop': {
|
||||
'hidden': !servicePrice,
|
||||
},
|
||||
}),
|
||||
],
|
||||
}),
|
||||
],
|
||||
}).appendTo('#appointment-details');
|
||||
const timezoneOptionText = $selectTimezone.find('option:selected').text();
|
||||
|
||||
$('#appointment-details').html(`
|
||||
<div>
|
||||
<div class="mb-2 fw-bold fs-3">
|
||||
${serviceOptionText}
|
||||
</div>
|
||||
<div class="mb-2 fw-bold text-muted">
|
||||
${providerOptionText}
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<i class="fas fa-clock me-2"></i>
|
||||
${service.duration} ${lang('minutes')}
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<i class="fas fa-calendar-day me-2"></i>
|
||||
${formattedSelectedDate}
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<i class="fas fa-globe me-2"></i>
|
||||
${timezoneOptionText}
|
||||
</div>
|
||||
<div class="mb-2" ${!Number(service.price) ? 'hidden' : ''}>
|
||||
<i class="fas fa-cash-register me-2"></i>
|
||||
${Number(service.price).toFixed(2)} ${service.currency}
|
||||
</div>
|
||||
</div>
|
||||
`);
|
||||
|
||||
// Render the customer information
|
||||
|
||||
// Customer Details
|
||||
const firstName = App.Utils.String.escapeHtml($firstName.val());
|
||||
const lastName = App.Utils.String.escapeHtml($lastName.val());
|
||||
const fullName = firstName + ' ' + lastName;
|
||||
const phoneNumber = App.Utils.String.escapeHtml($phoneNumber.val());
|
||||
const fullName = `${firstName} ${lastName}`.trim();
|
||||
const email = App.Utils.String.escapeHtml($email.val());
|
||||
const phoneNumber = App.Utils.String.escapeHtml($phoneNumber.val());
|
||||
const address = App.Utils.String.escapeHtml($address.val());
|
||||
const city = App.Utils.String.escapeHtml($city.val());
|
||||
const zipCode = App.Utils.String.escapeHtml($zipCode.val());
|
||||
|
||||
$('#customer-details').empty();
|
||||
const addressParts = [];
|
||||
|
||||
$('<div/>', {
|
||||
'html': [
|
||||
$('<h4/>)', {
|
||||
'text': lang('customer'),
|
||||
}),
|
||||
$('<p/>', {
|
||||
'html': [
|
||||
fullName
|
||||
? $('<span/>', {
|
||||
'text': lang('customer') + ': ' + fullName,
|
||||
})
|
||||
: null,
|
||||
fullName ? $('<br/>') : null,
|
||||
phoneNumber
|
||||
? $('<span/>', {
|
||||
'text': lang('phone_number') + ': ' + phoneNumber,
|
||||
})
|
||||
: null,
|
||||
phoneNumber ? $('<br/>') : null,
|
||||
email
|
||||
? $('<span/>', {
|
||||
'text': lang('email') + ': ' + email,
|
||||
})
|
||||
: null,
|
||||
email ? $('<br/>') : null,
|
||||
address
|
||||
? $('<span/>', {
|
||||
'text': lang('address') + ': ' + address,
|
||||
})
|
||||
: null,
|
||||
address ? $('<br/>') : null,
|
||||
city
|
||||
? $('<span/>', {
|
||||
'text': lang('city') + ': ' + city,
|
||||
})
|
||||
: null,
|
||||
city ? $('<br/>') : null,
|
||||
zipCode
|
||||
? $('<span/>', {
|
||||
'text': lang('zip_code') + ': ' + zipCode,
|
||||
})
|
||||
: null,
|
||||
zipCode ? $('<br/>') : null,
|
||||
],
|
||||
}),
|
||||
],
|
||||
}).appendTo('#customer-details');
|
||||
if (city) {
|
||||
addressParts.push(city);
|
||||
}
|
||||
|
||||
if (zipCode) {
|
||||
addressParts.push(zipCode);
|
||||
}
|
||||
|
||||
$('#customer-details').html(`
|
||||
<div>
|
||||
<div class="mb-2 fw-bold fs-3">
|
||||
${lang('contact_info')}
|
||||
</div>
|
||||
<div class="mb-2 fw-bold text-muted" ${!fullName ? 'hidden' : ''}>
|
||||
${fullName}
|
||||
</div>
|
||||
<div class="mb-2" ${!email ? 'hidden' : ''}>
|
||||
${email}
|
||||
</div>
|
||||
<div class="mb-2" ${!email ? 'hidden' : ''}>
|
||||
${phoneNumber}
|
||||
</div>
|
||||
<div class="mb-2" ${!address ? 'hidden' : ''}>
|
||||
${address}
|
||||
</div>
|
||||
<div class="mb-2" ${!addressParts.length ? 'hidden' : ''}>
|
||||
${addressParts.join(', ')}
|
||||
</div>
|
||||
</div>
|
||||
`);
|
||||
|
||||
// Update appointment form data for submission to server when the user confirms the appointment.
|
||||
|
||||
const data = {};
|
||||
|
||||
data.customer = {
|
||||
|
@ -736,7 +715,7 @@ App.Pages.Booking = (function () {
|
|||
|
||||
data.appointment = {
|
||||
start_datetime:
|
||||
moment($selectDate[0]._flatpickr.selectedDates[0]).format('YYYY-MM-DD') +
|
||||
moment(App.Utils.UI.getDateTimePickerValue($selectDate)).format('YYYY-MM-DD') +
|
||||
' ' +
|
||||
moment($('.selected-hour').data('value'), 'HH:mm').format('HH:mm') +
|
||||
':00',
|
||||
|
@ -753,6 +732,7 @@ App.Pages.Booking = (function () {
|
|||
data.appointment.id = vars('appointment_data').id;
|
||||
data.customer.id = vars('customer_data').id;
|
||||
}
|
||||
|
||||
$('input[name="post_data"]').val(JSON.stringify(data));
|
||||
}
|
||||
|
||||
|
@ -772,7 +752,7 @@ App.Pages.Booking = (function () {
|
|||
);
|
||||
|
||||
// Add the duration to the start datetime.
|
||||
const selectedDate = moment($selectDate[0]._flatpickr.selectedDates[0]).format('YYYY-MM-DD');
|
||||
const selectedDate = moment(App.Utils.UI.getDateTimePickerValue($selectDate)).format('YYYY-MM-DD');
|
||||
|
||||
const selectedHour = $('.selected-hour').data('value'); // HH:mm
|
||||
|
||||
|
@ -807,7 +787,7 @@ App.Pages.Booking = (function () {
|
|||
|
||||
// Set Appointment Date
|
||||
const startMoment = moment(appointment.start_datetime);
|
||||
$selectDate[0]._flatpickr.setDate(startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($selectDate, startMoment.toDate());
|
||||
App.Http.Booking.getAvailableHours(startMoment.format('YYYY-MM-DD'));
|
||||
|
||||
// Apply Customer's Data
|
||||
|
@ -833,6 +813,8 @@ App.Pages.Booking = (function () {
|
|||
}
|
||||
|
||||
/**
|
||||
* Update the service description and information.
|
||||
*
|
||||
* This method updates the HTML content with a brief description of the
|
||||
* user selected service (only if available in db). This is useful for the
|
||||
* customers upon selecting the correct service.
|
||||
|
@ -849,41 +831,45 @@ App.Pages.Booking = (function () {
|
|||
);
|
||||
|
||||
if (!service) {
|
||||
return;
|
||||
return; // Service not found
|
||||
}
|
||||
|
||||
$('<strong/>', {
|
||||
'text': App.Utils.String.escapeHtml(service.name),
|
||||
}).appendTo($serviceDescription);
|
||||
// Render the additional service information
|
||||
|
||||
if (service.description) {
|
||||
$('<br/>').appendTo($serviceDescription);
|
||||
|
||||
$('<span/>', {
|
||||
'html': App.Utils.String.escapeHtml(service.description).replaceAll('\n', '<br/>'),
|
||||
}).appendTo($serviceDescription);
|
||||
}
|
||||
|
||||
if (service.duration || Number(service.price) > 0 || service.location) {
|
||||
$('<br/>').appendTo($serviceDescription);
|
||||
}
|
||||
const additionalInfoParts = [];
|
||||
|
||||
if (service.duration) {
|
||||
$('<span/>', {
|
||||
'text': '[' + lang('duration') + ' ' + service.duration + ' ' + lang('minutes') + ']',
|
||||
}).appendTo($serviceDescription);
|
||||
additionalInfoParts.push(`${lang('duration')}: ${service.duration} ${lang('minutes')}`);
|
||||
}
|
||||
|
||||
if (Number(service.price) > 0) {
|
||||
$('<span/>', {
|
||||
'text': '[' + lang('price') + ' ' + service.price + ' ' + service.currency + ']',
|
||||
}).appendTo($serviceDescription);
|
||||
additionalInfoParts.push(`${lang('price')}: ${service.price} ${service.currency}`);
|
||||
}
|
||||
|
||||
if (service.location) {
|
||||
$('<span/>', {
|
||||
'text': '[' + lang('location') + ' ' + service.location + ']',
|
||||
}).appendTo($serviceDescription);
|
||||
additionalInfoParts.push(`${lang('location')}: ${service.location}`);
|
||||
}
|
||||
|
||||
if (additionalInfoParts.length) {
|
||||
$(`
|
||||
<div class="mb-2 fst-italic">
|
||||
${additionalInfoParts.join(', ')}
|
||||
</div>
|
||||
`).appendTo($serviceDescription);
|
||||
}
|
||||
|
||||
// Render the service description
|
||||
|
||||
if (service.description.length) {
|
||||
const escapedDescription = App.Utils.String.escapeHtml(service.description);
|
||||
|
||||
const multiLineDescription = escapedDescription.replaceAll('\n', '<br/>');
|
||||
|
||||
$(`
|
||||
<div class="text-muted">
|
||||
${multiLineDescription}
|
||||
</div>
|
||||
`).appendTo($serviceDescription);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -138,10 +138,10 @@ App.Utils.CalendarDefaultView = (function () {
|
|||
|
||||
// Set the start and end datetime of the appointment.
|
||||
startMoment = moment(appointment.start_datetime);
|
||||
$appointmentsModal.find('#start-datetime')[0]._flatpickr.setDate(startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($appointmentsModal.find('#start-datetime'), startMoment.toDate());
|
||||
|
||||
endMoment = moment(appointment.end_datetime);
|
||||
$appointmentsModal.find('#end-datetime')[0]._flatpickr.setDate(endMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($appointmentsModal.find('#end-datetime'), endMoment.toDate());
|
||||
|
||||
const customer = appointment.customer;
|
||||
$appointmentsModal.find('#customer-id').val(appointment.id_users_customer);
|
||||
|
@ -183,10 +183,16 @@ App.Utils.CalendarDefaultView = (function () {
|
|||
|
||||
// Apply unavailability data to dialog.
|
||||
$unavailabilitiesModal.find('.modal-header h3').text(lang('edit_unavailability_title'));
|
||||
$unavailabilitiesModal.find('#unavailability-start')[0]._flatpickr.setDate(startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue(
|
||||
$unavailabilitiesModal.find('#unavailability-start'),
|
||||
startMoment.toDate(),
|
||||
);
|
||||
App.Utils.UI.setDateTimePickerValue(
|
||||
$unavailabilitiesModal.find('#unavailability-end'),
|
||||
endMoment.toDate(),
|
||||
);
|
||||
$unavailabilitiesModal.find('#unavailability-id').val(unavailability.id);
|
||||
$unavailabilitiesModal.find('#unavailability-provider').val(unavailability.id_users_provider);
|
||||
$unavailabilitiesModal.find('#unavailability-end')[0]._flatpickr.setDate(endMoment.toDate());
|
||||
$unavailabilitiesModal.find('#unavailability-notes').val(unavailability.notes);
|
||||
$unavailabilitiesModal.modal('show');
|
||||
}
|
||||
|
@ -1057,9 +1063,9 @@ App.Utils.CalendarDefaultView = (function () {
|
|||
|
||||
$('#unavailability-provider').trigger('change');
|
||||
|
||||
$('#unavailability-start')[0]._flatpickr.setDate(info.start);
|
||||
App.Utils.UI.setDateTimePickerValue($('#unavailability-start'), info.start);
|
||||
|
||||
$('#unavailability-end')[0]._flatpickr.setDate(info.end);
|
||||
App.Utils.UI.setDateTimePickerValue($('#unavailability-end'), info.end);
|
||||
|
||||
messageModal.dispose();
|
||||
},
|
||||
|
@ -1113,8 +1119,11 @@ App.Utils.CalendarDefaultView = (function () {
|
|||
}
|
||||
|
||||
// Preselect time
|
||||
$('#start-datetime')[0]._flatpickr.setDate(info.start);
|
||||
$('#end-datetime')[0]._flatpickr.setDate(App.Pages.Calendar.getSelectionEndDate(info));
|
||||
App.Utils.UI.setDateTimePickerValue($('#start-datetime'), info.start);
|
||||
App.Utils.UI.setDateTimePickerValue(
|
||||
$('#end-datetime'),
|
||||
App.Pages.Calendar.getSelectionEndDate(info),
|
||||
);
|
||||
|
||||
messageModal.dispose();
|
||||
},
|
||||
|
@ -1586,10 +1595,13 @@ App.Utils.CalendarDefaultView = (function () {
|
|||
|
||||
// Set the start and end datetime of the appointment.
|
||||
const startDatetimeMoment = moment(appointment.start_datetime);
|
||||
$appointmentsModal.find('#start-datetime')[0]._flatpickr.setDate(startDatetimeMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue(
|
||||
$appointmentsModal.find('#start-datetime'),
|
||||
startDatetimeMoment.toDate(),
|
||||
);
|
||||
|
||||
const endDatetimeMoment = moment(appointment.end_datetime);
|
||||
$appointmentsModal.find('#end-datetime')[0]._flatpickr.setDate(endDatetimeMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($appointmentsModal.find('#end-datetime'), endDatetimeMoment.toDate());
|
||||
|
||||
const customer = appointment.customer;
|
||||
$appointmentsModal.find('#customer-id').val(appointment.id_users_customer);
|
||||
|
|
|
@ -43,25 +43,25 @@ App.Utils.CalendarTableView = (function () {
|
|||
function addEventListeners() {
|
||||
$calendar.on('click', '.calendar-header .btn.previous', () => {
|
||||
const dayInterval = $selectFilterItem.val();
|
||||
const currentDate = $selectDate[0]._flatpickr.selectedDates[0];
|
||||
const currentDate = App.Utils.UI.getDateTimePickerValue($selectDate);
|
||||
const startDate = moment(currentDate).subtract(1, 'days');
|
||||
const endDate = startDate.clone().add(dayInterval - 1, 'days');
|
||||
$selectDate[0]._flatpickr.setDate(startDate.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($selectDate, startDate.toDate());
|
||||
createView(startDate.toDate(), endDate.toDate());
|
||||
});
|
||||
|
||||
$calendar.on('click', '.calendar-header .btn.next', () => {
|
||||
const dayInterval = $selectFilterItem.val();
|
||||
const currentDate = $selectDate[0]._flatpickr.selectedDates[0];
|
||||
const currentDate = App.Utils.UI.getDateTimePickerValue($selectDate);
|
||||
const startDate = moment(currentDate).add(1, 'days');
|
||||
const endDate = startDate.clone().add(dayInterval - 1, 'days');
|
||||
$selectDate[0]._flatpickr.setDate(startDate.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($selectDate, startDate.toDate());
|
||||
createView(startDate.toDate(), endDate.toDate());
|
||||
});
|
||||
|
||||
$calendarToolbar.on('change', '#select-filter-item', () => {
|
||||
const dayInterval = $selectFilterItem.val();
|
||||
const currentDate = $selectDate[0]._flatpickr.selectedDates[0];
|
||||
const currentDate = App.Utils.UI.getDateTimePickerValue($selectDate);
|
||||
const startDate = moment(currentDate);
|
||||
const endDate = startDate.clone().add(dayInterval - 1, 'days');
|
||||
createView(startDate.toDate(), endDate.toDate());
|
||||
|
@ -70,7 +70,7 @@ App.Utils.CalendarTableView = (function () {
|
|||
$calendarToolbar.on('click', '#reload-appointments', () => {
|
||||
// Fetch the events and place them in the existing HTML format.
|
||||
const dayInterval = $selectFilterItem.val();
|
||||
const currentDate = $selectDate[0]._flatpickr.selectedDates[0];
|
||||
const currentDate = App.Utils.UI.getDateTimePickerValue($selectDate);
|
||||
const startDateMoment = moment(currentDate);
|
||||
const startDate = startDateMoment.toDate();
|
||||
const endDateMoment = startDateMoment.clone().add(dayInterval - 1, 'days');
|
||||
|
@ -212,10 +212,10 @@ App.Utils.CalendarTableView = (function () {
|
|||
|
||||
// Set the start and end datetime of the appointment.
|
||||
startMoment = moment(appointment.start_datetime);
|
||||
$appointmentsModal.find('#start-datetime')[0]._flatpickr.setDate(startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($appointmentsModal.find('#start-datetime'), startMoment.toDate());
|
||||
|
||||
endMoment = moment(appointment.end_datetime);
|
||||
$appointmentsModal.find('#end-datetime')[0]._flatpickr.setDate(endMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($appointmentsModal.find('#end-datetime'), endMoment.toDate());
|
||||
|
||||
const customer = appointment.customer;
|
||||
$appointmentsModal.find('#customer-id').val(appointment.id_users_customer);
|
||||
|
@ -257,10 +257,10 @@ App.Utils.CalendarTableView = (function () {
|
|||
|
||||
// Apply unavailability data to dialog.
|
||||
$unavailabilitiesModal.find('.modal-header h3').text(lang('edit_unavailability_title'));
|
||||
$unavailabilitiesModal.find('#unavailability-start')[0]._flatpickr.setDate(startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($('#unavailability-start'), startMoment.toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($('#unavailability-end'), endMoment.toDate());
|
||||
$unavailabilitiesModal.find('#unavailability-id').val(unavailability.id);
|
||||
$unavailabilitiesModal.find('#unavailability-provider').val(unavailability.id_users_provider);
|
||||
$unavailabilitiesModal.find('#unavailability-end')[0]._flatpickr.setDate(endMoment.toDate());
|
||||
$unavailabilitiesModal.find('#unavailability-notes').val(unavailability.notes);
|
||||
|
||||
$unavailabilitiesModal.modal('show');
|
||||
|
@ -389,7 +389,7 @@ App.Utils.CalendarTableView = (function () {
|
|||
],
|
||||
}).appendTo($calendarHeader);
|
||||
|
||||
App.Utils.UI.initializeDatepicker($calendarHeader.find('.select-date'), {
|
||||
App.Utils.UI.initializeDatePicker($calendarHeader.find('.select-date'), {
|
||||
onChange(selectedDates) {
|
||||
const startDate = selectedDates[0];
|
||||
const endDate = moment(startDate)
|
||||
|
@ -1742,9 +1742,8 @@ App.Utils.CalendarTableView = (function () {
|
|||
|
||||
$('#unavailability-provider').trigger('change');
|
||||
|
||||
$('#unavailability-start')[0]._flatpickr.setDate(info.start);
|
||||
|
||||
$('#unavailability-end')[0]._flatpickr.setDate(info.end);
|
||||
App.Utils.UI.setDateTimePickerValue($('#unavailability-start'), info.start);
|
||||
App.Utils.UI.setDateTimePickerValue($('#unavailability-end'), info.end);
|
||||
|
||||
messageModal.dispose();
|
||||
},
|
||||
|
@ -1783,8 +1782,11 @@ App.Utils.CalendarTableView = (function () {
|
|||
$selectProvider.trigger('change');
|
||||
|
||||
// Preselect time
|
||||
$('#start-datetime')[0]._flatpickr.setDate(info.start);
|
||||
$('#end-datetime')[0]._flatpickr.setDate(App.Pages.Calendar.getSelectionEndDate(info));
|
||||
App.Utils.UI.setDateTimePickerValue($('#start-datetime'), info.start);
|
||||
App.Utils.UI.setDateTimePickerValue(
|
||||
$('#end-datetime'),
|
||||
App.Pages.Calendar.getSelectionEndDate(info),
|
||||
);
|
||||
|
||||
messageModal.dispose();
|
||||
},
|
||||
|
|
|
@ -148,7 +148,7 @@ window.App.Utils.UI = (function () {
|
|||
* @param {jQuery} $target
|
||||
* @param {Object} [params]
|
||||
*/
|
||||
function initializeDatetimepicker($target, params = {}) {
|
||||
function initializeDateTimePicker($target, params = {}) {
|
||||
$target.flatpickr({
|
||||
enableTime: true,
|
||||
allowInput: true,
|
||||
|
@ -168,7 +168,7 @@ window.App.Utils.UI = (function () {
|
|||
* @param {jQuery} $target
|
||||
* @param {Object} [params]
|
||||
*/
|
||||
function initializeDatepicker($target, params = {}) {
|
||||
function initializeDatePicker($target, params = {}) {
|
||||
$target.flatpickr({
|
||||
allowInput: true,
|
||||
dateFormat: getDateFormat(),
|
||||
|
@ -186,7 +186,7 @@ window.App.Utils.UI = (function () {
|
|||
* @param {jQuery} $target
|
||||
* @param {Object} [params]
|
||||
*/
|
||||
function initializeTimepicker($target, params = {}) {
|
||||
function initializeTimePicker($target, params = {}) {
|
||||
$target.flatpickr({
|
||||
noCalendar: true,
|
||||
enableTime: true,
|
||||
|
@ -230,7 +230,7 @@ window.App.Utils.UI = (function () {
|
|||
*
|
||||
* @return {Date}
|
||||
*/
|
||||
function getDatetimepickerValue($target) {
|
||||
function getDateTimePickerValue($target) {
|
||||
if (!$target?.length) {
|
||||
throw new Error('Empty $target argument provided.');
|
||||
}
|
||||
|
@ -244,7 +244,7 @@ window.App.Utils.UI = (function () {
|
|||
* @param {jQuery} $target
|
||||
* @param {Date} value
|
||||
*/
|
||||
function setDatetimepickerValue($target, value) {
|
||||
function setDateTimePickerValue($target, value) {
|
||||
if (!$target?.length) {
|
||||
throw new Error('Empty $target argument provided.');
|
||||
}
|
||||
|
@ -253,12 +253,12 @@ window.App.Utils.UI = (function () {
|
|||
}
|
||||
|
||||
return {
|
||||
initializeDatetimepicker,
|
||||
initializeDatepicker,
|
||||
initializeTimepicker,
|
||||
initializeDateTimePicker,
|
||||
initializeDatePicker,
|
||||
initializeTimePicker,
|
||||
initializeDropdown,
|
||||
initializeTextEditor,
|
||||
getDatetimepickerValue,
|
||||
setDatetimepickerValue,
|
||||
getDateTimePickerValue,
|
||||
setDateTimePickerValue,
|
||||
};
|
||||
})();
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
* This module implements the functionality of working plans.
|
||||
*/
|
||||
App.Utils.WorkingPlan = (function () {
|
||||
const moment = window.moment;
|
||||
|
||||
/**
|
||||
* Class WorkingPlan
|
||||
*
|
||||
|
@ -480,7 +482,7 @@ App.Utils.WorkingPlan = (function () {
|
|||
|
||||
$tr.children().trigger('edit');
|
||||
|
||||
App.Utils.UI.initializeTimepicker($tr.find('.break-start input, .break-end input'));
|
||||
App.Utils.UI.initializeTimePicker($tr.find('.break-start input, .break-end input'));
|
||||
|
||||
$tr.find('.break-day select').focus();
|
||||
|
||||
|
@ -686,16 +688,16 @@ App.Utils.WorkingPlan = (function () {
|
|||
disabled = disabled || false;
|
||||
|
||||
if (disabled === false) {
|
||||
App.Utils.UI.initializeTimepicker($('.working-plan input:text'), {
|
||||
App.Utils.UI.initializeTimePicker($('.working-plan input:text'), {
|
||||
onChange: (selectedDates, dateStr, instance) => {
|
||||
const startMoment = moment(selectedDates[0]);
|
||||
|
||||
const $workEnd = $(instance.input).closest('tr').find('.work-end');
|
||||
|
||||
const endMoment = moment($workEnd[0]._flatpickr.selectedDates[0]);
|
||||
const endMoment = moment(App.Utils.UI.getDateTimePickerValue($workEnd));
|
||||
|
||||
if (startMoment > endMoment) {
|
||||
$workEnd[0]._flatpickr.setDate(startMoment.add(1, 'hour').toDate());
|
||||
App.Utils.UI.setDateTimePickerValue($workEnd, startMoment.add(1, 'hour').toDate());
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "maket/maketrandevu",
|
||||
"description": "MAKET Randevu Portalı",
|
||||
"version": "1.5.0-p1",
|
||||
"version": "1.5.0-RC2",
|
||||
"homepage": "https://iflpanel.com/about/maketrandevu",
|
||||
"type": "project",
|
||||
"license": "GPL-3.0",
|
||||
|
|
6
composer.lock
generated
6
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "70cead7cce550cc0e5a37eb1e558aee9",
|
||||
"content-hash": "eafeafe75a984017de7900242825c958",
|
||||
"packages": [
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
|
@ -140,7 +140,7 @@
|
|||
},
|
||||
{
|
||||
"name": "google/apiclient-services",
|
||||
"version": "v0.329.0",
|
||||
"version": "v0.330.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/googleapis/google-api-php-client-services.git",
|
||||
|
@ -178,7 +178,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
|
||||
"source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.329.0"
|
||||
"source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.330.0"
|
||||
},
|
||||
"time": "2023-12-24T01:02:15+00:00"
|
||||
},
|
||||
|
|
|
@ -46,7 +46,7 @@ services:
|
|||
|
||||
swagger-ui:
|
||||
platform: linux/amd64
|
||||
image: swaggerapi/swagger-ui
|
||||
image: swaggerapi/swagger-ui:v5.10.5
|
||||
ports:
|
||||
- "8000:8080"
|
||||
volumes:
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
# Approximately 10min (tested with 4vcpu / 8GB RAM / 30Mbps network speed)
|
||||
|
||||
# MAKETRANDEVU_VER="test"
|
||||
MAKETRANDEVU_VER="1.5.0-p1" # UPDATE MANUALLY !
|
||||
MAKETRANDEVU_VER="1.5.0-RC2" # UPDATE MANUALLY !
|
||||
|
||||
_RED='\033[0;31m'
|
||||
_NC='\033[0m \e[0m' # No Color, No Effect
|
||||
|
|
|
@ -25,7 +25,7 @@ const zip = require('zip-dir');
|
|||
// const debug = require('gulp-debug');
|
||||
|
||||
function archive(done) {
|
||||
const version = "1.5.0-p1"
|
||||
const version = "1.5.0-RC2"
|
||||
const filename = 'maketrandevu-' + version + '.zip';
|
||||
|
||||
fs.removeSync('build');
|
||||
|
|
|
@ -8,7 +8,7 @@ SCRIPT_NAME="nginx_docker_localtest.sh" # name of the *this* file
|
|||
DEBUG="FALSE"
|
||||
|
||||
### REMOTE RELEASE ###
|
||||
LATEST_RELEASE="1.5.0-p1"
|
||||
LATEST_RELEASE="1.5.0-RC2"
|
||||
FILE_NAME="maketrandevu-$LATEST_RELEASE.zip"
|
||||
DOWNLOAD_LINK=https://git.aliberksandikci.com.tr/maket/maketrandevu/releases/download/$LATEST_RELEASE/$FILE_NAME
|
||||
|
||||
|
@ -34,16 +34,21 @@ COMMANDS:
|
|||
restart: restart services (nginx, mariadb, php-fpm)
|
||||
update: update source files with new build on /source/
|
||||
status: see current webserver status
|
||||
root: move to root web folder
|
||||
help : see this help text
|
||||
|
||||
BUNDLE COMMANDS:
|
||||
complete-restart: update + reconf + restart + reconf
|
||||
|
||||
EXTERNAL COMMANDS: (without dock keyword)
|
||||
root: move to root web folder
|
||||
|
||||
|
||||
"""
|
||||
|
||||
CONFIG_FILE_CONTENT="""
|
||||
<?php
|
||||
/* ----------------------------------------------------------------------------
|
||||
* MaketRandevu - Izmir Fen Lisesi Randevu Portali
|
||||
* MaketRandevu - MAKET Randevu Portalı
|
||||
*
|
||||
* @package maketrandevu
|
||||
* @author asandikci <contact@aliberksandikci.com.tr>
|
||||
|
@ -176,8 +181,8 @@ _status() {
|
|||
}
|
||||
|
||||
if [[ $# -eq 0 ]]; then
|
||||
if [[ $(pwd) != *maketrandevu ]]; then
|
||||
echo "PLEASE CHANGE DIRECTORY TO \`maketrandevu/\` BEFORE STARTING SCRIPT"
|
||||
if [[ $(pwd) != *MaketRandevu ]]; then
|
||||
echo "PLEASE CHANGE DIRECTORY TO \`MaketRandevu/\` BEFORE STARTING SCRIPT"
|
||||
exit
|
||||
fi
|
||||
# TODO silmeden önce onay iste!
|
||||
|
@ -235,6 +240,27 @@ elif [[ $1 == "docker" ]]; then
|
|||
echo RECONFIGURED
|
||||
echo
|
||||
_exit
|
||||
elif [[ $2 == "complete-restart" ]]; then
|
||||
echo "updating sources!"
|
||||
rsync -a --progress /source/build/ $WEB_ROOT_FOLDER --exclude config.php --exclude storage
|
||||
|
||||
sleep 1
|
||||
|
||||
echo -e "$CONFIG_FILE_CONTENT" >"$WEB_ROOT_FOLDER/config.php"
|
||||
echo -e "$NGINX_CONFIG_FILE" >"/etc/nginx/conf.d/default.conf"
|
||||
echo -e "$PHP_FPM_CONFIG_FILE" >"/etc/php/8.2/fpm/pool.d/maketrandevu.conf"
|
||||
echo RECONFIGURED
|
||||
echo
|
||||
|
||||
service mariadb restart
|
||||
sleep 3
|
||||
service php8.2-fpm restart
|
||||
sleep 3
|
||||
service nginx restart
|
||||
|
||||
_status
|
||||
|
||||
|
||||
elif [[ $2 == "update" ]]; then
|
||||
echo "updating sources!"
|
||||
rsync -a --progress /source/build/ $WEB_ROOT_FOLDER --exclude config.php --exclude storage
|
||||
|
|
88
openapi.yml
88
openapi.yml
|
@ -54,7 +54,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Availabilities'
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -131,7 +133,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AppointmentCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/AppointmentRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -302,7 +306,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UnavailabilityCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/UnavailabilityRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -311,6 +317,10 @@ paths:
|
|||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
x-codegen-request-body-name: body
|
||||
security:
|
||||
- BearerToken: [ ]
|
||||
- BasicAuth: [ ]
|
||||
post:
|
||||
tags:
|
||||
- unavailabilities
|
||||
|
@ -470,7 +480,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CustomerCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/CustomerRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -641,7 +653,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ServiceCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ServiceRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -812,7 +826,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ServiceCategoryCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ServiceCategoryRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -983,7 +999,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AdminCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/AdminRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -1154,7 +1172,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ProviderCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ProviderRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -1325,7 +1345,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SecretaryCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/SecretaryRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -1490,7 +1512,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SettingCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ServiceRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -1606,7 +1630,9 @@ paths:
|
|||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WebhookCollection'
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/WebhookRecord'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
'500':
|
||||
|
@ -1821,10 +1847,6 @@ components:
|
|||
customerId: 5
|
||||
providerId: 2
|
||||
serviceId: 6
|
||||
AppointmentCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/AppointmentRecord'
|
||||
UnavailabilityRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -1875,10 +1897,6 @@ components:
|
|||
location: Test Street 1A, 12345 Some State, Some Place
|
||||
notes: This is a test appointment.
|
||||
providerId: 2
|
||||
UnavailabilityCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/UnavailabilityRecord'
|
||||
CustomerRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -1978,10 +1996,6 @@ components:
|
|||
customField4: Value4
|
||||
customField5: Value5
|
||||
notes: This is a test customer.
|
||||
CustomerCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/CustomerRecord'
|
||||
ServiceRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -2048,10 +2062,6 @@ components:
|
|||
availabilitiesType: flexible
|
||||
attendantsNumber: 1
|
||||
serviceCategoryId: null
|
||||
ServiceCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ServiceRecord'
|
||||
ServiceCategoryRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -2075,10 +2085,6 @@ components:
|
|||
example:
|
||||
name: Test Category
|
||||
description: This is a test category.
|
||||
ServiceCategoryCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ServiceCategoryRecord'
|
||||
AdminRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -2187,10 +2193,6 @@ components:
|
|||
password: Password@123
|
||||
notifications: true
|
||||
calendarView: default
|
||||
AdminCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/AdminRecord'
|
||||
ProviderRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -2391,10 +2393,6 @@ components:
|
|||
end: '17:00'
|
||||
breaks: [ ]
|
||||
saturday: null
|
||||
ProviderCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ProviderRecord'
|
||||
SecretaryRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -2516,10 +2514,6 @@ components:
|
|||
password: Password@123
|
||||
notifications: true
|
||||
calendarView: default
|
||||
SecretaryCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/SecretaryRecord'
|
||||
SettingRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -2537,10 +2531,6 @@ components:
|
|||
type: string
|
||||
example:
|
||||
value: ACME Inc
|
||||
SettingCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/SettingRecord'
|
||||
WebhookRecord:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -2588,10 +2578,6 @@ components:
|
|||
secretToken: SecureSecretTokenHere
|
||||
isSslVerified: true
|
||||
notes: This is a webhook.
|
||||
WebhookCollection:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/WebhookRecord'
|
||||
ErrorResponse:
|
||||
type: object
|
||||
properties:
|
||||
|
|
135
package-lock.json
generated
135
package-lock.json
generated
|
@ -60,12 +60,13 @@
|
|||
}
|
||||
},
|
||||
"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.23.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
|
||||
"integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/highlight": "^7.18.6"
|
||||
"@babel/highlight": "^7.23.4",
|
||||
"chalk": "^2.4.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -111,12 +112,12 @@
|
|||
}
|
||||
},
|
||||
"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.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
|
||||
"integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.21.5",
|
||||
"@babel/types": "^7.23.6",
|
||||
"@jridgewell/gen-mapping": "^0.3.2",
|
||||
"@jridgewell/trace-mapping": "^0.3.17",
|
||||
"jsesc": "^2.5.1"
|
||||
|
@ -226,34 +227,34 @@
|
|||
}
|
||||
},
|
||||
"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"
|
||||
|
@ -383,30 +384,30 @@
|
|||
}
|
||||
},
|
||||
"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.22.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
|
||||
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.18.6"
|
||||
"@babel/types": "^7.22.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.23.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
|
||||
"integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
|
||||
"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.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -451,13 +452,13 @@
|
|||
}
|
||||
},
|
||||
"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.23.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
|
||||
"integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.18.6",
|
||||
"chalk": "^2.0.0",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"chalk": "^2.4.2",
|
||||
"js-tokens": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -465,9 +466,9 @@
|
|||
}
|
||||
},
|
||||
"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.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
|
||||
"integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
|
@ -1593,34 +1594,34 @@
|
|||
}
|
||||
},
|
||||
"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.22.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
|
||||
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7"
|
||||
"@babel/code-frame": "^7.22.13",
|
||||
"@babel/parser": "^7.22.15",
|
||||
"@babel/types": "^7.22.15"
|
||||
},
|
||||
"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.23.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
|
||||
"integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
|
||||
"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.23.5",
|
||||
"@babel/generator": "^7.23.6",
|
||||
"@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.22.6",
|
||||
"@babel/parser": "^7.23.6",
|
||||
"@babel/types": "^7.23.6",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1628,13 +1629,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.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
|
||||
"integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.21.5",
|
||||
"@babel/helper-validator-identifier": "^7.19.1",
|
||||
"@babel/helper-string-parser": "^7.23.4",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -5814,9 +5815,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"
|
||||
|
@ -7051,9 +7052,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"
|
||||
|
|
Loading…
Reference in a new issue