<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Membre;
use App\Entity\Personne;
use App\Entity\Demande;
use App\Entity\Province;
use App\Entity\Cotisation;
use App\Entity\User;
use App\Entity\Federation;
use App\Entity\Transaction;
use App\Form\MembreType;
use App\Form\MembrePasswordType;
use App\Form\MembreTypeUpdate;
use App\Form\DemandeType;
use App\Form\MembreInscriptionType;
use App\Form\MembrePhotoType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Knp\Snappy\Pdf;
use Knp\Bundle\SnappyBundle\KnpSnappyBundle\Response\PdfResponse;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Twilio\Rest\Client;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;
class MembreController extends AbstractController
{
/**
* @Route("/admin/membre", name="membre_list")
*/
public function index(): Response
{
$province = new Province();
$user = new User();
$user = $this->getUser();
$province = $user->getProvince();
$membres = new Membre();
$recherche = " ";
$em = $this->getDoctrine()->getManager();
if (isset($_POST['recherche'])){
$recherche = $_POST['recherche'];
$federations = $em->getRepository(Federation::class)->findBy(["province" => $province]);
if ($this->isGranted('ROLE_ADMIN')){
$membres = $em->getRepository(Membre::class)->search($recherche);
}elseif (in_array('ROLE_ADMIN_INTFEDERAL', $user->getRoles())){
$membres = $em->getRepository(Membre::class)->searchProvince($recherche, $federations);
}elseif (in_array('ROLE_ADMIN_FEDERAL', $user->getRoles())){
$federation = $user->getFederation();
$membres = $em->getRepository(Membre::class)->searchFederation($recherche, $federation);
}
}
return $this->render('membre/index.html.twig', ['membres' => $membres, 'recherche' => $recherche]);
}
/**
* @Route("/admin/federation/membre/{idFed}", name="membre_list_federation")
*/
public function membreFederation($idFed): Response
{
$membres = new Membre();
$federation = new Federation();
$em = $this->getDoctrine()->getManager();
$federation = $em->getRepository(Federation::class)->find($idFed);
$membresnb = $em->getRepository(Membre::class)->findBy(["federation" => $federation]);
$nbMembre = count($membresnb);
$province = $federation->getProvince();
$federations = $em->getRepository(Federation::class)->findBy(["province" => $province]);
$recherche = " ";
if(isset($_POST['recherche'])){
$recherche = $_POST['recherche'];
$membres = $em->getRepository(Membre::class)->searchFederation($recherche, $federation);
}else{
$membres = $em->getRepository(Membre::class)->findBy(["federation" => $federation], ["id" => "DESC"], 1000, 0);
}
return $this->render('membre/federation.html.twig', ['membres' => $membres, 'federation' => $federation, 'federations' => $federations, 'recherche' => $recherche, "nombre" => $nbMembre]);
}
/**
* @Route("/admin/list/carte/{idFed}", name="carte_list_global")
*/
public function membreCarte($idFed): Response
{
$membres = new Membre();
$federation = new Federation();
$em = $this->getDoctrine()->getManager();
$federation = $em->getRepository(Federation::class)->find($idFed);
$federations = $em->getRepository(Federation::class)->findAll();
$membres = $em->getRepository(Membre::class)->findBy(["carte" => true] );
return $this->render('federation/carte-list.html.twig', ['membres' => $membres, 'federation' => $federation, 'federations' => $federations]);
}
/**
* @Route("/admin/federation/demande/{idFed}", name="demande_list_federation")
*/
public function demandeFederation($idFed): Response
{
$demandes = new Membre();
$federation = new Federation();
$em = $this->getDoctrine()->getManager();
$federation = $em->getRepository(Federation::class)->find($idFed);
$demandes = $em->getRepository(Demande::class)->findBy(["federation" => $federation, "etat" => null] );
return $this->render('membre/demande-federation.html.twig', ['demandes' => $demandes, 'federation' => $federation]);
}
/**
* @Route("/admin/membre/add/", name="membre_add")
*/
public function Add(Request $request)
{
$membre = new Membre();
$federation = new Federation();
$em = $this->getDoctrine()->getManager();
$form = $this->get('form.factory')->create(MembreType::class, $membre);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
$userForm = $form->get('user')->getData();
$personne = $userForm->getPersonne();
$email = $personne->getNom() . $personne->getPrenom() . '@mlc.cd';
$email = str_replace(' ','',$email);
$checkMail = false;
$i = 1;
while ($checkMail == false){
$test = $em->getRepository(User::class)->findBy(["email" => $email]);
if ($test != null){
$email = $personne->getNom() . $personne->getPrenom() . $nb . '@mlc.cd';
$i++;
}else{
$checkMail = true;
}
}
$email = str_replace(' ','',$email);
$userForm->setEmail($email);
$userForm->setRoles(['ROLE_USER']);
$userForm->setPassword($this->passwordEncoder->encodePassword($userForm, 'test'));
$em->persist($membre);
$em->flush();
return $this->redirectToRoute('membre_list');
}
return $this->render('membre/add.html.twig', [
'form' => $form->createView() ]);
}
/**
* @Route("/admin/membre/addfed/{idFed}", name="membre_add_fed")
*/
public function AddFed(Request $request, $idFed)
{
$membre = new Membre();
$federation = new Federation();
$em = $this->getDoctrine()->getManager();
$federation = $em->getRepository(Federation::class)->find($idFed);
$membre->setFederation($federation);
$form = $this->get('form.factory')->create(MembreType::class, $membre);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
$userForm = $form->get('user')->getData();
$personne = $userForm->getPersonne();
$email = $personne->getNom() . $personne->getPrenom() . '@mlc.cd';
$email = str_replace(' ','',$email);
$checkMail = false;
$i = 1;
while ($checkMail == false){
$test = $em->getRepository(User::class)->findBy(["email" => $email]);
if ($test != null){
$nb = rand(1, 1000);
$email = $personne->getNom() . $personne->getPrenom() . $nb . '@mlc.cd';
$i++;
}else{
$checkMail = true;
}
}
$email = str_replace(' ','',$email);
$userForm->setEmail($email);
$userForm->setRoles(['ROLE_USER']);
$userForm->setPassword($this->passwordEncoder->encodePassword($userForm, 'test'));
$em->persist($membre);
$em->flush();
return $this->redirectToRoute('membre_list_federation', array('idFed' => $federation->getId()));
}
return $this->render('membre/add.html.twig', [
'form' => $form->createView() ]);
}
/**
* @Route("/admin/membre/update/{id}", name="membre_update")
*/
public function update(Request $request, $id)
{
$membre = new Membre();
$federation = new Federation();
$em = $this->getDoctrine()->getManager();
$membre = $em->getRepository(Membre::class)->find($id);
$form = $this->get('form.factory')->create(MembreTypeUpdate::class, $membre);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
$userForm = $form->get('user')->getData();
$password = $form->get('user')->get('password')->getData();
if (!empty($password)){
$userForm->setPassword($this->passwordEncoder->encodePassword($userForm, $password));
}
$em->persist($membre);
$em->flush();
return $this->redirectToRoute('membre_profil', array('id' => $membre->getId()));
}
return $this->render('membre/add.html.twig', [
'form' => $form->createView() ]);
}
/**
* @Route("/admin/membre/delete/{id}", name="membre_delete")
*/
public function delete(Request $request, $id)
{
$membre = new Membre();
$em = $this->getDoctrine()->getManager();
$membre = $em->getRepository(Membre::class)->find($id);
$em->remove($membre);
$em->flush();
return $this->redirectToRoute('membre_list');
}
/**
* @Route("/admin/membre/updatephoto/{id}", name="membre_update_photo")
*/
public function updatePhoto(Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$membre = $em->getRepository(Membre::class)->find($id);
$user = $membre->getUser();
$formphoto = $this->get('form.factory')->create(MembrePhotoType::class, $membre);
if ($request->isMethod('POST') && $formphoto->handleRequest($request)->isValid()) {
/** @var UploadedFile $photo */
$photo = $formphoto->get('photo')->getData();
if ($photo) {
$year = date("Y");
$month = date("m");
$day = date("d");
$hour = date("H");
$minute = date("i");
$seconde = date("s");
$photoName = "Photo" . $user->getPersonne()->getNom() . $user->getPersonne()->getPostnom() . $user->getPersonne()->getPrenom() . $year . $month . $day . $hour . $minute. $seconde. "." . $photo->guessExtension();
$photoName = str_replace(' ','',$photoName);
try {
$photo->move(
$this->getParameter('membre_photo_directory'), $photoName);
} catch (FileException $e) {
}
$membre->setPhoto($photoName);
}
$em->persist($membre);
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'photo bien enregistrée.');
return $this->redirectToRoute('membre_profil', array('id' => $membre->getId()));
}
return $this->render('membre/photo.html.twig', ['formphoto' => $formphoto->createView()]);
}
/**
* @Route("/membre/password/", name="membre_update_password")
*/
public function updatePassword(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$membre = $user->getMembre();
$test = " ";
$form = $this->get('form.factory')->create(MembrePasswordType::class, $membre);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
$oldPassword = $form->get('oldpassword')->getData();
$password = $form->get('password')->getData();
$password2 = $form->get('password2')->getData();
if ($password == $password2){
$user->setPassword($this->passwordEncoder->encodePassword($user, $password));
$em->persist($membre);
$em->flush();
}else{
return $this->redirectToRoute('membre_update_password', array("erreur" => "Les deux mots de passe ne sont pas identiques"));
}
return $this->redirectToRoute('membre_update_password', array("message" => "Mots de passe modifiés avec succès"));
}
return $this->render('membre/password.html.twig', ['form' => $form->createView(), 'test' => $test]);
}
/**
* @Route("/password/", name="membre_oublie_password")
*/
public function oublie(Request $request)
{
return $this->render('membre/oublie.html.twig');
}
/**
* @Route("/password/process", name="membre_oublie_process")
*/
public function oublieSuccess(Request $request)
{
$em = $this->getDoctrine()->getManager();
$personne = $em->getRepository(Personne::class)->findOneBy(['telephone' => $_POST['telephone']]);
if ($personne == null){
return $this->redirectToRoute('membre_oublie_password', array("erreur" => "Ce numéro de téléphone n'est associé à aucun compte"));
}
$user = $personne->getUser();
$aleatoire = rand(1200, 8500);
$user->setPassword($this->passwordEncoder->encodePassword($user, $aleatoire));
$em->persist($user);
$em->flush();
$this->smsOublie($_POST['telephone'], $user->getEmail(), $aleatoire);
return $this->redirectToRoute('app_login');
}
/**
* @Route("/membre/update/photo", name="membre_profil_photo")
*/
public function updatePhotoMembre(Request $request)
{
$em = $this->getDoctrine()->getManager();
//$membre = $em->getRepository(Membre::class)->find($id);
$user = $this->getUser();
$membre = $user->getMembre();
$formphoto = $this->get('form.factory')->create(MembrePhotoType::class, $membre);
if ($request->isMethod('POST') && $formphoto->handleRequest($request)->isValid()) {
/** @var UploadedFile $photo */
$photo = $formphoto->get('photo')->getData();
if ($photo) {
$year = date("Y");
$month = date("m");
$day = date("d");
$hour = date("H");
$minute = date("i");
$seconde = date("s");
$photoName = "Photo" . $user->getPersonne()->getNom() . $user->getPersonne()->getPostnom() . $user->getPersonne()->getPrenom() . $year . $month . $day . $hour . $minute. $seconde. "." . $photo->guessExtension();
$photoName = str_replace(' ','',$photoName);
try {
$photo->move(
$this->getParameter('membre_photo_directory'), $photoName);
} catch (FileException $e) {
}
$membre->setPhoto($photoName);
}
$em->persist($membre);
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'photo bien enregistrée.');
return $this->redirectToRoute('usermembre_profil');
}
return $this->render('membre/photo.html.twig', ['formphoto' => $formphoto->createView()]);
}
/**
* @Route("/membre/inscription/{id}", name="membre_inscription")
*/
public function inscription(Request $request, $id)
{
$membre = new Membre();
$membre->setAdhesion(new \Datetime);
$em = $this->getDoctrine()->getManager();
$province = $em->getRepository(Province::class)->find($id);
//$membre->setProvince($province);
$form = $this->get('form.factory')->create(MembreInscriptionType::class, $membre, array('province' => $province));
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
$userForm = $form->get('user')->getData();
$password = $form->get('user')->get('password')->getData();
$password2 = $form->get('password2')->getData();
$commune = $form->get('commune2')->getData();
$personne = $userForm->getPersonne();
$checkDoublon = $em->getRepository(Personne::class)->findDoublon($personne->getNom(), $personne->getPrenom(), $personne->getPostnom(), $personne->getDateNaissance(), $personne->getTelephone());
if ($checkDoublon == null){
$personne->setCommune($commune->getNom());
$email = $personne->getNom() . $personne->getPrenom() . '@mlc.cd';
$email = str_replace(' ','',$email);
$checkMail = false;
$i = 1;
while ($checkMail == false){
$test = $em->getRepository(User::class)->findBy(["email" => $email]);
if ($test != null){
$nb = rand(1, 1000);
$email = $personne->getNom() . $personne->getPrenom() . $nb . '@mlc.cd';
$i++;
}else{
$checkMail = true;
}
}
$email = str_replace(' ','',$email);
$userForm->setEmail($email);
$userForm->setRoles(['ROLE_USER']);
$userForm->setPassword($this->passwordEncoder->encodePassword($userForm, $password));
if ($password == $password2){
$em->persist($membre);
$em->flush();
$this->sms2($personne->getTelephone(), $personne->getNom());
}else{
return $this->redirectToRoute('membre_inscription', array("id" => 2, "erreur" => "Les deux mots de passe ne sont pas identiques"));
}
return $this->redirectToRoute('app_login', array("mail" => $email));
}else{
return $this->redirectToRoute('app_login', array("doublon" => "Il semblerait que vous ayez déja été enregistré, veuillez vous connecter ou contacter un administrateur"));
}
}
return $this->render('membre/inscription.html.twig', [
'form' => $form->createView() ]);
}
/**
* @Route("/inscriptionprovince/", name="inscription_province")
*/
public function inscriptionProvince(): Response
{
$provinces = new Province();
$em = $this->getDoctrine()->getManager();
$provinces = $em->getRepository(Province::class)->findAll();
return $this->render('membre/inscription-province.html.twig', ['provinces' => $provinces]);
}
/**
* @Route("/admin/membre/profil/{id}", name="membre_profil")
*/
public function profil($id)
{
$membre = new Membre();
$entityManager = $this->getDoctrine()->getManager();
$membre = $entityManager->getRepository(Membre::class)->find($id);
$federations = $entityManager->getRepository(Federation::class)->findAll();
return $this->render('membre/profil.html.twig', ['membre' => $membre, 'federations' => $federations]);
}
/**
* @Route("/admin/demande/profil/{id}", name="demande_profil")
*/
public function demandeProfil($id)
{
$demande = new demande();
$entityManager = $this->getDoctrine()->getManager();
$demande = $entityManager->getRepository(Demande::class)->find($id);
$federations = $entityManager->getRepository(Federation::class)->findAll();
return $this->render('membre/demande-profil.html.twig', ['demande' => $demande]);
}
/**
* @Route("/demande/", name="demande_user")
*/
public function demandeAttente()
{
$user = $this->getUser();
$demande = new Demande();
$demande = $user->getDemande();
//$entityManager = $this->getDoctrine()->getManager();
//$demande = $entityManager->getRepository(Demande::class)->find($id);
//$federations = $entityManager->getRepository(Federation::class)->findAll();
return $this->render('membre/demande.html.twig', ['demande' => $demande]);
}
/**
* @Route("/admin/demande/confirmation/{id}", name="demande_confirmation")
*/
public function demandeConfirmation($id)
{
$demande = new Demande();
$membre = new Membre();
$entityManager = $this->getDoctrine()->getManager();
$demande = $entityManager->getRepository(Demande::class)->find($id);
$user = $demande->getUser();
$user->setRoles(['ROLE_USER']);
$membre->setFederation($demande->getFederation());
$membre->setUser($user);
$membre->setAdhesion(new \Datetime);
$demande->setEtat(0);
$entityManager->persist($membre);
$entityManager->persist($demande);
$entityManager->flush();
return $this->redirectToRoute('membre_list');
}
/**
* @Route("/admin/demande/remove/{id}", name="demande_remove")
*/
public function demandeRemove($id)
{
$demande = new Demande();
$membre = new Membre();
$entityManager = $this->getDoctrine()->getManager();
$demande = $entityManager->getRepository(Demande::class)->find($id);
$user = $demande->getUser();
$demande->setEtat(0);
$entityManager->persist($demande);
$entityManager->flush();
return $this->redirectToRoute('demande_list_federation', array("idFed" => $demande->getFederation()->getId()));
}
/**
* @Route("/user/usermembre/profil/", name="usermembre_profil")
*/
public function userMembre()
{
$membre = new Membre();
$user = $this->getUser();
return $this->render('membre/user.html.twig', ['user' => $user]);
}
/**
* @Route("/user/usermembre/visa/", name="visa_payement")
*/
public function visa()
{
$membre = new Membre();
$user = $this->getUser();
return $this->render('membre/visa.html.twig', ['user' => $user]);
}
/**
* @Route("/user/usermembre/visa/validation", name="visa_validation")
*/
public function visaValidation(Request $request)
{
$montant = $request->get('amount');
$devise = $request->get('currency');
$user = $this->getUser();
$year = date("Y");
$month = date("m");
$day = date("d");
$hour = date("h");
$min = date("i");
$sec = date("sa");
$aleatoire = rand(0, 1000);
$membre = $this->getUser()->getMembre();
$reference = "MLC" . $year . $month . $day . $hour . $min . $sec . $aleatoire . "M" . $membre->getId();
$transaction = new Transaction();
$transaction->setMontant($montant);
$transaction->setReference($reference);
$transaction->setMembre($membre);
$transaction->setDevise($devise);
$transaction->setTelephone('----');
$transaction->setDate(new \DateTime);
$em = $this->getDoctrine()->getManager();
$em->persist($transaction);
$em->flush();
return $this->render('membre/visa-confirmation.html.twig', ['user' => $user, 'montant' => $montant, 'devise' => $devise, 'reference' => $reference]);
}
/**
* @Route("/user/usermembre/mobilemoney/", name="mobile_money")
*/
public function mobilemoney(Request $request)
{
$user = $this->getUser();
$telephone = $request->get('telephone');
$montant = $request->get('montant');
$devise = $request->get('devise');
$membre = $user->getMembre();
$year = date("Y");
$month = date("m");
$day = date("d");
$hour = date("h");
$min = date("i");
$sec = date("sa");
$aleatoire = rand(0, 1000);
$reference = "MLC" . $year . $month . $day . $hour . $min . $sec . $aleatoire . "M" . $membre->getId();
$transaction = new Transaction();
$transaction->setMontant($montant);
$transaction->setReference($reference);
$transaction->setMembre($membre);
$transaction->setDevise($devise);
$transaction->setTelephone($telephone);
$url = "https://backend.flexpay.cd/api/rest/v1/paymentService";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Accept: application/json",
"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJcL2xvZ2luIiwicm9sZXMiOlsiTUVSQ0hBTlQiXSwiZXhwIjoxNzY5NDQzNzU0LCJzdWIiOiIxMWE3NDA3MTA2NTYzMTc2MDBiOTgxNTZiNzM5NzMzMiJ9.uu7lK_URS6U8SsG9U_YupThuPWlpsAirZpDvVo0eDi8",
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$data = array(
'merchant' => 'MLCRDC',
"type" => "1",
"description" => "Contribution MLC",
"phone" => $telephone,
"reference" => $reference,
"amount" => $montant,
"currency" => $devise,
"callbackUrl" => "https://mlcapp.org/user/confirmation/"
);
$postdata = json_encode($data);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
$val = json_decode($resp, true);
$orderNumber = $val['orderNumber'];
$transaction->setOrderNumber($orderNumber);
$transaction->setEnvois($val['code']);
$transaction->setDate(new \DateTime);
$em = $this->getDoctrine()->getManager();
if ($val['code'] == 0){
$em->persist($transaction);
$em->flush();
curl_close($curl);
return $this->redirectToRoute('confirmation_payement');
}else{
$em->persist($transaction);
$em->flush();
$message = $val['message'];
curl_close($curl);
return $this->redirectToRoute('payement_error', array('message' => $message));
}
//return $this->redirectToRoute('confirmation_payement');
}
/**
* @Route("/user/carte/achat", name="carte_achat")
*/
public function carteAchat(Request $request)
{
$user = $this->getUser();
$telephone = $request->get('telephone');
$devise = $request->get('devise');
$membre = $user->getMembre();
$montant = 0;
if ($devise == "CDF"){
$montant = 2500;
}else{
$montant = 1.25;
}
$year = date("Y");
$month = date("m");
$day = date("d");
$hour = date("h");
$min = date("i");
$sec = date("sa");
$aleatoire = rand(0, 1000);
$reference = "MLCCARTE" . $year . $month . $day . $hour . $min . $sec . $aleatoire . "M" . $membre->getId();
$transaction = new Transaction();
$transaction->setMontant($montant);
$transaction->setReference($reference);
$transaction->setMembre($membre);
$transaction->setDevise($devise);
$transaction->setTelephone($telephone);
$url = "https://backend.flexpay.cd/api/rest/v1/paymentService";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Accept: application/json",
"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJcL2xvZ2luIiwicm9sZXMiOlsiTUVSQ0hBTlQiXSwiZXhwIjoxNzY5NDQzNzU0LCJzdWIiOiIxMWE3NDA3MTA2NTYzMTc2MDBiOTgxNTZiNzM5NzMzMiJ9.uu7lK_URS6U8SsG9U_YupThuPWlpsAirZpDvVo0eDi8",
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$data = array(
'merchant' => 'MLCRDC',
"type" => "1",
"description" => "Contribution MLC",
"phone" => $telephone,
"reference" => $reference,
"amount" => $montant,
"currency" => $devise,
"callbackUrl" => "https://mlcapp.org/user/confirmationcarte/"
);
$postdata = json_encode($data);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
$val = json_decode($resp, true);
$orderNumber = $val['orderNumber'];
$transaction->setOrderNumber($orderNumber);
$transaction->setEnvois($val['code']);
$transaction->setDate(new \DateTime);
$em = $this->getDoctrine()->getManager();
if ($val['code'] == 0){
$em->persist($transaction);
$em->flush();
curl_close($curl);
return $this->redirectToRoute('confirmation_payement_carte');
}else{
$em->persist($transaction);
$em->flush();
$message = $val['message'];
curl_close($curl);
return $this->redirectToRoute('payement_error', array('message' => $message));
}
//return $this->redirectToRoute('confirmation_payement');
}
/**
* @Route("/user/mobilemoneypayment/", name="mobile_money_pay")
*/
public function mobilemoneypayment()
{
$user = $this->getUser();
return $this->render('membre/mobilemoney.html.twig', ['user' => $user]);
}
/**
* @Route("/user/cartepayment/", name="carte_pay")
*/
public function cartepayment()
{
$user = $this->getUser();
return $this->render('membre/carte-pay.html.twig', ['user' => $user]);
}
/**
* @Route("/user/confirmation/", name="confirmation")
*/
public function conf(Request $request)
{
$data = json_decode($request->getContent(), true);
$code = $data['code'];
$reference = $data['reference'];
$em = $this->getDoctrine()->getManager();
if($code == 0){
$transaction = $em->getRepository(Transaction::class)->findOneBy(["reference" => $reference]);
$membre = $transaction->getMembre();
$cotisation = new Cotisation();
if ($transaction->getEtat() == null){
$cotisation->setMembre($membre);
$cotisation->setReference($reference);
$montant = $transaction->getMontant();
if ($transaction->getDevise() == 'USD'){
$montant = $montant * 2850;
}
$cotisation->setMontant($montant);
$cotisation->setDate(new \DateTime);
$cotisation->setOrdernumber($data['orderNumber']);
$cotisation->setProviderNumber($data['provider_number']);
$transaction->setEtat(0);
$em->persist($cotisation);
$em->flush();
}
}else{
$transaction = $em->getRepository(Transaction::class)->findOneBy(["reference" => $reference]);
$transaction->setEtat(1);
$transaction->setOrderNumber($data['orderNumber']);
$em->persist($transaction);
$em->flush();
}
}
/**
* @Route("/confirmationcarte/", name="confirmation_carte")
*/
public function confCarte(Request $request)
{
$data = json_decode($request->getContent(), true);
$code = $data['code'];
$reference = $data['reference'];
$em = $this->getDoctrine()->getManager();
$transaction = $em->getRepository(Transaction::class)->findOneBy(["reference" => $reference]);
$transaction->setOrdernumber($data['orderNumber']);
$transaction->setEnvois(0);
$membre = $transaction->getMembre();
if($code == 0){
// $membre->setCarte(true);
$montant = $transaction->getMontant();
$transaction->setEtat(0);
$transaction->setEnvois(0);
if ($transaction->getDevise() == 'USD'){
$montant = $montant * 2300;
}
$cotisation = new Cotisation();
$cotisation->setMembre($membre);
$cotisation->setReference($reference);
$montant = $transaction->getMontant();
if ($transaction->getDevise() == 'USD'){
$montant = $montant * 2300;
}
$cotisation->setMontant($montant);
$cotisation->setDate(new \DateTime);
$cotisation->setOrdernumber($data['orderNumber']);
$cotisation->setProviderNumber(' -- ');
$em->persist($cotisation);
$em->flush();
}else{
$transaction->setEtat(1);
$transaction->setEnvois(0);
//$membre->setCarte(true);
$em->persist($transaction);
$em->flush();
}
}
/**
* @Route("/user/confirmationpayementvisa/", name="confirmation_payement_visa")
*/
public function confVisa()
{
$user = $this->getUser();
$membre = $user->getMembre();
return $this->render('membre/confirmation-visa.html.twig', ['user' => $user]);
}
/**
* @Route("/user/confirmationpayement/", name="confirmation_payement")
*/
public function enregPayment()
{
$user = $this->getUser();
$membre = $user->getMembre();
return $this->render('membre/confirmation.html.twig', ['user' => $user]);
}
/**
* @Route("/confirmationpayementcarte/", name="confirmation_payement_carte")
*/
public function cartePayConf()
{
$user = $this->getUser();
$membre = $user->getMembre();
return $this->render('membre/confirmation-carte.html.twig', ['user' => $user]);
}
/**
* @Route("/payement/error/{message}", name="payement_error")
*/
public function payementError($message)
{
$user = $this->getUser();
$membre = $user->getMembre();
$info = $message;
return $this->render('membre/error-payement.html.twig', ['user' => $user, 'message' => $info]);
}
/**
* @Route("/test", name="test_token")
*/
public function test()
{
//$test = $this->token();
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.orange.com/oauth/v3/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => 'grant_type=client_credentials',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Basic WFg1TDZ4aGdNeWRZNmxHRzk1Zkxsb2o1TmNKdFdpcTU6UzI5TDJibmJHMHJUd216TA=='
),
));
$response = curl_exec($curl);
$val = json_decode($response, true);
$test = $val['access_token'];
curl_close($curl);
return $this->render('test.html.twig', ['test' => $test]);
}
/**
* @Route("/admin/membre/carte/{id}", name="membre_carte")
*/
public function carte($id, Pdf $knpSnappyPdf)
{
$membre = new Membre();
$entityManager = $this->getDoctrine()->getManager();
$membre = $entityManager->getRepository(Membre::class)->find($id);
$user = $membre->getUser();
$aleatoire = rand(1, 10000);
$dateT = date_create();
$timestamp = date_timestamp_get($dateT);
$dateDepart = date("Y/m/d", strtotime("last month"));
$nomFichier = 'Carte' . $user->getPersonne()->getNom() . $user->getPersonne()->getPostnom() . $user->getPersonne()->getPrenom() . $timestamp . $aleatoire . '.pdf' ;
$title = "Carte MLC";
$knpSnappyPdf->setOption('enable-local-file-access', true);
$knpSnappyPdf->setOption('page-width', '180');
$knpSnappyPdf->setOption('page-height', '130');
$qrcode = $this->qrcodeGen($membre);
$file = $knpSnappyPdf->generateFromHtml( $this->renderView('membre/carte.html.twig', array('membre' => $membre, 'qrcode' => $qrcode)), 'uploads/cartes/'. $nomFichier);
return $this->file('uploads/cartes/'.$nomFichier, 'MLC', ResponseHeaderBag::DISPOSITION_INLINE);
}
/**
* @Route("/user/membre/carte/", name="membre_carte_gen")
*/
public function carteMembreGen(Pdf $knpSnappyPdf)
{
$membre = new Membre();
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$membre = $user->getMembre();
$aleatoire = rand(1, 10000);
$dateT = date_create();
$timestamp = date_timestamp_get($dateT);
$dateDepart = date("Y/m/d", strtotime("last month"));
$nomFichier = 'Carte' . $user->getPersonne()->getNom() . $user->getPersonne()->getPostnom() . $user->getPersonne()->getPrenom() . $timestamp . $aleatoire . '.pdf' ;
$title = "Carte MLC";
$knpSnappyPdf->setOption('enable-local-file-access', true);
$qrcode = $this->qrcodeGen($membre);
$file = $knpSnappyPdf->generateFromHtml( $this->renderView('membre/carte.html.twig', array('membre' => $membre, 'qrcode' => $qrcode)), 'uploads/cartes/'. $nomFichier);
return $this->file('uploads/cartes/'.$nomFichier, 'Res', ResponseHeaderBag::DISPOSITION_INLINE);
}
public function sms($numero, $nom){
$sid = 'ACa4e47b111da51c6e9e440d3168abb1d4';
$token = '239796fc29a1d9ed611b04816582449a';
$client = new Client($sid, $token);
$client->messages->create(
$numero,
[
'from' => '+19896621952',
'body' => 'MLC App: Bienvenu au parti ' . $nom
]
);
}
public function token(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.orange.com/oauth/v3/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => 'grant_type=client_credentials',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Basic WFg1TDZ4aGdNeWRZNmxHRzk1Zkxsb2o1TmNKdFdpcTU6UzI5TDJibmJHMHJUd216TA=='
),
));
$response = curl_exec($curl);
$val = json_decode($response, true);
$test = $val['access_token'];
curl_close($curl);
return $test;
}
public function sms2($numero, $nom){
$token = $this->token();
$curl = curl_init();
$telephone = "tel:". $numero;
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.orange.com/smsmessaging/v1/outbound/tel:+243132061/requests',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"outboundSMSMessageRequest": {
"address":"' . $telephone . '" ,
"senderAddress":"tel:+243132061",
"outboundSMSTextMessage": {
"message": "MLC App : Confirmation inscription. Bienvenu Mr ' . $nom . ' "
}
}
} ',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer ' .$token
),
));
$response = curl_exec($curl);
curl_close($curl);
}
public function smsOublie($numero, $nom, $aleatoire){
$token = $this->token();
$curl = curl_init();
$telephone = "tel:". $numero;
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.orange.com/smsmessaging/v1/outbound/tel:+243132061/requests',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"outboundSMSMessageRequest": {
"address":"' . $telephone . '" ,
"senderAddress":"tel:+243132061",
"outboundSMSTextMessage": {
"message": "MLC App : Nouveau mot de passe ' . $aleatoire . ' pour le compte ' . $nom . ' "
}
}
} ',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer ' .$token
),
));
$response = curl_exec($curl);
curl_close($curl);
}
public function qrcodeGen(Membre $membre)
{
$code = $membre->getUser()->getPersonne()->getNom() . " " . $membre->getUser()->getPersonne()->getPrenom() . " " . $membre->getUser()->getPersonne()->getPostnom();
$writer = new PngWriter();
$qrCode = QrCode::create($code)
->setEncoding(new Encoding('UTF-8'))
->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
->setSize(300)
->setMargin(10)
->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
->setForegroundColor(new Color(0, 0, 0))
->setBackgroundColor(new Color(255, 255, 255));
$projectRoot = $this->getParameter('kernel.project_dir');
$label = Label::create('')
->setTextColor(new Color(71, 43, 100));
$result = $writer->write($qrCode, null, $label);
$nomFichier = $membre->getId() . '.png';
$result->saveToFile($projectRoot .'/public/uploads/qrcode/' . $nomFichier);
return $nomFichier;
}
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
}