<?php
namespace App\Controller;
use App\Entity\AddressByPerson;
use App\Entity\AlianazaCities;
use App\Entity\AppButtons;
use App\Entity\BaseReport;
use App\Entity\BaseReportParams;
use App\Entity\BaseReportViews;
use App\Entity\CallbackByCity;
use App\Entity\ColsByRow;
use App\Entity\ComparePropertiesByUser;
use App\Entity\ContentBySection;
use App\Entity\ContentElementsByColumns;
use App\Entity\ContentElementsByMeta;
use App\Entity\FavsPropertiesByUser;
use App\Entity\FeaturesByService;
use App\Entity\GalleryByProject;
use App\Entity\DefaultConfig;
use App\Entity\LinksPoliticasFront;
use App\Entity\Modals;
use App\Entity\Page;
use App\Entity\Person;
use App\Entity\Leads;
use App\Entity\ProcessSteps;
use App\Entity\Projects;
use App\Entity\Properties;
use App\Entity\ResourcesByPage;
use App\Entity\RowsBySection;
use App\Entity\SectionsByPage;
use App\Entity\Services;
use App\Entity\ServicesByCity;
use App\Entity\SiteData;
use App\Entity\Sliders;
use App\Entity\SlidesBySlider;
use App\Entity\Team;
use App\Entity\User;
use Doctrine\DBAL\Logging\DebugStack;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;
use FOS\UserBundle\Model\UserManagerInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Asset\Packages;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use App\Service\DocumentsCreator;
use App\Service\Mailer;
use App\Service\DomusAPI;
use App\Service\Utils;
use Symfony\Component\Serializer\SerializerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Doctrine\DBAL\Connection;
class DefaultController extends AbstractController
{
private $userManager;
/**
* @var EntityManagerInterface
*/
private $em;
private $serializer;
private $documentCreator;
private $mailer;
private $domusAPI;
private $utils;
/**
* @param UserManagerInterface $userManager
* @param EntityManagerInterface $entityManager
* @param SerializerInterface $serializer
* @param DocumentsCreator $documentCreator
* @param Mailer $mailer
* @param Utils $utils
* @param DomusAPI $domusAPI
*/
public function __construct(UserManagerInterface $userManager,
EntityManagerInterface $entityManager,
DocumentsCreator $documentCreator,
Mailer $mailer,
Utils $utils,
DomusAPI $domusAPI,
SerializerInterface $serializer,
Connection $externalConnection
){
$this->userManager = $userManager;
$this->em = $entityManager;
$this->documentCreator = $documentCreator;
$this->mailer = $mailer;
$this->utils = $utils;
$this->serializer = $serializer;
$this->domusAPI = $domusAPI;
$this->externalConnection = $externalConnection;
}
public function index(){
if( $this->getUser() != null ){
return $this->redirectToRoute("admin_dashboard");
}
return $this->redirectToRoute("fos_user_security_login");
$slider = $this->em->getRepository(Sliders::class)->findOneBy(array('name' => 'Home'));
$slides = array();
if(is_object($slider)){
$slides = $this->em->getRepository(SlidesBySlider::class)->findBy(array(
'idSlider' => $slider->getId()
),array( "indexer" => "ASC" ));
}
$properties = $this->em->getRepository(Properties::class)->findBy(array( 'active' => true ));
$cities = $this->em->getRepository(AlianazaCities::class)->findBy(array( 'visible' => true ));
return new Response( $this->renderView('app/themes/cool-landing/default/index.html.twig', array(
'cities' => $cities,
'properties' => $properties,
'types' => [],
'slides' => $slides,
'features' => [],
'posts' => [],
'propertiesFeatured' => $properties,
)) );
}
public function visorReports($url, Request $req){
$report = $this->em->getRepository(BaseReport::class)->findOneBy( array( 'url' => $url ) );
if( !is_object($report) ){
return $this->redirectToRoute("app_index");
}
$view = new BaseReportViews();
$view->setReportId($report->getId());
$view->setDevice("computer");
$view->setIp($req->getClientIp());
$view->setReferal($req->headers->get('referer'));
$view->setCreatedAt(new \DateTime());
$this->em->persist($view);
$this->em->flush();
$params = $this->em->getRepository(BaseReportParams::class)->findBy(array(
'baseReportId' => $report->getId()
));
if (count($params) > 0){
return new Response( $this->renderView('reports/visor-put-parameters.html.twig',array(
'report' => $report,
'params' => $params
)) );
}
$externalConnection = $this->getDoctrine()->getConnection('external_db');
$stmt = $externalConnection->executeQuery(html_entity_decode($report->getQuery()));
$results = $stmt->fetchAll();
switch ($report->getOutputFormat()) {
case 'tabla':
return new Response( $this->renderView('reports/visor.html.twig',array(
'report' => $report,
'results' => $results
)) );
break;
case 'xls':
$xls = $this->documentCreator->generateXlsByReport($report, $results);
return new RedirectResponse($xls["download"]);
break;
}
}
public function reportContentByParameters(Request $req){
$all = $req->request->all();
$report = $this->em->getRepository(BaseReport::class)->find($all["report"]);
unset($all['report']);
if(!is_object($report)){
return $this->redirectToRoute("app_index");
}
$externalConnection = $this->getDoctrine()->getConnection('external_db');
$sql = html_entity_decode($report->getQuery());
$stmt = $externalConnection->prepare($sql);
foreach ($all as $paramName => $paramValue) {
$param = $this->em->getRepository(BaseReportParams::class)->findOneBy(array(
"baseReportId" => $report->getId(),
"paramName" => $paramName
));
if( is_object($param) ){
switch ($param->getParamType()){
case 'in-str':
$valuesArray = array_map('trim', explode(',', $paramValue));
$inValues = "('" . implode("','", $valuesArray) . "')";
$sql = str_replace(":$paramName", $inValues, $sql);
break;
case 'in-nan':
$valuesArray = array_map('trim', explode(',', $paramValue));
$inValues = "(" . implode(",", $valuesArray) . ")";
$sql = str_replace(":$paramName", $inValues, $sql);
break;
case 'like':
case 'number':
$sql = str_replace(":$paramName", trim($paramValue), $sql);
break;
case 'boolean':
$sql = str_replace(":$paramName", (bool)$paramValue, $sql);
break;
default:
$sql = str_replace(":$paramName", "'".trim($paramValue)."'", $sql);
//$stmt->bindValue(':' . $paramName, $paramValue);
break;
}
error_log($sql);
}
}
$stmt = $externalConnection->prepare($sql);
$stmt->execute();
$results = $stmt->fetchAll();
//dd($stmt, $results);
switch ($report->getOutputFormat()){
case 'tabla':
return new Response( $this->renderView('reports/visor-only.html.twig',array(
'report' => $report,
'results' => $results
)) );
break;
case 'xls':
$xls = $this->documentCreator->generateXlsByReport($report, $results);
return new JsonResponse($xls);
break;
}
}
public function getStoreData($arg, $identifier = null, $value= null, $html = true, $cityId = null, Packages $assetPackage){
$response = "";
$site = $this->em->getRepository(SiteData::class)->findOneBy(array(
'id' => 1
));
if(is_null($identifier)){
switch ($arg){
case 'email':
$response = $site->getEmail();
break;
case 'phone':
$response = $site->getPhone1();
break;
case 'phone2':
$response = $site->getPhone2();
break;
case 'phone3':
$response = $site->getPhone3();
break;
case 'logo':
$response = $site->getLogo();
break;
case 'name':
$response = $site->getName();
break;
case 'metatags':
$response = $site->getMetakeywords();
break;
case 'metadescription':
$response = $site->getMetadescription();
break;
case 'favicon':
$response = $site->getFavicon();
break;
case 'address':
$response = $site->getAddress();
break;
case 'facebook':
$response = $site->getFacebook();
break;
case 'instagram':
$response = $site->getInstagram();
break;
case 'twitter':
$response = $site->getTwitter();
break;
case 'youtube':
$response = $site->getYoutube();
break;
case 'blog':
$response = $site->getBlog();
break;
case 'links-politicas':
$links = $this->em->getRepository(LinksPoliticasFront::class)->findAll();
foreach ( $links as $link ){
$response .= '<a target="_blank" href="'.$link->getLink().'">'. $link->getLabel() .'</a> <br>';
}
break;
case 'userName':
$person = $this->em->getRepository(Person::class)->findOneBy(array(
'userId' => $this->getUser()->getId()
));
$response = ( is_object($person) ? $person->getName() . " " . $person->getLastNames() : "MenĂº" );
break;
}
} else {
switch ($identifier){
case 'cities':
$cities = $this->em->getRepository(AlianazaCities::class)->findBy(array( 'visible' => 1 ));
switch ($arg){
case 'li':
foreach ( $cities as $city ){
$response .= ' <li><a target="_blank" href="/city/'. $city->getUrl() .'">'. $city->getName() .'</a></li>
<li class="uk-nav-divider"></li>';
}
break;
case 'option':
foreach ( $cities as $i => $city ){
$response .= ' <option '. ( $cityId == $city->getId() ? "selected" : "" ) .' value="'. $city->getId() .'">'. ucfirst( $city->getName() ) .'</option> ';
}
break;
}
break;
case 'services':
$services = $this->em->getRepository(Services::class)->findBy(array(
'active' => 1
));
$response = '';
foreach ( $services as $service ){
$response .= ' <li><a href="/service/'. $service->getUrl() .'">'. $service->getName() .'</a></li>
<li class="uk-nav-divider"></li>';
}
break;
case 'requirements':
$city = $this->em->getRepository(AlianazaCities::class)->findOneBy(array(
'idCity' => $cityId
));
if( !is_object($city) ){
$city = $this->em->getRepository(AlianazaCities::class)->findOneBy(array(
'id' => 3
));
}
if($arg == 'ARRIENDO'){
$response = $city->getUrlRentRequirements();
} else {
$response = $city->getUrlSellRequirements();
}
break;
}
}
return ( is_string($response) ? new Response($response): new JsonResponse( $response ) );
}
}