<?php
namespace App\Controller;
use App\Entity\CrmContact;
use App\Form\BannedIpsForm;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\Filters\CompanyContactFilter;
use App\Form\Filters\ManageMemberRequestFilter;
use App\Repository\CompanyContactRepository;
use App\Service\ServiceStorage;
#[Route('/request/new-join-requests')]
class MemberRequestController extends AbstractController
{
#[Route('/', defaults: ['page' => '1'], methods: ['GET'], name: 'quote_request_index')]
#[Route('/page/{page<[1-9]\d*>}', methods: ['GET'], name: 'quote_request_index_paginated')]
#[Cache(smaxage: 10)]
public function quoteindex(Request $request,int $page,EntityManagerInterface $entityManager,CompanyContactRepository $companyContactRepository): Response
{
$params = $request->query->all();
$filter =[];
$filterForm = $this->createForm(ManageMemberRequestFilter::class);
if(isset($params['name_email'])) {
$filterForm['name_email']->setData($params['name_email']);
$filter['name_email'] = $params['name_email'];
}
if(isset($params['phone_number'])) {
$filterForm['phone_number']->setData($params['phone_number']);
$filter['phone_number'] = $params['phone_number'];
}
if(isset($params['solved'])) {
$filterForm['solved']->setData($params['solved']);
$filter['solved'] = $params['solved'];
}
if(isset($params['createdAt'])) {
$filterForm['createdAt']->setData($params['createdAt']);
$filter['createdAt'] = $params['createdAt'];
}
$data = $companyContactRepository->adminPaginatorFetchAllContact($page, $filter);
return $this->render('quote-request/index.html.twig', [
'member_request' => false,
'paginator' => $data,
'page' => $page,
'filter' => $filter,
'form' => $filterForm->createView(),
]);
}
#[Route('/unsolve/{id}', name: 'member_request_unsolve', methods: ['POST','GET'])]
public function unsolve(Request $request, CrmContact $companyContact, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('unsolve'.$companyContact->getId(), $request->request->get('_token'))) {
$type = $companyContact->getType();
$companyContact->setSolved(0);
$entityManager->persist($companyContact);
$entityManager->flush();
if($type == 'member_request'){
return $this->redirectToRoute('help_and_support_index', [], Response::HTTP_SEE_OTHER);
}else if($type == 'contact'){
return $this->redirectToRoute('quote_request_index', [], Response::HTTP_SEE_OTHER);
}
else{
return $this->redirectToRoute('help_and_support_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('member-request/_unsolve_form.html.twig', [
'companyContact' => $companyContact,
]);
}
#[Route('/solve/{id}', name: 'member_request_solve', methods: ['POST','GET'])]
public function solve(Request $request, CrmContact $companyContact, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('solve'.$companyContact->getId(), $request->request->get('_token'))) {
$type = $companyContact->getType();
$companyContact->setSolved(1);
$entityManager->persist($companyContact);
$entityManager->flush();
if($type == 'member_request'){
return $this->redirectToRoute('help_and_support_index', [], Response::HTTP_SEE_OTHER);
}else if($type == 'contact'){
return $this->redirectToRoute('quote_request_index', [], Response::HTTP_SEE_OTHER);
}
else{
return $this->redirectToRoute('help_and_support_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('member-request/_solve_form.html.twig', [
'companyContact' => $companyContact,
]);
}
/* #[Route('/solve/{id}', name: 'member_request_solve', methods: ['POST'])]
public function solve(Request $request, CrmContact $companyContact, EntityManagerInterface $entityManager): Response
{
$content = '';
if($companyContact->getSolved() == 1){
$companyContact->setSolved(0);
$content = '<i class="fa-regular fa-circle-xmark fs-4 link-danger"></i>';
}else{
$companyContact->setSolved(1);
$companyContact->setIsRead(1);
$content = '<i class="fa-regular fa-circle-check fs-4 link-success"></i>';
}
$entityManager->persist($companyContact);
$entityManager->flush();
$response = new Response($content);
$response->headers->set('Content-Type', 'text/html');
return $response;
} */
#[Route('/delete-quote-request/{id}', name:'delete_quote_request', methods:['POST', 'GET'])]
public function deleteQuoteRequest(Request $request, CrmContact $companyContact, EntityManagerInterface $entityManager): Response{
if ($this->isCsrfTokenValid('delete'.$companyContact->getId(), $request->request->get('_token'))) {
if($request->isMethod('POST')){
$entityManager->remove($companyContact);
$entityManager->flush();
$this->addFlash('error', 'Delete successfully.');
if($request->request->get('redirect_page')){
return $this->redirectToRoute('quote_request_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('quote_request_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('quote-request/_delete_form.html.twig', [
'crm_contact' => $companyContact,
'redirect_page' => $request->query->get('redirect_page')
]);
}
#[Route('/delete-request/{id}', name:'delete_request', methods:['POST', 'GET'])]
public function deleteRequest(Request $request, CrmContact $companyContact, EntityManagerInterface $entityManager): Response{
if ($this->isCsrfTokenValid('delete'.$companyContact->getId(), $request->request->get('_token'))) {
if($request->isMethod('POST')){
$entityManager->remove($companyContact);
$entityManager->flush();
$this->addFlash('error', 'Delete successfully.');
if($request->request->get('redirect_page')){
return $this->redirectToRoute('help_and_support_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('help_and_support_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('member-request/_delete_form.html.twig', [
'crm_contact' => $companyContact,
'redirect_page' => $request->query->get('redirect_page')
]);
}
#[Route('/image-download-storage/{storageId}', name:'image_download_storage', methods:['POST', 'GET'])]
public function imageDownloadFromStorage(Request $request, $storageId, EntityManagerInterface $entityManager,ServiceStorage $serviceStorage): Response{
$imgObj = $entityManager->getRepository(\App\Entity\CrmStorages::class)->findOneBy(array('storageId' => $storageId));
if(!$imgObj){
return $this->redirectToRoute('quote_request_index', [], Response::HTTP_SEE_OTHER);
}else{
//$filepath = $serviceStorage->getFileUrl($storageId);
$filepath = $serviceStorage->getFileUrl($storageId);
$filename = $imgObj->getName();
$response = new Response();
$response->headers->set('Content-type', 'application/force-download');
$response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"',$filename));
$response->setContent(file_get_contents($filepath));
$response->setStatusCode(200);
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Pragma', 'public');
$response->headers->set('Expires', '0');
$response->headers->set('Cache-Control', 'must-revalidate');
return $response;
}
}
#[Route('/view-request/{id}', name:'view_request', methods:['POST', 'GET'])]
public function viewRequest(Request $request, CrmContact $companyContact, EntityManagerInterface $entityManager): Response{
$companyContact->setIsRead(1);
$entityManager->persist($companyContact);
$entityManager->flush();
return $this->renderForm('member-request/view.html.twig', [
'crm_contact' => $companyContact,
'redirect_page' => $request->query->get('redirect_page')
]);
}
}