From 3445472049362ef9652ebc96107027db179b7eec Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Wed, 7 Jun 2023 16:18:05 +0200 Subject: [PATCH] combine change-password, change-theme and change-language into 'my profile' Signed-off-by: Michael Kaufmann --- admin_index.php | 167 +++++++------ customer_index.php | 223 +++++++++--------- lng/de.lng.php | 1 + lng/en.lng.php | 1 + .../Froxlor/user/change_language.html.twig | 34 --- .../Froxlor/user/change_password.html.twig | 57 ----- templates/Froxlor/user/change_theme.html.twig | 34 --- templates/Froxlor/user/profile.html.twig | 142 +++++++++++ templates/Froxlor/userarea.html.twig | 14 +- 9 files changed, 337 insertions(+), 336 deletions(-) delete mode 100644 templates/Froxlor/user/change_language.html.twig delete mode 100644 templates/Froxlor/user/change_password.html.twig delete mode 100644 templates/Froxlor/user/change_theme.html.twig create mode 100644 templates/Froxlor/user/profile.html.twig diff --git a/admin_index.php b/admin_index.php index f5479e4e..91ea51a5 100644 --- a/admin_index.php +++ b/admin_index.php @@ -31,6 +31,7 @@ use Froxlor\Api\Commands\Froxlor as Froxlor; use Froxlor\CurrentUser; use Froxlor\Database\Database; use Froxlor\FroxlorLogger; +use Froxlor\Language; use Froxlor\Settings; use Froxlor\System\Cronjob; use Froxlor\System\Crypt; @@ -38,7 +39,6 @@ use Froxlor\UI\Panel\UI; use Froxlor\UI\Request; use Froxlor\UI\Response; use Froxlor\Validate\Validate; -use Froxlor\Language; $id = (int)Request::any('id'); @@ -196,107 +196,104 @@ if ($page == 'overview') { 'outstanding_tasks' => $outstanding_tasks, 'cron_last_runs' => $cron_last_runs ]); -} elseif ($page == 'change_password') { - if (isset($_POST['send']) && $_POST['send'] == 'send') { - $old_password = Validate::validate($_POST['old_password'], 'old password'); +} elseif ($page == 'profile') { + $languages = Language::getLanguages(); - if (!Crypt::validatePasswordLogin($userinfo, $old_password, TABLE_PANEL_ADMINS, 'adminid')) { - Response::standardError('oldpasswordnotcorrect'); - } + if (!empty($_POST)) { + if ($_POST['send'] == 'changepassword') { + $old_password = Validate::validate($_POST['old_password'], 'old password'); - try { - $new_password = Crypt::validatePassword($_POST['new_password'], 'new password'); - $new_password_confirm = Crypt::validatePassword($_POST['new_password_confirm'], 'new password confirm'); - } catch (Exception $e) { - Response::dynamicError($e->getMessage()); - } + if (!Crypt::validatePasswordLogin($userinfo, $old_password, TABLE_PANEL_ADMINS, 'adminid')) { + Response::standardError('oldpasswordnotcorrect'); + } - if ($old_password == '') { - Response::standardError([ - 'stringisempty', - 'changepassword.old_password' - ]); - } elseif ($new_password == '') { - Response::standardError([ - 'stringisempty', - 'changepassword.new_password' - ]); - } elseif ($new_password_confirm == '') { - Response::standardError([ - 'stringisempty', - 'changepassword.new_password_confirm' - ]); - } elseif ($new_password != $new_password_confirm) { - Response::standardError('newpasswordconfirmerror'); - } else { try { - Admins::getLocal($userinfo, [ - 'id' => $userinfo['adminid'], - 'admin_password' => $new_password - ])->update(); + $new_password = Crypt::validatePassword($_POST['new_password'], 'new password'); + $new_password_confirm = Crypt::validatePassword($_POST['new_password_confirm'], 'new password confirm'); } catch (Exception $e) { Response::dynamicError($e->getMessage()); } - $log->logAction(FroxlorLogger::ADM_ACTION, LOG_NOTICE, 'changed password'); + + if ($old_password == '') { + Response::standardError([ + 'stringisempty', + 'changepassword.old_password' + ]); + } elseif ($new_password == '') { + Response::standardError([ + 'stringisempty', + 'changepassword.new_password' + ]); + } elseif ($new_password_confirm == '') { + Response::standardError([ + 'stringisempty', + 'changepassword.new_password_confirm' + ]); + } elseif ($new_password != $new_password_confirm) { + Response::standardError('newpasswordconfirmerror'); + } else { + try { + Admins::getLocal($userinfo, [ + 'id' => $userinfo['adminid'], + 'admin_password' => $new_password + ])->update(); + } catch (Exception $e) { + Response::dynamicError($e->getMessage()); + } + $log->logAction(FroxlorLogger::ADM_ACTION, LOG_NOTICE, 'changed password'); + Response::redirectTo($filename); + } + } elseif ($_POST['send'] == 'changetheme') { + if (Settings::Get('panel.allow_theme_change_admin') == 1) { + $theme = Validate::validate($_POST['theme'], 'theme'); + try { + Admins::getLocal($userinfo, [ + 'id' => $userinfo['adminid'], + 'theme' => $theme + ])->update(); + } catch (Exception $e) { + Response::dynamicError($e->getMessage()); + } + + $log->logAction(FroxlorLogger::ADM_ACTION, LOG_NOTICE, "changed his/her theme to '" . $theme . "'"); + } + Response::redirectTo($filename); + } elseif ($_POST['send'] == 'changelanguage') { + $def_language = Validate::validate($_POST['def_language'], 'default language'); + + if (isset($languages[$def_language])) { + try { + Admins::getLocal($userinfo, [ + 'id' => $userinfo['adminid'], + 'def_language' => $def_language + ])->update(); + CurrentUser::setField('language', $def_language); + } catch (Exception $e) { + Response::dynamicError($e->getMessage()); + } + } + $log->logAction(FroxlorLogger::ADM_ACTION, LOG_NOTICE, "changed his/her default language to '" . $def_language . "'"); Response::redirectTo($filename); } } else { - UI::view('user/change_password.html.twig'); - } -} elseif ($page == 'change_language') { - $languages = Language::getLanguages(); - if (isset($_POST['send']) && $_POST['send'] == 'send') { - $def_language = Validate::validate($_POST['def_language'], 'default language'); - - if (isset($languages[$def_language])) { - try { - Admins::getLocal($userinfo, [ - 'id' => $userinfo['adminid'], - 'def_language' => $def_language - ])->update(); - CurrentUser::setField('language', $def_language); - } catch (Exception $e) { - Response::dynamicError($e->getMessage()); - } + // change theme + $default_theme = Settings::Get('panel.default_theme'); + if ($userinfo['theme'] != '') { + $default_theme = $userinfo['theme']; } - $log->logAction(FroxlorLogger::ADM_ACTION, LOG_NOTICE, "changed his/her default language to '" . $def_language . "'"); - Response::redirectTo($filename); - } else { + $themes_avail = UI::getThemes(); + + // change language $default_lang = Settings::Get('panel.standardlanguage'); if ($userinfo['def_language'] != '') { $default_lang = $userinfo['def_language']; } - UI::view('user/change_language.html.twig', [ - 'languages' => $languages, - 'default_lang' => $default_lang - ]); - } -} elseif ($page == 'change_theme') { - if (isset($_POST['send']) && $_POST['send'] == 'send') { - $theme = Validate::validate($_POST['theme'], 'theme'); - try { - Admins::getLocal($userinfo, [ - 'id' => $userinfo['adminid'], - 'theme' => $theme - ])->update(); - } catch (Exception $e) { - Response::dynamicError($e->getMessage()); - } - - $log->logAction(FroxlorLogger::ADM_ACTION, LOG_NOTICE, "changed his/her theme to '" . $theme . "'"); - Response::redirectTo($filename); - } else { - $default_theme = Settings::Get('panel.default_theme'); - if ($userinfo['theme'] != '') { - $default_theme = $userinfo['theme']; - } - - $themes_avail = UI::getThemes(); - - UI::view('user/change_theme.html.twig', [ + UI::view('user/profile.html.twig', [ 'themes' => $themes_avail, - 'default_theme' => $default_theme + 'default_theme' => $default_theme, + 'languages' => $languages, + 'default_lang' => $default_lang, ]); } } elseif ($page == 'send_error_report' && Settings::Get('system.allow_error_report_admin') == '1') { diff --git a/customer_index.php b/customer_index.php index 4d0d2a6f..17b48486 100644 --- a/customer_index.php +++ b/customer_index.php @@ -27,18 +27,18 @@ const AREA = 'customer'; require __DIR__ . '/lib/init.php'; use Froxlor\Api\Commands\Customers as Customers; +use Froxlor\Cron\TaskId; use Froxlor\CurrentUser; use Froxlor\Database\Database; use Froxlor\Froxlor; use Froxlor\FroxlorLogger; +use Froxlor\Language; use Froxlor\Settings; +use Froxlor\System\Cronjob; use Froxlor\System\Crypt; use Froxlor\UI\Panel\UI; use Froxlor\UI\Response; use Froxlor\Validate\Validate; -use Froxlor\Language; -use Froxlor\System\Cronjob; -use Froxlor\Cron\TaskId; if ($action == 'logout') { $log->logAction(FroxlorLogger::USR_ACTION, LOG_INFO, 'logged out'); @@ -115,13 +115,13 @@ if ($page == 'overview') { if ($usages) { $userinfo['diskspace_bytes_used'] = $usages['webspace'] * 1024; - $userinfo['mailspace_used'] = $usages['mail'] * 1024; + $userinfo['mailspace_used'] = $usages['mail'] * 1024; $userinfo['dbspace_used'] = $usages['mysql'] * 1024; $userinfo['total_bytes_used'] = ($usages['webspace'] + $usages['mail'] + $usages['mysql']) * 1024; } else { $userinfo['diskspace_bytes_used'] = 0; $userinfo['total_bytes_used'] = 0; - $userinfo['mailspace_used'] = 0; + $userinfo['mailspace_used'] = 0; $userinfo['dbspace_used'] = 0; } @@ -130,141 +130,138 @@ if ($page == 'overview') { 'domains' => $domainArray, 'stdsubdomain' => $stdsubdomain ]); -} elseif ($page == 'change_password') { - if (isset($_POST['send']) && $_POST['send'] == 'send') { - $old_password = Validate::validate($_POST['old_password'], 'old password'); +} elseif ($page == 'profile') { + $languages = Language::getLanguages(); - if (!Crypt::validatePasswordLogin($userinfo, $old_password, TABLE_PANEL_CUSTOMERS, 'customerid')) { - Response::standardError('oldpasswordnotcorrect'); - } + if (!empty($_POST)) { + if ($_POST['send'] == 'changepassword') { + $old_password = Validate::validate($_POST['old_password'], 'old password'); - try { - $new_password = Crypt::validatePassword($_POST['new_password'], 'new password'); - $new_password_confirm = Crypt::validatePassword($_POST['new_password_confirm'], 'new password confirm'); - } catch (Exception $e) { - Response::dynamicError($e->getMessage()); - } + if (!Crypt::validatePasswordLogin($userinfo, $old_password, TABLE_PANEL_CUSTOMERS, 'customerid')) { + Response::standardError('oldpasswordnotcorrect'); + } - if ($old_password == '') { - Response::standardError([ - 'stringisempty', - 'changepassword.old_password' - ]); - } elseif ($new_password == '') { - Response::standardError([ - 'stringisempty', - 'changepassword.new_password' - ]); - } elseif ($new_password_confirm == '') { - Response::standardError([ - 'stringisempty', - 'changepassword.new_password_confirm' - ]); - } elseif ($new_password != $new_password_confirm) { - Response::standardError('newpasswordconfirmerror'); - } else { - // Update user password try { - Customers::getLocal($userinfo, [ - 'id' => $userinfo['customerid'], - 'new_customer_password' => $new_password - ])->update(); + $new_password = Crypt::validatePassword($_POST['new_password'], 'new password'); + $new_password_confirm = Crypt::validatePassword($_POST['new_password_confirm'], 'new password confirm'); } catch (Exception $e) { Response::dynamicError($e->getMessage()); } - $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, 'changed password'); - // Update ftp password - if (isset($_POST['change_main_ftp']) && $_POST['change_main_ftp'] == 'true') { - $cryptPassword = Crypt::makeCryptPassword($new_password); - $stmt = Database::prepare("UPDATE `" . TABLE_FTP_USERS . "` + if ($old_password == '') { + Response::standardError([ + 'stringisempty', + 'changepassword.old_password' + ]); + } elseif ($new_password == '') { + Response::standardError([ + 'stringisempty', + 'changepassword.new_password' + ]); + } elseif ($new_password_confirm == '') { + Response::standardError([ + 'stringisempty', + 'changepassword.new_password_confirm' + ]); + } elseif ($new_password != $new_password_confirm) { + Response::standardError('newpasswordconfirmerror'); + } else { + // Update user password + try { + Customers::getLocal($userinfo, [ + 'id' => $userinfo['customerid'], + 'new_customer_password' => $new_password + ])->update(); + } catch (Exception $e) { + Response::dynamicError($e->getMessage()); + } + $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, 'changed password'); + + // Update ftp password + if (isset($_POST['change_main_ftp']) && $_POST['change_main_ftp'] == 'true') { + $cryptPassword = Crypt::makeCryptPassword($new_password); + $stmt = Database::prepare("UPDATE `" . TABLE_FTP_USERS . "` SET `password` = :password WHERE `customerid` = :customerid AND `username` = :username"); - $params = [ - "password" => $cryptPassword, - "customerid" => $userinfo['customerid'], - "username" => $userinfo['loginname'] - ]; - Database::pexecute($stmt, $params); - $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, 'changed main ftp password'); - } + $params = [ + "password" => $cryptPassword, + "customerid" => $userinfo['customerid'], + "username" => $userinfo['loginname'] + ]; + Database::pexecute($stmt, $params); + $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, 'changed main ftp password'); + } - // Update statistics password - if (isset($_POST['change_stats']) && $_POST['change_stats'] == 'true') { - $new_stats_password = Crypt::makeCryptPassword($new_password, true); + // Update statistics password + if (isset($_POST['change_stats']) && $_POST['change_stats'] == 'true') { + $new_stats_password = Crypt::makeCryptPassword($new_password, true); - $stmt = Database::prepare("UPDATE `" . TABLE_PANEL_HTPASSWDS . "` + $stmt = Database::prepare("UPDATE `" . TABLE_PANEL_HTPASSWDS . "` SET `password` = :password WHERE `customerid` = :customerid AND `username` = :username"); - $params = [ - "password" => $new_stats_password, - "customerid" => $userinfo['customerid'], - "username" => $userinfo['loginname'] - ]; - Database::pexecute($stmt, $params); - Cronjob::inserttask(TaskId::REBUILD_VHOST); - } + $params = [ + "password" => $new_stats_password, + "customerid" => $userinfo['customerid'], + "username" => $userinfo['loginname'] + ]; + Database::pexecute($stmt, $params); + Cronjob::inserttask(TaskId::REBUILD_VHOST); + } + Response::redirectTo($filename); + } + } elseif ($_POST['send'] == 'changetheme') { + if (Settings::Get('panel.allow_theme_change_customer') == 1) { + $theme = Validate::validate($_POST['theme'], 'theme'); + try { + Customers::getLocal($userinfo, [ + 'id' => $userinfo['customerid'], + 'theme' => $theme + ])->update(); + } catch (Exception $e) { + Response::dynamicError($e->getMessage()); + } + + $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, "changed default theme to '" . $theme . "'"); + } + Response::redirectTo($filename); + } elseif ($_POST['send'] == 'changelanguage') { + $def_language = Validate::validate($_POST['def_language'], 'default language'); + if (isset($languages[$def_language])) { + try { + Customers::getLocal($userinfo, [ + 'id' => $userinfo['customerid'], + 'def_language' => $def_language + ])->update(); + CurrentUser::setField('language', $def_language); + } catch (Exception $e) { + Response::dynamicError($e->getMessage()); + } + } + $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, "changed default language to '" . $def_language . "'"); Response::redirectTo($filename); } } else { - UI::view('user/change_password.html.twig'); - } -} elseif ($page == 'change_language') { - $languages = Language::getLanguages(); - if (isset($_POST['send']) && $_POST['send'] == 'send') { - $def_language = Validate::validate($_POST['def_language'], 'default language'); - if (isset($languages[$def_language])) { - try { - Customers::getLocal($userinfo, [ - 'id' => $userinfo['customerid'], - 'def_language' => $def_language - ])->update(); - CurrentUser::setField('language', $def_language); - } catch (Exception $e) { - Response::dynamicError($e->getMessage()); - } + // change theme + $default_theme = Settings::Get('panel.default_theme'); + if ($userinfo['theme'] != '') { + $default_theme = $userinfo['theme']; } - $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, "changed default language to '" . $def_language . "'"); - Response::redirectTo($filename); - } else { + $themes_avail = UI::getThemes(); + + // change language $default_lang = Settings::Get('panel.standardlanguage'); if ($userinfo['def_language'] != '') { $default_lang = $userinfo['def_language']; } - UI::view('user/change_language.html.twig', [ - 'languages' => $languages, - 'default_lang' => $default_lang - ]); - } -} elseif ($page == 'change_theme') { - if (isset($_POST['send']) && $_POST['send'] == 'send') { - $theme = Validate::validate($_POST['theme'], 'theme'); - try { - Customers::getLocal($userinfo, [ - 'id' => $userinfo['customerid'], - 'theme' => $theme - ])->update(); - } catch (Exception $e) { - Response::dynamicError($e->getMessage()); - } - - $log->logAction(FroxlorLogger::USR_ACTION, LOG_NOTICE, "changed default theme to '" . $theme . "'"); - Response::redirectTo($filename); - } else { - $default_theme = Settings::Get('panel.default_theme'); - if ($userinfo['theme'] != '') { - $default_theme = $userinfo['theme']; - } - - $themes_avail = UI::getThemes(); - - UI::view('user/change_theme.html.twig', [ + UI::view('user/profile.html.twig', [ 'themes' => $themes_avail, - 'default_theme' => $default_theme + 'default_theme' => $default_theme, + 'languages' => $languages, + 'default_lang' => $default_lang, ]); } } elseif ($page == 'send_error_report' && Settings::Get('system.allow_error_report_customer') == '1') { diff --git a/lng/de.lng.php b/lng/de.lng.php index 46b64892..ce712eb4 100644 --- a/lng/de.lng.php +++ b/lng/de.lng.php @@ -1236,6 +1236,7 @@ Vielen Dank, Ihr Administrator', 'description' => 'Wähle das zu durchsuchende Feld aus' ], 'upload_import' => 'Hochladen und importieren', + 'profile' => 'Mein Profil', ], 'phpfpm' => [ 'vhost_httpuser' => 'Lokaler Benutzer für PHP-FPM (Froxlor-Vhost)', diff --git a/lng/en.lng.php b/lng/en.lng.php index 2a20e567..8994dbc0 100644 --- a/lng/en.lng.php +++ b/lng/en.lng.php @@ -1351,6 +1351,7 @@ Yours sincerely, your administrator', 'description' => 'Select the field you want to search in' ], 'upload_import' => 'Upload and import', + 'profile' => 'My profile', ], 'phpfpm' => [ 'vhost_httpuser' => 'Local user to use for PHP-FPM (Froxlor vHost)', diff --git a/templates/Froxlor/user/change_language.html.twig b/templates/Froxlor/user/change_language.html.twig deleted file mode 100644 index c035f1f9..00000000 --- a/templates/Froxlor/user/change_language.html.twig +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "Froxlor/userarea.html.twig" %} - -{% block content %} -
-
-
-
-
-
{{ lng('menue.main.changelanguage') }}
- -
- - -
-
- -
- - - - -
-
-
-
-
-{% endblock %} diff --git a/templates/Froxlor/user/change_password.html.twig b/templates/Froxlor/user/change_password.html.twig deleted file mode 100644 index 49d49761..00000000 --- a/templates/Froxlor/user/change_password.html.twig +++ /dev/null @@ -1,57 +0,0 @@ -{% extends "Froxlor/userarea.html.twig" %} - -{% block content %} -
-
-
-
-
-
{{ lng('menue.main.changepassword') }}
- -
- - -
-
- - -
-
- - -
- - {% if userinfo.adminsession == 0 %} - -
- -
- - -
-
- -
- -
- - -
-
- - {% endif %} -
- -
- - - - -
-
-
-
-
-{% endblock %} diff --git a/templates/Froxlor/user/change_theme.html.twig b/templates/Froxlor/user/change_theme.html.twig deleted file mode 100644 index 12ecae79..00000000 --- a/templates/Froxlor/user/change_theme.html.twig +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "Froxlor/userarea.html.twig" %} - -{% block content %} -
-
-
-
-
-
{{ lng('menue.main.changetheme') }}
- -
- - -
-
- -
- - - - -
-
-
-
-
-{% endblock %} diff --git a/templates/Froxlor/user/profile.html.twig b/templates/Froxlor/user/profile.html.twig new file mode 100644 index 00000000..842120eb --- /dev/null +++ b/templates/Froxlor/user/profile.html.twig @@ -0,0 +1,142 @@ +{% extends "Froxlor/userarea.html.twig" %} + +{% block content %} + + +
+
+ {# change password #} +
+
+
+
{{ lng('menue.main.changepassword') }}
+ +
+ + +
+
+ + +
+
+ + +
+ + {% if userinfo.adminsession == 0 %} + +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ + {% endif %} +
+ +
+ + + + +
+
+
+
+ {% if (get_setting('panel.allow_theme_change_admin') == '1' and userinfo.adminsession == 1) or (get_setting('panel.allow_theme_change_customer') == '1' and userinfo.adminsession == 0) %} +
+ {# change theme #} +
+
+
+
{{ lng('menue.main.changetheme') }}
+ +
+ + +
+
+ +
+ + + + +
+
+
+
+ {% endif %} +
+ {# change language #} +
+
+
+
{{ lng('menue.main.changelanguage') }}
+ +
+ + +
+
+ +
+ + + + +
+
+
+
+ +
+{% endblock %} diff --git a/templates/Froxlor/userarea.html.twig b/templates/Froxlor/userarea.html.twig index 815df808..ddcccda5 100644 --- a/templates/Froxlor/userarea.html.twig +++ b/templates/Froxlor/userarea.html.twig @@ -51,25 +51,13 @@