src/Controller/AdminController.php line 58
<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Form\UsersFormType;
use App\Security\EmailVerifier;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Exception;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
#[Route('/admin')]
class AdminController extends AbstractController
{
public function __construct(private readonly ManagerRegistry $doctrine, private EmailVerifier $emailVerifier) {}
#[Route(path: '/agencyClients', name: 'app_admin_agencyClients_index')]
public function agencyClients_index(Request $request): Response
{
return $this->render('agency_clients/table.html.twig');
}
#[Route(path: '/users', name: 'app_admin_users_index')]
public function users_index(): Response
{
return $this->render('users_list/users.html.twig');
}
#[Route(path: '/forms', name: 'app_admin_forms')]
public function forms_index(): Response
{
return $this->render('form_elements/index.html.twig');
}
#[Route(path: '/users/getUsers', name: 'api_users_getUsers')]
public function getUsers(): Response
{
$user = $this->getUser();
if ($user->isRoot()) {
$users = $this->doctrine->getRepository(User::class)->findAll();
} else if ($user->isAdmin()) {
$users = $this->doctrine->getRepository(User::class)->findBy(['adminId' => $user->getId()]);
}
return $this->json([
"count" => count($users),
"data" => $users
]);
}
#[Route('/users/{user}', name: 'app_admin_edit_user')]
public function usersEdit(Request $request, UserPasswordHasherInterface $userPasswordHasher, User $user): Response
{
$admins = [];
$users = $this->doctrine->getRepository(User::class)->findAll();
foreach ($users as $admin) {
if ($admin->isAdmin()) $admins[$admin->getEmail()] = $admin->getId();
}
$currentUser = $this->getUser();
$isRoot = false;
if ($currentUser instanceof User) {
$isRoot = $currentUser->isRoot();
}
$form = $this->createForm(UsersFormType::class, $user, [
'admins' => $admins,
'isRoot' => $isRoot,
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->get('plainPassword')->getData()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
}
$this->doctrine->getManager()->persist($user);
$this->doctrine->getManager()->flush();
return $this->redirectToRoute('app_admin_users_index');
}
return $this->render('users_list/index.html.twig', [
'form' => $form->createView(),
'user' => $user,
'createUser' => false,
]);
}
#[Route('/users/{user}/delete', name: 'app_admin_delete_user')]
public function usersDelete(Request $request, User $user): Response
{
$this->doctrine->getManager()->remove($user);
$this->doctrine->getManager()->flush();
return $this->redirectToRoute('app_admin_users_index');
}
#[Route('/new/user', name: 'app_admin_create_user')]
public function usersCreate(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
{
$admin = $this->getUser();
$user = new User();
$admins = [];
$admins['-'] = null;
if ($admin->isAdmin()) {
$admins[$admin->getEmail()] = $admin->getId();
} else {
$users = $this->doctrine->getRepository(User::class)->findAll();
foreach ($users as $admin) {
if ($admin->isAdmin()) $admins[$admin->getEmail()] = $admin->getId();
}
}
$form = $this->createForm(UsersFormType::class, $user, [
'admins' => $admins
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setCreatedAt(new DateTime());
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('app_admin_users_index');
}
return $this->render('users_list/index.html.twig', [
'form' => $form->createView(),
'user' => $user,
'createUser' => true,
'admins' => $admins
]);
}
}