<?php
namespace App\Controller;
use App\Entity\SkiClub;
use App\Entity\SkiUser;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Repository\UserRepository;
use App\Service\MailService;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use SymfonyCasts\Bundle\VerifyEmail\VerifyEmailHelperInterface;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
class RegistrationController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* ProductController constructor.
*
* @param EntityManagerInterface $entityManager
*/
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
#[Route('/registrierung', name: 'register')]
public function registrieren(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, UserAuthenticatorInterface $authenticator, VerifyEmailHelperInterface $helper, MailerInterface $mailer): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->remove('roles');
$form->remove('iban');
$form->remove('bic');
$form->remove('bank');
$form->remove('accountOwner');
$form->add('skiClub', EntityType::class, [
'class' => SkiClub::class,
'placeholder' => '===Skiclub auswählen===',
'label' => false,
'mapped' => false,
// 'choice_label' => 'nameandtag',
'attr' => [
'class' => 'select',
'data-mdb-filter' => 'true',
]
]);
if ($user->getBirthDate() != null) {
$form->get('birthDate')->setData($user->getBirthDate()->format('d/m/Y'));
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form->get('Registrieren')->isClicked()) {
$mails = new MailService($helper, $mailer, $entityManager);
}
$member = $form->get('member')->getData();
$skiClub = $form->get('skiClub')->getData();
$birthDate = $form->get('birthDate')->getData();
if ($birthDate != null) {
$user->setBirthDate(date_create_from_format('d/m/Y', $birthDate));
}
// encode the plain password
$user->setRoles([]);
$user->setIsVerified(true);
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$skiclubUser = new SkiUser();
$skiclubUser->setUser($user);
$skiclubUser->setSkiClub($skiClub);
if ($member == true) {
$skiclubUser->setMembershipNumber("vorläufig");
$skiclubUser->setEntryDate((new \DateTime()));
}
$admin = $userRepository->findByExampleAdmin($skiClub);
$mails->newRegistrationNotification($admin, $user);
$entityManager->persist($user);
$entityManager->persist($skiclubUser);
$entityManager->flush();
$this->addFlash('success', 'Sie können sich nun Einloggen ');
return $this->redirectToRoute('login');
}
return $this->render('registration/register.html.twig', ['registrationForm' => $form->createView(), 'skiclub' => true,]);
}
#[Route('/registrierung/{id}', name: 'app_register')]
public function register(Request $request, SkiClub $skiClub, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, UserAuthenticatorInterface $authenticator): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->remove('roles');
$form->remove('iban');
$form->remove('bic');
$form->remove('bank');
$form->remove('accountOwner');
$form->remove('skiclub');
if ($user->getBirthDate() != null) {
$form->get('birthDate')->setData($user->getBirthDate()->format('d/m/Y'));
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$member = $form->get('member')->getData();
$birthDate = $form->get('birthDate')->getData();
if ($birthDate != null) {
$user->setBirthDate(date_create_from_format('d/m/Y', $birthDate));
}
// encode the plain password
$user->setRoles([]);
$user->setIsVerified(true);
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$skiclubUser = new SkiUser();
$skiclubUser->setUser($user);
$skiclubUser->setSkiClub($skiClub);
if ($member == true) {
$skiclubUser->setMembershipNumber("vorläufig");
$skiclubUser->setEntryDate((new \DateTime()));
}
$entityManager->persist($user);
$entityManager->persist($skiclubUser);
$entityManager->flush();
$this->addFlash('success', 'Sie können sich nun Einloggen ');
return $this->redirectToRoute('login');
}
return $this->render('registration/register.html.twig', ['registrationForm' => $form->createView(), 'skiclub' => false,]);
}
#[Route('/skiclub/{id}/registrierung/admin/', name: 'admin.registration')]
public function registerAdmin(Request $request, SkiClub $skiClub, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, VerifyEmailHelperInterface $helper, MailerInterface $mailer, UserRepository $userRepository): Response
{
if (!($this->isGranted('ROLE_ADMIN') or $this->isGranted('ROLE_SKI_ADMIN'))) {
$this->addFlash('danger', 'Kein Zugriff');
return $this->redirectToRoute('index');
}
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->remove('iban');
$form->remove('bic');
$form->remove('bank');
$form->remove('agreeTerms');
$form->remove('accountOwner');
$form->remove('member');
if ($this->isGranted('ROLE_SKI_ADMIN')) {
$form->add('roles', ChoiceType::class, [
'required' => true,
'multiple' => false,
'expanded' => false,
'mapped' => false,
'choices' => [
'Standardnutzer' => 'ROLE_USER',
'Freizeitleiter' => 'ROLE_FREIZEITLEITER',
'Betreuer' => 'ROLE_BETREUER',
'Skiclub Admin' => 'ROLE_SKI_ADMIN',
],
]);
}
if ($this->isGranted('ROLE_ADMIN')) {
$form->add('roles', ChoiceType::class, [
'required' => true,
'multiple' => false,
'expanded' => false,
'mapped' => false,
'choices' => [
'Admin' => 'ROLE_SKI_ADMIN',
],
]);
}
$form->remove("skiClub");
$form->remove('plainPassword');
if ($user->getBirthDate() != null) {
$form->get('birthDate')->setData($user->getBirthDate()->format('d/m/Y'));
}
$form->handleRequest($request);
if ($form->get('Registrieren')->isClicked()) {
$mails = new MailService($helper, $mailer, $entityManager);
}
$mail = $user->getEmail();
$firstname = $user->getFirstName();
$lastname = $user->getLastName();
// dd($userRepository->findByExampleField($mail, $firstname, $lastname));
if ($userRepository->findByExampleField($mail, $firstname, $lastname)) {
$mails->regestrierungVonAdmin($user, $skiClub);
return $this->redirectToRoute('index');
} else {
if ($form->isSubmitted() && $form->isValid()) {
$mail = $user->getEmail();
$firstname = $user->getFirstName();
$lastname = $user->getLastName();
if ($form->get('Registrieren')->isClicked()) {
$mailService = new MailService($helper, $mailer, $entityManager);
}
$roles = $form->get('roles')->getData();
$birthDate = $form->get('birthDate')->getData();
// dd($form->get('email')->getData());
if ($birthDate != null) {
$user->setBirthDate(date_create_from_format('d/m/Y', $birthDate));
}
if ($roles == 'ROLE_SKI_ADMIN' or $roles == 'ROLE_BETREUER' or $roles == 'ROLE_FREIZEITLEITER') {
$user->setRoles([$roles]);
$user->setSkiClubId($skiClub->getId());
} else {
$user->setRoles([$roles]);
}
$passwordPlain = substr(md5(time()), 0, 10); // zufälliges 10-stelliges Passwort
$user->setIsVerified(true);
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$passwordPlain
)
);
$skiclubUser = new SkiUser();
$skiclubUser->setUser($user);
$skiclubUser->setSkiClub($skiClub);
$skiclubUser->setIsVerified(true);
$entityManager->persist($user);
$entityManager->persist($skiclubUser);
$entityManager->flush();
$this->addFlash('success', 'Neuer Nutzer wurde erfolgreich angelegt');
$mailService->neuRegistrierterAccount($user, $skiClub, $passwordPlain);
if ($this->getUser()->getHighestRole() == 'ROLE_Admin') {
return $this->redirectToRoute('view_all_skiclubs');
} else {
return $this->redirectToRoute('index');
}
}
}
return $this->render('registration/adminRegister.html.twig', [
'registrationForm' => $form->createView(),
]);
}
#[Route('/admin/skiclub/{id}/registrierung/hauptnutzer/{users}', name: 'mainUser.registration')]
public function registerAdminSubUser(Request $request, User $users, SkiClub $skiClub, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, VerifyEmailHelperInterface $helper, MailerInterface $mailer,): Response
{
if (!$this->isGranted('ROLE_SKI_ADMIN') or $this->isGranted('ROLE_SKI_ADMIN') and $this->getUser()->getSkiClubId() != $skiClub->getId()) {
$this->addFlash('danger', 'Kein Zugriff');
return $this->redirectToRoute('index');
}
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->remove("skiClub");
$form->remove("plainPassword");
$form->remove("email");
$form->remove('iban');
$form->remove('roles');
$form->remove('bic');
$form->remove('bank');
$form->remove('agreeTerms');
$form->remove('accountOwner');
$form->remove('member');
if ($user->getBirthDate() != null) {
$form->get('birthDate')->setData($user->getBirthDate()->format('d/m/Y'));
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form->get('Registrieren')->isClicked()) {
$mailService = new MailService($helper, $mailer, $entityManager);
}
$birthDate = $form->get('birthDate')->getData();
$user->setMainUser($users);
$user->setIsVerified(true);
if ($birthDate != null) {
$user->setBirthDate(date_create_from_format('d/m/Y', $birthDate));
}
$user->setRoles(['ROLE_USER']);
$skiclubUser = new SkiUser();
$skiclubUser->setUser($user);
$skiclubUser->setSkiClub($skiClub);
$skiclubUser->setIsVerified(true);
$entityManager->persist($user);
$entityManager->persist($skiclubUser);
$entityManager->flush();
$this->addFlash('success', 'Neuer Nutzer wurde erfolgreich angelegt');
$mailService->regestrierungSubUser($user, $skiClub);
return $this->redirectToRoute('view_user', ['id' => $users->getId()]);
}
return $this->render('registration/index.html.twig', [
'registrationForm' => $form->createView(),
'isUser' => false,
]);
}
#[Route('/skiclub/{id}/registrierung/nutzer/{users}', name: 'subUser.registration')]
public function registerSubUser(UserRepository $userRepository, Request $request, User $users, SkiClub $skiClub, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, VerifyEmailHelperInterface $helper, MailerInterface $mailer): Response
{
if ($this->getUser() == $users) {
$isUser = true;
}
if ($this->getUser() != $users) {
$this->addFlash('danger', 'Kein Zugriff');
return $this->redirectToRoute('index');
}
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->remove("skiClub");
$form->remove("plainPassword");
$form->remove("email");
$form->remove('iban');
$form->remove('roles');
$form->remove('bic');
$form->remove('bank');
$form->remove('agreeTerms');
$form->remove('accountOwner');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form->get('Registrieren')->isClicked()) {
$mailService = new MailService($helper, $mailer, $entityManager);
}
$birthDate = $form->get('birthDate')->getData();
$member = $form->get('member')->getData();
$user->setMainUser($users);
$user->setIsVerified(true);
if ($birthDate != null) {
$user->setBirthDate(date_create_from_format('d/m/Y', $birthDate));
}
$user->setRoles(['ROLE_USER']);
$skiclubUser = new SkiUser();
$skiclubUser->setUser($user);
if ($member == true) {
$skiclubUser->setMembershipNumber("vorläufig");
$skiclubUser->setEntryDate((new \DateTime()));
}
$skiclubUser->setSkiClub($skiClub);
$entityManager->persist($user);
$entityManager->persist($skiclubUser);
$entityManager->flush();
$this->addFlash('success', 'Neuer Nutzer wurde erfolgreich angelegt, der Adminestrator muss diesen noch zulassen');
$admin = $userRepository->findByExampleAdmin($skiClub);
$mailService->newRegistrationNotification($admin, $user);
$mailService->regestrierungSubUser($user, $skiClub);
return $this->redirectToRoute('view_user', ['id' => $users->getId()]);
}
return $this->render('registration/index.html.twig', [
'registrationForm' => $form->createView(),
'isUser' => $isUser,
]);
}
// #[Route('/skiclub/registration/mainUser/{users}', name: 'sub.registration')]
// public function addSubUser(Request $request, User $users, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, VerifyEmailHelperInterface $helper, MailerInterface $mailer,): Response
// {
//
// $user = new User();
//
//
// $form = $this->createForm(RegistrationFormType::class, $user);
// $form->remove("plainPassword");
// $form->remove("email");
// $form->remove('iban');
// $form->remove('roles');
// $form->remove('bic');
// $form->remove('bank');
// $form->remove('accountOwner');
// $form->add('iban', TextType::class, [
// 'label' => 'IBAN',
// 'required' => false,
// ]);
// $form->add('bic', TextType::class, [
// 'label' => 'BIC',
// 'required' => false,
// ]);
// $form->add('bank', TextType::class, [
// 'label' => 'Bank',
// 'required' => false,
// ]);
// $form->add('skiclub', EntityType::class, [
// 'class' => SkiUser::class,
// 'query_builder' => function (EntityRepository $er) use ($users) {
// return $er->createQueryBuilder('s')
// ->andWhere('s.user = :user')
// ->setParameter('user', $users);
//
// },
//
// 'choice_label' => '',
// ]);
// $form->add('accountOwner', TextType::class, [
// 'label' => 'Kontoinhaber',
// 'required' => false,
// ]);
// if ($user->getBirthDate() != null) {
// $form->get('birthDate')->setData($user->getBirthDate()->format('d/m/Y'));
// }
// $form->handleRequest($request);
//
// if ($form->isSubmitted() && $form->isValid()) {
//
// if ($form->get('Registrieren')->isClicked()) {
//
// $mailService = new MailService($helper, $mailer, $entityManager);
// }
// $birthDate = $form->get('birthDate')->getData();
// $user->setMainUser($users);
// $user->setIsVerified(true);
//
// if ($birthDate != null) {
// $user->setBirthDate(date_create_from_format('d/m/Y', $birthDate));
//
// }
// $user->setRoles(['ROLE_USER']);
//
//
// $skiclubUser = new SkiUser();
// $skiclubUser->setUser($user);
// $skiclubUser->setSkiClub($skiClub);
// $skiclubUser->setIsVerified(true);
// $entityManager->persist($user);
// $entityManager->persist($skiclubUser);
// $entityManager->flush();
// $this->addFlash('success', 'Neuer Nutzer wurde erfolgreich angelegt');
// $mailService->regestrierungSubUser($user, $skiClub);
//
// return $this->redirectToRoute('view_user', ['id' => $users->getId()]);
// }
//
// return $this->render('registration/index.html.twig', [
// 'registrationForm' => $form->createView(),
// ]);
// }
}