<?php
namespace App\Controller\FrontEnd;
use App\classe\Mails;
use App\classe\Search;
use App\Entity\Admin\Property;
use App\Entity\Emails;
use App\Form\EmailType;
use App\Form\SearchType;
use App\Repository\Admin\PropertyRepository;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class PropertyController extends AbstractController
{
private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em)
{
return $this->em = $em;
}
#[Route('/front/end/property', name: 'frontend_property')]
public function index(PropertyRepository $repository, Request $request, PaginatorInterface $paginator): Response
{
$search = new Search();
$form = $this->createForm(SearchType::class, $search);
$form->handleRequest($request);
//Liste de tout les biens
$dataProperty = $repository->findBy(array(),orderBy: ["createdAt"=>"DESC"] );
$property = $paginator->paginate(
$dataProperty,
$request->query->getInt('page',1),
12
);
//liste de tout les bien à vendre uniquement
$datapropertyTosel = $repository->findBy(["isToSale"=>1],orderBy: ["createdAt"=>"DESC"]);
$propertyTosel = $paginator->paginate(
$datapropertyTosel,
$request->query->getInt('page', 1),
12
);
//liste des biens à louer
$datapropertyTorent = $repository->findBy(["isRent"=>1],orderBy: ["createdAt"=>"DESC"]);
$propertyTorent = $paginator->paginate(
$datapropertyTorent,
$request->query->getInt('page', 1),
12
);
if ($form->isSubmitted() && $form->isValid()){
$dataProperty = $repository->findWidthSearch($search);
$property = $paginator->paginate(
$dataProperty,
$request->query->getInt('page',1),
12
);
}
return $this->render('front_end/property/index.html.twig', [
'controller_name' => 'PropertyController',
'property'=>$property,
'propertyTosel'=> $propertyTosel,
'propertyTorent'=>$propertyTorent,
'Form'=>$form->createView()
]);
}
/**
* @param Property $property
* @param Request $request
* @param Mails $mails
* @return Response
*/
#[Route('/front/end/property/{slug}', name: "front_property_show")]
public function showProperties(Property $property, Request $request, Mails $mails): Response
{
$email = new Emails();
$form = $this->createForm(EmailType::class, $email);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$email->setProperties($property);
$email->setCreatedAt(new DateTime('now'));
$this->em->persist($email);
$this->em->flush();
$this->addFlash('success', "Votre E-mail à été envoyer avec succès!");
//Evoie de l'E-mail
$subject = "SCI CAWALLY Une personne demande des informations sur cet bien: ".$property->getTitle();
$content = "<p>Une personne demande des informations sur un bien sur votre site internet SCI CWALLY. Ci-dessous les détailles de la demande </p>
<strong>Bien Concerné:</strong>".$property->getTitle().
"<br/><br/><strong>Nom du demandeur:</strong> ".$email->getNameFirstName().
"<br/><br/> <strong>Numéro de Téléphone: </strong>".$email->getTel();
$content .="<br/><br/> <strong>E-mail: </strong> ".$email->getMail().
"<br/><br/><strong>Ville : <strong/> ".$property->getCity().
" <strong> Quatier: </strong> ".$property->getQuatier()."<br/><br/>".
"<strong> Type du bien: </strong>".$property->getPropertyTypes()->getTitle().
"<br/><br/> <strong>Le message est: </strong> ".$email->getMessage();
$mails->sendMail($subject, $content);
}
return $this->render('front_end/property/show.html.twig',[
'controller_name' => 'PropertyController',
'properties'=>$property,
'Form'=>$form->createView()
]);
}
}