Allow a user to change and remove his profile picture from user settings.

This commit is contained in:
Jan Böhmer 2023-01-25 00:10:17 +01:00
parent 04b99cd247
commit 0063d360ce
4 changed files with 60 additions and 1 deletions

View file

@ -245,6 +245,16 @@ class UserSettingsController extends AbstractController
//$em->flush(); //$em->flush();
//For some reason the avatar is not set as master picture attachment, so we do it again here //For some reason the avatar is not set as master picture attachment, so we do it again here
$user->setMasterPictureAttachment($attachment); $user->setMasterPictureAttachment($attachment);
$page_need_reload = true;
}
if ($form->getClickedButton() && 'remove_avatar' === $form->getClickedButton()->getName()) {
//Remove the avatar attachment from the user if requested
if ($user->getMasterPictureAttachment() !== null) {
$em->remove($user->getMasterPictureAttachment());
$user->setMasterPictureAttachment(null);
$page_need_reload = true;
}
} }
$em->flush(); $em->flush();

View file

@ -25,6 +25,7 @@ namespace App\Form;
use App\Entity\UserSystem\User; use App\Entity\UserSystem\User;
use App\Form\Type\CurrencyEntityType; use App\Form\Type\CurrencyEntityType;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Event\PreSetDataEvent;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType; use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\FileType; use Symfony\Component\Form\Extension\Core\Type\FileType;
@ -34,6 +35,7 @@ use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TimezoneType; use Symfony\Component\Form\Extension\Core\Type\TimezoneType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use Symfony\Component\Validator\Constraints\File; use Symfony\Component\Validator\Constraints\File;
@ -77,9 +79,10 @@ class UserSettingsType extends AbstractType
'disabled' => !$this->security->isGranted('edit_infos', $options['data']) || $this->demo_mode, 'disabled' => !$this->security->isGranted('edit_infos', $options['data']) || $this->demo_mode,
]) ])
->add('avatar_file', FileType::class, [ ->add('avatar_file', FileType::class, [
'label' => 'user.change_avatar.label', 'label' => 'user_settings.change_avatar.label',
'mapped' => false, 'mapped' => false,
'required' => false, 'required' => false,
'disabled' => !$this->security->isGranted('edit_infos', $options['data']) || $this->demo_mode,
'attr' => [ 'attr' => [
'accept' => 'image/*', 'accept' => 'image/*',
], ],
@ -134,6 +137,25 @@ class UserSettingsType extends AbstractType
//Buttons //Buttons
->add('save', SubmitType::class, ['label' => 'save']) ->add('save', SubmitType::class, ['label' => 'save'])
->add('reset', ResetType::class, ['label' => 'reset']); ->add('reset', ResetType::class, ['label' => 'reset']);
//Add the remove_avatar button if the user has an avatar (we have to add this dynamically)
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (PreSetDataEvent $event) {
$data = $event->getData();
if (!$data instanceof User) {
return;
}
$form = $event->getForm();
//if ($data->getMasterPictureAttachment()) {
$form->add('remove_avatar', SubmitType::class, [
'label' => 'user_settings.remove_avatar.label',
'disabled' => !$this->security->isGranted('edit_infos', $data) || $this->demo_mode,
'attr' => [
'class' => 'btn btn-link',
],
]);
//}
});
} }
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void

View file

@ -25,6 +25,15 @@
{{ form_row(settings_form.last_name) }} {{ form_row(settings_form.last_name) }}
{{ form_row(settings_form.department) }} {{ form_row(settings_form.department) }}
{{ form_row(settings_form.email) }} {{ form_row(settings_form.email) }}
{{ form_row(settings_form.avatar_file) }}
<div class="mb-3 row {% if user.masterPictureAttachment is null %}d-none{% endif %}">
<div class="offset-sm-3 col-sm-9">
{% if user.masterPictureAttachment %}
<img src="{{ attachment_thumbnail(user.masterPictureAttachment, 'thumbnail_md') }}" alt="avatar" class="rounded" style="height: 75px;">
{% endif %}
{{ form_widget(settings_form.remove_avatar) }}
</div>
</div>
</div> </div>
<div class="tab-pane fade" id="configuration" role="tabpanel" aria-labelledby="profile-tab"> <div class="tab-pane fade" id="configuration" role="tabpanel" aria-labelledby="profile-tab">
{{ form_row(settings_form.language) }} {{ form_row(settings_form.language) }}

View file

@ -10399,5 +10399,23 @@ Element 3</target>
<target>Number of stocked builds</target> <target>Number of stocked builds</target>
</segment> </segment>
</unit> </unit>
<unit id="Mken7uv" name="user.change_avatar.label">
<segment>
<source>user.change_avatar.label</source>
<target>Change profile picture</target>
</segment>
</unit>
<unit id="QFNPD0_" name="user_settings.change_avatar.label">
<segment>
<source>user_settings.change_avatar.label</source>
<target>Change profile picture</target>
</segment>
</unit>
<unit id="GLYVqz2" name="user_settings.remove_avatar.label">
<segment>
<source>user_settings.remove_avatar.label</source>
<target>Remove profile picture</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>