diff --git a/config/routes.yaml b/config/routes.yaml index 3e96df1..9e1846f 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -21,4 +21,4 @@ register: users: path: /users controller: App\Controller\SecurityController::showUserManagePage - methods: GET \ No newline at end of file + methods: GET|POST \ No newline at end of file diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index e0766d4..0b9cb92 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -8,11 +8,14 @@ use Symfony\Component\Form\Extension\Core\Type\PasswordType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\EmailType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; use App\Entity\User; +use App\Service\Menus; +use Doctrine\ORM\EntityManagerInterface; class SecurityController extends AbstractController @@ -92,10 +95,61 @@ class SecurityController extends AbstractController } } - - public function showUserManagePage() + private function getformCreateUser() + { + return $this->createFormBuilder() + ->add('email', EmailType::class,[]) + ->add('password', PasswordType::class, []) + ->add('display_name', TextType::class,[]) + ->add('roles', ChoiceType::class, [ + 'choices' => [ + 'USER' => false, + 'RESOURCE_MANAGER' => 'RESOURCE_MANAGER', + 'SUPER ADMIN' => 'SUPER_ADMIN', + ], + 'multiple' => false + ]) + ->add('save', SubmitType::class,[]) + ->getForm(); + } + + public function showUserManagePage(Request $request, UserPasswordEncoderInterface $passwordEncoder) { - + + + $formCreateUser = $this->getformCreateUser(); + $formCreateUser->handleRequest($request); + + if ($formCreateUser->isSubmitted() && $formCreateUser->isValid()) { + $userValues = $formCreateUser->getData(); + + $user = new User(); + $user ->setEmail($userValues ["email"]) + ->setPassword( $passwordEncoder->encodePassword($user,$userValues ["password"]) ) + ->setDisplayName( $userValues ["display_name"] ) + ->setActive(true) + ->setRoles(array( $userValues["roles"] )); + + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->persist($user); + $entityManager->flush(); + + //empty the form + $formCreateUser = $this->getformCreateUser(); + + } + + $users = $this->getDoctrine() + ->getRepository(User::class) + ->findAll(); + $menus = new Menus(); + + + return $this->render('security/listUsers.html.twig', [ + "menus" => $menus->getMenus( $this->getUser() ), + "users" => $users, + "formCreateUser" => $formCreateUser->createView() + ]); } } diff --git a/templates/security/listUsers.html.twig b/templates/security/listUsers.html.twig new file mode 100644 index 0000000..979ef12 --- /dev/null +++ b/templates/security/listUsers.html.twig @@ -0,0 +1,37 @@ +{% extends 'base.html.twig' %} +{% block title %}Manage users{% endblock %} +{% block header %}

Manage users

{% endblock %} +{% block nav %}{% include 'menus.html.twig' %}{% endblock %} +{% block content %} + +
+

Create a new user

+ {{ form(formCreateUser) }} +

{{ form_errors(formCreateUser) }}

+
+ +
+

Users list

+ + + + + + + + + + + {% for u in users %} + + + + + + + {% endfor %} + + +
Displayed NameLogin (email)RolesActive
{{ u.displayName }} {{ u.email }}{{ u.roles|join(',') }}{{ u.active? 'Yes':'No' }}
+
+{% endblock %} \ No newline at end of file