<?php
// src/Controller/EntrepriseController.php
namespace App\Controller;
use App\Entity\SujetFAQ;
use App\Entity\Article;
use App\Entity\AppUser;
use App\Entity\Product;
use App\Entity\Review;
use App\Entity\Devis;
use App\Entity\Category;
use App\Entity\Commande;
use App\Entity\Conversation;
use App\Entity\Service;
use App\Entity\ProductOrder;
use App\Entity\Entreprise;
use App\Entity\Notification;
use App\Entity\ProductMisDeCote;
use App\Entity\SubCategory;
use App\Entity\AvisUtilisateur;
use App\Form\SujetFAQType;
use App\Form\AvisUtilisateurType;
use App\Form\AvisUtilisateurEditType;
use App\Form\ProductType;
use App\Entity\ShippingMethod;
use App\Entity\RoleBoutique;
use App\Entity\Boutique;
use App\Form\BoutiqueType;
use App\Entity\Plan;
use App\Entity\ValiditeService;
use App\Entity\UserBoutique;
use App\Entity\RequeteAjoutBoutique;
use App\Entity\TVA;
use Spipu\Html2Pdf\Html2Pdf;
use App\Entity\CategorieEntreprise;
use App\Entity\Produit;
use App\Entity\ProductPhoto;
use App\Entity\OffreDevis;
use App\Form\ProduitType;
use App\Form\ProduitEditType;
use App\Entity\Ticket;
use App\Entity\Message;
use App\Services\CinetPay;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use App\Form\TicketType;
use App\Entity\CommentaireTicket;
use App\Form\CommentaireTicketType;
use App\Entity\PaiementService;
use App\Form\SettingBoutiqueOngletEntrepriseType;
use App\Form\SettingBoutiqueOngletBanqueType;
use App\Form\SettingBoutiqueOngletInfoLegaleType;
use App\Form\SettingBoutiqueOngletDocumentType;
use App\Form\SettingBoutiqueOngletEmailType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security as Security;
/**
* @Route("/{_locale}/gestion")
*/
class GestionController extends AbstractController
{
private $session;
public function __construct(SessionInterface $session)
{
$this->session = $session;
}
/**
* @Route("/mes-entreprises/", name="gestion_mes_entreprises")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function mesEntrepriseAction(Request $request)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutiques = $em->getRepository(UserBoutique::class)
->findByUser($user);
return $this->render('gestion/mes_entreprise.html.twig', [
'userBoutiques' => $userBoutiques
]);
}
/**
* @Route("/shop/{slug}", name="gestion.show_shop")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function afficherBoutiqueAction(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if(null == $userBoutique){
return $this->redirectToRoute('security_login');
}
$abonnement = $em->getRepository(Commande::class)
->findBy(
array(
'boutique' => $boutique
),
array(
'laDate' => 'DESC'
),
1
);
if(!empty($abonnement)){
$abonnement = $abonnement[0];
}
return $this->render('gestion/afficher_boutique.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'abonnement' => $abonnement
]);
}
/**
* @Route("/devenir-premium/", name="gestion.devenir_premium")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function devenirPremiumAction(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$transId = rand(4560, 100000);
$transDate = new \DateTime();
$amount = 15000;
if('POST' == $request->getMethod()){
var_dump($_POST);
}
$commande = new Commande;
//transaction id
$id_transaction = rand(); //CinetPay::generateTransId();
// Payment description
$description_du_paiement = "Devenir premium";
// Payment Date must be on date format
$date_transaction = date("Y-m-d H:i:s");
// Amount
$montant_a_payer = 15000;
// put a value that you can use to identify the buyer in your system
$identifiant_du_payeur = $user->getId().'@@@'.$boutique->getId();
//Veuillez entrer votre apiKey
$apiKey = "1182873575626ba8e6c712e9.05305545";
//Secret Key: 127127447062796bafS
//Veuillez entrer votre siteId
$site_id = "792421";
//platform , utiliser PROD si vous avez créé votre compte sur www.cinetpay.com ou TEST si vous avez créé votre compte sur www.sandbox.cinetpay.com
$plateform = "PROD";
//la version , utilisé V1 si vous voulez utiliser la version 1 de l'api
$version = "V2";
// nom du formulaire CinetPay
$formName = "goCinetPay";
// notify url
$notify_url = $this->generateUrl('gestion.cinetpay_notify', array('transaction' => $id_transaction), UrlGeneratorInterface::ABSOLUTE_URL);
// return url
$return_url = $this->generateUrl('gestion.cinetpay_return', array('transaction' => $id_transaction), UrlGeneratorInterface::ABSOLUTE_URL);
// cancel url
$cancel_url = $this->generateUrl('gestion.cinetpay_cancel', array('transaction' => $id_transaction), UrlGeneratorInterface::ABSOLUTE_URL);
// cinetpay button type, must be 1, 2, 3, 4 or 5
$btnType = 4;
// button size, can be 'small' , 'large' or 'larger'
$btnSize = 'large';
// fill command class
$commande->setCpmTransId($id_transaction);
$commande->setCpmAmount($montant_a_payer);
$commande->setUser($user);
$commande->setBoutique($boutique);
$em->persist($commande);
$em->flush();
return $this->render('gestion/devenir_premium.html.twig', [
'user' => $user,
'transId' => $transId,
'transDate' => $transDate,
'amount' => $amount,
'plan' => $plan,
'transaction' => $id_transaction,
'formName' => $formName,
'btnType' => $btnType,
'btnSize' => $btnSize,
'boutique' => $boutique,
'userBoutique' => $userBoutique,
]);
return $this->redirectToRoute('gestion.show_shop', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/table-formule-pour-paiement/{slug}", name="gestion_table_formule_pour_paiement")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function tableFormulePourPaiementAction(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$plans = $em->getRepository(Plan::class)
->paidPlan();
return $this->render('gestion/table_formule_pour_paiement.html.twig', [
'boutique' => $boutique,
'plans' => $plans
]);
}
/**
* @Route("/paiement-abonnement/{idEntreprise}/{idPlan}/{idUser}/{plateforme}", name="gestion_paiement_abonnement")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function paiementAbonnementAction(Request $request, $idEntreprise, $idPlan, $idUser, $plateforme)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$boutique = $em->getRepository(Boutique::class)
->findOneById($idEntreprise);
if($plateforme == 'mobile'){
$user = $em->getRepository(AppUser::class)
->findOneById($idUser);
}
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
if(null == $userBoutique){
return $this->createNotFoundException();
}
$plan = $em->getRepository(Plan::class)
->findOneById($idPlan);
$transId = rand(4560, 100000);
$transDate = new \DateTime();
$amount = 15000;
$message = '';
$error = '';
$qrUrl = '';
$authenticationUrl = 'https://billpayment.api.prod.run.billmap.net/api/authentication/token';
$id_transaction = '';
$apiKeyAndSecret = array(
'orangekey' => '2CSLsG7IDYHmR8Wp',
'orangesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'mtnkey' => '3AXHb9Q0ctzSJqbV',
'mtnsecret' => 'oDXwYw4XwervcUHof7u7M0tRfRuAYf9aGmgOWYF9y1aMjkWX3lZx312X5ge8L8I9',
'moovekey' => 'GX7fNUtKpzbaZbrM',
'moovesecret' => '2OZpbuvcRCDNapJrsVkHTE6gqocNdeN1DxIQIlEpBZjbR6GuQaBYkbim05fDbK1i',
'wavekey' => '2CSLsG7IDYHmR8Wp',
'wavesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF'
);
//variable mise pour la compatibilité mobile
$keyOperateur = array(
'orangekey' => '2CSLsG7IDYHmR8Wp',
'orangesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'orangedebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/Bill/orange/webpayment',
'orangecode' => 'MYHELPPLACE_ORANGE',
'mtnkey' => '2CSLsG7IDYHmR8Wp',
'mtnsecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'mtndebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/Bill/debit/openapi',
'mtncode' => 'MYHELPPLACE_MTNCI',
'moovkey' => 'GX7fNUtKpzbaZbrM',
'moovsecret' => '2OZpbuvcRCDNapJrsVkHTE6gqocNdeN1DxIQIlEpBZjbR6GuQaBYkbim05fDbK1i',
'moovdebiturl' =>'https://billpayment.api.prod.run.billmap.net/api/Bill/debit/moov',
'moovcode' => 'MYHELPPLACE_MOOVCI',
'wavekey' => '2CSLsG7IDYHmR8Wp',
'wavesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'wavedebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/bill/wave/checkout',
'wavecode' => 'MYHELPPLACE_WAVE'
);
if('POST' == $request->getMethod()){
$formData = json_decode($request->getContent());
if($plateforme == 'web'){
$operateurPaiement = $request->request->get('operateur_paiement');
$numeroDeTelephone = $request->request->get('numero_de_telephone');
$indicatifPays = $request->request->get('indicatif_pays');
$mois = (float)$request->request->get('mois');
//$montantTransaction = (float)$request->request->get('montant_transaction');
$montantTransaction = $plan->getTarif() * $mois;
$key = $request->request->get($operateurPaiement.'key');
$secret = $request->request->get($operateurPaiement.'secret');
$debitURL = $request->request->get($operateurPaiement.'debiturl');
$code = $request->request->get($operateurPaiement.'code');
$otp = $request->request->get('otp');
}else{
// mobile
$operateurPaiement = $formData->operateur_paiement;
$numeroDeTelephone = $formData->numero_de_telephone;
$indicatifPays = $formData->indicatif_pays;
$mois = (float)$formData->mois;
//$montantTransaction = (float)$formData->montant_transaction;
$montantTransaction = $plan->getTarif() * $mois;
$key = $keyOperateur[$operateurPaiement.'key'];
$secret = $keyOperateur[$operateurPaiement.'secret'];
$debitURL = $keyOperateur[$operateurPaiement.'debiturl'];
$code = $keyOperateur[$operateurPaiement.'code'];
$otp = $formData->otp;
}
$content = array(
'key' => $apiKeyAndSecret[$operateurPaiement.'key'],
'secret' => $apiKeyAndSecret[$operateurPaiement.'secret']
);
$content = json_encode($content);
$ch = curl_init($authenticationUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
curl_close($ch);
$serverOutput = json_decode($serverOutput, true);
$id_transaction = '';
if($serverOutput['success']){
$commande = new Commande;
$commande->setPlan($plan);
//transaction id
// Payment description
$description_du_paiement = "Devenir premium";
// Payment Date must be on date format
$date_transaction = date("Y-m-d H:i:s");
// Amount
$montant_a_payer = $montantTransaction;
// put a value that you can use to identify the buyer in your system
$identifiant_du_payeur = $user->getId().'@@@'.$boutique->getId();
$commande->setCpmTransId($id_transaction);
$commande->setCpmAmount($montant_a_payer);
$commande->setUser($user);
$commande->setBoutique($boutique);
$em->persist($commande);
$em->flush();
if($operateurPaiement == 'wave'){
$content = array(
'code' => $code,
'transactionChannel' => "WEB",
'msisdn' => $indicatifPays.$numeroDeTelephone,
'reference' => ''.$commande->getId().'',
'metaData' => ''.$mois.'@ABONNEMENT',
'amount' => $montantTransaction
);
} else{
$content = array(
'code' => $code,
'msisdn' => $indicatifPays.$numeroDeTelephone,
'reference' =>''.$commande->getId().'',
'amount' => $montantTransaction,
'metaData' => ''.$mois.'',
'otp' => $otp
);
}
$content = json_encode($content);
$ch = curl_init($debitURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$serverOutput['token']]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
curl_close($ch);
$serverOutput = json_decode($serverOutput, true);
$id_transaction = $serverOutput['billMapTransactionId'];
// notify url
$notify_url = $this->generateUrl('gestion_payment_notify', array('transaction' => $id_transaction), UrlGeneratorInterface::ABSOLUTE_URL);
// return url
$return_url = $this->generateUrl('gestion_payment_return', array('transaction' => $id_transaction), UrlGeneratorInterface::ABSOLUTE_URL);
// cancel url
$cancel_url = $this->generateUrl('gestion_payment_cancel', array('transaction' => $id_transaction), UrlGeneratorInterface::ABSOLUTE_URL);
$commande->setCpmTransId($id_transaction);
$commande->setCpmAmount($montant_a_payer);
$em->flush();
if($operateurPaiement == 'wave'){
if($plateforme == 'web'){
//["qr_Url"]=> string(87) "https://pay.wave.com/c/cos-24zr78rx02t1g?a=100.00&c=XOF&m=MYHELPPLACE_WAVE%20%2A%20Eves" }
return $this->redirect($serverOutput['qr_Url']);
}else{
$data = array(
'error' => $error,
'qrUrl' => $serverOutput['qr_Url'],
'message' => $message
);
$response = new JsonResponse;
$response = $this->allowRemoteRequest($response);
$response->setContent(json_encode($data));
return $response;
}
}
return $this->redirectToRoute('gestion_finaliser_abonnement', array('slug' => $boutique->getSlug(), 'plan' => $plan->getSlug()));
}
}
if($plateforme == 'mobile'){
return $this->render('api/paiement_abonnement.html.twig', [
'user' => $user,
'transId' => $transId,
'transDate' => $transDate,
'amount' => $amount,
'plan' => $plan,
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'transaction' => $id_transaction,
'keyOperateur' => $keyOperateur
]);
}
return $this->render('gestion/paiement_abonnement.html.twig', [
'user' => $user,
'transId' => $transId,
'transDate' => $transDate,
'amount' => $amount,
//'CinetPay' => $CinetPay,
'plan' => $plan,
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'transaction' => $id_transaction
]);
}
/**
* @Route("/paiement-frais-de-service/{idUser}/{typeService}/{plateforme}", name="gestion_paiement_frais_de_service")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function paiementFraisDeServiceAction(Request $request, $idUser, $typeService, $plateforme)
{
$em = $this->getDoctrine()
->getManager();
$user = $em->getRepository(AppUser::class)
->findOneById($idUser);
if(null == $user){
return $this->createNotFoundException();
}
$transId = rand(4560, 100000);
$transDate = new \DateTime();
$amount = 15000;
$message = '';
$error = '';
$qrUrl = '';
$authenticationUrl = 'https://billpayment.api.prod.run.billmap.net/api/authentication/token';
$id_transaction = '';
$apiKeyAndSecret = array(
'orangekey' => '2CSLsG7IDYHmR8Wp',
'orangesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'mtnkey' => '3AXHb9Q0ctzSJqbV',
'mtnsecret' => 'oDXwYw4XwervcUHof7u7M0tRfRuAYf9aGmgOWYF9y1aMjkWX3lZx312X5ge8L8I9',
'moovekey' => 'GX7fNUtKpzbaZbrM',
'moovesecret' => '2OZpbuvcRCDNapJrsVkHTE6gqocNdeN1DxIQIlEpBZjbR6GuQaBYkbim05fDbK1i',
'wavekey' => '2CSLsG7IDYHmR8Wp',
'wavesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF'
);
//variable mise pour la compatibilité mobile
$keyOperateur = array(
'orangekey' => '2CSLsG7IDYHmR8Wp',
'orangesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'orangedebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/Bill/orange/webpayment',
'orangecode' => 'MYHELPPLACE_ORANGE',
'mtnkey' => '2CSLsG7IDYHmR8Wp',
'mtnsecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'mtndebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/Bill/debit/openapi',
'mtncode' => 'MYHELPPLACE_MTNCI',
'moovkey' => 'GX7fNUtKpzbaZbrM',
'moovsecret' => '2OZpbuvcRCDNapJrsVkHTE6gqocNdeN1DxIQIlEpBZjbR6GuQaBYkbim05fDbK1i',
'moovdebiturl' =>'https://billpayment.api.prod.run.billmap.net/api/Bill/debit/moov',
'moovcode' => 'MYHELPPLACE_MOOVCI',
'wavekey' => '2CSLsG7IDYHmR8Wp',
'wavesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'wavedebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/bill/wave/checkout',
'wavecode' => 'MYHELPPLACE_WAVE'
);
if('POST' == $request->getMethod()){
$formData = json_decode($request->getContent());
if($plateforme == 'web'){
$operateurPaiement = $request->request->get('operateurPaiement');
$numeroDeTelephone = $request->request->get('numeroDeTelephone');
$indicatifPays = $request->request->get('indicatifPays');
$montantTransaction = (float)$request->request->get('montant');
$key = $request->request->get($operateurPaiement.'key');
$secret = $request->request->get($operateurPaiement.'secret');
$debitURL = $request->request->get($operateurPaiement.'debiturl');
$code = $request->request->get($operateurPaiement.'code');
$otp = $request->request->get('otp');
}else{
// mobile
$operateurPaiement = $formData->operateurPaiement;
$numeroDeTelephone = $formData->numeroDeTelephone;
$indicatifPays = $formData->indicatifPays;
$montantTransaction = (float)$formData->montant;
$key = $keyOperateur[$operateurPaiement.'key'];
$secret = $keyOperateur[$operateurPaiement.'secret'];
$debitURL = $keyOperateur[$operateurPaiement.'debiturl'];
$code = $keyOperateur[$operateurPaiement.'code'];
$otp = $formData->otp;
}
$content = array(
'key' => $apiKeyAndSecret[$operateurPaiement.'key'],
'secret' => $apiKeyAndSecret[$operateurPaiement.'secret']
);
$content = json_encode($content);
$ch = curl_init($authenticationUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
curl_close($ch);
$serverOutput = json_decode($serverOutput, true);
$id_transaction = '';
if($serverOutput['success']){
$paiementService = new PaiementService;
$paiementService->setMontant($montantTransaction);
$paiementService->setUser($user);
//transaction id
// Payment description
$description_du_paiement = "Devenir premium";
// Payment Date must be on date format
$date_transaction = date("Y-m-d H:i:s");
// Amount
$montant_a_payer = $montantTransaction;
//$commande->setCpmTransId($id_transaction);
//$commande->setCpmAmount($montant_a_payer);
//$commande->setUser($user);
$em->persist($paiementService);
$em->flush();
if($operateurPaiement == 'wave'){
$content = array(
'code' => $code,
'transactionChannel' => "WEB",
'msisdn' => $indicatifPays.$numeroDeTelephone,
'reference' => ''.$paiementService->getId().'',
'metaData' => ''.$paiementService->getId().'@SERVICE',
'amount' => $montantTransaction
);
} else{
$content = array(
'code' => $code,
'msisdn' => $indicatifPays.$numeroDeTelephone,
'reference' =>''.$paiementService->getId().'',
'amount' => $montantTransaction,
'metaData' => ''.$paiementService->getId().'@SERVICE',
'otp' => $otp
);
}
$content = json_encode($content);
$ch = curl_init($debitURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$serverOutput['token']]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
var_dump($serverOutput);
curl_close($ch);
$serverOutput = json_decode($serverOutput, true);
$id_transaction = $serverOutput['billMapTransactionId'];
$paiementService->setCpmTransId($id_transaction);
//$commande->setCpmAmount($montant_a_payer);
$em->flush();
if($operateurPaiement == 'wave'){
if($plateforme == 'web'){
//["qr_Url"]=> string(87) "https://pay.wave.com/c/cos-24zr78rx02t1g?a=100.00&c=XOF&m=MYHELPPLACE_WAVE%20%2A%20Eves" }
return $this->redirect($serverOutput['qr_Url']);
}else{
$data = array(
'error' => $error,
'qrUrl' => $serverOutput['qr_Url'],
'message' => $message
);
$response = new JsonResponse;
$response = $this->allowRemoteRequest($response);
$response->setContent(json_encode($data));
return $response;
}
}
//return $this->redirectToRoute('gestion_finaliser_abonnement', array('slug' => $boutique->getSlug(), 'plan' => $plan->getSlug()));
}
}
if($plateforme == 'mobile'){
return $this->render('api/paiement_service.html.twig', [
]);
}
return $this->render('gestion/paiement_abonnement.html.twig', [
'user' => $user,
'transId' => $transId,
'transDate' => $transDate,
'amount' => $amount,
//'CinetPay' => $CinetPay,
'plan' => $plan,
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'transaction' => $id_transaction
]);
if($request->getMethod() == 'POST'){
$formData = json_decode($request->getContent());
$dateDebut = $formData->dateDebut;
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = $formData->dateFin;
//$dateFin = $request->request->get('dateFin');
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$demandeRetraits = $em->getRepository(DemandeRetrait::class)
->demandeDUnePeriode($boutique->getId(), $dateDebut, $dateFin, true);
}
$data = array(
'error' => '',
'message' => '',
'demandeRetraits' => $demandeRetraits
);
$response = new JsonResponse;
$response = $this->allowRemoteRequest($response);
$response->setContent(json_encode($data));
return $response;
return $this->render('api/envoyer_push_notification.html.twig', [
]);
}
/**
* @Route("/paiement-prestation/{idUser}/{idOffreDevis}/{plateforme}", name="gestion_paiement_de_prestation")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function paiementPrestationAction(Request $request, $idUser, $idOffreDevis, $plateforme)
{
$em = $this->getDoctrine()
->getManager();
$user = $em->getRepository(AppUser::class)
->findOneById($idUser);
if(null == $user){
return $this->createNotFoundException();
}
$offreDevis = $em->getRepository(OffreDevis::class)
->findOneById($idOffreDevis);
$transId = rand(4560, 100000);
$transDate = new \DateTime();
$amount = 15000;
$message = '';
$error = '';
$qrUrl = '';
$authenticationUrl = 'https://billpayment.api.prod.run.billmap.net/api/authentication/token';
$id_transaction = '';
$apiKeyAndSecret = array(
'orangekey' => '2CSLsG7IDYHmR8Wp',
'orangesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'mtnkey' => '3AXHb9Q0ctzSJqbV',
'mtnsecret' => 'oDXwYw4XwervcUHof7u7M0tRfRuAYf9aGmgOWYF9y1aMjkWX3lZx312X5ge8L8I9',
'moovekey' => 'GX7fNUtKpzbaZbrM',
'moovesecret' => '2OZpbuvcRCDNapJrsVkHTE6gqocNdeN1DxIQIlEpBZjbR6GuQaBYkbim05fDbK1i',
'wavekey' => '2CSLsG7IDYHmR8Wp',
'wavesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF'
);
//variable mise pour la compatibilité mobile
$keyOperateur = array(
'orangekey' => '2CSLsG7IDYHmR8Wp',
'orangesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'orangedebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/Bill/orange/webpayment',
'orangecode' => 'MYHELPPLACE_ORANGE',
'mtnkey' => '2CSLsG7IDYHmR8Wp',
'mtnsecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'mtndebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/Bill/debit/openapi',
'mtncode' => 'MYHELPPLACE_MTNCI',
'moovkey' => 'GX7fNUtKpzbaZbrM',
'moovsecret' => '2OZpbuvcRCDNapJrsVkHTE6gqocNdeN1DxIQIlEpBZjbR6GuQaBYkbim05fDbK1i',
'moovdebiturl' =>'https://billpayment.api.prod.run.billmap.net/api/Bill/debit/moov',
'moovcode' => 'MYHELPPLACE_MOOVCI',
'wavekey' => '2CSLsG7IDYHmR8Wp',
'wavesecret' => '3puc5vA7cySjUGoCkAJZ5nzIesMg0uWdLVsNchbvClZz8ZqtBwzz1bdOMSxnWEzF',
'wavedebiturl' => 'https://billpayment.api.prod.run.billmap.net/api/bill/wave/checkout',
'wavecode' => 'MYHELPPLACE_WAVE'
);
if('POST' == $request->getMethod()){
$formData = json_decode($request->getContent());
if($plateforme == 'web'){
$operateurPaiement = $request->request->get('operateurPaiement');
$numeroDeTelephone = $request->request->get('numeroDeTelephone');
$indicatifPays = $request->request->get('indicatifPays');
$montantTransaction = $offreDevis->getValeurFinanciere();
$key = $request->request->get($operateurPaiement.'key');
$secret = $request->request->get($operateurPaiement.'secret');
$debitURL = $request->request->get($operateurPaiement.'debiturl');
$code = $request->request->get($operateurPaiement.'code');
$otp = $request->request->get('otp');
}else{
// mobile
$operateurPaiement = $formData->operateurPaiement;
$numeroDeTelephone = $formData->numeroDeTelephone;
$indicatifPays = $formData->indicatifPays;
$montantTransaction = $offreDevis->getValeurFinanciere();
$key = $keyOperateur[$operateurPaiement.'key'];
$secret = $keyOperateur[$operateurPaiement.'secret'];
$debitURL = $keyOperateur[$operateurPaiement.'debiturl'];
$code = $keyOperateur[$operateurPaiement.'code'];
$otp = $formData->otp;
}
$content = array(
'key' => $apiKeyAndSecret[$operateurPaiement.'key'],
'secret' => $apiKeyAndSecret[$operateurPaiement.'secret']
);
$content = json_encode($content);
$ch = curl_init($authenticationUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
curl_close($ch);
$serverOutput = json_decode($serverOutput, true);
$id_transaction = '';
if($serverOutput['success']){
$paiementService = new PaiementService;
$paiementService->setMontant($montantTransaction);
$paiementService->setUser($user);
$paiementService->setTypeService('PRESTATION');
//transaction id
// Payment description
$description_du_paiement = "Devenir premium";
// Payment Date must be on date format
$date_transaction = date("Y-m-d H:i:s");
// Amount
$montant_a_payer = $montantTransaction;
//$commande->setCpmTransId($id_transaction);
//$commande->setCpmAmount($montant_a_payer);
//$commande->setUser($user);
$em->persist($paiementService);
$em->flush();
if($operateurPaiement == 'wave'){
$content = array(
'code' => $code,
'transactionChannel' => "WEB",
'msisdn' => $indicatifPays.$numeroDeTelephone,
'reference' => ''.$paiementService->getId().'',
'metaData' => ''.$offreDevis->getId().'@PRESTATION',
'amount' => $montantTransaction
);
} else{
$content = array(
'code' => $code,
'msisdn' => $indicatifPays.$numeroDeTelephone,
'reference' =>''.$paiementService->getId().'',
'amount' => $montantTransaction,
'metaData' => ''.$offreDevis->getId().'@PRESTATION',
'otp' => $otp
);
}
$content = json_encode($content);
$ch = curl_init($debitURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Bearer '.$serverOutput['token']]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$serverOutput = curl_exec($ch);
var_dump($serverOutput);
curl_close($ch);
$serverOutput = json_decode($serverOutput, true);
$id_transaction = $serverOutput['billMapTransactionId'];
$paiementService->setCpmTransId($id_transaction);
//$commande->setCpmAmount($montant_a_payer);
$em->flush();
if($operateurPaiement == 'wave'){
if($plateforme == 'web'){
//["qr_Url"]=> string(87) "https://pay.wave.com/c/cos-24zr78rx02t1g?a=100.00&c=XOF&m=MYHELPPLACE_WAVE%20%2A%20Eves" }
return $this->redirect($serverOutput['qr_Url']);
}else{
$data = array(
'error' => $error,
'qrUrl' => $serverOutput['qr_Url'],
'message' => $message
);
$response = new JsonResponse;
$response = $this->allowRemoteRequest($response);
$response->setContent(json_encode($data));
return $response;
}
}
//return $this->redirectToRoute('gestion_finaliser_abonnement', array('slug' => $boutique->getSlug(), 'plan' => $plan->getSlug()));
}
}
if($plateforme == 'mobile'){
return $this->render('api/paiement_prestation.html.twig', [
]);
}
return $this->render('gestion/paiement_abonnement.html.twig', [
'user' => $user,
'transId' => $transId,
'transDate' => $transDate,
'amount' => $amount,
//'CinetPay' => $CinetPay,
'plan' => $plan,
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'transaction' => $id_transaction
]);
if($request->getMethod() == 'POST'){
$formData = json_decode($request->getContent());
$dateDebut = $formData->dateDebut;
$dateDebut = new \DateTime($dateDebut);
$dateDebut->setTime(0, 0);
$dateFin = $formData->dateFin;
//$dateFin = $request->request->get('dateFin');
$dateFin = new \DateTime($dateFin);
$dateFin->setTime(23, 59);
$demandeRetraits = $em->getRepository(DemandeRetrait::class)
->demandeDUnePeriode($boutique->getId(), $dateDebut, $dateFin, true);
}
$data = array(
'error' => '',
'message' => '',
'demandeRetraits' => $demandeRetraits
);
$response = new JsonResponse;
$response = $this->allowRemoteRequest($response);
$response->setContent(json_encode($data));
return $response;
return $this->render('api/envoyer_push_notification.html.twig', [
]);
}
/**
* @Route("/finaliser-abonnement/{slug}/{plan}", name="gestion_finaliser_abonnement")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function finaliserAction(Request $request, Boutique $boutique, $plan)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$plan = $em->getRepository(Plan::class)
->findOneBySlug($plan);
return $this->render('gestion/finaliser_abonnement.html.twig', [
'user' => $user,
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'plan' => $plan
]);
}
/**
* @Route("/payment/billmap-return", name="gestion_billmap_return")
*/
public function billmapReturnAction(Request $request)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
/*
https://www.myhelpplace.com/fr/gestion/payment/billmap-return?
// Reference=66&
// Amount=100.00&
// MSISDN=2250574053562&
// NetworkMSISDN=2250574053562&
// BillMapTransactionId=T4398121&
// ExternalTransactionId=16464863303&
// ResponseCode=01&
// ResponseMessage=Successfully
*/
$reference = $request->query->get('Reference'); //Ici, c'est bien la valeur qui avait été passé dans "metaData" lors de la requete
$montant = $request->query->get('Amount');
$mois = $request->query->get('MetaData');
$numeroDeTelephone = $request->query->get('MSISDN');
$billMapTransactionId = $request->query->get('BillMapTransactionId');
$responseMessage = $request->query->get('ResponseMessage');
$responseCode = $request->query->get('ResponseCode');
if($responseCode == '01'){
$reference = explode('@', $reference); //'metaData' => ''.$paiementService->getId().'@SERVICE',
if($reference[1] == 'ABONNEMENT'){
//Si la transaction a marché
$commande = $em->getRepository(Commande::class)
->findOneByCpmTransId($billMapTransactionId);
$dateFin = new \DateTime();
//
$dateFin->modify('+'.$mois .' month');
$commande->setDateFin($dateFin);
$em->flush();
}
if($reference[1] == 'SERVICE'){
//Si la transaction a marché
$paiementService = $em->getRepository(PaiementService::class)
->findOneByCpmTransId($billMapTransactionId);
$paiementService->setEtat('VALIDE');
$em->flush();
}
if($reference[1] == 'PRESTATION'){
//Si la transaction a marché
$paiementService = $em->getRepository(PaiementService::class)
->findOneByCpmTransId($billMapTransactionId);
$paiementService->setEtat('VALIDE');
$offreDevis = $em->getRepository(OffreDevis::class)
->findOneById($reference[1]);
$boutique = $offreDevis->getDevis()->getBoutique();
$boutique->setSolde($boutique->setSolde() + $paiementService->getMontant()*90/100);
$em->flush();
}
}
$response = new JsonResponse;
$data = array(
'mois' => 'Mois souscrit '. $mois,
'montant' => 'Montant ' . $montant,
'bonjour' => 'Bonjour tout le monde'
);
$response = $this->allowRemoteRequest($response);
$response->setContent(json_encode($data));
return $response;
return $this->render('gestion/billmap_return.html.twig', [
'user' => $user
]);
}
/**
* @Route("/payment/notify/{transaction}", name="gestion_payment_notify")
*/
public function paymentNotifyAction($transaction)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$requestStack = $this->get('request_stack');
$request = $requestStack->getCurrentRequest();
$ok_submission = '';
$error = '';
$commande = $em->getRePository(Commande::class)
->findOneByCpmTransId($transaction);
$messageRequete = '';
$errorMessage = '';
if('POST' == $request->getMethod()){
$id_transaction = $_POST['cpm_trans_id'];
$apiKey = "1182873575626ba8e6c712e9.05305545";
//Secret Key: 127127447062796bafS
//Veuillez entrer votre siteId
$site_id = "792421";
$plateform = "PROD"; // Valorisé à PROD si vous êtes en production
$version = "V2"; // Valorisé à V1 si vous voulez utiliser la version 1 de l'api
$CinetPay = new CinetPay($site_id, $apiKey, $plateform, $version);
// Reprise exacte des bonnes données chez CinetPay
$CinetPay->setTransId($id_transaction)->getPayStatus();
$cpm_site_id = $CinetPay->_cpm_site_id;
$signature = $CinetPay->_signature;
$cpm_amount = $CinetPay->_cpm_amount;
$cpm_trans_id = $CinetPay->_cpm_trans_id;
$cpm_custom = $CinetPay->_cpm_custom;
$cpm_currency = $CinetPay->_cpm_currency;
$cpm_payid = $CinetPay->_cpm_payid;
$cpm_payment_date = $CinetPay->_cpm_payment_date;
$cpm_payment_time = $CinetPay->_cpm_payment_time;
$cpm_error_message = $CinetPay->_cpm_error_message;
$payment_method = $CinetPay->_payment_method;
$cpm_phone_prefixe = $CinetPay->_cpm_phone_prefixe;
$cel_phone_num = $CinetPay->_cel_phone_num;
$cpm_ipn_ack = $CinetPay->_cpm_ipn_ack;
$created_at = $CinetPay->_created_at;
$updated_at = $CinetPay->_updated_at;
$cpm_result = $CinetPay->_cpm_result;
$cpm_trans_status = $CinetPay->_cpm_trans_status;
$cpm_designation = $CinetPay->_cpm_designation;
$buyer_name = $CinetPay->_buyer_name;
$commande = $em->getRePository(Commande::class)
->findOneByCpmTransId($cpm_trans_id);
if($commande->getCpmTransStatus() == '00'){
//Paiement déjà validé
} else{
$commande->setPaymentMethod($payment_method);
$commande->setCpmPayid($cpm_payid);
$commande->setBuyerName($buyer_name);
$commande->setSignature($signature);
$commande->setCelPhoneNum($cel_phone_num);
//$commande->setCpmPaymentDate($cpm_payment_date . ' ' . $cpm_payment_time);
if ($commande->getCpmAmount() == $cpm_amount) {
// C'est OK : On continue le remplissage des nouvelles données
$commande->setCpmErrorMessage($cpm_error_message);
$commande->setCpmTransStatus($cpm_result);
//$commande->setCpmTransStatus($cpm_trans_status);
if($cpm_result == '00'){
//Le paiement est bon
// Traitez et delivrez le service au client
$em->flush();
$customArray = explode('@@@', $cpm_custom);
$boutique = $em->getRepository(Boutique::class)
->findOneById($customArray[1]);
$boutique->setEstPro(true);
$boutique->getDatePremium($commande->getLaDate());
$em->flush();
return $this->redirect($this->generateUrl('gestion.show_shop', array('slug' =>$boutique->getSlug())));
$errorMessage = 'Paiement effectué avec succès';
}else{
//Le paiement a échoué
}
} else {
//Fraude : montant payé ' . $cpm_amount . ' ne correspond pas au montant de la commande
$commande->setCpmTransStatus('-1');
//$commande->setTransStatus('REFUSED');
}
// On met à jour notre ligne
//$commande->update();
}
}
return $this->render('gestion/payment_notify.html.twig', [
'pageTitle' => $pageTitle,
'user' => $user,
'errorMessage' => $errorMessage
]);
}
/**
* @Route("/payment/return/{transaction}", name="gestion_payment_return")
*/
public function paymentReturnAction($transaction)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$requestStack = $this->get('request_stack');
$request = $requestStack->getCurrentRequest();
$ok_submission = '';
$error = '';
$messageRequete = '';
$errorMessage = '';
$pageTitle = 'Devenir premium';
$commande = $em->getRePository(Commande::class)
->findOneByCpmTransId($transaction);
if('POST' == $request->getMethod()){
$errorMessage = 'Paiement effectué avec succès';
$id_transaction = $_POST['cpm_trans_id'];
$apiKey = "1182873575626ba8e6c712e9.05305545";
//Secret Key: 127127447062796bafS
//Veuillez entrer votre siteId
$site_id = "792421";
$plateform = "PROD"; // Valorisé à PROD si vous êtes en production
$version = "V2"; // Valorisé à V1 si vous voulez utiliser la version 1 de l'api
$CinetPay = new CinetPay($site_id, $apiKey, $plateform, $version);
// Reprise exacte des bonnes données chez CinetPay
$CinetPay->setTransId($id_transaction)->getPayStatus();
$cpm_site_id = $CinetPay->_cpm_site_id;
$signature = $CinetPay->_signature;
$cpm_amount = $CinetPay->_cpm_amount;
$cpm_trans_id = $CinetPay->_cpm_trans_id;
$cpm_custom = $CinetPay->_cpm_custom;
$cpm_currency = $CinetPay->_cpm_currency;
$cpm_payid = $CinetPay->_cpm_payid;
$cpm_payment_date = $CinetPay->_cpm_payment_date;
$cpm_payment_time = $CinetPay->_cpm_payment_time;
$cpm_error_message = $CinetPay->_cpm_error_message;
$payment_method = $CinetPay->_payment_method;
$cpm_phone_prefixe = $CinetPay->_cpm_phone_prefixe;
$cel_phone_num = $CinetPay->_cel_phone_num;
$cpm_ipn_ack = $CinetPay->_cpm_ipn_ack;
$created_at = $CinetPay->_created_at;
$updated_at = $CinetPay->_updated_at;
$cpm_result = $CinetPay->_cpm_result;
$cpm_trans_status = $CinetPay->_cpm_trans_status;
$cpm_designation = $CinetPay->_cpm_designation;
$buyer_name = $CinetPay->_buyer_name;
$customArray = explode('@@@', $cpm_custom);
$boutique = $em->getRepository(Boutique::class)
->findOneById($customArray[1]);
return $this->redirect($this->generateUrl('gestion.show_shop', array('slug' =>$boutique->getSlug())));
}
return $this->render('gestion/cinetpay_return.html.twig', [
'pageTitle' => $pageTitle,
'user' => $user,
'errorMessage' => $errorMessage
]);
}
/**
* @Route("/payment/cancel/{transaction}", name="gestion_payment_cancel")
*/
public function paymentCancelction($transaction)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$requestStack = $this->get('request_stack');
$request = $requestStack->getCurrentRequest();
$ok_submission = '';
$error = '';
$commande = $em->getRePository(Commande::class)
->findOneByCpmTransId($transaction);
$messageRequete = '';
if('POST' == $request->getMethod()){
var_dump($_POST);
}
return $this->render('gestion/cinetpay_cancel.html.twig', [
'user' => $user
]);
}
/**
* @Route("/shop/{slug}/mini-statistic", name="gestion.mini_statistic")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function miniStatisticAction(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$mois = date('mY');
$annee = date('Y');
$nombreOffreDevis = $em->getRepository(OffreDevis::class)
->nombreOffreDevis($boutique->getId());
$conversations = $em->getRepository(Conversation::class)
->nombreMessageDUneBoutique($boutique->getId());
$nombreTiers = 0;
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
return $this->render('gestion/mini_statistic.html.twig', [
'boutique' => $boutique,
'userBoutique' => $userBoutique,
'nombreOffreDevis' => $nombreOffreDevis,
'conversations' => $conversations
]);
}
/**
* @Route("/{slug}/settings", name="gestion.settings")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function settingsAction(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(SettingBoutiqueOngletEntrepriseType::class, $boutique);
$aUnAbonnementPayant = false;
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique
),
array(
'dateFin' => 'DESC'
)
);
if($commande != null){
$aujourdhui = new \DateTime();
if($commande->getDateFin() > $aujourdhui){
$aUnAbonnementPayant = true;
}
}
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$em->flush();
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('gestion/settings.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique,
'aUnAbonnementPayant' => $aUnAbonnementPayant
]);
}
/**
* @Route("/{slug}/edit-entreprise", name="gestion.edit_entreprise")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function editEntrepriseAction(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(SettingBoutiqueOngletEntrepriseType::class, $boutique);
$aUnAbonnementPayant = false;
$commande = $em->getRepository(Commande::class)
->findOneBy(
array(
'boutique' => $boutique
),
array(
'dateFin' => 'DESC'
)
);
if($commande != null){
$aujourdhui = new \DateTime();
if($commande->getDateFin() >= $aujourdhui){
$aUnAbonnementPayant = true;
}
}
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
if(isset($_FILES['logo']) && $_FILES['logo']['error'] == 0 ){
$this->gererFichierMultipleLogo($boutique, $_FILES['logo']);
}
$em->flush();
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('gestion/edit_entreprise.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique,
'aUnAbonnementPayant' => $aUnAbonnementPayant
]);
}
/**
* @Route("/{slug}/products", name="gestion.products")
*/
public function productsAction(Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$products = $em->getRePository(Produit::class)
->findByBoutique($boutique);
return $this->render('gestion/products.html.twig', [
'products' => $products,
'boutique' => $boutique
]);
}
/**
* @Route("/{slug}/new-product", name="gestion.new_product")
*/
public function newProductAction(Boutique $boutique)
{
$requestStack = $this->get('request_stack');
$request = $requestStack->getCurrentRequest();
$em = $this->getDoctrine()
->getManager();
$ok_submission = '';
$error = '';
$produit = new Produit;
$form = $this->createForm(ProduitType::class, $produit);
$user = $this->getUser();
if('POST' == $request->getMethod() )
{
$form->handleRequest($request);
if( $form->isValid()){
$produit->setBoutique($boutique);
if(isset($_FILES['imagePrincipale']) && $_FILES['imagePrincipale']['error'] == 0){
//var_dump($_FILES['fichier']);
$em->persist($produit);
$em->flush();
$this->gererFichierMultiple($produit, $_FILES['imagePrincipale'], true);
$ok_submission = 'Enregistrement effectué';
} else{
$error = 'Veuillez indiquer l\'image principale';
}
if(isset($_FILES['photos']) && $_FILES['photos']['name'][0] != ''){
$this->gererFichierMultiple($produit, $_FILES['photos']);
}
$produit = new Produit;
$form = $this->createForm(ProduitType::class, $produit);
} else {
$form->getErrors(true, false);
$error = 'Une erreur s\'est produite';
}
}
return $this->render('gestion/new_product.html.twig', [
'form' => $form->createView(),
'error' => $error,
'ok_submission' => $ok_submission,
'boutique' => $boutique
]);
}
/**
* @Route("/edit-main-image/{id}", name="gestion.edit_main_image")
*/
public function editMainImageAction(Produit $produit)
{
$requestStack = $this->get('request_stack');
$request = $requestStack->getCurrentRequest();
$em = $this->getDoctrine()
->getManager();
$ok_submission = '';
$error = '';
$user = $this->getUser();
if('POST' == $request->getMethod()){
$image = $produit->getImagePrincipale();
if(isset($_FILES['imagePrincipale']) && $_FILES['imagePrincipale']['error'] == 0){
$data = $_FILES['imagePrincipale'];
$ex = pathinfo($data['name'])['extension'];
$exA = array('jpg', 'jpeg', 'png', 'gif');
if (in_array(strtolower($ex), $exA)){
$image->setExtension($ex);
} else {
throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
}
$name = $produit->getId().time().'.'.$ex;
//Delete old image
unlink($image->getUploadRootDir().'/original/'.$image->getUrl());
if(!is_dir($image->getUploadRootDir().'/original/') && !mkdir($image->getUploadRootDir().'/original', 0777, true))
{
throw new \RuntimeException('Impossible de créer le dossier de destination');
}
if (!move_uploaded_file($data['tmp_name'], $image->getUploadRootDir().'/original/'.$name))
{
throw new \RuntimeException('Désolé, une erreur s\'est produite.');
}
$image->setUrl($name);
} else{
$error = 'Veuillez indiquer l\'image principale';
}
$ok_submission = 'Enregistrement effectué';
$em->flush();
}
return $this->render('gestion/edit_main_image.html.twig', [
'produit' => $produit,
'error' => $error,
'ok_submission' => $ok_submission
]);
}
/**
* @Route("/delete-prodcut-image/{id}/{photo}", name="gestion.delete_product_image")
*/
public function deleteProductImageAction(Produit $produit, $photo)
{
$em = $this->getDoctrine()
->getManager();
$photo = $em->getRePository(ProductPhoto::class)
->findOneById($photo);
$em->remove($photo);
$link = substr($photo->getUrl(), 32); //taille de https://www.lika.ci/uploads/img/
unlink($photo->getUploadRootDir().'/'.$link);
$em->flush();
return $this->redirectToRoute('gestion.products', array('slug' => $produit->getBoutique()->getSlug()));
}
/**
* @Route("/{slug}/add-more-image/{id}", name="gestion.add_more_image")
*/
public function addMoreImageAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$produit = $em->getRepository(Produit::class)
->findOneById($id);
$ok_submission = '';
$error = '';
$user = $this->getUser();
if('POST' == $request->getMethod() )
{
if(isset($_FILES['photos'])){
$this->gererFichierMultiple($produit, $_FILES['photos']);
$ok_submission = 'Enregistrement effectué';
}
}
return $this->render('gestion/add_more_image.html.twig', [
'produit' => $produit,
'error' => $error,
'ok_submission' => $ok_submission,
'boutique' => $boutique
]);
}
/**
* @Route("/edit-product/{boutique}/{produit}", name="gestion.edit_product")
*/
public function editProductAction($boutique, $produit)
{
$requestStack = $this->get('request_stack');
$request = $requestStack->getCurrentRequest();
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneById($boutique);
$produit = $em->getRepository(Produit::class)
->findOneById($produit);
$ok_submission = '';
$error = '';
$form = $this->createForm(ProduitEditType::class, $produit);
$user = $this->getUser();
if('POST' == $request->getMethod())
{
$form->handleRequest($request);
if( $form->isValid()){
$em->flush();
$ok_submission = 'Enregistrement effectué';
if(isset($_FILES['imagePrincipale']) && $_FILES['imagePrincipale']['error'] == 0){
//var_dump($_FILES['fichier']);
$em->persist($produit);
$em->flush();
$this->gererFichierMultiple($produit, $_FILES['imagePrincipale'], true);
$ok_submission = 'Enregistrement effectué';
}
if(isset($_FILES['photos']) && $_FILES['photos']['name'][0] != ''){
$this->gererFichierMultiple($produit, $_FILES['photos']);
}
} else {
$error = 'Une erreur s\'est produite';
}
}
return $this->render('gestion/edit_product.html.twig', [
'form' => $form->createView(),
'error' => $error,
'ok_submission' => $ok_submission,
'boutique' => $boutique
]);
}
//Produit/Service
/**
* @Route("/{slug}/delete-product/{id}", name="gestion.delete_product")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteProductAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$product = $em->getRepository(Produit::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $product){
//les auttres images
foreach($product->getPhotos() as $photo){
$link = substr($photo->getUrl(), 32); //taille de https://www.lika.ci/uploads/img/
unlink($photo->getUploadRootDir().'/'.$link);
$em->remove($photo);
}
$em->flush();
$em->remove($product);
//Image principale
if($product->getImagePrincipale() != null){
$link = substr($product->getImagePrincipale()->getUrl(), 32); //taille de https://www.lika.ci/uploads/img/
unlink($product->getImagePrincipale()->getUploadRootDir().'/'.$link);
$em->remove($product->getImagePrincipale());
}
$em->flush();
}
return $this->redirectToRoute('gestion.products', array('slug' => $boutique->getSlug()));
}
/**
* @Route("/{slug}/proposals", name="gestion.proposals")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function proposalsAction(Request $request, Boutique $boutique)
{
$em = $this->getDoctrine()
->getManager();
$offreDevis = $em->getRepository(OffreDevis::class)
->findByBoutique($boutique);
$devis = $em->getRepository(Devis::class)
->findByCategorieEntreprise($boutique->getCategorieEntreprise());
$user = $this->getUser();
$notifications = $em->getRepository(Notification::class)
->findBy(
array(
'user' => $user,
'vu' => false,
'typeNotification' => 'devis'
)
);
foreach($notifications as $notification){
$notification->setVu(true);
}
$em->flush();
return $this->render('gestion/proposals.html.twig', [
'offreDevis' => $offreDevis,
'devis' => $devis,
'boutique' => $boutique
]);
}
/**
* @Route("/{slug}/my-tickets", name="gestion.my_tickets")
*/
public function ticketsAction(Boutique $boutique)
{
$em = $this->getDoctrine()->getManager();
$tickets = $em->getRepository(Ticket::class)
->findByBoutique($boutique);
return $this->render('gestion/tickets.html.twig', [
'tickets' => $tickets,
'boutique' => $boutique
]);
}
/**
* @Route("/{slug}/new-ticket", name="gestion.new_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newTicketAction(Request $request, $slug)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$ticket = new Ticket;
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$form = $this->createForm(TicketType::class, $ticket);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$ticket->setBoutique($boutique);
$ticket->setUser($user);
$em->persist($ticket);
$em->flush();
return $this->redirectToRoute('gestion.display_ticket', array('slug' => $boutique->getSlug(), 'id' => $ticket->getId()));
$ok_soumission =" Votre message a été pris en compte";
$ticket = new Ticket;
$form = $this->createForm(TicketType::class, $ticket);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('gestion/new_ticket.html.twig', [
'boutique' => $boutique,
'form' => $form->createView(),
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/display-ticket/{id}", name="gestion.display_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function displayTicketAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $boutique->getId()
)
);
$ticket = $em->getRepository(Ticket::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
$commentaires = $em->getRepository(CommentaireTicket::class)
->findByTicket($ticket->getId());
$commentaireTicket = new CommentaireTicket;
$user = $this->getUser();
$form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
$ok_soumission = '';
$error = '';
if($request->getMethod() == 'POST'){
$form->handleRequest($request);
if($form->isValid()){
$commentaireTicket->setTicket($ticket);
$commentaireTicket->setUser($user);
$em->persist($commentaireTicket);
$em->flush();
$commentaires = $em->getRepository(CommentaireTicket::class)
->findByTicket($ticket->getId());
$ok_soumission =" Votre message a été pris en compte";
$commentaireTicket = new CommentaireTicket;
$form = $this->createForm(CommentaireTicketType::class, $commentaireTicket);
} else {
$error =" Veillez corrigez vos erreurs";
}
}
return $this->render('gestion/display_ticket.html.twig', [
'boutique' => $boutique,
'ticket' => $ticket,
'form' => $form->createView(),
'commentaires' => $commentaires,
'userBoutique' => $userBoutique
]);
}
/**
* @Route("/{slug}/close-ticket/{id}", name="gestion.close_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function closeTicketAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$ticket = $em->getRepository(Ticket::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $ticket){
$ticket->setLesCommentairesSontFermes(true);
$em->flush();
}
return $this->redirectToRoute('gestion.display_ticket',array('slug'=>$boutique->getSlug(), 'id'=>$ticket->getId()));
}
/**
* @Route("/{slug}/delete-ticket/{id}", name="gestion.delete_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteTicketAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$ok_soumission = '';
$error = '';
$ticket = $em->getRepository(Ticket::class)
->findOneBy(
array(
'boutique' => $boutique->getId(),
'id' => $id
)
);
if(null !== $ticket){
$commentaireTickets = $em->getRepository(CommentaireTicket::class)
->findByTicket($ticket->getId());
foreach($commentaireTickets as $commentaireTicket)
{
$em->remove($commentaireTicket);
}
$em->remove($ticket);
$em->flush();
}
return $this->redirectToRoute('gestion.tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
}
/**
* @Route("/{slug}/delete-commentaire-ticket/{id}", name="gestion.delete_commentaire_ticket")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function deleteCommentaireTicketAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()
->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$commentaireTicket = $em->getRepository(CommentaireTicket::class)
->findOneById($id);
if(null !== $commentaireTicket){
$em->remove($commentaireTicket);
$em->flush();
}
return $this->redirectToRoute('gestion.tickets',array('slug'=>$boutique->getSlug(), 'id'=>$user->getId()));
}
/**
* @Route("/{slug}/reviews", name="gestion.reviews")
*/
public function reviewsAction(Boutique $boutique)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$reviews = $em->getRepository(AvisUtilisateur::class)
->findByBoutique($boutique);
$notifications = $em->getRepository(Notification::class)
->findBy(
array(
'user' => $user,
'vu' => false,
'typeNotification' => 'avis'
)
);
foreach($notifications as $notification){
$notification->setVu(true);
}
$em->flush();
return $this->render('gestion/reviews.html.twig', [
'reviews' => $reviews,
'boutique' => $boutique
]);
}
/**
* @Route("/{id}/delete-review", name="gestion.delete_review")
*/
public function deleteReviewAction(AvisUtilisateur $review)
{
$em = $this->getDoctrine()->getManager();
$slug = $review->getBoutique()->getSlug();
$em->remove($review);
$em->flush();
return $this->redirectToRoute('gestion.reviews', array('slug' => $slug));
}
/**
* @Route("/{id}/reply-review", name="gestion.reply_review")
*/
public function replyReviewAction(Request $request, AvisUtilisateur $review)
{
$em = $this->getDoctrine()->getManager();
if($request->getMethod() == 'POST'){
$reponseAvis = $request->request->get('reponseAvis');
$review->setReponseAvis($reponseAvis);
$em->flush();
$slug = $review->getBoutique()->getSlug();
return $this->redirectToRoute('gestion.reviews', array('slug' => $slug));
}
return $this->render('gestion/reply_review.html.twig', [
'review' => $review,
'boutique' => $review->getBoutique()
]);
}
/**
* @Route("/{slug}/messages", name="gestion.messages")
*/
public function messagesAction(Boutique $boutique)
{
$em = $this->getDoctrine()->getManager();
$conversations = $em->getRepository(Conversation::class)
->findByBoutique($boutique);
$user = $this->getUser();
return $this->render('gestion/messages.html.twig', [
'conversations' => $conversations,
'boutique' => $boutique
]);
}
/**
* @Route("/{slug}/{id}/conversation", name="gestion.one_conversation")
*/
public function oneConversationAction(Request $request, $slug, $id)
{
$em = $this->getDoctrine()->getManager();
$boutique = $em->getRepository(Boutique::class)
->findOneBySlug($slug);
$user = $this->getUser();
$notifications = $em->getRepository(Notification::class)
->findBy(
array(
'user' => $user,
'vu' => false,
'typeNotification' => 'message',
'extraData' => $id
)
);
foreach($notifications as $notification){
$notification->setVu(true);
}
$em->flush();
$conversation = $em->getRepository(Conversation::class)
->findOneById($id);
if($request->getMethod() == 'POST'){
$reponseMessage = $request->request->get('reponseMessage');
$message = new Message;
$message->setContenu($reponseMessage);
$message->setConversation($conversation);
$em->persist($message);
$em->flush();
$notification = new Notification;
$notification->setUser($conversation->getUser());
$lien = $this->generateUrl('profile.one_conversation', array('slug'=>$conversation->getBoutique()->getSlug(), 'id' => $conversation->getId()));
$notification->setExtraData($conversation->getId());
$notification->setLien($lien);
$notification->setTypeNotification('message');
$notification->setDescription('Vous avez un nouveau message');
$conversation->setLastMessage($reponseMessage);
$em->persist($notification);
$em->flush();
}
$messages = $em->getRepository(Message::class)
->findBy(
array(
'conversation' => $conversation
)
);
return $this->render('gestion/one_conversation.html.twig', [
'conversation' => $conversation,
'boutique' => $boutique,
'messages' => $messages
]);
}
/**
* @Route("/notification-to-join-team/{email}", name="notification_requette_ajout_boutique")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function notificationRequetteAjoutBoutiqueAction(Request $request, $email)
{
$em = $this->getDoctrine()
->getManager();
$requeteBoutiques = $em->getRepository(RequeteAjoutBoutique::class)
->findBy(
array(
'email' => $email
)
);
$nbRequete = count($requeteBoutiques);
return $this->render('entreprise/notification_requette_ajout_boutique.html.twig', [
'nbRequete' => $nbRequete
]);
}
/**
* @Route("/request-to-join-team/{email}", name="afficher_requette_ajout_boutique")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function afficherRequetteAjoutBoutiqueAction(Request $request, $email)
{
$em = $this->getDoctrine()
->getManager();
$requeteBoutiques = $em->getRepository(RequeteAjoutBoutique::class)
->findByEmail($email);
foreach($requeteBoutiques as $requeteBoutique){
$requeteBoutique->setVu(true);
}
$em->flush();
return $this->render('entreprise/afficher_requette_ajout_boutique.html.twig', [
'requeteBoutiques' => $requeteBoutiques
]);
}
/**
* @Route("/respond-request-to-join-team/{id}/{status}", name="repondre_requette_ajout_boutique")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function repondreRequetteAjoutBoutiqueAction(Request $request, $id, $status)
{
$em = $this->getDoctrine()
->getManager();
$requeteAjout = $em->getRepository(RequeteAjoutBoutique::class)
->findOneById($id);
$user = $this->getUser();
if($status){
$userBoutique = $em->getRepository(UserBoutique::class)
->findOneBy(
array(
'user' => $user->getId(),
'boutique' => $requeteAjout->getBoutique()->getId()
)
);
if(null === $userBoutique){
$userBoutique = new UserBoutique;
$userBoutique->setUser($user);
$userBoutique->setBoutique($requeteAjout->getBoutique());
$userBoutique->setRole($requeteAjout->getRole());
$em->persist($userBoutique);
}
}
$em->remove($requeteAjout);
$em->flush();
return $this->redirectToRoute('home');
}
public function getDomain()
{
$domaine = $_SERVER['HTTP_HOST'];
$protocol = '';
if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
$protocol = 'https://';
} else{
$protocol = 'http://';
}
return $protocol.$domaine;
}
public function gererFichierMultipleLogo(\App\Entity\Boutique $boutique, $data)
{
$ex = pathinfo($data['name'])['extension'];
$exA = array('jpg', 'jpeg', 'png', 'gif', 'svg');
if (!in_array(strtolower($ex), $exA)){
throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
}
$name = $boutique->getId().time();
$namePourRepertoire = $name;
//hydratation des attributs de l'objet
$domaine = $_SERVER['HTTP_HOST'];
$protocol = '';
if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'){
$protocol = 'https://';
} else{
$protocol = 'http://';
}
$url = $protocol.$domaine.'/uploads/img/logo/'.$name.'.'.$ex;
$boutique->getLogo()->setUrl($url);
$boutique->getLogo()->setAlt('Logo '.$boutique->getNom());
//deplacement (création de l'image original)
//$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
if(!is_dir($boutique->getLogo()->getUploadRootDir().'/featured/') && !mkdir($boutique->getLogo()->getUploadRootDir().'/featured', 0777, true))
{
throw new \RuntimeException('Impossible de créer le dossier de destination');
}
if (!move_uploaded_file($data['tmp_name'], $boutique->getLogo()->getUploadRootDir().'/featured/'.$name.'.'.$ex))
{
throw new \RuntimeException('Désolé, une erreur s\'est produite.');
}
$name = $boutique->getLogo()->getUploadRootDir().'/featured/'.$name.'.'.$ex;
$extension = strtolower($ex);
try{
$nvlleImgMenu = ( $extension =='jpg' || $extension == 'jpeg') ? imagecreatefromjpeg($name) : imagecreatefrompng($name);
$miniatureMenu = imagecreatetruecolor(48, 48);
$largeurNvlleImgMenu = imagesx($nvlleImgMenu);
$hauteurNvlleImgMenu = imagesy($nvlleImgMenu);
$largeurMiniatureMenu = imagesx($miniatureMenu);
$hauteurMiniatureMenu = imagesy($miniatureMenu);
//fusion et generation des miniatures
imagecopyresampled($miniatureMenu, $nvlleImgMenu, 0, 0, 0, 0, $largeurMiniatureMenu, $hauteurMiniatureMenu,
$largeurNvlleImgMenu, $hauteurNvlleImgMenu);
//deplacer les nouvelles images(miniatures) dans les repertoires correspondants
if(!is_dir($boutique->getLogo()->getUploadRootDir().'/logo/') && !mkdir($boutique->getLogo()->getUploadRootDir().'/logo/', 0777, true)){
throw \RuntimeException('Impossible de créer le dossier de destination');
}
$name = $boutique->getLogo()->getUploadRootDir().'/logo/'.$namePourRepertoire.'.'.$extension;
if($extension == 'jpg' || $extension == 'jpeg'){
imagejpeg($miniatureMenu, $name, 90);
} else{
imagepng($miniatureMenu, $name, 9);
}
$fromSecure = 'http://';
if( isset($_SERVER['HTTPS'] ) ){
$fromSecure = 'https://';
}
$boutique->getLogo()->setUrl($fromSecure.$_SERVER['HTTP_HOST'].'/uploads/img/logo/'.$namePourRepertoire.'.'.$extension);
//
} catch(Exception $e){
}
$this->getDoctrine()->getManager()->flush();
}
public function gererFichierMultiple(\App\Entity\Produit $produit, $data, $imagePrincipale = false)
{
$nbFichier = 0;
if($imagePrincipale){
$photo = new ProductPhoto;
$photo->setFile($data);
$produit->setImagePrincipale($photo);
$ex = pathinfo($data['name'])['extension'];
$exA = array('jpg', 'jpeg', 'png', 'gif');
if (in_array(strtolower($ex), $exA)){
$photo->setExtension($ex);
} else {
throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
}
$name = $produit->getId().time();
$namePourRepertoire = $name;
//hydratation des attributs de l'objet
$photo->setUrl($name.'.'.$photo->getExtension());
$photo->setAlt('Image de '.$produit->getNom());
$extension = $photo->getExtension();
//deplacement (création de l'image original)
//$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original', 0777, true))
{
throw new \RuntimeException('Impossible de créer le dossier de destination');
}
if (!move_uploaded_file($data['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
{
throw new \RuntimeException('Désolé, une erreur s\'est produite.');
}
try{
$name = $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension();
$nvlleImgMenu = ( $ex =='jpg' || $ex == 'jpeg') ? imagecreatefromjpeg($name) : imagecreatefrompng($name);
$miniatureMenu = imagecreatetruecolor(600, 600);
$largeurNvlleImgMenu = imagesx($nvlleImgMenu);
$hauteurNvlleImgMenu = imagesy($nvlleImgMenu);
$largeurMiniatureMenu = imagesx($miniatureMenu);
$hauteurMiniatureMenu = imagesy($miniatureMenu);
//fusion et generation des miniatures
imagecopyresampled($miniatureMenu, $nvlleImgMenu, 0, 0, 0, 0, $largeurMiniatureMenu, $hauteurMiniatureMenu,
$largeurNvlleImgMenu, $hauteurNvlleImgMenu);
//deplacer les nouvelles images(miniatures) dans les repertoires correspondants
if(!is_dir($photo->getUploadRootDir().'/featured/') && !mkdir($photo->getUploadRootDir().'/featured/', 0777, true)){
throw \RuntimeException('Impossible de créer le dossier de destination');
}
$name = $photo->getUploadRootDir().'/featured/'.$photo->getUrl();
if($extension == 'jpg' || $extension == 'jpeg'){
imagejpeg($miniatureMenu, $name, 85);
} else{
imagepng($miniatureMenu, $name, 8);
}
$fromSecure = 'http://';
if( isset($_SERVER['HTTPS'] ) ){
$fromSecure = 'https://';
}
$photo->setUrl($fromSecure.$_SERVER['HTTP_HOST'].'/'.$photo->getUploadDir().'/featured/'.$photo->getUrl());
//
} catch(Exception $e){
}
$this->getDoctrine()->getManager()->persist($photo);
} else{
$tableauFichier = $this->reArrayFiles($data);
//var_dump($tableauFichier);
$i = 0;
foreach ($tableauFichier as $file)
{
$i++;
//print 'File Name: ' . $file['name'];
//print 'File Type: ' . $file['type'];
//print 'File Size: ' . $file['size'];
$photo = new ProductPhoto;
$photo->setFile($file);
$ex = pathinfo($file['name'])['extension'];
$exA = array('jpg', 'jpeg', 'png', 'gif');
if (in_array(strtolower($ex), $exA)){
$photo->setExtension($ex);
} else {
throw new \RuntimeException('Désolé, vous n\'avez pas le droit de télécharger ce type de fichier: '.$ex);
}
$name = $produit->getId().$i.time();
$namePourRepertoire = $name;
//hydratation des attributs de l'objet
$photo->setUrl($name.'.'.$photo->getExtension());
$photo->setAlt('Image de '.$produit->getNom());
$fromSecure = 'http://';
if( isset($_SERVER['HTTPS'] ) ){
$fromSecure = 'https://';
}
$photo->setUrl($fromSecure.$_SERVER['HTTP_HOST'].'/'.$photo->getUploadDir().'/original/'.$photo->getUrl());
//deplacement (création de l'image original)
//$this->file->move($photo->getUploadRootDir().'/original/', $name.'.'.photo->getExtension()));
$produit->addPhoto($photo);
if(!is_dir($photo->getUploadRootDir().'/original/') && !mkdir($photo->getUploadRootDir().'/original', 0777, true))
{
throw new \RuntimeException('Impossible de créer le dossier de destination');
}
if (!move_uploaded_file($file['tmp_name'], $photo->getUploadRootDir().'/original/'.$name.'.'.$photo->getExtension()))
{
throw new \RuntimeException('Désolé, une erreur s\'est produite.');
}
$this->getDoctrine()->getManager()->persist($photo);
}
}
$this->getDoctrine()->getManager()->flush();
}
public function reArrayFiles($file_post)
{
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i=0; $i<$file_count; $i++)
{
foreach ($file_keys as $key)
{
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
public function allowRemoteRequest($response)
{
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Content-Type', 'application/json;');
$response->headers->set('Access-Control-Allow-Headers', 'Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Allow-Origin,Authorization,Access-Control-Request-Headers');
//$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
//$response->headers->set('Access-Control-Allow-Headers', 'Origin, Accept, Access-Control-Allow-Origin, Content-Type, X-Auth-Token');
//$response->headers->set('Access-Control-Allow-Headers', 'Content-Type');
//$response->headers->set('Access-Control-Allow-Credentials', true);
//$response->headers->set('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization,Access-Control-Request-Headers');
//$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
//header("Access-Control-Allow-Headers: 'Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Allow-Origin,Authorization,Access-Control-Request-Headers'");
return $response;
}
}