<?php
declare(strict_types=1);
namespace App\Controller\Contact;
use Symfony\Component\HttpFoundation\{
Request,
Response,
RedirectResponse
};
use Symfony\Component\Routing\Annotation\Route;
use App\Common\Controllers\CrmAbstractController;
use App\Form\Contact\Type\ContactSearchType;
use App\Services\Contact\{ContactService, ContactSearchService};
use App\Entity\Contact;
class ContactSearchFormController extends CrmAbstractController
{
private const TEMPLATE_FOLDER = 'contact/contact_search/';
/**
* @see CrmAbstractController
*/
protected function initModuleDetails(): array
{
return [
'entityClassName' => Contact::class,
'formClassName' => ContactSearchType::class,
'moduleService' => ContactService::class,
'modulePrefix' => 'contact_search',
'moduleTemplate' => self::TEMPLATE_FOLDER,
'hasFilter' => false,
'useIndexMode' => true,
];
}
#[Route(
'/contact-management/contact-search/form',
name: 'contact_management_contact_search_form',
methods: ['GET'],
options: ['expose' => true])
]
public function index(Request $request): Response
{
$form = $this->createForm($this->formClassName, (new Contact()));
return $this->render(
$this->moduleTemplate . 'index.html.twig', [
'form' => $form->createView(),
'module' => ContactSearchType::MODULE_CONTACT_SEARCH,
]
);
}
#[Route(
'/contact-management/contact-search/form',
name: 'contact_management_contact_set_search_form',
methods: ['POST'],
options: ['expose' => true])
]
public function setSearchCriteria(Request $request, ContactSearchService $contactSearchService): Response
{
$contactSearchCriteria = $contactSearchService->getSearchFormCriteria();
$session = $request->getSession();
$session->set('hasContactSearch', true);
$session->set('contactSearchCriteria', $contactSearchCriteria);
if ($session->has('contact_contact_keyword')) {
$session->remove('contact_contact_keyword');
}
return new Response();
}
#[Route(
'/contact-management/contact-search/remove-search',
name: 'contact_management_contact_search_remove',
methods: ['GET'],
options: ['expose' => true])
]
public function delete(Request $request): RedirectResponse
{
$session = $request->getSession();
$session->set('hasContactSearch', false);
if ($session->has('contactSearchCriteria')) {
$session->remove('contactSearchCriteria');
}
return $this->redirectToRoute('contact_management_contact_management_index');
}
#[Route(
'/contact-management/contact-search/csv-export',
name: 'contact_management_contact_search_csv_export',
options: ['expose' => true])
]
public function csvExport(Request $request, ContactService $contactService): Response
{
return parent::csvExportResponse(
$request,
$contactService,
$contactService->getCsvExportFilename()
);
}
}