<?php
// src/Controller/FrontController.php
namespace App\Controller;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use App\Entity\EStateAd;
use App\Entity\AgencyUser;
use App\Entity\Agency;
use App\Entity\Cities;
use App\Entity\SavedSearch;
use App\Form\SearchAdsType;
use App\Form\FilterAdsType;
use App\Form\SignupFormType;
use App\Form\ConfirmPasswordType;
use App\Form\EStateAdContactFormType;
use App\Form\SignupContactType;
use App\Form\RentalSubscribeType;
use App\Form\ResetPasswordType;
use App\Client\StripeClient;
use Symfony\Component\HttpFoundation\Request;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Google\Service;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use App\Security\LoginFormAuthenticator;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Session\Session;
use Cocur\Slugify\Slugify;
class FrontController extends AbstractController
{
public function __construct(Security $security, SessionInterface $session)
{
$this->encoders = [new XmlEncoder(), new JsonEncoder()];
$this->normalizers = [new ObjectNormalizer()];
$this->serializer = new Serializer($this->normalizers, $this->encoders);
$this->session = $session;
$this->security = $security;
}
public function getReport($analytics) {
// Replace with your view ID, for example XXXX.
$VIEW_ID = "208710174";
// Create the DateRange object.
$dateRange = new \Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate("7daysAgo");
$dateRange->setEndDate("today");
// Create the Metrics object.
$sessions = new \Google_Service_AnalyticsReporting_Metric();
$sessions->setExpression("ga:pageviews");
$sessions->setAlias("pageviews");
// Create the ReportRequest object.
$request = new \Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId($VIEW_ID);
$request->setDateRanges($dateRange);
$request->setMetrics(array($sessions));
$body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests( array( $request) );
return $analytics->reports->batchGet( $body );
}
/**
* Parses and prints the Analytics Reporting API V4 response.
*
* @param An Analytics Reporting API V4 response.
*/
public function printResults($reports) {
for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
$report = $reports[ $reportIndex ];
$header = $report->getColumnHeader();
$dimensionHeaders = $header->getDimensions();
$metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
$rows = $report->getData()->getRows();
for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
$row = $rows[ $rowIndex ];
$dimensions = $row->getDimensions();
$metrics = $row->getMetrics();
/*for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
}*/
for ($j = 0; $j < count($metrics); $j++) {
$values = $metrics[$j]->getValues();
for ($k = 0; $k < count($values); $k++) {
$entry = $metricHeaders[$k];
print($entry->getName() . ": " . $values[$k] . "\n");
}
}
}
}
}
public function oauthcallback(Request $request)
{
$client = new \Google_Client();
$client->setAuthConfig(__DIR__ . '/../../config/preums_ga.json');
$client->setRedirectUri('https://' . $_SERVER['HTTP_HOST'] . '/oauthcallback');
$client->addScope(\Google_Service_Analytics::ANALYTICS_READONLY);
// Handle authorization flow from the server.
if (! isset($_GET['code'])) {
$auth_url = $client->createAuthUrl();
return $this->redirect(filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . '/';
return $this->redirect(filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
}
public function index(Request $request, $agencyuser = null, \Swift_Mailer $mailer)
{
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
$contact_form = $this->createForm(EStateAdContactFormType::class, null, ['userInfo' => $this->getUser()]);
if($user !== null){
$saved_search = $entityManager->getRepository(SavedSearch::class)->findOneByUserId($user->getId());
if($saved_search == null){
$search_form = $this->createForm(SearchAdsType::class, null, ['search_field' => $this->session->get('search_field')]);
} else {
$form_string = json_decode($saved_search->getFormString());
$search_form = $this->createForm(SearchAdsType::class, null, [
'search_field' => isset($form_string->filter_ads->filter_field) ? $form_string->filter_ads->filter_field : null,
'nb_rooms' => isset($form_string->filter_ads->nb_rooms) ? $form_string->filter_ads->nb_rooms : null,
'adtype' => isset($form_string->filter_ads->adtype) ? $form_string->filter_ads->adtype : null,
'projettype' => isset($form_string->filter_ads->projettype) ? $form_string->filter_ads->projettype : null,
'nb_bedrooms' => isset($form_string->filter_ads->nb_bedrooms) ? $form_string->filter_ads->nb_bedrooms : null,
]);
$options['min_surface'] = (isset($form_string->filter_ads->min_surface)) ? $form_string->filter_ads->min_surface : null;
$options['min_price'] = (isset($form_string->filter_ads->min_price)) ? $form_string->filter_ads->min_price : 0;
$options['max_price'] = (isset($form_string->filter_ads->max_price)) ? $form_string->filter_ads->max_price : 100000;
}
} else {
$search_form = $this->createForm(SearchAdsType::class, null, ['search_field' => $this->session->get('search_field')]);
}
$contact_form->handleRequest($request);
if ($contact_form->isSubmitted() && $contact_form->isValid()) {
$data = $contact_form->getData();
$estatead_repository = $this->getDoctrine()->getRepository(EStateAd::class);
$estatead = $estatead_repository->findOneByReference($data['reference']);
/*dd($estatead->getOwnerId()->getEmail());*/
$message = (new \Swift_Message('[PREUMS] Félicitations! Une personne est intéressé par votre annonce ' . $data['reference'] . '.'))
->setFrom('postmaster@nouveausite.fr')
->setTo($estatead->getOwnerId()->getEmail())
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/estatead_contact.html.twig',
['reference' => $data['reference'], 'email' => $data['email'], 'email' => $data['email'], 'name' => $data['name'], 'phone' => $data['phone'], 'message' => $data['message']]
),
'text/html'
)
;
if(!$mailer->send($message, $failures))
{
dd($failures);
}
$this->addFlash('success', 'estatead_contact');
return $this->redirectToRoute('index');
}
$rental_form = $this->createForm(RentalSubscribeType::class, null, []);
$search_form->handleRequest($request);
if ($search_form->isSubmitted() && $search_form->isValid()) {
// $form->getData() holds the submitted values
// but, the original `$task` variable has also been updated
$task = $search_form->getData();
//var_dump($task);
// ... perform some action, such as saving the task to the database
// for example, if Task is a Doctrine entity, save it!
// $entityManager = $this->getDoctrine()->getManager();
// $entityManager->persist($task);
// $entityManager->flush();
return $this->redirectToRoute('estatead_listing', ['request' => $request], 307);
}
$estatead_repository = $this->getDoctrine()->getRepository(EStateAd::class);
$this->session->set('search_ads', null);
/*dd($estatead_repository->getHomeAds());*/
$options = [
'rental_form' => $rental_form->createView(),
'search_form' => $search_form->createView(),
'contact_form' => $contact_form->createView(),
'estateads' => $estatead_repository->getHomeAds(),
'search_form_values' => isset($form_string) ? $form_string : null
];
return $this->render('front/index.html.twig', $options);
}
public function estatead_listing(Request $request, PaginatorInterface $paginator, \Swift_Mailer $mailer)
{
/*dd(filter_var($request->headers->get('referer'), FILTER_SANITIZE_URL), $this->generateUrl('index'), $request);*/
/*dd($request->request);*/
$estatead_repository = $this->getDoctrine()->getRepository(EStateAd::class);
$contact_form = $this->createForm(EStateAdContactFormType::class, null, ['userInfo' => $this->getUser()]);
if(empty($this->session->get('search_ads')) || null == $this->session->get('search_ads')){
$this->session->set('search_ads', $request->request->get('search_ads'));
}
/*dd($this->session->get('search_ads'));*/
$filter_form = $this->createForm(FilterAdsType::class, null, array(
'nb_rooms' => (isset($this->session->get('search_ads')['nb_rooms'])) ? $this->session->get('search_ads')['nb_rooms'] : null,
'search_field' => (isset($this->session->get('search_ads')['search_field'])) ? $this->session->get('search_ads')['search_field'] : null,
'projettype' => (isset($this->session->get('search_ads')['projettype'])) ? $this->session->get('search_ads')['projettype'] : null,
'adtype' => (isset($this->session->get('search_ads')['adtype'])) ? $this->session->get('search_ads')['adtype'] : null,
'nb_bedrooms' => (isset($this->session->get('search_ads')['nb_bedrooms'])) ? $this->session->get('search_ads')['nb_bedrooms'] : null,
'surface' => (isset($this->session->get('search_ads')['surface'])) ? $this->session->get('search_ads')['surface'] : null,
'min_price' => (isset($this->session->get('search_ads')['min_price'])) ? $this->session->get('search_ads')['min_price'] : null,
'max_price' => (isset($this->session->get('search_ads')['max_price'])) ? $this->session->get('search_ads')['max_price'] : null,
));
/*dd($this->session->get('search_ads'));*/
$estate_data = $estatead_repository->getListing();
/* dd($estate_data);*/
/*$estate_ads = $paginator->paginate(
$estate_data, // Requête contenant les données à paginer (ici nos articles)
$request->query->getInt('page', 1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
6 // Nombre de résultats par page
);*/
$contact_form->handleRequest($request);
if ($contact_form->isSubmitted() && $contact_form->isValid()) {
$data = $contact_form->getData();
$estatead_repository = $this->getDoctrine()->getRepository(EStateAd::class);
$estatead = $estatead_repository->findOneByReference($data['reference']);
/*dd($estatead->getOwnerId()->getEmail());*/
$message = (new \Swift_Message('[PREUMS] Félicitations! Une personne est intéressé par votre annonce ' . $data['reference'] . '.'))
->setFrom('postmaster@nouveausite.fr')
->setTo($estatead->getOwnerId()->getEmail())
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/estatead_contact.html.twig',
['reference' => $data['reference'], 'email' => $data['email'], 'email' => $data['email'], 'name' => $data['name'], 'phone' => $data['phone'], 'message' => $data['message']]
),
'text/html'
)
;
if(!$mailer->send($message, $failures))
{
dd($failures);
}
$this->addFlash('success', 'estatead_contact');
return $this->redirectToRoute('estatead_listing');
}
/*dd($contact_form->isSubmitted());*/
return $this->render('front/listing.html.twig', [
'filter_form' => $filter_form->createView(),
'estateads' => $estate_data,
'contact_form' => $contact_form->createView(),
'search_ads' => json_decode($this->session->get('search_ads')['search_field'])
]);
}
public function estatead_show(EStateAd $estatead, Request $request, \Swift_Mailer $mailer)
{
$user = $this->getUser();
$contact_form = $this->createForm(EStateAdContactFormType::class, null, ['userInfo' => $this->getUser()]);
$options = array();
if($user !== null && $user->getFavorites() !== null){
if(in_array($estatead->getId(), unserialize($user->getFavorites()))){
$options['fav'] = true;
}
}
$contact_form->handleRequest($request);
if ($contact_form->isSubmitted() && $contact_form->isValid()) {
$data = $contact_form->getData();
$estatead_repository = $this->getDoctrine()->getRepository(EStateAd::class);
$estatead = $estatead_repository->findOneByReference($data['reference']);
/*dd($estatead->getOwnerId()->getEmail());*/
$message = (new \Swift_Message('[PREUMS] Félicitations! Une personne est intéressé par votre annonce ' . $data['reference'] . '.'))
->setFrom('postmaster@nouveausite.fr')
->setTo($estatead->getOwnerId()->getEmail())
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/estatead_contact.html.twig',
['reference' => $data['reference'], 'email' => $data['email'], 'email' => $data['email'], 'name' => $data['name'], 'phone' => $data['phone'], 'message' => $data['message']]
),
'text/html'
)
;
if(!$mailer->send($message, $failures))
{
dd($failures);
}
$this->addFlash('success', 'estatead_contact');
return $this->redirectToRoute('estatead_listing');
}
return $this->render('front/estatead.html.twig', [
'estatead' => $estatead,
'favorites' => $options,
'contact_form' => $contact_form->createView(),
]);
}
public function signup_pro(Request $request, UserPasswordEncoderInterface $passwordEncoder, \Swift_Mailer $mailer)
{
$signup_form = $this->createForm(SignupFormType::class, null, ['userEmail' => false]);
$contact_form = $this->createForm(SignupContactType::class, null, []);
$agencyuser_repo = $this->getDoctrine()->getRepository(AgencyUser::class);
$slugify = new Slugify();
$signup_form->handleRequest($request);
if ($signup_form->isSubmitted() && $signup_form->isValid()) {
$task = $signup_form->getData();
/*dd($task);*/
/*dd($task);*/
$names = substr($slugify->slugify($task['agencyuser']->getName()), 0, 1);
$username = $slugify->slugify($task['agencyuser']->getFirstName()).$names;
$entityManager = $this->getDoctrine()->getManager();
$password = $passwordEncoder->encodePassword($task['agencyuser'], $task['agencyuser']->getPassword());
$task['agency']->addAgencyUser($task['agencyuser']);
$task['agency']->setCreatedAt(new \DateTime('now', new \DateTimeZone('Europe/Paris')));
$task['agency']->setStatus(0);
if($agencyuser_repo->getUsername($username) !== null){
$username = $username . '1';
}
$task['agencyuser']->setUsername($username);
$task['agencyuser']->setEmail($task['agency']->getEmail());
$task['agencyuser']->setPassword($password);
$task['agencyuser']->setRoles(['ROLE_NORMAL_USER', 'ROLE_AGENCY_OWNER', 'ROLE_AGENCY_USER']);
/*dd($task);*/
$entityManager->persist($task['agencyuser']);
$entityManager->flush();
$entityManager->persist($task['agency']);
$entityManager->flush();
$message = (new \Swift_Message('[PREUMS] Demande de création pro'))
->setFrom('postmaster@nouveausite.fr')
->setTo($task['agency']->getEmail())
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/agency_registration.html.twig',
['name' => $task['agencyuser']->getName() . ' ' . $task['agencyuser']->getFirstName(), 'mail' => $task['agency']->getEmail()]
),
'text/html'
)
;
if(!$mailer->send($message, $failures))
{
dd($failures);
}
$message2 = (new \Swift_Message('[PREUMS] Nouvelle agence'))
->setFrom('postmaster@nouveausite.fr')
->setTo($this->getParameter('admin_mail'))
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/admin_agency_registration.html.twig',
[]
),
'text/html'
)
;
if(!$mailer->send($message2, $failures))
{
dd($failures);
}
$this->addFlash('success', 'agency_signup');
return $this->redirectToRoute('index');
}
if ($contact_form->isSubmitted() && $contact_form->isValid()) {
$contact_data = $contact_form->getData();
$message = (new \Swift_Message('[PREUMS] Demande de contact pro'))
->setFrom('postmaster@nouveausite.fr')
->setTo($this->getParameter('admin_mail'))
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/agency_contact.html.twig',
['name' => $contact_data['name'], 'phone' => $contact_data['phone'], 'agency_name' => $contact_data['agency_name']]
),
'text/html'
)
;
if(!$mailer->send($message, $failures))
{
$this->addFlash('success', 'agency_contact');
return $this->redirectToRoute('app_signup_pro');
}
}
return $this->render('front/signup_pro.html.twig', [
'form' => $signup_form->createView(),
'contact_form' => $contact_form->createView(),
]);
}
public function signup(Request $request, UserPasswordEncoderInterface $passwordEncoder, \Swift_Mailer $mailer, GuardAuthenticatorHandler $guardHandler, LoginFormAuthenticator $authenticator)
{
$signup_form = $this->createForm(SignupFormType::class, null, ['userEmail' => true]);
$options = array();
$signup_form->handleRequest($request);
if ($signup_form->isSubmitted() && $signup_form->isValid()) {
$task = $signup_form->getData();
$agencyuser_repo = $this->getDoctrine()->getRepository(AgencyUser::class);
$slugify = new Slugify();
/*dd($task);*/
$names = substr($slugify->slugify($task['agencyuser']->getName()), 0, 1);
$username = $slugify->slugify($task['agencyuser']->getFirstName()).$names;
$entityManager = $this->getDoctrine()->getManager();
$password = $passwordEncoder->encodePassword($task['agencyuser'], $task['agencyuser']->getPassword());
if($agencyuser_repo->getUsername($username) !== null){
$username = $username . '1';
}
$task['agencyuser']->setAgencyId(null);
$task['agencyuser']->setUsername($username);
$task['agencyuser']->setPassword($password);
$task['agencyuser']->setRoles(['ROLE_NORMAL_USER', 'ROLE_USER']);
$entityManager->persist($task['agencyuser']);
$entityManager->flush();
$message = (new \Swift_Message('[PREUMS] Demande de création de compte'))
->setFrom('postmaster@nouveausite.fr')
->setTo($task['agencyuser']->getEmail())
->setBody(
$this->renderView(
// templates/emails/registration.html.twig
'emails/user_registration.html.twig',
['name' => $task['agencyuser']->getName() . ' ' . $task['agencyuser']->getFirstName(), 'mail' => $task['agencyuser']->getEmail()]
),
'text/html'
)
;
$options['agencyuser'] = $task['agencyuser'];
if(!$mailer->send($message, $failures))
{
dd($failures);
}
/*$this->session->set('user_name', $task['agencyuser']->getName() . ' ' . $task['agencyuser']->getFirstName());*/
$this->addFlash('success', 'user_signup');
return $guardHandler->authenticateUserAndHandleSuccess(
$task['agencyuser'],
$request,
$authenticator,
'main' // firewall name in security.yaml
);
}
$options['form'] = $signup_form->createView();
return $this->render('front/signup.html.twig', $options);
}
public function rentalSubscribe(Request $request)
{
dd($request);
}
public function my_profile(Request $request)
{
$user = $this->getUser();
$agency_repo = $this->getDoctrine()->getRepository(Agency::class);
$agency = $agency_repo->findByUser($user->getAgencyId());
$options = array();
$estatead_repo = $this->getDoctrine()->getRepository(EStateAd::class);
$options['nb_estateads'] = 0;
$options['nb_exclestateads'] = 0;
$options['nb_suboffers'] = 0;
if($user->getAgencyId() != null){
$nb_estateads = $estatead_repo->getNbAdsByAgencyId($user->getAgencyId()->getId());
$nb_exclestateads = $estatead_repo->getNbExclAdsByAgencyId($user->getAgencyId()->getId());
$nb_suboffers = $estatead_repo->getNbSubOffersByAgencyId($user->getAgencyId()->getId());
$options['nb_estateads'] = $nb_estateads;
$options['nb_exclestateads'] = $nb_exclestateads;
$options['nb_suboffers'] = $nb_suboffers;
}
$options['agency'] = $agency;
return $this->render('back/profile.html.twig', $options);
}
public function my_profile_edit(Request $request)
{
$user = $this->getUser();
$signup_form = $this->createForm(SignupFormType::class, $user);
$agency_repo = $this->getDoctrine()->getRepository(Agency::class);
$agency = $agency_repo->findByUser($user->getAgencyId());
return $this->render('back/profile_edit.html.twig', [
'form' => $signup_form,
'agency' => $agency
]);
}
public function my_subscription(Request $request)
{
$user = $this->getUser();
if($user == null){
return $this->redirectToRoute('index');
}
$options = array();
if($user->getTransactionDate() !== null){
$expiration_date = clone $user->getTransactionDate();
$expiration_date->add(new \DateInterval('P1M'));
/*dd($expiration_date);*/
$options['expiration_date'] = $expiration_date;
}
$options['agencyuser'] = $user;
return $this->render('back/subscription.html.twig', $options);
}
public function changepassword(Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$token = $request->get('token');
$user = $this->getUser();
if($user == null){
if($token == null){
$this->addFlash('danger', 'Token Inconnu');
return $this->redirectToRoute('index');
}
}
if ($request->isMethod('POST')) {
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
/* @var $user User */
if ($user === null) {
$this->addFlash('danger', 'Token Inconnu');
return $this->redirectToRoute('index');
}
$user->setResetToken(null);
$user->setPassword($passwordEncoder->encodePassword($user, $request->request->get('password')));
$entityManager->flush();
$this->addFlash('notice', 'Mot de passe mis à jour');
return $this->redirectToRoute('easyadmin');
}else {
return $this->render('security/changepassword.html.twig', ['token' => $token]);
}
}
public function forgotpassword(Request $request, \Swift_Mailer $mailer, TokenGeneratorInterface $tokenGenerator)
{
if ($request->isMethod('POST')) {
$email = $request->request->get('email');
$entityManager = $this->getDoctrine()->getManager();
$user = $entityManager->getRepository(AgencyUser::class)->findOneByEmail($email);
/* @var $user User */
if ($user === null) {
$this->addFlash('danger', 'Email Inconnu');
return $this->redirectToRoute('index');
}
$token = $tokenGenerator->generateToken();
try{
$user->setResetToken($token);
$entityManager->flush();
} catch (\Exception $e) {
$this->addFlash('warning', $e->getMessage());
return $this->redirectToRoute('index');
}
$url = $this->generateUrl('app_resetpassword', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
$message = (new \Swift_Message('Forgot Password'))
->setFrom('postmaster@nouveausite.fr')
->setTo($user->getEmail())
->setBody(
"blablabla voici le token pour reseter votre mot de passe : " . $url,
'text/html'
);
$mailer->send($message);
$this->addFlash('notice', 'Mail envoyé');
return $this->redirectToRoute('index');
}
return $this->render('security/forgotpassword.html.twig');
}
public function premium(Request $request)
{
if(null == $this->getUser()){
return $this->redirect($this->generateUrl('app_signup'));
}
/*dd($this->security->isGranted('ROLE_PREMIUM_USER'));*/
$form = $this->get('form.factory')
->createNamedBuilder('payment-form')
->add('token', HiddenType::class, [
'constraints' => [new NotBlank()],
])
->add('formula_type', ChoiceType::class, [
'choices' => [
'1' => '1',
'2' => '2',
],
'expanded' => true,
'multiple' => false,
'required' => true,
])
->add('promo_code', TextType::class, [
'label' => 'Vous avez un code promo ?',
'attr' => [
'placeholder' => 'Votre code'
],
'required' => false,
])
->add('submit', SubmitType::class, [
'label' => 'Payer',
'attr' => [
'class' => 'cta cta-green'
]
])
->getForm();
if ($request->isMethod('POST')) {
$form->handleRequest($request);
/*dd($request);*/
if ($form->isValid()) {
$data = $form->getData();
/* dd($data);*/
$config = $this->getParameter('payment');
$config['premium_amount'] = $config['premium_amount_monthly'];
/*dd($data);*/
try {
$stripeClient = new StripeClient($this->getParameter('stripe_secret_key'), $config, $this->getDoctrine()->getManager());
$stripeClient->createPremiumCharge($this->getUser(), $form->get('token')->getData(), $data['formula_type'], $data['promo_code']);
if($data['formula_type'] == 1){
$this->addFlash('success', 'user_premium_1m');
} else {
$this->addFlash('success', 'user_premium_3m');
}
$redirect = $this->generateUrl('index');
return $this->redirect($redirect);
} catch (\Stripe\Error\Base $e) {
$redirect = $this->generateUrl('premium');
return $this->redirect($redirect);
}
}
}
return $this->render('front/premium.html.twig', array(
'form' => $form->createView(),
'stripe_public_key' => $this->getParameter('stripe_public_key'),
));
}
public function savesearch(Request $request)
{
if ($request->isXmlHttpRequest()) {
$params = array();
parse_str($request->get('form'), $params);
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
$savedSearch = $entityManager->getRepository(SavedSearch::class)->findOneByUserId($user->getId());
$city = json_decode($params['filter_ads']['filter_field']);
$params['filter_ads']['city_name'] = $city[0]->city_name;
$params['filter_ads']['min_surface'] = $params['min_surface'];
if($savedSearch == null){
$savedSearch = new SavedSearch();
$savedSearch->setOwnerId($user->getId());
$savedSearch->setFormString(json_encode($params));
$entityManager->persist($savedSearch);
} else {
$savedSearch->setFormString(json_encode($params));
}
$entityManager->merge($savedSearch);
$entityManager->flush();
return new JsonResponse(array('success' => true));
}
}
public function getcities(Request $request)
{
if ($request->isXmlHttpRequest()) {
/*$value = $request->get('value');*/
$value = filter_input(INPUT_GET, 'value', FILTER_SANITIZE_STRING);
$entityManager = $this->getDoctrine()->getManager();
$cities = $entityManager->getRepository(Cities::class)->findByValue($value);
$jsonContent = $this->serializer->serialize($cities, 'json');
return new Response($jsonContent);
}
}
public function cgv(Request $request)
{
return $this->render('front/cgv.html.twig', array());
}
public function cgu(Request $request)
{
return $this->render('front/cgu.html.twig', array());
}
public function policy(Request $request)
{
return $this->render('front/policy.html.twig', array());
}
public function mentions(Request $request)
{
return $this->render('front/mentions.html.twig', array());
}
public function my_search(Request $request)
{
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
if($user == null){
return $this->redirectToRoute('index');
}
$options = array();
$saved_search = $entityManager->getRepository(SavedSearch::class)->findOneByUserId($user->getId());
if($saved_search !== null){
$form_string = json_decode($saved_search->getFormString());
/*dd($form_string);*/
/*dd($form_string->nbrooms[0]);*/
/*if(in_array())*/
/*dd([
'search_field' => isset($form_string->filter_ads->filter_field) ? $form_string->filter_ads->filter_field : null,
'nb_rooms' => isset($form_string->nbrooms) ? $form_string->nbrooms : null,
'type' => isset($form_string->adtype) ? $form_string->adtype : null,
'nb_bedrooms' => isset($form_string->nbbedrooms) ? $form_string->nbbedrooms : null,
]);*/
/*dd($form_string);*/
$search_form = $this->createForm(SearchAdsType::class, null, [
'search_field' => isset($form_string->filter_ads->filter_field) ? $form_string->filter_ads->filter_field : null,
'nb_rooms' => isset($form_string->filter_ads->nb_rooms) ? $form_string->filter_ads->nb_rooms : null,
'adtype' => isset($form_string->filter_ads->adtype) ? $form_string->filter_ads->adtype : null,
'projettype' => isset($form_string->filter_ads->projettype) ? $form_string->filter_ads->projettype : null,
'nb_bedrooms' => isset($form_string->filter_ads->nb_bedrooms) ? $form_string->filter_ads->nb_bedrooms : null,
]);
/*dd($form_string);*/
$options['min_surface'] = $form_string->filter_ads->min_surface;
$options['min_price'] = (isset($form_string->filter_ads->min_price)) ? $form_string->filter_ads->min_price : 0;
$options['max_price'] = (isset($form_string->filter_ads->max_price)) ? $form_string->filter_ads->max_price : 100000;
} else {
$search_form = $this->createForm(SearchAdsType::class, null, ['search_field' => $this->session->get('search_field')]);
}
$search_form->handleRequest($request);
if ($search_form->isSubmitted() && $search_form->isValid()) {
// $form->getData() holds the submitted values
// but, the original `$task` variable has also been updated
$task = $search_form->getData();
/*dd($task);*/
if($saved_search == null){
$saved_search = new SavedSearch();
$saved_search->setOwnerId($user->getId());
}
$tmpArray = [
'filter_ads' => [
'filter_field' => $task['search_field'],
'adtype' => implode(",", $task['adtype']),
'projettype' => $task['projettype'],
'nb_rooms' => implode(",", $task['nb_rooms']),
'nb_bedrooms' => implode(",", $task['nb_bedrooms']),
'min_surface' => $task['min_surface'],
'min_price' => $task['min_price'],
'max_price' => $task['max_price'],
'min_surface' => $task['min_surface'],
],
];
/*dd($tmpArray);*/
$saved_search->setFormString(json_encode($tmpArray));
$entityManager->merge($saved_search);
$entityManager->flush();
/*dd();*/
return $this->redirectToRoute('app_search');
}
$estatead_repository = $this->getDoctrine()->getRepository(EStateAd::class);
$this->session->set('search_ads', null);
$options['search_form'] = $search_form->createView();
$options['agencyuser'] = $user;
/*dd($options);*/
return $this->render('back/search.html.twig', $options);
}
public function favorites(Request $request)
{
$options = array();
$user = $this->getUser();
$estatead_repository = $this->getDoctrine()->getRepository(EStateAd::class);
if($user->getFavorites() !== null){
$res = $estatead_repository->findByIds(unserialize($user->getFavorites()));
$options['favorites'] = $res;
} else {
$options['favorites'] = null;
}
return $this->render('back/favorites.html.twig', $options);
}
public function addfavorites(Request $request)
{
if ($request->isXmlHttpRequest()) {
$user = $this->getUser();
if($user == null){
return new JsonResponse([
'error' => 'auth required'
], 401);
}
/*$value = $request->get('value');*/
$value = filter_input(INPUT_GET, 'value', FILTER_SANITIZE_NUMBER_INT);
$entityManager = $this->getDoctrine()->getManager();
$favorites = $user->getFavorites();
if($favorites == null){
$fav = array($value);
$user->setFavorites(serialize($fav));
} else {
$fav = unserialize($user->getFavorites());
if(!in_array($value, $fav)){
$fav[] = $value;
} else {
array_splice($fav, array_search($value, $fav), 1);
}
$user->setFavorites(serialize($fav));
}
$entityManager->merge($user);
$entityManager->flush();
return new JsonResponse(array('success' => true));
}
}
public function deleteaccount(Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$user = $this->getUser();
if($user == null){
return $this->redirectToRoute('index');
}
$deleteUserForm = $this->createForm(ConfirmPasswordType::class);
$options = array(
'form' => $deleteUserForm->createView()
);
if ($request->isMethod('POST')) {
$deleteUserForm->handleRequest($request);
/*dd($request);*/
if ($deleteUserForm->isValid()) {
$data = $deleteUserForm->getData();
if($passwordEncoder->isPasswordValid($user, $data['password'])){
$session = new Session();
$session->clear();
$session->migrate();
//suppression du compte dans la bdd
$em = $this->getDoctrine()->getManager();
$usrRepo = $em->getRepository(AgencyUser::class);
$userEntity = $usrRepo->find($id);
$em->remove($userEntity);
$em->flush();
/*dd($user);*/
$this->addFlash('success', 'user_deleteacc');
return $this->redirectToRoute('index');
}
}
}
return $this->render('back/deleteaccount.html.twig', $options);
}
}