diff --git a/src/Controller/ProfileController.php b/src/Controller/ProfileController.php index 42d86dfc..49b4cd30 100644 --- a/src/Controller/ProfileController.php +++ b/src/Controller/ProfileController.php @@ -309,15 +309,18 @@ final class ProfileController extends AbstractController private function createEditForm(User $user): FormInterface { + $currentUser = $this->getUser(); + return $this->createForm( UserEditType::class, $user, [ 'action' => $this->generateUrl('user_profile_edit', ['username' => $user->getUserIdentifier()]), 'method' => 'POST', - 'include_active_flag' => ($user->getId() !== $this->getUser()->getId()), + 'include_active_flag' => $user !== $currentUser, 'include_preferences' => true, 'include_supervisor' => $this->isGranted('supervisor', $user), + 'include_username' => $currentUser->isSuperAdmin() && $currentUser !== $user, 'include_password_reset' => $this->isGranted('password', $user), ] ); diff --git a/src/Form/UserEditType.php b/src/Form/UserEditType.php index c73fe932..81771492 100644 --- a/src/Form/UserEditType.php +++ b/src/Form/UserEditType.php @@ -42,6 +42,14 @@ class UserEditType extends AbstractType $user = $options['data']; } + if ($options['include_username']) { + $builder->add('username', TextType::class, [ + 'label' => 'user_identifier', + 'help' => 'user_identifier.help', + 'required' => true, + ]); + } + $builder->add('alias', TextType::class, [ 'label' => 'alias', 'required' => false, @@ -117,6 +125,7 @@ class UserEditType extends AbstractType 'include_active_flag' => true, 'include_preferences' => true, 'include_supervisor' => true, + 'include_username' => false, 'include_password_reset' => true, ]); } diff --git a/templates/user/layout.html.twig b/templates/user/layout.html.twig index 8cde0640..b76e0244 100644 --- a/templates/user/layout.html.twig +++ b/templates/user/layout.html.twig @@ -15,7 +15,7 @@
{{ widgets.user_avatar(user, false, 'avatar-lg') }}
-
+

{{ widgets.username(user) }}

{% if user.title is not empty %}
diff --git a/templates/user/profile.html.twig b/templates/user/profile.html.twig index 236f82a4..1ab5ccc0 100644 --- a/templates/user/profile.html.twig +++ b/templates/user/profile.html.twig @@ -1,5 +1,11 @@ {% extends 'user/form.html.twig' %} +{% block user_title_box_attributes %} + {% if form.username is defined %} + ondblclick="document.getElementById('user_edit_username_hidden').style.display = 'flex'" + {% endif %} +{% endblock %} + {% block form_content %} {% form_theme form 'form/horizontal.html.twig' %} @@ -9,6 +15,13 @@
{{ form_row(form.alias) }} {{ form_row(form.email) }} + {% if form.username is defined %} + {% set styleUsername = 'display:none' %} + {% if form.username.vars.errors|length > 0 %} + {% set styleUsername = '' %} + {% endif %} + {{ form_row(form.username, {row_attr: {id: 'user_edit_username_hidden', style: styleUsername}}) }} + {% endif %}
diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 9adf2089..fe0c08fb 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -1693,6 +1693,14 @@ unpaid_vacation Unbezahlter Urlaub + + user_identifier + Benutzer ID + + + user_identifier.help + Die eindeutige Benutzerkennung wird zur Authentifizierung und bei Exporten verwendet + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 93a0aff0..036fa4e9 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -1693,6 +1693,14 @@ unpaid_vacation Unpaid holidays + + user_identifier + User ID + + + user_identifier.help + The unique user identifier is used for authentication and in exports +