1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
namespace App\Controller;
use App\Entity\Adherent;
use App\Entity\Payment;
use App\Entity\Usergroup;
use App\Form\Type\AdhererFormType;
use App\Security\LoginAuthenticator;
use Doctrine\ORM\EntityManagerInterface;
use Gamez\Symfony\Component\Serializer\Normalizer\UuidNormalizer;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
class AdhesionController extends AbstractController
{
private $em;
private $authenticator;
private $guardHandler;
public function __construct(
EntityManagerInterface $em,
RouterInterface $router,
LoginAuthenticator $authenticator,
GuardAuthenticatorHandler $guardHandler)
{
$this->em = $em;
$this->router = $router;
$this->authenticator = $authenticator;
$this->guardHandler = $guardHandler;
}
/**
* @Route("/adherer", name="adherer")
*/
public function adhererAction(Request $request)
{
if ($this->getParameter('tav_env') == true) {
return $this->redirect($this->router->generate('index'));
}
$adherent = new Adherent();
$form = $this->createForm(AdhererFormType::class, $adherent);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
// CB PAIEMENT USE PAYZEN
if ($form->has('save') && $form->get('save')->isClicked()) {
$adherentNew = $form->getData();
// Serialize form data in json to store with payment object and persist when payment is valid
$encoders = [new JsonEncoder()];
$normalizers = [new UuidNormalizer(), new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$data = $serializer->normalize(
$adherentNew,
null,
[AbstractNormalizer::ATTRIBUTES => ['user' => ['username', 'email', 'firstname', 'lastname', 'plainPassword'],
'groupe' => ['id' => 'uuid'],
'geoloc' => ['adresse',
'cpostal',
'ville', ], ]]
);
$jsondata = $serializer->serialize($data, 'json');
// Redirect to payment page
return $this->forward('App\Controller\PaymentController::preparePaymentAction', [
'form' => $form,
'type' => Payment::TYPE_ADHESION,
'extra_data' => $jsondata,
]);
// HELLOASSO PAIEMENT
} elseif ($form->has('saveHelloAsso') && $form->get('saveHelloAsso')->isClicked()) {
$adherentNew = $form->getData();
$usergroup = $this->em->getRepository(Usergroup::class)->findOneByName('Adherent');
$adherentNew->getUser()->addPossiblegroup($usergroup);
$adherentNew->getUser()->addGroup($usergroup);
$adherentNew->getUser()->setAdherent($adherentNew);
$adherentNew->getUser()->setEnabled(true);
$this->em->persist($adherentNew);
$this->em->flush();
// Connect new user
$this->guardHandler->authenticateUserAndHandleSuccess(
$adherentNew->getUser(),
$request,
$this->authenticator,
'main'
);
return $this->redirect($this->router->generate('index') . '?showmlcadhesionmodal=1');
}
} else {
$this->addFlash(
'error',
'Veuillez vérifier les informations du formulaire !'
);
}
}
return $this->render('@kohinos/adherent/adherer.html.twig', [
'form' => $form->createView(),
]);
}
}