From 6387f7c226ebc40dd60767d1d3899684fceba9f6 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 22 Mar 2026 03:18:19 +0000 Subject: [PATCH] user profile --- assets/uploads/users/user_1_1774149432.jpg | Bin 0 -> 15786 bytes .../20260322_add_avatar_to_users.sql | 1 + includes/layout/header.php | 13 +- includes/pages/appointments.php | 32 ++-- includes/pages/doctor_holidays.php | 12 +- includes/pages/home_visits.php | 26 +-- includes/pages/profile.php | 94 ++++++++++ includes/pages/roles.php | 16 +- includes/pages/users.php | 22 ++- lang.php | 176 +++++++++++++++++- profile.php | 99 ++++++++++ test_api_appointments.php | 5 - test_create_appointment_curl.php | 28 --- 13 files changed, 428 insertions(+), 96 deletions(-) create mode 100644 assets/uploads/users/user_1_1774149432.jpg create mode 100644 db/migrations/20260322_add_avatar_to_users.sql create mode 100644 includes/pages/profile.php create mode 100644 profile.php delete mode 100644 test_api_appointments.php delete mode 100644 test_create_appointment_curl.php diff --git a/assets/uploads/users/user_1_1774149432.jpg b/assets/uploads/users/user_1_1774149432.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e8f8a240e2098f2c17e4eb7182de6ec07a1d35f GIT binary patch literal 15786 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 literal 0 HcmV?d00001 diff --git a/db/migrations/20260322_add_avatar_to_users.sql b/db/migrations/20260322_add_avatar_to_users.sql new file mode 100644 index 0000000..93d4e44 --- /dev/null +++ b/db/migrations/20260322_add_avatar_to_users.sql @@ -0,0 +1 @@ +ALTER TABLE users ADD COLUMN avatar VARCHAR(255) DEFAULT NULL; diff --git a/includes/layout/header.php b/includes/layout/header.php index 392566d..ecdb209 100644 --- a/includes/layout/header.php +++ b/includes/layout/header.php @@ -269,18 +269,21 @@ $site_favicon = !empty($site_settings['company_favicon']) ? $site_settings['comp -