<?php
namespace App\Controller;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations\Post;
use FOS\RestBundle\Controller\Annotations\Get;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
use App\Entity\User;
use App\Entity\Category;
use App\Entity\Product;
use App\Entity\Slider;
use App\Entity\AccessToken;
use App\Entity\RefreshToken;
use App\Entity\Report;
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
use App\Services\MailerService;
use Symfony\Component\HttpFoundation\Request;
class WebserviceController extends FOSRestController
{
private $mailerService;
public function __construct(MailerService $mailerService)
{
$this->mailerService = $mailerService;
}
/**
* POST Route annotation.
* @Post("/login", defaults={"_format"="json"})
*/
public function loginAction()
{
$request = Request::createFromGlobals();
$email = $request->request->get('email');
$password = $request->request->get('password');
$client_id=$this->container->getParameter('client_id');
$client_secret=$this->container->getParameter('client_secret');
$grant_type="password";
$url=$this->container->getParameter('base_url').$this->generateUrl('fos_oauth_server_token', array('client_id' => $client_id,'client_secret' => $client_secret,'grant_type' => $grant_type,'username' => $email,'password' => $password));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
if ($output === false) {
throw new \Exception(curl_error($ch), curl_errno($ch));
}
curl_close($ch);
$obj=json_decode($output);
if (isset($obj->error)) {
$data = array(
'error' => $obj->error_description
);
} else {
$em = $this->getDoctrine()->getEntityManager();
$user=$em->getRepository(User::class)->findOneBy(array("email"=>$email));
$data = array(
'access_token' => $obj->access_token,
'refresh_token' => $obj->refresh_token
);
}
$view = $this->view($data);
return $this->handleView($view);
}
/**
* POST Route annotation.
* @Post("/refresh", defaults={"_format"="json"})
*/
public function refreshAction()
{
$request = Request::createFromGlobals();
$refresh_token = $request->request->get('refresh_token');
$client_id=$this->container->getParameter('client_id');
$client_secret=$this->container->getParameter('client_secret');
$grant_type="refresh_token";
$url=$this->container->getParameter('base_url').$this->generateUrl('fos_oauth_server_token', array('client_id' => $client_id,'client_secret' => $client_secret,'grant_type' => $grant_type,'refresh_token' => $refresh_token));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
$obj=json_decode($output);
if (isset($obj->error)) {
$data = array(
'error' => $obj->error
);
$view = $this->view($data);
return $this->handleView($view);
}
$data = array(
'access_token' => $obj->access_token,
'refresh_token' => $obj->refresh_token
);
$view = $this->view($data);
return $this->handleView($view);
}
/**
* GET Route annotation.
* @Get("/getdata", defaults={"_format"="json"})
*/
public function getdataAction()
{
$em = $this->getDoctrine()->getEntityManager();
$data = $this->getAllData();
$view = $this->view($data);
return $this->handleView($view);
}
private function getAllData(){
$BASE_URL = $this->container->getParameter('base_url').'/';
$package = new Package(new EmptyVersionStrategy());
$em = $this->getDoctrine()->getEntityManager();
$MainCategories = $em->getRepository(Category::class)->findBy(array('categoryParent' => null));
$categories = array();
foreach ($MainCategories as $MainCategory) {
$subcategories = array();
$SubCats = $em->getRepository(Category::class)->findBy(array('categoryParent' => $MainCategory));
foreach ($SubCats as $SubCat) {
$products = array();
//$Prods = $em->getRepository(Product::class)->findBy(array('category' => $SubCat));
$Prods = $SubCat->getProducts();
foreach ($Prods as $Prod) {
$detailed_plans = [];
$operation_images = [];
if(!is_null($Prod->getDetailedPlans())) {
foreach ($Prod->getDetailedPlans() as $dp) {
array_push($detailed_plans, [ "title" => is_null($dp->getTitle()) ? '' : $dp->getTitle(), "file" => ($dp->getFile() ? $BASE_URL.$package->getUrl('media/product/pdfPlanBatiments/'. $Prod->getId().'/'.$dp->getFile()) : '')]);
}
}
if(!is_null($Prod->getOperationImages())) {
foreach ($Prod->getOperationImages() as $img) {
array_push($operation_images, ($img->getFile()) ? $BASE_URL.$package->getUrl('media/product/image/'.$Prod->getId().'/'.$img->getFile()) : '');
}
}
if ($Prod->getLat() != '' && $Prod->getLng() != '') {
$video = 'NON';
if ($Prod->getVideo()) {
$video = 'OUI';
}
$products[] = array(
"id" => $Prod->getId(),
"name" => $Prod->getTitle(),
"description" => $Prod->getDescription(),
"address" => $Prod->getAddress(),
"zipcode" => $Prod->getZipcode(),
"city" => $Prod->getCity()." (".substr($Prod->getZipcode(),0,2).")",
"lat" => $Prod->getLat(),
"lng" => $Prod->getLng(),
"contact" => $Prod->getContact(),
"video" => $video,
"videoUrl" => is_null($Prod->getVideoSketch()) ? '' : $Prod->getVideoSketch(),
"pdf" => ($Prod->getPdf()) ? $BASE_URL.$package->getUrl('media/product/pdf/'.$Prod->getId().'/'.$Prod->getPdf()) : '',
"pdfPlanMasse" => [
"title" => is_null($Prod->getPdfPlansDetaille()) ? '' : $Prod->getPdfPlansDetaille(),
"file" => ($Prod->getPdfPlanMasse()) ? $BASE_URL.$package->getUrl('media/product/pdfPlanMasse/'.$Prod->getId().'/'.$Prod->getPdfPlanMasse()) : ''
],
"pdfPlansBatiments" => $detailed_plans,
"image" => ($Prod->getImage()) ? $BASE_URL.$package->getUrl('media/product/image/'.$Prod->getId().'/'.$Prod->getImage()) : '',
"operation_images" => $operation_images
);
}
}
$subcategories[] = array(
"id" => $SubCat->getId(),
"name" => $SubCat->getTitle(),
"pdf" => ($SubCat->getPdf()) ? $BASE_URL.$package->getUrl('media/category/pdf/'.$SubCat->getId().'/'.$SubCat->getPdf()) : '',
"image" => ($SubCat->getImage()) ? $BASE_URL.$package->getUrl('media/category/image/'.$SubCat->getId().'/'.$SubCat->getImage()) : '',
"marker" => ($SubCat->getMarker()) ? $this->imageToBase64($BASE_URL.$package->getUrl('media/category/marker/'.$SubCat->getId().'/'.$SubCat->getMarker())) : '',
"products" => $products
);
}
$categories[] = array(
"id" => $MainCategory->getId(),
"name" => $MainCategory->getTitle(),
"pdf" => ($MainCategory->getPdf()) ? $BASE_URL.$package->getUrl('media/category/pdf/'.$MainCategory->getId().'/'.$MainCategory->getPdf()) : '',
"subcategories" => $subcategories
);
}
$MainSliders = $em->getRepository(Slider::class)->findBy(array(),array('sort'=>'ASC'));
$sliders = array();
foreach ($MainSliders as $MainSlider) {
$sliders[] = array(
"image" => ($MainSlider->getImage()) ? $BASE_URL.$package->getUrl('media/slider/image/'.$MainSlider->getId().'/'.$MainSlider->getImage()) : '',
"category_id" => ($MainSlider->getCategory()) ? $MainSlider->getCategory()->getId() : ''
);
}
$data = array(
"sliders" => $sliders,
"categories" => $categories
);
return $data;
}
/**
* POST Route annotation.
* @Post("/report", defaults={"_format"="json"})
*/
public function reportAction()
{
$request = Request::createFromGlobals();
$em = $this->getDoctrine()->getEntityManager();
$product_id = $request->request->get('product');
$product = $em->getRepository(Product::class)->find($product_id);
$email = $request->request->get('email');
$activity = $request->request->get('activity');
$visit = $request->request->get('visit');
$agent = $request->request->get('agent');
$surface = $request->request->get('surface');
$deadline = $request->request->get('deadline');
$location = ($request->request->get('location') == 'true') ? true : false;
$vente = ($request->request->get('vente') == 'true') ? true : false;
$visited = ($request->request->get('visited') == 'true') ? true : false;
$visitedDate = $request->request->get('visitedDate');
$client = $request->request->get('client');
$visitor = $request->request->get('visitor');
$report = new Report();
$report->setProduct($product);
$report->setEmail($email);
$report->setActivity($activity);
$report->setVisit($visit);
$report->setAgent($agent);
$report->setSurface($surface);
$report->setDeadline($deadline);
$report->setLocation($location);
$report->setVente($vente);
$report->setClient($client);
$report->setVisitor($visitor);
$report->setVisited($visited);
$report->setVisitedDate($visitedDate);
$em->persist($report);
$em->flush();
$textlocation = ($location) ? 'oui' : 'non';
$textvente = ($vente) ? 'oui' : 'non';
$textvisited = ($visited) ? 'oui' : 'non';
$data = "
Email : " . $email . "<br>
Bien : " . $product->getTitle() . "<br>
Activité : " . $activity . "<br>
Bât / Lot visité : " . $visit . "<br>
Agence / Agent : " . $agent . "<br>
Surfaces recherchées : " . $surface . "<br>
Echéance : " . $deadline . "<br>
Location: " . $textlocation . "<br>
Vente: " . $textvente . "<br>
Nom de la société / client: " . $client . "<br>
Nom du visiteur: " . $visitor . "<br>
Visité: " . $textvisited . "<br>
Date de la visite: " . $visitedDate . "<br>
";
$email = "contact.ie@spirit.net";
//$email = "rprunier@spirit.net";
// $email = "mel.martineau@gmail.com";
// $email = "a.marin@rezoloco.com";
$result = $this->mailerService->sendEmailForTemplate(array($email), '', 1, array('DATA' => $data));
$view = $this->view(array('message' => $result));
return $this->handleView($view);
}
private function base64_encode_image ($filename) {
if ($filename) {
$b64_url = 'php://filter/read=convert.base64-encode/resource='.$filename;
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,$b64_url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$query = curl_exec($curl_handle);
curl_close($curl_handle);
return $query;
}
}
private function curl_get_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
private function imageToBase64($image){
$imageData = base64_encode($this->curl_get_contents($image));
$mime_types = array(
'pdf' => 'application/pdf',
'doc' => 'application/msword',
'odt' => 'application/vnd.oasis.opendocument.text ',
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'gif' => 'image/gif',
'jpg' => 'image/jpg',
'jpeg' => 'image/jpeg',
'png' => 'image/png',
'bmp' => 'image/bmp'
);
$ext = pathinfo($image, PATHINFO_EXTENSION);
$a = false;
if (array_key_exists($ext, $mime_types)) {
$a = $mime_types[$ext];
}
if (!$a) {
$ext = substr($image, -3);
if (array_key_exists($ext, $mime_types)) {
$a = $mime_types[$ext];
}
}
if (!$a) {
$a = 'image/jpg';
}
return 'data: '.$a.';base64,'.$imageData;
}
}