diff --git a/.env b/.env index 0876a707..b9d34b9d 100644 --- a/.env +++ b/.env @@ -47,4 +47,7 @@ NO_URL_REWRITE_AVAILABLE=false # When this is empty the content of config/banner.md is used as banner BANNER="" +# In demo mode things it is not possible for a user to change his password and his settings. +DEMO_MODE=0 + ### End custom vars \ No newline at end of file diff --git a/config/services.yaml b/config/services.yaml index d652dbcc..fd5e03b2 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -17,6 +17,7 @@ parameters: global_theme: '' # The theme to use globally (see public/build/themes/ for choices). Set to '' for default bootstrap theme # Allow users to download attachments to server. Warning: This can be dangerous, because via that feature attackers maybe can access ressources on your intranet! allow_attachments_downloads: false + demo_mode: '%env(bool:DEMO_MODE)%' # If set to true, all potentially dangerous things are disabled (like changing passwords of the own user) services: # default configuration for services in *this* file @@ -87,6 +88,9 @@ services: $allow_attachments_downloads: '%allow_attachments_downloads%' $mimeTypes: '@mime_types' + App\Form\UserSettingsType: + arguments: + $demo_mode: '%demo_mode%' App\EventSubscriber\TimezoneListener: arguments: diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 8836a533..4da9e195 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -197,11 +197,15 @@ class UserController extends AdminPages\BaseAdminController * Password change form ****************************/ + $demo_mode = $this->getParameter('demo_mode'); + $pw_form = $this->createFormBuilder() ->add('old_password', PasswordType::class, [ 'label' => 'user.settings.pw_old.label', + 'disabled' => $demo_mode, 'constraints' => [new UserPassword()], ]) //This constraint checks, if the current user pw was inputted. ->add('new_password', RepeatedType::class, [ + 'disabled' => $demo_mode, 'type' => PasswordType::class, 'first_options' => ['label' => 'user.settings.pw_new.label'], 'second_options' => ['label' => 'user.settings.pw_confirm.label'], diff --git a/src/Form/UserSettingsType.php b/src/Form/UserSettingsType.php index 1a9ae477..7ac6ffd6 100644 --- a/src/Form/UserSettingsType.php +++ b/src/Form/UserSettingsType.php @@ -6,6 +6,8 @@ use App\Entity\PriceInformations\Currency; use App\Entity\UserSystem\User; use App\Form\Type\CurrencyEntityType; use App\Form\Type\StructuralEntityType; +use Doctrine\ORM\Query\Parameter; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\EmailType; @@ -26,10 +28,13 @@ class UserSettingsType extends AbstractType protected $trans; - public function __construct(Security $security, TranslatorInterface $trans) + protected $demo_mode; + + public function __construct(Security $security, TranslatorInterface $trans, bool $demo_mode) { $this->security = $security; $this->trans = $trans; + $this->demo_mode = $demo_mode; } public function buildForm(FormBuilderInterface $builder, array $options) @@ -37,29 +42,30 @@ class UserSettingsType extends AbstractType $builder ->add('name', TextType::class, [ 'label' => $this->trans->trans('user.username.label'), - 'disabled' => !$this->security->isGranted('edit_username', $options['data']), + 'disabled' => !$this->security->isGranted('edit_username', $options['data']) || $this->demo_mode, ]) ->add('first_name', TextType::class, [ 'required' => false, 'label' => $this->trans->trans('user.firstName.label'), - 'disabled' => !$this->security->isGranted('edit_infos', $options['data']), + 'disabled' => !$this->security->isGranted('edit_infos', $options['data']) || $this->demo_mode, ]) ->add('last_name', TextType::class, [ 'required' => false, 'label' => $this->trans->trans('user.lastName.label'), - 'disabled' => !$this->security->isGranted('edit_infos', $options['data']), + 'disabled' => !$this->security->isGranted('edit_infos', $options['data']) || $this->demo_mode, ]) ->add('department', TextType::class, [ 'required' => false, 'label' => $this->trans->trans('user.department.label'), - 'disabled' => !$this->security->isGranted('edit_infos', $options['data']), + 'disabled' => !$this->security->isGranted('edit_infos', $options['data']) || $this->demo_mode, ]) ->add('email', EmailType::class, [ 'required' => false, 'label' => $this->trans->trans('user.email.label'), - 'disabled' => !$this->security->isGranted('edit_infos', $options['data']), + 'disabled' => !$this->security->isGranted('edit_infos', $options['data']) || $this->demo_mode, ]) ->add('language', LanguageType::class, [ + 'disabled' => $this->demo_mode, 'required' => false, 'attr' => ['class' => 'selectpicker', 'data-live-search' => true], 'placeholder' => $this->trans->trans('user_settings.language.placeholder'), @@ -67,6 +73,7 @@ class UserSettingsType extends AbstractType 'preferred_choices' => ['en', 'de'] ]) ->add('timezone', TimezoneType::class, [ + 'disabled' => $this->demo_mode, 'required' => false, 'attr' => ['class' => 'selectpicker', 'data-live-search' => true], 'placeholder' => $this->trans->trans('user_settings.timezone.placeholder'), @@ -74,6 +81,7 @@ class UserSettingsType extends AbstractType 'preferred_choices' => ['Europe/Berlin'] ]) ->add('theme', ChoiceType::class, [ + 'disabled' => $this->demo_mode, 'required' => false, 'attr' => ['class' => 'selectpicker'], 'choices' => User::AVAILABLE_THEMES, @@ -84,6 +92,7 @@ class UserSettingsType extends AbstractType 'label' => $this->trans->trans('user.theme.label'), ]) ->add('currency', CurrencyEntityType::class, [ + 'disabled' => $this->demo_mode, 'required' => false, 'label' => $this->trans->trans('user.currency.label') ])