diff --git a/composer.json b/composer.json index 5bb9b5c..4394dbd 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,7 @@ "require": { "php": "^8.1", "ext-json": "*", - "nucleos/user-bundle": "^3.3", + "nucleos/user-bundle": "^3.4", "psr/container": "^1.0 || ^2.0", "psr/log": "^1.0 || ^2.0 || ^3.0", "sonata-project/admin-bundle": "^4.8.1", diff --git a/src/Admin/Model/UserAdmin.php b/src/Admin/Model/UserAdmin.php index 68e61da..7d1e511 100644 --- a/src/Admin/Model/UserAdmin.php +++ b/src/Admin/Model/UserAdmin.php @@ -18,6 +18,7 @@ use Nucleos\UserBundle\Model\LocaleAwareUser; use Nucleos\UserBundle\Model\UserInterface; use Nucleos\UserBundle\Model\UserManager; +use Nucleos\UserBundle\Util\UserManipulator; use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\ListMapper; @@ -35,11 +36,14 @@ abstract class UserAdmin extends AbstractAdmin { protected UserManager $userManager; - public function __construct(UserManager $userManager) + private ?UserManipulator $userManipulator; + + public function __construct(UserManager $userManager, ?UserManipulator $userManipulator = null) { parent::__construct(); - $this->userManager = $userManager; + $this->userManager = $userManager; + $this->userManipulator = $userManipulator; } public function preUpdate($object): void @@ -49,6 +53,11 @@ public function preUpdate($object): void } } + protected function postUpdate(object $object): void + { + $this->updatePassword($object); + } + protected function configureFormOptions(array &$formOptions): void { $formOptions['validation_groups'] = ['User', $this->isNewInstance() ? 'Registration' : 'Profile']; @@ -191,6 +200,17 @@ protected function configureFormFields(FormMapper $form): void ; } + private function updatePassword(UserInterface $user): void + { + $plainPassword = $user->getPlainPassword(); + + if (null === $plainPassword) { + return; + } + + $this->userManipulator?->changePassword($user->getUsername(), $plainPassword); + } + private function isNewInstance(): bool { return !$this->hasSubject() || null === $this->id($this->getSubject()); diff --git a/src/Resources/config/admin_mongodb.php b/src/Resources/config/admin_mongodb.php index 79b280f..4e17aee 100644 --- a/src/Resources/config/admin_mongodb.php +++ b/src/Resources/config/admin_mongodb.php @@ -35,6 +35,7 @@ ]) ->args([ service('nucleos_user.user_manager'), + service('nucleos_user.util.user_manipulator'), ]) ->call('setTranslationDomain', [ '%nucleos_user_admin.admin.group.translation_domain%', diff --git a/src/Resources/config/admin_orm.php b/src/Resources/config/admin_orm.php index ebae022..3f9061f 100644 --- a/src/Resources/config/admin_orm.php +++ b/src/Resources/config/admin_orm.php @@ -35,6 +35,7 @@ ]) ->args([ service('nucleos_user.user_manager'), + service('nucleos_user.util.user_manipulator'), ]) ->call('setTranslationDomain', [ '%nucleos_user_admin.admin.group.translation_domain%',