diff --git a/composer.json b/composer.json index 026ac6432..c4bf0a1fd 100644 --- a/composer.json +++ b/composer.json @@ -21,10 +21,10 @@ "homepage": "https://docs.sonata-project.org/projects/SonataUserBundle", "require": { "php": "^7.3 || ^8.0", - "doctrine/common": "^2.0 || ^3.1", - "doctrine/persistence": "^1.3 || ^2.1", - "friendsofsymfony/user-bundle": "^2.0", - "sonata-project/admin-bundle": "^3.104", + "doctrine/common": "^3.1", + "doctrine/persistence": "^2.1", + "friendsofsymfony/user-bundle": "^2.2", + "sonata-project/admin-bundle": "^4.0", "sonata-project/doctrine-extensions": "^1.10.1", "sonata-project/form-extensions": "^1.4", "sonata-project/twig-extensions": "^1.3.1", @@ -46,27 +46,27 @@ "require-dev": { "dama/doctrine-test-bundle": "^6.7", "doctrine/annotations": "^1.10", - "doctrine/doctrine-bundle": "^2.0", - "doctrine/orm": "^2.0", + "doctrine/doctrine-bundle": "^2.3.2", + "doctrine/orm": "^2.9", "egulias/email-validator": "^2.1.9", "matthiasnoback/symfony-config-test": "^4.2", "matthiasnoback/symfony-dependency-injection-test": "^4.0", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.84", - "phpstan/phpstan-phpunit": "^0.12.18", - "phpstan/phpstan-symfony": "^0.12.21", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-symfony": "^1.0", "phpunit/phpunit": "^9.5", "psalm/plugin-phpunit": "^0.16", - "psalm/plugin-symfony": "^2.0", + "psalm/plugin-symfony": "^3.0", "sonata-project/block-bundle": "^4.0", - "sonata-project/doctrine-orm-admin-bundle": "^3.18", + "sonata-project/doctrine-orm-admin-bundle": "^4.0", "symfony/browser-kit": "^4.4 || ^5.3", - "symfony/phpunit-bridge": "^5.3", + "symfony/phpunit-bridge": "^6.0", "vimeo/psalm": "^4.9.2" }, "conflict": { "sonata-project/block-bundle": "<4.0", - "sonata-project/doctrine-orm-admin-bundle": "<3.0" + "sonata-project/doctrine-orm-admin-bundle": "<4.0" }, "suggest": { "sonata-project/doctrine-orm-admin-bundle": "For persisting entities" diff --git a/src/Admin/Model/GroupAdmin.php b/src/Admin/Model/GroupAdmin.php index f1acec157..9e20ba134 100644 --- a/src/Admin/Model/GroupAdmin.php +++ b/src/Admin/Model/GroupAdmin.php @@ -21,17 +21,18 @@ class GroupAdmin extends AbstractAdmin { - protected $formOptions = [ - 'validation_groups' => 'Registration', - ]; - - public function getNewInstance() + protected function createNewInstance(): object { $class = $this->getClass(); return new $class('', []); } + protected function configureFormOptions(array &$formOptions): void + { + $formOptions['validation_groups'] = 'Registration'; + } + protected function configureListFields(ListMapper $list): void { $list diff --git a/src/Admin/Model/UserAdmin.php b/src/Admin/Model/UserAdmin.php index cf9896bbf..991b7c9f7 100644 --- a/src/Admin/Model/UserAdmin.php +++ b/src/Admin/Model/UserAdmin.php @@ -17,6 +17,7 @@ use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\ListMapper; +use Sonata\AdminBundle\FieldDescription\FieldDescriptionInterface; use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Form\Type\ModelType; use Sonata\AdminBundle\Show\ShowMapper; @@ -35,41 +36,31 @@ class UserAdmin extends AbstractAdmin */ protected $userManager; - public function getFormBuilder() + public function setUserManager(UserManagerInterface $userManager): void { - $this->formOptions['data_class'] = $this->getClass(); - - $options = $this->formOptions; - $options['validation_groups'] = ['Default', 'Profile']; - - if (!$this->getSubject() || null === $this->getSubject()->getId()) { - $options['validation_groups'] = ['Default', 'Registration']; - } - - $formBuilder = $this->getFormContractor()->getFormBuilder($this->getUniqid(), $options); - - $this->defineFormBuilder($formBuilder); + $this->userManager = $userManager; + } - return $formBuilder; + public function getUserManager(): UserManagerInterface + { + return $this->userManager; } - public function preUpdate($object): void + protected function preUpdate(object $object): void { $this->getUserManager()->updateCanonicalFields($object); $this->getUserManager()->updatePassword($object); } - public function setUserManager(UserManagerInterface $userManager): void + protected function configureFormOptions(array &$formOptions): void { - $this->userManager = $userManager; - } + $formOptions['validation_groups'] = ['Default']; - /** - * @return UserManagerInterface - */ - public function getUserManager() - { - return $this->userManager; + if (!$this->getSubject() || null === $this->getSubject()->getId()) { + $formOptions['validation_groups'][] = 'Registration'; + } else { + $formOptions['validation_groups'][] = 'Profile'; + } } protected function configureListFields(ListMapper $list): void @@ -83,7 +74,10 @@ protected function configureListFields(ListMapper $list): void if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH')) { $list - ->add('impersonating', 'string', ['template' => '@SonataUser/Admin/Field/impersonating.html.twig']); + ->add('impersonating', FieldDescriptionInterface::TYPE_STRING, [ + 'virtual_field' => true, + 'template' => '@SonataUser/Admin/Field/impersonating.html.twig', + ]); } } diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index ad4218e52..8babfd950 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -13,7 +13,6 @@ namespace Sonata\UserBundle\DependencyInjection; -use Sonata\AdminBundle\Controller\CRUDController; use Sonata\UserBundle\Admin\Entity\GroupAdmin; use Sonata\UserBundle\Admin\Entity\UserAdmin; use Sonata\UserBundle\Entity\BaseGroup; @@ -75,7 +74,7 @@ public function getConfigTreeBuilder() ->addDefaultsIfNotSet() ->children() ->scalarNode('class')->cannotBeEmpty()->defaultValue(GroupAdmin::class)->end() - ->scalarNode('controller')->cannotBeEmpty()->defaultValue(CRUDController::class)->end() + ->scalarNode('controller')->cannotBeEmpty()->defaultValue('%sonata.admin.configuration.default_controller%')->end() ->scalarNode('translation')->cannotBeEmpty()->defaultValue('SonataUserBundle')->end() ->end() ->end() @@ -83,7 +82,7 @@ public function getConfigTreeBuilder() ->addDefaultsIfNotSet() ->children() ->scalarNode('class')->cannotBeEmpty()->defaultValue(UserAdmin::class)->end() - ->scalarNode('controller')->cannotBeEmpty()->defaultValue(CRUDController::class)->end() + ->scalarNode('controller')->cannotBeEmpty()->defaultValue('%sonata.admin.configuration.default_controller%')->end() ->scalarNode('translation')->cannotBeEmpty()->defaultValue('SonataUserBundle')->end() ->end() ->end() diff --git a/src/Resources/config/admin.xml b/src/Resources/config/admin.xml index 280d92c53..56ece8a54 100644 --- a/src/Resources/config/admin.xml +++ b/src/Resources/config/admin.xml @@ -5,6 +5,7 @@ + %security.role_hierarchy.roles% @@ -22,11 +23,12 @@ + - + %security.role_hierarchy.roles% diff --git a/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig b/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig index ea3b8dd05..cbf09049c 100644 --- a/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig +++ b/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig @@ -28,18 +28,12 @@ file that was distributed with this source code. {% block login_box_header %}