<?php
namespace App\Controller;
use App\Entity\Main\ApiAgency;
use App\Entity\Main\ApiAgencyLang;
use App\Entity\Main\ApiAgencyHomeImage;
use App\Entity\Main\ApiFeatures;
use App\Entity\Main\ApiImages;
use App\Entity\Main\ApiLocations;
use App\Entity\Main\ApiMenu;
use App\Entity\Main\ApiOrderPages;
use App\Entity\Main\ApiPropertiesSupertype;
use App\Entity\Main\ApiProperties;
use App\Entity\Main\ApiPropertiesSupertypeI18n;
use App\Entity\Main\ApiProvinces;
use App\Entity\Main\TipusOperacio;
use App\Entity\Main\ApiPages;
use App\Entity\Main\ApiPagesBK;
use App\Entity\Main\ApiPropertiesFeatures;
use App\Entity\Main\ApiPropertiesI18n;
use App\Entity\Main\ApiPropertiesSubtypesI18n;
use App\Entity\Main\PluginGroups;
use App\Entity\Main\Plugins;
use App\Entity\Main\Textos;
use App\Entity\Main\Tracking;
use App\Entity\Main\ApiAgencyHomeAgent;
use App\Entity\Main\ApiAgencyHomeOnepage;
use App\Entity\Main\ApiAgencySlider;
use App\Entity\Admin\AgencyLicense;
use App\Entity\Main\ApiHistory;
use DateTime;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Doctrine\Persistence\ManagerRegistry;
use App\Service\Utilities;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
/**
* @Route("/private", priority="1")
*
*/
class PrivateController extends AbstractController
{
private $LICENSE;
private $DOMINI_APIBCN_FOTOS;
public function __construct()
{
$this->LICENSE = 'LICA13096_041220';
$this->DOMINI_APIBCN_FOTOS = 'https://imagenes.ghestia.cat/images/webs/'.$this->LICENSE.'/';
}
/**
* @Route("", name="private_page_home", methods={"GET"})
* @Route("/", name="private_page", methods={"GET"})
*
*/
public function privatePage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyLangRepo = $em->getRepository(ApiAgencyLang::class);
$langs = $apiAgencyLangRepo->findAll();
return $this->render('main/private/profile.html.twig', [
"user" => $user,
"langs" => $langs,
"page_active" => "private"
]);
}
/**
* @Route("/updateProfile", name="update_profile", methods={"POST"})
*
*/
public function updateProfile(Request $request, ManagerRegistry $doctrine, UserPasswordEncoderInterface $passwordEncoder): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
if (!empty($request->getContent())) {
$post = (array) json_decode($request->getContent());
if (count($post) == 0) {
$post = (array) $request->request->all();
}
} else {
$post = (array) $request->request->all();
}
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
$em = $doctrine->getManager();
$apiAgencyLangRepo = $em->getRepository(ApiAgencyLang::class);
$apiPagesRepo = $em->getRepository(ApiPages::class);
$langs = $apiAgencyLangRepo->findAll();
if (key_exists('company', $post)) {
//Info update
try {
$user->setName($post["company"]);
$user->setAddress($post["address0"]);
$user->setEmail($post["email"]);
$user->setPhone($post["phone"]);
$user->setFacebook(isset($post["facebook"])?$post["facebook"]:null);
$user->setTwitter(isset($post["twitter"])?$post["twitter"]:null);
$user->setLinkedin(isset($post["linkedin"])?$post["linkedin"]:null);
$user->setInstagram(isset($post["instagram"])?$post["instagram"]:null);
$user->setTiktok(isset($post["tiktok"])?$post["tiktok"]:null);
$user->setGoogle(isset($post["google"])?$post["google"]:null);
$user->setYoutube(isset($post["youtube"])?$post["youtube"]:null);
$user->setDomain(isset($post["domain"])?$post["domain"]:null);
//Update lang preferences
$findOtherDefault = false;
$noneVisible = 0;
$currentDefault = "";
foreach ($langs as $lang) {
if(key_exists('lang_' . $lang->getCod(), $post)){
$lang->setVisible($post['lang_' . $lang->getCod()]);
$pagesLang = $apiPagesRepo->findBy(array("lang" => $lang->getCod()));
foreach ($pagesLang as $pLang) {
$pLang->setStatus(1);
$em->persist($pLang);
}
}else{
$lang->setVisible(0);
$pagesLang = $apiPagesRepo->findBy(array("lang" => $lang->getCod()));
foreach ($pagesLang as $pLang) {
$pLang->setStatus(0);
$em->persist($pLang);
}
}
if (key_exists('lang_default', $post)){
$currentDefault = $post['lang_default'];
if ($currentDefault == $lang->getCod()) {
$lang->setVisible(1);
$lang->setPredeterminado(1);
$pagesLang = $apiPagesRepo->findBy(array("lang" => $lang->getCod()));
foreach ($pagesLang as $pLang) {
$pLang->setStatus(1);
$em->persist($pLang);
}
} else {
$lang->setPredeterminado(0);
}
}
$em->persist($lang);
}
$em->persist($user);
$em->flush();
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
} catch (\Exception $e) {
if ($_SERVER['APP_DEBUG']) {
$response['message_explain'] = $e->getMessage();
}
}
} else {
//Password update
try {
//Comprobar que coincideixen els pass
$oldPassword = $passwordEncoder->encodePassword(
$user,
$post["oldpass"]
);
if ($oldPassword == $user->getPassword()) {
$password = $passwordEncoder->encodePassword(
$user,
$post["newpass"]
);
$user->setPassword($password);
$em->persist($user);
$em->flush();
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
}else{
$response = array(
"status" => "error",
"type" => "error",
"message" => "La contraseƱa actual no es correcta"
);
}
} catch (\Exception $e) {
if ($_SERVER['APP_DEBUG']) {
$response['message_explain'] = $e->getMessage();
}
}
}
return new JsonResponse($response);
}
/**
* @Route("/design", name="design_page", methods={"GET"})
*
*/
public function designPage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$langSubstr = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$lang = str_replace("-","_",substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5));
$em = $doctrine->getManager();
$apiAgencyLangRepo = $em->getRepository(ApiAgencyLang::class);
$apiAgencyHomeImageRepo = $em->getRepository(ApiAgencyHomeImage::class);
$apiTipusOperacioRepo = $em->getRepository(TipusOperacio::class);
$apiPropertiesSupertypeRepo = $em->getRepository(ApiPropertiesSupertypeI18n::class);
$apiProvincesRepo = $em->getRepository(ApiProvinces::class);
$langs = $apiAgencyLangRepo->findAll();
$images = $apiAgencyHomeImageRepo->findOneBy(array("id" => $user->getId()));
$operations = $apiTipusOperacioRepo->findOperationsByLang($langSubstr, $em);
$supertype = $apiPropertiesSupertypeRepo->findSupertypesByLang($lang, $em);
$provincesCa = $apiProvincesRepo->findBy(array("autonomouscommunity" => 9));
$provinces = $apiProvincesRepo->findAll();
return $this->render('main/private/design.html.twig', [
"user" => $user,
"langs" => $langs,
"images" => $images,
"operations" => $operations,
"supertype" => $supertype,
"provincesCa" => $provincesCa,
"provinces" => $provinces,
"lang" => ucfirst($lang)
]);
}
/**
* @Route("/updateDesign", name="update_design_page", methods={"POST"})
*
*/
public function updateDesignPage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
if (!empty($request->getContent())) {
$post = (array) json_decode($request->getContent());
if (count($post) == 0) {
$post = (array) $request->request->all();
}
} else {
$post = (array) $request->request->all();
}
$em = $doctrine->getManager();
// dd($post);
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
if (key_exists('primary_color', $post)) {
$response = $this->updateColors($post, $em, $user);
} else if (key_exists('newsletter', $post)) {
$response = $this->updateNewsletter($post, $em, $user);
} else if (key_exists('banner_url', $post)) {
$response = $this->updateBanner($post, $em, $user);
} else if (key_exists('logos', $post)) {
$response = $this->updateLogos($em, $user);
} else if (key_exists('cover', $post)) {
$response = $this->updateCover($em, $user);
}
return new JsonResponse($response);
}
public function updateColors($post, $em, $user)
{
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
// dd($post);
try {
$user->setColorPrimary($post['primary_color']);
$user->setColorSecondary($post['secondary_color']);
$user->setPrimaryFoot1($post['primary_foot_1']);
$user->setPrimaryFoot2($post['primary_foot_2']);
$user->setFilterHeader((isset($post['filter_header']))? $post['filter_header'] : 0 );
$em->persist($user);
$em->flush();
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
} catch (\Exception $e) {
if ($_SERVER['APP_DEBUG']) {
$response['message_explain'] = $e->getMessage();
}
}
return $response;
}
public function updateNewsletter($post, $em, $user)
{
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
try {
$user->setNewsletter( ( isset($post['newsletter_check']) && $post['newsletter_check'] == 1 ) ? 1 : 0 );
$em->persist($user);
$em->flush();
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
} catch (\Exception $e) {
if ($_SERVER['APP_DEBUG']) {
$response['message_explain'] = $e->getMessage();
}
}
return $response;
}
public function updateLogos($em, $user)
{
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
$nombreImg = "";
$logos = [
'logoMain' => function ($nomImg) use ($user) {
$user->setLogo(isset($nomImg) ? $nomImg : 'null');
},
'logoFav' => function ($nomImg) use ($user) {
$user->setLogoFav(isset($nomImg) ? $nomImg : 'null');
},
'logoMov' => function ($nomImg) use ($user) {
$user->setLogoMobileEmail(isset($nomImg) ? $nomImg : 'null');
},
'logoContact' => function ($nomImg) use ($user) {
$user->setLogoContact(isset($nomImg) ? $nomImg : 'null');
},
'logoIcat' => function ($nomImg) use ($user) {
$user->setLogoAicat(isset($nomImg) ? $nomImg : 'null');
},
'logoAgencia' => function ($nomImg) use ($user) {
$user->setLogoAgente(isset($nomImg) ? $nomImg : 'null');
},
'logoMiembro' => function ($nomImg) use ($user) {
$user->setLogoMiembro(isset($nomImg) ? $nomImg : 'null');
}
];
try {
$callbackImages = [];
$callbackImagesName = [];
if (isset($_FILES)) {
foreach ($logos as $logo) {
$key = key($logos);
if (isset($_FILES[$key])) {
$file = $_FILES[$key];
$nombreImg = $this->typeSelector($file["name"], $file["type"]);
if (!$nombreImg) {
$response = "3";
return new JsonResponse($response);
}
$callbackImagesName[$key] = $nombreImg;
$destino = 'images/private/design/' . $nombreImg;
//Save the logo image
$moved = move_uploaded_file($file['tmp_name'], $destino);
$callbackImages[$key] = "/" . $destino;
//Set the logo image
call_user_func($logos[$key], $nombreImg);
}
next($logos);
}
}
$em->persist($user);
$em->flush();
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente",
//"reload" => 1,
"images" => $callbackImages,
"imageName" => $callbackImagesName
);
} catch (\Exception $e) {
if ($_SERVER['APP_DEBUG']) {
$response['message_explain'] = $e->getMessage();
}
}
return $response;
}
public function updateBanner($post, $em, $user)
{
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
try {
$callbackImages = [];
if (isset($_FILES["banner"])) {
$nombreImg = $this->typeSelector($_FILES["banner"]["name"], $_FILES["banner"]["type"]);
if (!$nombreImg) {
$response["message"] = "Revise el formato de las imƔgenes. Permitidos: png, jpeg";
return new JsonResponse($response);
}
$destino = 'images/private/design/' . $nombreImg;
$moved = move_uploaded_file($_FILES['banner']['tmp_name'], $destino);
if ($moved) {
$user->setBanner($nombreImg);
$callbackImages["banner"] = "/" . $destino;
} else {
$response["message"] ="Error al guardar la foto";
return new JsonResponse($response);
}
}
$user->setBannerUrl($post['banner_url']);
$em->persist($user);
$em->flush();
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente",
//"reload" => 1
"images" => $callbackImages
);
} catch (\Exception $e) {
if ($_SERVER['APP_DEBUG']) {
$response['message_explain'] = $e->getMessage();
}
}
return $response;
}
public function updateCover($em, $user)
{
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
$apiAgencyHomeImageRepo = $em->getRepository(ApiAgencyHomeImage::class);
$images = $apiAgencyHomeImageRepo->findOneBy(array("id" => $user->getId()));
$callbackImages = [];
try {
if (isset($_FILES["cover_image"])) {
$nombreImg = $this->typeSelector($_FILES["cover_image"]["name"], $_FILES["cover_image"]["type"]);
if (!$nombreImg) {
$response["message"] = "Revise el formato de las imƔgenes. Permitidos: png, jpeg";
return new JsonResponse($response);
}
$destino = 'images/private/design/' . $nombreImg;
$moved = move_uploaded_file($_FILES['cover_image']['tmp_name'], $destino);
if ($moved) {
$images->setImage1($nombreImg);
$callbackImages["coverImage"] = "/" . $destino;
} else {
$response["message"] = "Error al guardar la foto";
return new JsonResponse($response);
}
}
if (isset($_FILES["cover_video"])) {
$nombreVideo = $this->typeSelector($_FILES["cover_video"]["name"], $_FILES["cover_video"]["type"]);
if (!$nombreVideo) {
$response["message"] = "Revise el formato del video. Permitidos: mp4, mov";
return new JsonResponse($response);
}
$destino = 'images/private/design/' . $nombreVideo;
$moved = move_uploaded_file($_FILES['cover_video']['tmp_name'], $destino);
if ($moved) {
$images->setLink1($nombreVideo);
$callbackImages["coverVideo"] = "/" . $destino;
} else {
$response["message"] = "Error al guardar la vĆdeo";
return new JsonResponse($response);
}
}
$em->persist($images);
$em->flush();
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente",
//"reload" => 1
"images" => $callbackImages
);
} catch (\Exception $e) {
if ($_SERVER['APP_DEBUG']) {
$response['message_explain'] = $e->getMessage();
}
}
return $response;
}
/**
* @Route("/deleteVideo", name="private_delete_video", methods={"GET"})
*
*/
public function deleteVideo(Request $request, ManagerRegistry $doctrine)
{
$user = $this->getUser();
$em = $doctrine->getManager();
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
$fileName = $request->get('file');
$imgType = $request->get('type');
//TYPE -> 1 = images / 0 = user
// dd($imgType);
if ($imgType == 1) {
$apiAgencyHomeImageRepo = $em->getRepository(ApiAgencyHomeImage::class);
$images = $apiAgencyHomeImageRepo->findOneBy(array("id" => $user->getId()));
try{
$images->setLink1(NULL);
$em->persist($images);
$em->flush();
$videoPath = 'images/private/design/'.$fileName;
unlink($videoPath);
}catch(\Exception $e){
return new JsonResponse($response);
}
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
} else if ($imgType == 0) {
}
return new JsonResponse($response);
}
/**
* @Route("/deleteImage", name="private_delete_image", methods={"GET"})
*
*/
public function deleteImage(Request $request, ManagerRegistry $doctrine)
{
$user = $this->getUser();
$em = $doctrine->getManager();
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);
$fileName = $request->get('file');
$imgType = $request->get('type');
//TYPE -> 2 = media images / 1 = images / 0 = user
// dd($imgType);
if ($imgType == 1) {
$apiAgencyHomeImageRepo = $em->getRepository(ApiAgencyHomeImage::class);
$images = $apiAgencyHomeImageRepo->findOneBy(array("id" => $user->getId()));
try{
$images->setImage1(NULL);
$em->persist($images);
$em->flush();
$imgPath = 'images/private/design/'.$fileName;
unlink($imgPath);
}catch(\Exception $e){
return new JsonResponse($response);
}
} else if ($imgType == 0) {
try{
if($user->getLogo() == $fileName){
$user->setLogo(NULL);
}else if($user->getLogoMobileEmail() == $fileName){
$user->setLogoMobileEmail(NULL);
}else if($user->getLogoContact() == $fileName){
$user->setLogoContact(NULL);
}else if($user->getLogoFav() == $fileName){
$user->setLogoFav(NULL);
}else if($user->getLogoAicat() == $fileName){
$user->setLogoAicat(NULL);
}else if($user->getLogoAgente() == $fileName){
$user->setLogoAgente(NULL);
}else if($user->getLogoMiembro() == $fileName){
$user->setLogoMiembro(NULL);
}else if($user->getBanner() == $fileName){
$user->setBanner(NULL);
}
$em->persist($user);
$em->flush();
$imgPath = 'images/private/design/'.$fileName;
unlink($imgPath);
}catch(\Exception $e){
return new JsonResponse($response);
}
}else if($imgType == 2){
try{
$imageId = $request->get('imageId');
$apiImagesRepo = $em->getRepository(ApiImages::class);
$image = $apiImagesRepo->findOneBy(array("id" => $imageId));
$em->remove($image);
$em->flush();
$imgPath = 'images/web/'.$image->getName().".".$image->getType();
unlink($imgPath);
}catch(\Exception $e){
return new JsonResponse($response);
}
}
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
return new JsonResponse($response);
}
/**
* @Route("/content", name="content_page", methods={"GET"})
*
*/
public function contentPage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyLangRepo = $em->getRepository(ApiAgencyLang::class);
$apiPagesRepo = $em->getRepository(ApiPages::class);
$langs = $apiAgencyLangRepo->findBy(array("visible" => 1));
$langPredeterminado = $apiAgencyLangRepo->findOneBy(array("predeterminado" => 1));
$pages = $apiPagesRepo->findBy(array("lang"=>$langPredeterminado));
// dd($pages);
return $this->render('main/private/content.html.twig', [
"user" => $user,
"langs" => $langs,
"pages" => $pages,
"page_active" => "content",
"predeterminado" => $langPredeterminado
]);
}
/**
* @Route("/content/delete/{group_id}", name="content_delete_page", methods={"GET"})
*
*/
public function pageDelete(Request $request, ManagerRegistry $doctrine, $group_id){
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiPagesRepo = $em->getRepository(ApiPages::class);
$apiPagesBKRepo = $em->getRepository(ApiPagesBK::class);
$apiOrderPagesRepo = $em->getRepository(ApiOrderPages::class);
$historyRepo = $em->getRepository(ApiHistory::class);
try{
$toDelete = $apiPagesRepo->findBy(array("groupPage" => $group_id));
foreach($toDelete as $delete){
$pageBK = $apiPagesBKRepo->findBy(array("page" => $delete));
// dd($pageBK);
if($pageBK ){
foreach($pageBK as $pBK){
$em->remove($pBK);
$em->flush();
}
}
//Borramos las paginas hijas del menu
$childs = $apiOrderPagesRepo->findBy(array("parentId" => $delete->getId()));
if($childs){
foreach($childs as $child){
$em->remove($child);
$em->flush();
}
}
//Borramos la pagina del menu
$parentPage = $apiOrderPagesRepo->findOneBy(array("page" => $delete));
if($parentPage)$em->remove($parentPage);
//borramos historial
$history = $historyRepo->findOneBy(array("page" => $delete));
if($history)$em->remove($history);
$em->remove($delete);
}
$em->flush();
// dd($toDelete);
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
}catch(\Exception $e){
$response = array(
"status" => "error",
"type" => "error",
"message" => $e->getMessage()
);
return new JsonResponse($response);
}
return new JsonResponse($response);
}
/**
* @Route("/content/change/status", name="content_change_status", methods={"POST"})
*
*/
public function pageChangeStatus(Request $request, ManagerRegistry $doctrine){
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$status = $request->get("status");
$id = $request->get("id");
$response = new JsonResponse();
$em = $doctrine->getManager();
$apiPagesRepo = $em->getRepository(ApiPages::class);
try{
$toChangeStatus = $apiPagesRepo->findOneBy(array("id" => $id));
$toChangeStatus->setStatus($status);
$em->persist($toChangeStatus);
$em->flush();
$response->setStatusCode(200);
$response->setData(array(
"status" => "success",
));
}catch(\Exception $e){
$response->setStatusCode(500);
$response->setData(array(
"status" => "failed",
));
}
return $response;
}
/**
* @Route("/page/edit/new", name="private_page_edit_new", methods={"GET"})
*
*/
public function pageEditNew(Request $request, ManagerRegistry $doctrine)
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyRepo = $em->getRepository(ApiAgency::class);
$lang = $em->getRepository(ApiAgencyLang::class)->findOneBy(array("predeterminado" => 1));
$allImages = $em->getRepository(ApiImages::class)->findBy( array(), array('id' => 'DESC') );
$imagenes = array();
$textosDate = $em->getRepository(Textos::class)->getDateTexts($lang->getCod());
$agency = $apiAgencyRepo->findOneBy(array());
foreach($allImages as $img){
$newImage = array();
$newImage["id"] = $img->getId();
$newImage["name"] = $img->getName();
$newImage["size"] = $img->getSize();
$newImage["proportions"] = $img->getProportions();
$newImage["date"] = date_format($img->getDate(), "d/m/Y");
$newImage["url"] = (empty($_SERVER['HTTPS']) ? 'http' : 'https') . "://$_SERVER[HTTP_HOST]"."/images/web/".$img->getName().".".$img->getType();
$newImage["src"] = "/images/web/".$img->getName().".".$img->getType();
array_push($imagenes, $newImage);
}
return $this->render('main/private/pages/new.html.twig', [
"user" => $user,
"lang" => $lang,
"agency" => $agency,
"imagenes" => $imagenes,
"dateTexts" => json_encode($textosDate),
]);
}
/**
* @Route("/page/edit/{id}", name="private_page_edit", methods={"GET"})
*
*/
public function pageEdit(Request $request, ManagerRegistry $doctrine, $id)
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyRepo = $em->getRepository(ApiAgency::class);
$lang = $em->getRepository(ApiAgencyLang::class)->findBy([]);
$langPredeterminada = $em->getRepository(ApiAgencyLang::class)->findOneBy(array("predeterminado" => 1));
$page = $em->getRepository(ApiPages::class)->findOneBy(array("id" => $id));
if($page){
$otherPage = $em->getRepository(ApiPages::class)->findBy(array("groupPage" => $page->getGroupPage()));
$allImages = $em->getRepository(ApiImages::class)->findAll();
$imagenes = array();
$agency = $apiAgencyRepo->findOneBy(array());
$textosDate = $em->getRepository(Textos::class)->getDateTexts($langPredeterminada->getCod());
foreach($allImages as $img){
$newImage = array();
$newImage["id"] = $img->getId();
$newImage["name"] = $img->getName();
$newImage["size"] = $img->getSize();
$newImage["proportions"] = $img->getProportions();
$newImage["date"] = date_format($img->getDate(), "d/m/Y");
$newImage["url"] = (empty($_SERVER['HTTPS']) ? 'http' : 'https') . "://$_SERVER[HTTP_HOST]"."/images/web/".$img->getName().".".$img->getType();
$newImage["src"] = "/images/web/".$img->getName().".".$img->getType();
array_push($imagenes, $newImage);
}
$history = $em->getRepository(ApiHistory::class)->findOneBy(array("page" => $page));
return $this->render('main/private/pages/edit.html.twig', [
"user" => $user,
"page" => $page,
"other_page" => $otherPage,
"lang" => $lang,
"agency" => $agency,
"imagenes" => $imagenes,
"dateTexts" => json_encode($textosDate),
"default" => $page->getDefaultPage(),
"history" => $history
]);
}else{
$response = new JsonResponse();
$response->setStatusCode(404);
$response->setData(array(
"status" => "failed",
"data" => "No page found"
));
}
}
/**
* @Route("/restore", name="private_restore_history", methods={"POST"})
*
*/
public function restoreHistory(Request $request, ManagerRegistry $doctrine){
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
if (!empty($request->getContent())) {
$post = (array) json_decode($request->getContent());
if (count($post) == 0) {
$post = (array) $request->request->all();
}
} else {
$post = (array) $request->request->all();
}
// dd($post);
$em = $doctrine->getManager();
$page = $em->getRepository(ApiPages::class)->find($post["pageId"]);
$pageHistory = $em->getRepository(ApiHistory::class)->findOneBy(array("page" => $page));
try{
switch($post["version"]){
case "version1":
$page->setJsonBack($pageHistory->getVersion1JsonBack());
$page->setStrHtml($pageHistory->getVersion1StrHtml());
break;
case "version2":
$page->setJsonBack($pageHistory->getVersion2JsonBack());
$page->setStrHtml($pageHistory->getVersion2StrHtml());
break;
case "version3":
$page->setJsonBack($pageHistory->getVersion3JsonBack());
$page->setStrHtml($pageHistory->getVersion3StrHtml());
break;
case "version4":
$page->setJsonBack($pageHistory->getVersion4JsonBack());
$page->setStrHtml($pageHistory->getVersion4StrHtml());
break;
case "version5":
$page->setJsonBack($pageHistory->getVersion5JsonBack());
$page->setStrHtml($pageHistory->getVersion5StrHtml());
break;
}
$em->persist($page);
$em->flush();
}catch(\Exception $e){
return new JsonResponse([
"status" => "error",
"message" => $e
]);
}
return new JsonResponse([
"status" => "success"
]);
}
/**
* @Route("/page/copy/{id}", name="private_page_copy", methods={"GET"})
*
*/
public function pageCopy(Request $request, ManagerRegistry $doctrine, $id): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$pagesRepo = $em->getRepository(ApiPages::class);
$langPredeterminada = $em->getRepository(ApiAgencyLang::class)->findOneBy(array("predeterminado" => 1));
try{
$paginaActual = $pagesRepo->findOneBy(array("id" => $id));
$paginaIdiomaDefault = $pagesRepo->findOneBy(array("lang" => $langPredeterminada, "groupPage" => $paginaActual->getGroupPage()));
$pageBK = new ApiPagesBK();
$pageBK->setLang($paginaActual->getLang());
$pageBK->setPage($paginaActual);
$pageBK->setGroupPage($paginaActual->getGroupPage());
$pageBK->setSlug($paginaActual->getSlug());
$pageBK->setTitle($paginaActual->getTitle());
$pageBK->setStrHtml($paginaActual->getStrHtml());
$pageBK->setJsonBack($paginaActual->getJsonBack());
$pageBK->setDateCreated(new \DateTime());
$pageBK->setStatus($paginaActual->getStatus());
$em->persist($pageBK);
$paginaActual->setTitle($paginaIdiomaDefault->getTitle());
$paginaActual->setStrHtml($paginaIdiomaDefault->getStrHtml());
$paginaActual->setJsonBack($paginaIdiomaDefault->getJsonBack());
$em->persist($paginaActual);
$em->flush();
}catch(\Exception $e){
return new JsonResponse([
"status" => "error",
"message" => "Error al copiar"
]);
}
return new JsonResponse([
"status" => "success",
"message" => "Copiado correctamente",
"id" => $paginaActual->getId()
]);
}
/**
* @Route("/page/save", name="save_page", methods={"POST"})
*
*/
public function savePage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
if (!empty($request->getContent())) {
$post = (array) json_decode($request->getContent());
if (count($post) == 0) {
$post = (array) $request->request->all();
}
} else {
$post = (array) $request->request->all();
}
$em = $doctrine->getManager();
if(isset($post["id"]) && $post["id"] != "" && $post["id"] != " "){
$page = $em->getRepository(ApiPages::class)->find($post["id"]);
if($page){
$existsSlug = $em->getRepository(ApiPages::class)->findOneBy(["slug" => $post["slug"]]);
if($existsSlug && $page->getId() != $existsSlug->getId()){
$response = new JsonResponse();
$response->setStatusCode(200);
$response->setData(array(
"status" => "error",
"message" => "Este slug ya existe"
));
return $response;
}
$em->flush();
//Save BK page
$pageBK = new ApiPagesBK();
$pageBK->setLang($page->getLang());
$pageBK->setPage($page);
$pageBK->setGroupPage($page->getGroupPage());
$pageBK->setSlug($page->getSlug());
$pageBK->setTitle($page->getTitle());
$pageBK->setStrHtml($page->getStrHtml());
$pageBK->setJsonBack($page->getJsonBack());
$pageBK->setDateCreated(new \DateTime());
$pageBK->setStatus($page->getStatus());
$em->persist($pageBK);
$em->flush();
//Update info page
$page->setLang($post["lang"]);
if(!$page->getDefaultPage()){
$page->setSlug($post["slug"]);
$page->setTitle($post["name"]);
}
$page->setStrHtml($post["html"]);
$page->setJsonBack($post["json"]);
// $page->setDefaultPage(0);
$em->persist($page);
$em->flush();
$groupId = $page->getId();
//History version
$pageHistory = $em->getRepository(ApiHistory::class)->findOneBy(array("page" => $page));
$historyKey = "";
if($pageHistory){
foreach((array)$pageHistory as $key => $history){
if($pageHistory->getLastVersion() == $history){
$historyKey = $key;
break;
}
}
$realKey = substr($historyKey, 28);
switch($realKey){
case "version1JsonBack":
$pageHistory->setVersion2JsonBack($page->getJsonBack());
$pageHistory->setVersion2StrHtml($page->getStrHtml());
$pageHistory->setLastVersion($page->getJsonBack());
$pageHistory->setVersion2DateCreated(new \DateTime());
break;
case "version2JsonBack":
$pageHistory->setVersion3JsonBack($page->getJsonBack());
$pageHistory->setVersion3StrHtml($page->getStrHtml());
$pageHistory->setLastVersion($page->getJsonBack());
$pageHistory->setVersion3DateCreated(new \DateTime());
break;
case "version3JsonBack":
$pageHistory->setVersion4JsonBack($page->getJsonBack());
$pageHistory->setVersion4StrHtml($page->getStrHtml());
$pageHistory->setLastVersion($page->getJsonBack());
$pageHistory->setVersion4DateCreated(new \DateTime());
break;
case "version4JsonBack":
$pageHistory->setVersion5JsonBack($page->getJsonBack());
$pageHistory->setVersion5StrHtml($page->getStrHtml());
$pageHistory->setLastVersion($page->getJsonBack());
$pageHistory->setVersion5DateCreated(new \DateTime());
break;
case "version5JsonBack":
$pageHistory->setVersion1JsonBack($page->getJsonBack());
$pageHistory->setVersion1StrHtml($page->getStrHtml());
$pageHistory->setLastVersion($page->getJsonBack());
$pageHistory->setVersion1DateCreated(new \DateTime());
break;
}
$em->persist($pageHistory);
}else{
$history = new ApiHistory();
$history->setVersion1JsonBack($page->getJsonBack());
$history->setVersion1StrHtml($page->getStrHtml());
$history->setPage($page);
$history->setLastVersion($page->getJsonBack());
$history->setVersion1DateCreated(new \DateTime());
$em->persist($history);
}
$em->flush();
}else{
$response = new JsonResponse();
$response->setStatusCode(500);
$response->setData(array(
"status" => "error",
"message" => "Ha habido un error"
));
return $response;
}
}else{
$existsSlug = $em->getRepository(ApiPages::class)->find($post["slug"]);
if($existsSlug){
$response = new JsonResponse();
$response->setStatusCode(200);
$response->setData(array(
"status" => "error",
"message" => "Este slug ya existe"
));
return $response;
}
$page = new ApiPages();
$page->setLang($post["lang"]);
$page->setSlug($post["slug"]);
$page->setTitle($post["name"]);
$page->setStrHtml($post["html"]);
$page->setJsonBack($post["json"]);
$page->setDateCreated(new \DateTime());
$page->getDefaultPage(0);
$page->setStatus(1);
$em->persist($page);
$em->flush();
$groupId = $page->getId();
$page->setGroupPage($groupId);
$em->persist($page);
$em->flush();
$history = new ApiHistory();
$history->setVersion1JsonBack($page->getJsonBack());
$history->setVersion1StrHtml($page->getStrHtml());
$history->setVersion1DateCreated(new \DateTime());
$history->setPage($page);
$history->setLastVersion($page->getJsonBack());
$em->persist($history);
$em->flush();
$langs = $em->getRepository(ApiAgencyLang::class)->findBy([]);
foreach($langs as $lang){
if($lang->getCod() != $post["lang"]){
$page = new ApiPages();
$page->setLang($lang->getCod());
$page->setSlug($post["slug"]."-".$lang->getCod());
$page->setTitle($post["name"]);
$page->setStrHtml('');
$page->setJsonBack('[]');
$page->setDateCreated(new \DateTime());
$page->setGroupPage($groupId);
$page->setStatus(1);
$em->persist($page);
$em->flush();
}
}
}
$jsonBack = json_decode($post["json"]);
foreach($jsonBack as $object){
if($object->id == "home"){
if(property_exists($object, "valueJSON")){
$valueJSON = (array) $object->valueJSON;
switch($valueJSON["theme"]){
case 'homemap':
case 'superprop':
break;
case 'agency':
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class)->findBy(array());
foreach($apiAgencySlider as $aas){
$em->remove($aas);
}
if(isset($valueJSON[$valueJSON["theme"]])){
foreach($valueJSON[$valueJSON["theme"]] as $key => $value){
switch($key){
case "image-".$object->hash[0]."-agency-1":
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($value);
$apiAgencySlider->setNorder(1);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
break;
case "image-".$object->hash[0]."-agency-2":
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($value);
$apiAgencySlider->setNorder(2);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
break;
case "image-".$object->hash[0]."-agency-3":
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($value);
$apiAgencySlider->setNorder(3);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
break;
case "image-".$object->hash[0]."-agency-4":
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($value);
$apiAgencySlider->setNorder(4);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
break;
}
}
}
$em->flush();
break;
case 'portal':
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class)->findBy(array());
foreach($apiAgencySlider as $aas){
$em->remove($aas);
}
if(isset($valueJSON[$valueJSON["theme"]])){
foreach($valueJSON[$valueJSON["theme"]] as $key => $value){
switch($key){
case "image-".$object->hash[0]."-portal-1":
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($value);
$apiAgencySlider->setNorder(1);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
break;
}
}
}
$em->flush();
break;
case 'agent':
$apiAgencyHomeAgent = $em->getRepository(ApiAgencyHomeAgent::class)->findOneBy(array("lang" => $post["lang"]));
if(!$apiAgencyHomeAgent){
$apiAgencyHomeAgent = new ApiAgencyHomeAgent();
$apiAgencyHomeAgent->setLang($post["lang"]);
}
if(isset($valueJSON[$valueJSON["theme"]])){
$obj = (array) $valueJSON[$valueJSON["theme"]];
$apiAgencyHomeAgent->setTitle($obj["title-agent"]);
$apiAgencyHomeAgent->setName($obj["name-agent"]);
$apiAgencyHomeAgent->setLink($obj["link-agent"]);
$apiAgencyHomeAgent->setDescription($obj["text-".$object->hash[0]."-agent"]);
$apiAgencyHomeAgent->setJob($obj["charge-agent"]);
$apiAgencyHomeAgent->setImageMain1($obj["image-".$object->hash[0]."-agent-1"]);
$apiAgencyHomeAgent->setImageMain2($obj["image-".$object->hash[0]."-agent-2"]);
$apiAgencyHomeAgent->setImagePersonal($obj["image-".$object->hash[0]."-agent-3"]);
$em->persist($apiAgencyHomeAgent);
$em->flush();
}
break;
case 'corporate':
$apiAgencyHomeImage = $em->getRepository(apiAgencyHomeImage::class)->findOneBy(array());
if(!$apiAgencyHomeImage){
$apiAgencyHomeImage = new apiAgencyHomeImage();
}
if(isset($valueJSON[$valueJSON["theme"]])){
$obj = (array) $valueJSON[$valueJSON["theme"]];
$apiAgencyHomeImage->setImage1($obj["image-".$object->hash[0]."-corporate-1"]);
$apiAgencyHomeImage->setImage2($obj["image-".$object->hash[0]."-corporate-2"]);
$apiAgencyHomeImage->setImage3($obj["image-".$object->hash[0]."-corporate-3"]);
$apiAgencyHomeImage->setImage4($obj["image-".$object->hash[0]."-corporate-4"]);
$apiAgencyHomeImage->setImage5($obj["image-".$object->hash[0]."-corporate-5"]);
$apiAgencyHomeImage->setImage6($obj["image-".$object->hash[0]."-corporate-6"]);
$apiAgencyHomeImage->setLink1($obj["link-corporate-1"]);
$apiAgencyHomeImage->setLink2($obj["link-corporate-2"]);
$apiAgencyHomeImage->setLink3($obj["link-corporate-3"]);
$apiAgencyHomeImage->setLink4($obj["link-corporate-4"]);
$apiAgencyHomeImage->setLink5($obj["link-corporate-5"]);
$apiAgencyHomeImage->setLink6($obj["link-corporate-6"]);
$em->persist($apiAgencyHomeImage);
$em->flush();
}
break;
case 'geoloc':
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class)->findBy(array());
foreach($apiAgencySlider as $aas){
$em->remove($aas);
}
if(isset($valueJSON[$valueJSON["theme"]])){
$obj = (array) $valueJSON[$valueJSON["theme"]];
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($obj["image-".$object->hash[0]."-geoloc-1"]);
$apiAgencySlider->setNorder(1);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
$em->flush();
}
break;
case 'lateralscroll':
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class)->findBy(array());
foreach($apiAgencySlider as $aas){
$em->remove($aas);
}
if(isset($valueJSON[$valueJSON["theme"]])){
$obj = (array) $valueJSON[$valueJSON["theme"]];
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($obj["image-".$object->hash[0]."-lateralscroll-1"]);
$apiAgencySlider->setNorder(1);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
$em->flush();
}
break;
case 'megaimage':
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class)->findBy(array());
foreach($apiAgencySlider as $aas){
$em->remove($aas);
}
if(isset($valueJSON[$valueJSON["theme"]])){
$obj = (array) $valueJSON[$valueJSON["theme"]];
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($obj["image-".$object->hash[0]."-megaimage-1"]);
$apiAgencySlider->setNorder(1);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
$em->flush();
}
break;
case 'megascroll':
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class)->findBy(array());
foreach($apiAgencySlider as $aas){
$em->remove($aas);
}
if(isset($valueJSON[$valueJSON["theme"]])){
$obj = (array) $valueJSON[$valueJSON["theme"]];
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($obj["image-".$object->hash[0]."-megascroll-1"]);
$apiAgencySlider->setNorder(1);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
$em->flush();
}
break;
case 'onepage':
$apiAgencyHomeOnepage = $em->getRepository(ApiAgencyHomeOnepage::class)->findOneBy(array("lang" => $post["lang"]));
if(!$apiAgencyHomeOnepage){
$apiAgencyHomeOnepage = new ApiAgencyHomeOnepage();
$apiAgencyHomeOnepage->setLang($post["lang"]);
}
if(isset($valueJSON[$valueJSON["theme"]])){
foreach($valueJSON[$valueJSON["theme"]] as $key => $value){
switch($key){
case "principal-title":
$apiAgencyHomeOnepage->setTitle($value);
break;
case "image-".$object->hash[0]."-onepage":
$apiAgencyHomeOnepage->setImage($value);
break;
case "text-".$object->hash[0]."-onepage-1":
$apiAgencyHomeOnepage->setDescription1($value);
break;
case "text-".$object->hash[0]."-onepage-2":
$apiAgencyHomeOnepage->setDescription2($value);
break;
case "text-".$object->hash[0]."-onepage-3":
$apiAgencyHomeOnepage->setDescription3($value);
break;
case "text-".$object->hash[0]."-onepage-4":
$apiAgencyHomeOnepage->setDescription4($value);
break;
case "title-onepage-1":
$apiAgencyHomeOnepage->setTitle1($value);
break;
case "link-onepage-1":
$apiAgencyHomeOnepage->setLink1($value);
break;
case "title-onepage-2":
$apiAgencyHomeOnepage->setTitle2($value);
break;
case "link-onepage-2":
$apiAgencyHomeOnepage->setLink2($value);
break;
case "title-onepage-3":
$apiAgencyHomeOnepage->setTitle3($value);
break;
case "link-onepage-3":
$apiAgencyHomeOnepage->setLink3($value);
break;
case "title-onepage-4":
$apiAgencyHomeOnepage->setTitle4($value);
break;
case "link-onepage-4":
$apiAgencyHomeOnepage->setLink4($value);
break;
}
}
}
$em->persist($apiAgencyHomeOnepage);
$em->flush();
break;
case 'tabbuscador':
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class)->findBy(array());
foreach($apiAgencySlider as $aas){
$em->remove($aas);
}
if(isset($valueJSON[$valueJSON["theme"]])){
$obj = (array) $valueJSON[$valueJSON["theme"]];
$apiAgencySlider = new ApiAgencySlider();
$apiAgencySlider->setImage($obj["image-".$object->hash[0]."-tabbuscador-1"]);
$apiAgencySlider->setNorder(1);
$apiAgencySlider->setVideo(0);
$em->persist($apiAgencySlider);
$em->flush();
}
break;
}
}
}
}
$response = new JsonResponse();
$response->setStatusCode(200);
$response->setData(array(
"status" => "success",
"id" => $groupId
));
return $response;
}
/**
* @Route("/home/info/{lang}", name="get_home_info", methods={"POST"})
*
*/
public function getHomeInfo(Request $request, ManagerRegistry $doctrine, $lang): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyHomeAgent = $em->getRepository(ApiAgencyHomeAgent::class);
$apiAgencyHomeImage = $em->getRepository(ApiAgencyHomeImage::class);
$apiAgencyHomeOnePage = $em->getRepository(ApiAgencyHomeOnePage::class);
$apiAgencySlider = $em->getRepository(ApiAgencySlider::class);
$emAdmin = $doctrine->getManager("admin");
$agencyLicense = $emAdmin->getRepository(AgencyLicense::class)->findOneBy(array());
$theme = "";
switch($agencyLicense->getTema()){
case 1:
case "1":
$theme = "agency";
break;
case 2:
case "2":
$theme = "portal";
break;
case 3:
case "3":
$theme = "geoloc";
break;
case 4:
case "4":
$theme = "homemap";
break;
case 5:
case "5":
$theme = "megaimage";
break;
case 6:
case "6":
$theme = "superprop";
break;
case 7:
case "7":
$theme = "megascroll";
break;
case 8:
case "8":
$theme = "lateralscroll";
break;
case 9:
case "9":
$theme = "tabbuscador";
break;
case 10:
case "10":
$theme = "corporate";
break;
case 11:
case "11":
$theme = "agent";
break;
case 12:
case "12":
$theme = "onepage";
break;
}
return new JsonResponse([
"status" => "success",
"theme" => $theme,
"apiAgencyHomeAgent" => $this->container->get('serializer')->normalize($apiAgencyHomeAgent->findOneBy(array("lang" => $lang)), null),
"apiAgencyHomeImage" => $this->container->get('serializer')->normalize($apiAgencyHomeImage->findOneBy(array()), null),
"apiAgencyHomeOnePage" => $this->container->get('serializer')->normalize($apiAgencyHomeOnePage->findOneBy(array("lang" => $lang)), null),
"apiAgencySlider" => $this->container->get('serializer')->normalize($apiAgencySlider->findBy(array()), null)
]);
}
/**
* @Route("/page/saveImg", name="save_image", methods={"POST"})
*
*/
public function saveImage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
$response = new JsonResponse();
if (!$user) {
return $this->redirectToRoute('app_login');
}
if (!empty($request->getContent())) {
$post = (array) json_decode($request->getContent());
if (count($post) == 0) {
$post = (array) $request->request->all();
}
} else {
$post = (array) $request->request->all();
}
$proportions = $post["height"]."x".$post["width"];
$imageFile = $_FILES["file"];
$fileNameExploded = explode(".", $imageFile["name"]);
$fileType = array_pop($fileNameExploded);
$fileName = implode(".",$fileNameExploded);
//Mirar que fiqui MB
$size = "";
$calcSize = intval(round($imageFile["size"]/1000, 0, PHP_ROUND_HALF_UP));
if($calcSize >= 1000){
$size = round($calcSize/1000, 0, PHP_ROUND_HALF_UP)."MB";
}else{
$size = $calcSize."KB";
}
$em = $doctrine->getManager();
try{
//Check if image exists
$destino = 'images/web/' . $imageFile["name"];
if(file_exists($destino)){
$randomNum = rand(10000,99999);
$destino = 'images/web/'.$randomNum.'_'.$imageFile["name"];
$fileName = $randomNum.'_'.$fileName;
}
clearstatcache();
//Save the image
$moved = move_uploaded_file($imageFile['tmp_name'], $destino);
if($moved){
$apiImage = new ApiImages();
$apiImage->setName($fileName);
$apiImage->setSize($size);
$apiImage->setDate(new \DateTime("now"));
$apiImage->setProportions($proportions);
$apiImage->setType($fileType);
$em->persist($apiImage);
$em->flush();
}
$response->setStatusCode(200);
$response->setData(array(
"status" => "success",
"id" => $apiImage->getId(),
"size" => $apiImage->getSize(),
"proportions" => $apiImage->getProportions(),
"date" => date_format($apiImage->getDate(), "d/m/Y"),
"url" => (empty($_SERVER['HTTPS']) ? 'http' : 'https') . "://$_SERVER[HTTP_HOST]"."/images/web/".$apiImage->getName().".".$apiImage->getType(),
"name" => $apiImage->getName(),
"type" => $apiImage->getType()
));
}catch(\Exception $e){
$response->setStatusCode(500);
$response->setData(array(
"status" => "failed",
"message" => $e->getMessage()." - ".$e->getLine()
));
}
return $response;
}
/**
* @Route("/updateImageTitle", name="update_image_title", methods={"GET"})
*
*/
public function updateImageTitle(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
$response = new JsonResponse();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$oldName = $request->get("oldTitle");
$newName = $request->get("newTitle");
$response = new JsonResponse();
$em = $doctrine->getManager();
try{
$imageToUpdate = $em->getRepository(ApiImages::class)->findOneBy(array("name" => $oldName));
$imageToUpdate->setName($newName);
$em->persist($imageToUpdate);
$em->flush();
$path = "images/web/";
$imageExtension = $imageToUpdate->getType();
rename($path.$oldName.".".$imageExtension, $path.$newName.".".$imageExtension);
$response->setStatusCode(200);
$response->setData(array(
"status" => "success",
));
}catch(\Exception $e){
$response->setStatusCode(500);
$response->setData(array(
"status" => "failed",
));
}
return $response;
}
/**
* @Route("/menu", name="menu_management_page", methods={"GET"})
*
*/
public function menuManagementPage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyLangRepo = $em->getRepository(ApiAgencyLang::class);
$apiPagesRepo = $em->getRepository(ApiPages::class);
$apiOrderPagesRepo = $em->getRepository(ApiOrderPages::class);
$apiMenuRepo = $em->getRepository(ApiMenu::class);
$langPredeterminado = $apiAgencyLangRepo->findOneBy(array("predeterminado" => 1));
$pages = $apiPagesRepo->findBy(array("lang" => $langPredeterminado->getCod(), "status" => 1));
//TO DO - Crear una pagina per menu
$menus = $apiMenuRepo->findAll();
$pagesOfMenu = $apiOrderPagesRepo->findBy(array("menu" => $menus),array("order" => "ASC"));
$menuPages = array();
foreach($pagesOfMenu as $pageMenu){
array_push($menuPages,$pageMenu->getPage()->getGroupPage());
}
$pages = $apiPagesRepo->findNotAdded($langPredeterminado->getCod(), 1, $menuPages);
return $this->render('main/private/menu.html.twig', [
"user" => $user,
"pages" => $pages,
"page_active" => "menu",
"menus" => $menus,
"menuPages" => $pagesOfMenu,
"predeterminado" => $langPredeterminado
]);
}
/**
* @Route("/menu/save", name="menu_management_save_menu", methods={"POST"})
*
*/
public function saveMenu(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
if (!empty($request->getContent())) {
$post = (array) json_decode($request->getContent());
if (count($post) == 0) {
$post = (array) $request->request->all();
}
} else {
$post = (array) $request->request->all();
}
$em = $doctrine->getManager();
$now = new \DateTime();
$apiMenuRepo = $em->getRepository(ApiMenu::class);
$apiPagesRepo = $em->getRepository(ApiPages::class);
$menuExists = $apiMenuRepo->findOneBy(array("name" => $post['menuName']));
$response = array(
"status" => "error",
"type" => "error",
"message" => "Ocurrió un error"
);;
if($menuExists){
try{
if($menuExists->getName() != $post['menuName']){
$menuExists->setName($post['menuName']);
$em->persist($menuExists);
$em->flush();
}
$apiOrderPagesRepo = $em->getRepository(ApiOrderPages::class);
$pagesOfMenu = $apiOrderPagesRepo->findBy(array("menu" => $menuExists));
if(count($pagesOfMenu) > count($post['ids'])){
foreach($pagesOfMenu as $key => $pMenu){
$pId = $pMenu->getPage()->getId();
if(!in_array($pId, $post['ids'])){
$em->remove($pMenu);
$em->flush();
}
}
}
foreach($post['ids'] as $key => $pageId){
$parentRelation = $post["parentChild"][$key];
$page = $apiPagesRepo->findOneBy(array("id" => $pageId));
$pageParent = null;
if($parentRelation["parent"] != 0)$pageParent = $apiPagesRepo->findOneBy(array("id" => $parentRelation["parent"]));
$orderPage = $apiOrderPagesRepo->findOneBy(array("page" => $page));
if($orderPage){
$orderPage->setOrder($key);
$orderPage->setParentId($pageParent);
}else{
$orderPage = new ApiOrderPages();
$orderPage->setMenu($menuExists);
$orderPage->setPage($page);
$orderPage->setOrder($key);
$orderPage->setParentId($pageParent);
}
$em->persist($orderPage);
$em->flush();
}
}catch(\Exception $e){
return new JsonResponse($response);
}
}else{
try{
$menu = new ApiMenu();
$menu->setName($post['menuName']);
$menu->setDateCreated($now);
$em->persist($menu);
$em->flush();
foreach($post['ids'] as $key => $pageId){
$page = $apiPagesRepo->findOneBy(array("id" => $pageId));
$parentRelation = $post["parentChild"][$key];
$pageParent = null;
if($parentRelation["parent"] != 0)$pageParent = $apiPagesRepo->findOneBy(array("id" => $parentRelation["parent"]));
$orderPage = new ApiOrderPages();
$orderPage->setPage($page);
$orderPage->setOrder($key);
$orderPage->setMenu($menu);
$orderPage->setParentId($pageParent);
$em->persist($orderPage);
$em->flush();
}
}catch(\Exception $e){
$response = array(
"status" => "failed",
"type" => "danged",
"message" => $e->getMessage(),
"line" => $e->getLine()
);
return new JsonResponse($response);
}
}
$response = array(
"status" => "success",
"type" => "success",
"message" => "Información actualizada correctamente"
);
return new JsonResponse($response);
}
/**
* @Route("/property", name="property_management_page", methods={"GET"})
*
*/
public function propertyManagementPage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyLangRepo = $em->getRepository(ApiAgencyLang::class);
$apiPagesRepo = $em->getRepository(ApiPages::class);
$apiPropertiesRepo = $em->getRepository(ApiProperties::class);
$apiPropertiesSubI18nRepo = $em->getRepository(ApiPropertiesSubtypesI18n::class);
$apiPropertiesSupertypeI18nRepo = $em->getRepository(ApiPropertiesSupertypeI18n::class);
$apiLocationsRepo = $em->getRepository(ApiLocations::class);
$apiProvincesRepo = $em->getRepository(ApiProvinces::class);
$apiTipusOperacioRepo = $em->getRepository(TipusOperacio::class);
$apiPropertiesI18nRepo = $em->getRepository(ApiPropertiesI18n::class);
$apiPropertiesFeaturesRepo = $em->getRepository(ApiPropertiesFeatures::class);
$apiFeaturesRepo = $em->getRepository(ApiFeatures::class);
$textosRepo = $em->getRepository(Textos::class);
$langPredeterminado = $apiAgencyLangRepo->findOneBy(array("predeterminado" => 1));
$traducciones = $textosRepo->getBulkTextsByIdLang(array("cercador_lloguer", "tabs_venda", "destacado", "llistat_d_immobles", "size", "preu_m2", "fitxa_habitacions", "signia_banys", "date_days", "date_since"), $langPredeterminado->getCod());
$properties = $apiPropertiesRepo->findAll();
$allProperties = array();
foreach($properties as $property){
$prop = array();
$prop['id'] = $property->getId();
//Titulo
$propertySubtype = $apiPropertiesSubI18nRepo->findOneBy(array("id" => $property->getIdPropertiesSubtype(), "codLang" => $langPredeterminado->getCodComplete() ));
$title = $propertySubtype->getText() . ', ' . Utilities::formatPropertyNumbers(($property->getSuperfConstr() ? $property->getSuperfConstr() : $property->getSuperfUtil()), 'm<sup>2</sup>'). ', ' . $property->getSituacionConcreta();
$prop['title'] = $title;
//Localidad
$location = $apiLocationsRepo->findOneBy(array("id" => $property->getLocalidad()));
$prop['location'] = $location->getName();
//Provincia
$province = $apiProvincesRepo->findOneBy(array("id" => $property->getProvincia()));
$prop['province'] = $province->getName();
//Descripcion
$description = $apiPropertiesI18nRepo->findOneBy(array("id" => $property->getId(), "codLang" => $langPredeterminado->getCodComplete()));
$prop['description'] = strlen($description->getAnuncio()) >= 70 ? substr($description->getAnuncio(),0, 200)."..." : $description->getAnuncio();
//Precio m2
$prop['preciom2'] = Utilities::formatPropertyNumbers(round(($property->isAlquiler() ? $property->getPrecioAlquiler() : $property->getPrecio()) / intval(($property->getSuperfConstr() ? $property->getSuperfConstr() : $property->getSuperfUtil()))), '€');
//M2
$prop['superficie'] = Utilities::formatPropertyNumbers(intval($property->getSuperfConstr() ? $property->getSuperfConstr() : $property->getSuperfUtil()),'m<sup>2</sup>');
//Habitacions i banys
$features = $apiPropertiesFeaturesRepo->findBy(array("idProperty" => $property->getId()));
$prop["banios"] = 0;
$prop["dormitorios"] = 0;
if($features){
foreach($features as $feature){
if($feature->getIdFeature() == 3){
$prop["banios"] = $feature->getValue();
}else if($feature->getIdFeature() == 4){
$prop["dormitorios"] = $feature->getValue();
}
}
}
//Precios
$prop['precio'] = Utilities::formatPropertyNumbers(($property->isAlquiler() ? $property->getPrecioAlquiler() : $property->getPrecio()), '€');
$prop['precioAnterior'] = Utilities::formatPropertyNumbers(($property->isAlquiler() ? $property->getPrecioAlquilerAnterior() : $property->getPrecioAnterior()), '€');
//Fecha
$now = new Datetime();
$prop['fechaUpdate'] = ($now->diff($property->getFechaUpdate())->days);
$prop['alquiler'] = $property->isAlquiler();
$prop['destacado'] = $property->isDestacado();
$prop['img'] = $this->DOMINI_APIBCN_FOTOS.'fotos'.round($prop["id"]/20000).'/'.$prop["id"].'/foto_1.jpg';
//Tipo Operacion
if($property->isEsLloguerTemporada())
$codiTipu = 7;
elseif($property->isEsBanc())
$codiTipu = 4;
elseif($property->isObraNueva())
$codiTipu = 3;
elseif($property->isAlquiler())
$codiTipu = 1;
else
$codiTipu = 2;
$tipusOp = $apiTipusOperacioRepo->get_friendly_by_codi(mb_strtoupper($langPredeterminado->getCod()), $codiTipu);
//Supertype
$superType = $apiPropertiesSupertypeI18nRepo->findOneBy(array("id" => $property->getIdPropertiesSupertype(), "codLang" => $langPredeterminado->getCodComplete()));
$prop["urlDetail"] = '/'.$langPredeterminado->getCod().'/'.$tipusOp.'/'.$superType->getFriendly().'/'.$province->getFriendly().'/'.$location->getFriendly().'/'.$prop['id'];
array_push($allProperties, $prop);
}
// dd($traducciones);
return $this->render('main/private/property.html.twig', [
"user" => $user,
"properties" => $allProperties,
"traducciones" =>$traducciones,
"page_active" => "property",
"predeterminado" => $langPredeterminado
]);
}
/**
* @Route("/property/highlight", name="property_highlight_management_page", methods={"GET"})
*
*/
public function highlightProperty(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$propertyId = $request->get("id");
$em = $doctrine->getManager();
$apiPropertiesRepo = $em->getRepository(ApiProperties::class);
try{
$property = $apiPropertiesRepo->find($propertyId);
$property->isDestacado() ? $property->setDestacado(false) : $property->setDestacado(true);
$em->persist($property);
$em->flush();
}catch(\Exception $e){
return new JsonResponse([
"status" => "failed",
"error" => $e->getMessage()
], 500);
}
return new JsonResponse([
"status" => "success",
"message" => "Propiedad destacada correctamente",
"destacado" => $property->isDestacado()
], 200);
}
/**
* @Route("/analytics", name="analytics_management_page", methods={"GET"})
*
*/
public function analyticsManagementPage(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$apiAgencyLangRepo = $em->getRepository(ApiAgencyLang::class);
$langPredeterminado = $apiAgencyLangRepo->findOneBy(array("predeterminado" => 1));
return $this->render('main/private/analytics.html.twig', [
"user" => $user,
"page_active" => "analytics",
"predeterminado" => $langPredeterminado
]);
}
/**
* @Route("/tracking/chartsData", name="analytics_management_page_chat_data", methods={"POST"})
*
*/
public function chartDataInfo(Request $request, ManagerRegistry $doctrine): Response
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$trackingRepo = $em->getRepository(Tracking::class);
$trackClick = $trackingRepo->getTrackingCount(1);
$trackPages = $trackingRepo->getTrackingCount(0);
$pagesAverage = $trackingRepo->getPagesAvgCount(0);
$pagesByMonth = $trackingRepo->getPagesByMonth();
// dd($trackPages);
return new JsonResponse([
"status" => "success",
"clicks" => $trackClick,
"pages" => $trackPages,
"pagesAverage" => $pagesAverage,
"pagesMonth" => $pagesByMonth
]);
}
/**
* @Route("/plugins/getOwnPlugins", name="get_own_plugins", methods={"POST"})
*
*/
public function getOwnPlugins(Request $request, ManagerRegistry $doctrine){
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$em = $doctrine->getManager();
$pluginsRepo = $em->getRepository(Plugins::class);
$pluginGroupsRepo = $em->getRepository(PluginGroups::class);
try{
$pluginsData = $pluginsRepo->findAllPlugins();
$plugins = array();
$pluginGroups = array();
foreach($pluginsData as $pData){
$plugins[$pData["name"]] = [
"id" => $pData["id"],
"pluginGroupName" => $pData["groupName"],
"pluginGroupId" => $pData["groupId"],
"pluginGroupSort" => $pData["groupSort"],
"sort" => $pData["sort"]
];
if(!isset($pluginGroups[$pData["groupName"]])){
$pluginGroups[$pData["groupName"]] = [
"id" => $pData["groupId"],
"name" => $pData["groupName"],
"sort" => $pData["groupSort"]
];
}
}
}catch(\Exception $e){
return new JsonResponse([
"status" => "error",
"message" => $e->getMessage()
]);
}
return new JsonResponse([
"status" => "success",
"plugins" => $plugins,
"pluginGroups" => $pluginGroups
]);
}
/**
* @Route("/page/preview", name="private_page_preview", methods={"GET"})
*
*/
public function previewPage(Request $request, ManagerRegistry $doctrine){
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
$content = $request->getSession()->get("urlPagePreview");
// dd($content);
$em = $doctrine->getManager();
$apiAgencyRepo = $em->getRepository(ApiAgency::class);
$lang = $em->getRepository(ApiAgencyLang::class)->findOneBy(array("predeterminado" => 1));
$agency = $apiAgencyRepo->findOneBy(array());
return $this->render('main/private/pages/previewPage.html.twig', [
"user" => $user,
"lang" => $lang,
"agency" => $agency,
"content" => json_decode($content)
]);
}
/**
* @Route("/page/preview/session", name="private_page_preview_session", methods={"POST"})
*
*/
public function pageSetSession(Request $request, ManagerRegistry $doctrine){
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('app_login');
}
if (!empty($request->getContent())) {
$post = (array) json_decode($request->getContent());
if (count($post) == 0) {
$post = (array) $request->request->all();
}
} else {
$post = (array) $request->request->all();
}
$request->getSession()->set("urlPagePreview-".$post["id"], $post["html"]);
$request->getSession()->set("urlPagePreviewJson-".$post["id"], $post["json"]);
$request->getSession()->set("urlPagePreview-".$post["slug"], $post["html"]);
$request->getSession()->set("urlPagePreviewJson-".$post["slug"], $post["json"]);
return new JsonResponse();
}
/****************************************************************/
/* HELPERS */
/****************************************************************/
public function typeSelector($name, $type)
{
$now = new DateTime('now');
$hash = md5($name . $now->format('YmdHis'));
switch ($type) {
case 'image/png':
return $hash . '.png';
break;
case 'image/jpeg':
return $hash . '.jpeg';
break;
case 'video/quicktime':
return $hash . '.mov';
break;
case 'video/mp4':
return $hash . '.mp4';
break;
default:
return false;
break;
}
}
}