<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\Office;
use App\Entity\Organization;
use App\Entity\Objective;
use App\Entity\Appraisal;
use App\Entity\Notification;
use App\Entity\AppraisalQuestionnaire;
use App\Entity\Certification;
use App\Entity\FlexiWorkArrangementRequest;
use App\Form\ObjectiveType;
use App\Form\CVType;
use App\Form\CertificationType;
use App\Form\AppraisalRequestType;
use App\Form\FlexiWorkArrangementRequestType;
use App\Form\FlexiWorkArrangementSigningType;
use App\Repository\UserRepository;
use App\Service\NotificationService;
use App\Service\UtilsService;
use App\Service\MailgunService;
use App\Service\UploadService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Yaml\Yaml;
use Symfony\Contracts\Translation\TranslatorInterface;
class MainController extends AbstractController
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
#[Route(path: '/', name: 'index')]
public function index(EntityManagerInterface $entityManager): \Symfony\Component\HttpFoundation\Response
{
$user = $this->getUser();
//$notification->check($user);
$emailForm = $this->createFormBuilder()
->add('email', HiddenType::class, [
'required' => true,
])->add('subject', HiddenType::class, [
'required' => true,
])->add('message', TextareaType::class, [
'required' => true,
'attr' => array('rows' => 12),
'label' => 'Message',
])->add('anonymous', HiddenType::class, [
'required' => true,
/*])->add('attachment', FileType::class, [
'required' => false,
'mapped' => false,
'attr' => array('maxlength' => 255),*/
])->add('submit', SubmitType::class, array('label' => 'form.send'))
->getForm();
return $this->render('private/dashboard.html.twig', [
'offices' => $user->assignedCompany()->getOffices(),
'emailForm' => $emailForm->createView()
]);
//return $this->redirectToRoute('index');
}
#[Route(path: '/404', name: 'error_404')]
public function error_404(NotificationService $notification): \Symfony\Component\HttpFoundation\Response
{
$user = $this->getUser();
//$notification->check($user);
return $this->render('private/dashboard.html.twig', [
'offices' => $user->assignedCompany()->getOffices()
]);
//return $this->redirectToRoute('index');
}
#[Route(path: '/assets/translation.js', name: 'js_translations')]
public function jsTranslations(Request $request)
{
$locale = $request->getLocale();
$file = $this->getParameter('root') . '/translations/messages.' . $locale . '.yaml';
$parsed = Yaml::parse(file_get_contents($file));
$translations = $this->renderView(
'assets/translations.js.twig',
array(
'json' => json_encode($parsed)
)
);
return new Response(
$translations,
\Symfony\Component\HttpFoundation\Response::HTTP_OK,
array('Content-Type' => 'text/javascript')
);
}
#[Route(path: '/team', name: 'team')]
function team(): \Symfony\Component\HttpFoundation\Response
{
$user = $this->getUser();
return $this->render('private/team/overview.html.twig', [
'offices' => $user->assignedCompany()->getOffices()
]);
}
#[Route(path: '/qna', name: 'qna')]
function qna(): \Symfony\Component\HttpFoundation\Response
{
$user = $this->getUser();
return $this->render('private/team/overview.html.twig', [
'offices' => $user->assignedCompany()->getOffices()
]);
}
#[Route(path: '/manager', name: 'manager')]
function manager(): \Symfony\Component\HttpFoundation\Response
{
$user = $this->getUser();
$fwa = new FlexiWorkArrangementRequest();
$formFWA = $this->createForm(FlexiWorkArrangementRequestType::class, $fwa, [
'action' => $this->generateUrl('request_fwa')
]);
$formFWA = $formFWA->createView();
$formSignFWA = $this->createForm(FlexiWorkArrangementSigningType::class, $fwa, [
'action' => $this->generateUrl('sign_fwa')
]);
$formSignFWA = $formSignFWA->createView();
return $this->render('private/manager/overview.html.twig', [
'subordinates' => $user->getSubordinates(),
'formSignFWA' => isset($formSignFWA) ? $formSignFWA : false,
]);
}
#[Route(path: '/settings/fwa', name: 'fwa_settings')]
function settingsFWA(): \Symfony\Component\HttpFoundation\Response
{
$user = $this->getUser();
$fwa = new FlexiWorkArrangementRequest();
$formFWA = $this->createForm(FlexiWorkArrangementRequestType::class, $fwa, [
'action' => $this->generateUrl('request_fwa')
]);
$formFWA = $formFWA->createView();
$formSignFWA = $this->createForm(FlexiWorkArrangementSigningType::class, $fwa, [
'action' => $this->generateUrl('sign_fwa')
]);
$formSignFWA = $formSignFWA->createView();
$subordinates = '';
if($this->isGranted('ROLE_HR')){
$subordinates = $user->assignedCompany()->getAllUser();
}else{
$subordinates = $user->getSubordinates();
}
// $subordinates = $user->getSubordinates();
return $this->render('private/fwa/overview.html.twig', [
'subordinates' => $subordinates,
// 'subordinates' => $user->getSubordinates(),
'formSignFWA' => isset($formSignFWA) ? $formSignFWA : false,
]);
}
#[Route(path: '/profile/{_id}', defaults: ['_id' => 'default'], name: 'user_profile')]
public function userProfile(string $_id, TranslatorInterface $translator, Request $request)
{
$user = $this->getUser();
$objective = new Objective();
$appraisal = new Appraisal();
$appraisalQuestionnaire = new AppraisalQuestionnaire();
$certification = new Certification();
if ($_id == "default") {
$userData = $user;
} else if (is_numeric($_id)) {
$userData = $this->getDoctrine()->getRepository(User::class)->find($_id);
} else {
$userData = $this->getDoctrine()->getRepository(User::class)->findByEmail($_id);
};
if ($userData == null || $userData->assignedCompany() != $user->assignedCompany()) {
// return $this->redirectToRoute('user_preview_profile', ['_id' => $_id]);
throw new \Exception($translator->trans('messages.security.forbidden'));
}
if ($user->getOffice()->getWorkPermitType() && $user->getOffice()->getWorkPermitType() != '') {
$workPermitTypes = array_map('trim', explode(PHP_EOL, $user->getOffice()->getWorkPermitType()));
$workPermit = $user->getPersonalInfo()->getWorkPermitType() != '' && in_array($user->getPersonalInfo()->getWorkPermitType(), $workPermitTypes) ? $user->getPersonalInfo()->getWorkPermitType() : null;
} else {
$workPermit = null;
};
$formObjective = $this->createForm(ObjectiveType::class, $objective);
$formAppraisal = $this->createForm(AppraisalRequestType::class, $appraisal);
$formCV = $this->createForm(CVType::class, $userData->getPersonalInfo(), [
'action' => $this->generateUrl('upload_cv')
]);
$formCertification = $this->createForm(CertificationType::class, $certification);
$questionnaires = $this->getDoctrine()->getRepository(AppraisalQuestionnaire::class)->findByUser($userData);
$defaultQuestions = $this->getDoctrine()->getRepository(AppraisalQuestionnaire::class)->findByUser($userData);
if ($userData->getOffice()->getWidget()->getFwaVisibility()) {
$fwa = new FlexiWorkArrangementRequest();
$formFWA = $this->createForm(FlexiWorkArrangementRequestType::class, $fwa, [
'action' => $this->generateUrl('request_fwa')
]);
$formFWA = $formFWA->createView();
if ($userData->getManager() == $user || $user->hasRole('ROLE_HR')) {
$formSignFWA = $this->createForm(FlexiWorkArrangementSigningType::class, $fwa, [
'action' => $this->generateUrl('sign_fwa')
]);
$formSignFWA = $formSignFWA->createView();
}
};
$start = $request->query->get('week') ?: null;
if ($user->getId() == $userData->getID() || in_array($user, $userData->getAllManager()) || $this->isGranted('ROLE_HR') && $user->getOffice() == $userData->getOffice() || $this->isGranted('ROLE_HR') && $this->isGranted('ROLE_ACCESS_ALL_OFFICE')) {
return $this->render('private/user/profile.html.twig', [
'userData' => $userData,
'formObjective' => $formObjective->createView(),
'formEditAppraisal' => $formAppraisal->createView(),
'formNewAppraisal' => $formAppraisal->createView(),
'questionnaires' => $questionnaires ? $questionnaires : null,
'defaultQuestions' => $defaultQuestions ? $defaultQuestions : null,
'formCV' => $formCV->createView(),
'formCertification' => $formCertification->createView(),
'formFWA' => isset($formFWA) ? $formFWA : false,
'formSignFWA' => isset($formSignFWA) ? $formSignFWA : false,
//'restrictedContent' => $user->getId() == $userData->getID() || $userData->getManager() == $user || $user->isSubordinate($userData->getId()) || $this->isGranted('ROLE_HR') ? true : false,
//'restrictedContent' => $user->getId() == $userData->getID() || $userData->getManager() == $user || $this->isGranted('ROLE_HR') ? true : false,
'workPermit' => isset($workPermit) ? $workPermit : false,
'start' => $start,
]);
} else if($this->isGranted('ROLE_FINANCE') && $user->getOffice() == $userData->getOffice() || $this->isGranted('ROLE_FINANCE') && $this->isGranted('ROLE_ACCESS_ALL_OFFICE')){
return $this->render('private/user/profile-limited.html.twig', [
'userData' => $userData
]);
} else {
return $this->render('private/user/profile-public.html.twig', [
'userData' => $userData,
'formCV' => $formCV->createView(),
]);
}
}
#[Route(path: '/preview/profile/{_id}', defaults: ['_id' => 'default'], name: 'user_preview_profile')]
public function userProfilePreview(string $_id, TranslatorInterface $translator): \Symfony\Component\HttpFoundation\Response
{
$user = $this->getUser();
if ($_id == "default") {
$userData = $user;
} else if (is_int($_id)) {
$userData = $this->getDoctrine()->getRepository(User::class)->find($_id);
} else {
$userData = $this->getDoctrine()->getRepository(User::class)->findByEmail($_id);
};
if ($userData == null || $userData->assignedCompany() != $user->assignedCompany() || $userData->getIsActive() == false) {
throw new \Exception($translator->trans('messages.security.forbidden'));
}
$formCV = $this->createForm(CVType::class, $userData->getPersonalInfo(), [
'action' => $this->generateUrl('upload_cv')
]);
return $this->render('private/user/profile-public.html.twig', [
'userData' => $userData,
'formCV' => $formCV->createView(),
'preview' => true
]);
}
#[Route(path: '/ajax/filter-user', name: 'ajax_filter_user', methods: 'POST')]
function ajaxFilterUser(Request $request, TranslatorInterface $translator, UtilsService $utilsService, UserRepository $userRepository): JsonResponse
{
$user = $this->getUser();
$data = null;
$result['status'] = 'OK';
/*if ($request->get("o") && $user->assignedCompany() != $office->getCompany()) {
$result['status'] = 'ERROR';
$result['message'] = $translator->trans('messages.security.forbidden');
};*/
if ($result['status'] == 'OK') {
$result['content'] = [];
$registered_users = [];
if($request->get("o") && $request->get("o") == 'team' && $request->get("d") == ''){
$data = $user->getSubordinates();
// $data = $userRepository->findSubordinatesForUser($user);
// dd($data);
}
else if ($request->get("o") && $request->get("o") == 'team' && $request->get("d") != ''){
$subordinatesData = $user->getSubordinates();
$data = [];
foreach ($subordinatesData as $userData) {
$departmentData = $userData->getDepartment()->getId();
if ($departmentData == $request->get("d")) {
$data[] = $userData;
}
}
}
else if ($request->get("o") && $request->get("o") != 'all' && $request->get("d") == '') {
/*$office = $this->getDoctrine()->getRepository(Office::class)->find($request->get("o"));
$data = $office->getUsers();*/
$data = $userRepository->findBy(array('office'=>$request->get("o"),'isActive'=>true));
}
else if ($request->get("d") && $request->get("o") == '') {
if($request->get("d")=='other'){
$data = $userRepository->findBy(array('department'=>null,'isActive'=>true));
}else{
$data = $userRepository->findBy(array('department'=>$request->get("d"),'isActive'=>true));
}
}
else if ($request->get("d") && $request->get("o") && $request->get("o") != 'all') {
if($request->get("d")=='other'){
$data = $userRepository->findBy(array('department'=>null,'office'=>$request->get("o"),'isActive'=>true));
}else{
$data = $userRepository->findBy(array('department'=>$request->get("d"),'office'=>$request->get("o"),'isActive'=>true));
}
/*$office = $this->getDoctrine()->getRepository(Office::class)->find($request->get("o"));
$data = $office->getUserByOfficeDepartment($request->get("d"));*/
}
else {
$data = [];
$office_id = [];
$offices = $user->assignedCompany()->getOffices();
foreach ($offices as $office) {
array_push($office_id, $office->getId());
//array_push($data, $this->getDoctrine()->getRepository(Organization::class)->findByOffice($office->getId()));
};
$data = $user->assignedCompany()->getAllUser();
};
//dd($data);
foreach ($data as $d) {
/*if (method_exists($d, 'getUser')) {
$d = $d->getUser();
}*/
if (method_exists($d, 'getId') && in_array($d->getId(), $registered_users) == false && $d->getIsActive() == true) {
if ($d->getPersonalInfo()->getProfilePicture() == null) {
$image = $d->getTemporaryPicture() ? $d->getTemporaryPicture() : "";
} else {
$image = $utilsService->getFileFromAWS($d->getPersonalInfo()->getProfilePicture());
};
$managerList = '';
$i = 0;
foreach($d->getAllManager() as $manager){
$managerList.= $i == 0 ? 'Supervised by ':', ';
$managerList.= '<a href="'.$this->generateUrl('user_profile',['id'=>$manager->getEmail()]).'">'.$manager->getPersonalInfo()->getFirstName().'</a>';
$i++;
}
if ($request->get("s") == '0' || $d->getStatus() == $request->get("s")) {
if(!is_null($d->getOffice())){
array_push($result['content'], [
'id' => $d->getId(),
'status' => $d->getStatus(),
'statusLabel' => $translator->trans($d->statusLabel()),
'statusColor' => $translator->trans($d->statusColor()),
'image' => $image,
'name' => $d->getPersonalInfo()->getFullName(),
'email' => $d->getEmail(),
'title' => $d->organizationTitles(),
'department' => $d->organizationDepartmentNames(),
'officeId' => $d->getOffice()->getId(),
'officeName' => $d->getOffice()->getFullName(),
'manager' => $managerList,
]);
array_push($registered_users, $d->getId());
}
};
};
};
if (count($result['content']) == 0) {
$result['status'] = 'FAIL';
} else {
$byName = array_column($result['content'], 'name');
array_multisort($byName, SORT_ASC, $result['content']);
}
}
return new JsonResponse($result);
}
#[Route(path: '/ajax/search-user', name: 'ajax_search_user', methods: 'POST')]
function ajaxSearchUser(Request $request, TranslatorInterface $translator, UtilsService $utilsService, UserRepository $userRepository): JsonResponse
{
$user = $this->getUser();
$data = null;
$result['status'] = 'OK';
//$data = $this->getDoctrine()->getRepository(PersonalInfo::class)->findByAnyName($request->get("u"));
if ($request->get("o")) {
if ($request->get("o") == 'team'){
$searchTerm = $request->get('u');
$subordinatesData = $user->getSubordinates();
$data = [];
foreach ($subordinatesData as $userData) {
$personalInfo = $userData->getPersonalInfo();
$firstName = $personalInfo->getFirstName();
$middleName = $personalInfo->getMiddleName();
$lastName = $personalInfo->getLastName();
$fullName = $personalInfo->getFullName();
if (
stripos($firstName, $searchTerm) !== false ||
stripos($middleName, $searchTerm) !== false ||
stripos($lastName, $searchTerm) !== false ||
stripos($fullName, $searchTerm) !== false
) {
$data[] = $userData;
}
}
}else{
//$office = $this->getDoctrine()->getRepository(Office::class)->find($request->get("o"));
$data = $userRepository->findByAnyNameOnSameOffice($request->get("u"), $request->get("o"));
}
} else {
$data = $userRepository->findByAnyNameOnSameCompany($request->get("u"), $user->assignedCompany());
}
if ($data != null) {
$result['content'] = [];
foreach ($data as $d) {
$office = $request->get("o") ? $request->get("o") : true;
if ($d->getIsActive() == true) {
if ($d->getPersonalInfo()->getProfilePicture() == null) {
$image = $d->getTemporaryPicture() ? $d->getTemporaryPicture() : "";
} else {
$image = $utilsService->getFileFromAWS($d->getPersonalInfo()->getProfilePicture());
};
$managerList = '';
$i = 0;
foreach($d->getAllManager() as $manager){
$managerList.= $i == 0 ? '<br/>Supervised by ':', ';
$managerList.= '<a href="'.$this->generateUrl('user_profile',['id'=>$manager->getEmail()]).'">'.$manager->getPersonalInfo()->getFirstName().'</a>';
$i++;
}
array_push($result['content'], [
'id' => $d->getId(),
'statusLabel' => $translator->trans($d->statusLabel()),
'statusColor' => $translator->trans($d->statusColor()),
'image' => $image,
'name' => $d->getPersonalInfo()->getFullName(),
'email' => $d->getEmail(),
'title' => $d->organizationTitles(),
'department' => $d->organizationDepartmentNames(),
'officeId' => $d->getOffice()->getId(),
'officeName' => $d->getOffice()->getFullName(),
'manager' => $managerList,
]);
};
};
if (count($result['content']) > 0) {
$byName = array_column($result['content'], 'name');
array_multisort($byName, SORT_ASC, $result['content']);
} else {
$result['status'] = 'FAIL';
}
} else {
$result['status'] = 'FAIL';
}
return new JsonResponse($result);
}
#[Route(path: '/image/{type}/{file}', name: 'get_image')]
public function getImage($type, $file, TranslatorInterface $translator, UtilsService $utilsService)
{
//$awsFile = $utilsService->getFileFromAWS('/uploads/document/' .$file);
//$headers = get_headers($awsFile);
//if(substr($headers[0], 9, 3) == '200'){
switch ($type) {
case "profile":
$path = $this->getParameter('profilePicture');
break;
case "logo":
$path = $this->getParameter('companyLogo');
break;
}
if ($awsFile = $utilsService->getFileFromAWS($this->getParameter('documentFile') . '/' . $file)) {
$fileName = preg_replace('/^[^_.]{8}_/', '', $file);
$fileName = preg_replace('/_[^_.]*\./', '.', $fileName);
$response = new Response();
$response->headers->set('Content-type', 'image');
$response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $fileName));
$response->setContent(file_get_contents($awsFile));
$response->setStatusCode(\Symfony\Component\HttpFoundation\Response::HTTP_OK);
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Pragma', 'no-cache');
$response->headers->set('Expires', '0');
return $response;
} else {
return new Response(null, \Symfony\Component\HttpFoundation\Response::HTTP_FORBIDDEN);
};
}
#[Route(path: '/download/{type}/{file}', requirements: ['file' => '.+'], name: 'download_file')]
public function downloadFile($type, string $file, TranslatorInterface $translator, UtilsService $utilsService)
{
//$awsFile = $utilsService->getFileFromAWS('/uploads/document/' .$file);
//$headers = get_headers($awsFile);
//if(substr($headers[0], 9, 3) == '200'){
switch ($type) {
case "document":
$path = $this->getParameter('documentFile');
$fileName = preg_replace('/^[^_.]{8}_/', '', $file);
$fileName = preg_replace('/_[^_.]*\./', '.', $fileName);
$fullPath = $path . '/' . $file;
break;
case "file":
$_file = explode('/', $file);
$fileName = preg_replace('/^[^_.]{8}_/', '', $_file[2]);
$fileName = preg_replace('/_[^_.]*\./', '.', $fileName);
$fullPath = $file;
break;
default:
$path = $this->getParameter($type);
$fileName = preg_replace('/^[^_.]{8}_/', '', $file);
$fileName = preg_replace('/_[^_.]*\./', '.', $fileName);
$fullPath = $path . '/' . $file;
break;
}
if ($awsFile = $utilsService->getFileFromAWS($fullPath)) {
$response = new Response();
$response->headers->set('Content-type', 'application/octet-stream');
$response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $fileName));
$response->setContent(file_get_contents($awsFile));
$response->setStatusCode(\Symfony\Component\HttpFoundation\Response::HTTP_OK);
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Pragma', 'no-cache');
$response->headers->set('Expires', '0');
return $response;
} else {
return new Response(null, \Symfony\Component\HttpFoundation\Response::HTTP_FORBIDDEN);
};
}
#[Route(path: '/view/{type}/{file}', requirements: ['file' => '.+'], name: 'view_file')]
public function viewFile($type, string $file, TranslatorInterface $translator, UtilsService $utilsService)
{
switch ($type) {
case "document":
$path = $this->getParameter('documentFile');
$fileName = preg_replace('/^[^_.]{8}_/', '', $file);
$fileName = preg_replace('/_[^_.]*\./', '.', $fileName);
$fullPath = $path . '/' . $file;
break;
case "file":
$_file = explode('/', $file);
$fileName = preg_replace('/^[^_.]{8}_/', '', $_file[2]);
$fileName = preg_replace('/_[^_.]*\./', '.', $fileName);
$fullPath = $file;
break;
default:
$path = $this->getParameter($type);
$fileName = preg_replace('/^[^_.]{8}_/', '', $file);
$fileName = preg_replace('/_[^_.]*\./', '.', $fileName);
$fullPath = $path . '/' . $file;
break;
}
if ($awsFile = $utilsService->getFileFromAWS($fullPath)) {
return $this->redirect($awsFile);
} else {
return new Response(null, \Symfony\Component\HttpFoundation\Response::HTTP_FORBIDDEN);
};
}
#[Route(path: '/ajax/send-internal-email', name: 'ajax_send_internal_email', methods: 'POST')]
function ajaxSendInternalEmail(Request $request, MailgunService $mailgunService, TranslatorInterface $translator)
{
$user = $this->getUser();
$form = $this->createFormBuilder()
->add('email', HiddenType::class, [
'required' => true,
])->add('subject', HiddenType::class, [
'required' => true,
])->add('message', TextareaType::class, [
'required' => true,
'attr' => array('rows' => 10),
'label' => 'Message',
])->add('anonymous', HiddenType::class, [
'required' => true,
/*])->add('attachment', FileType::class, [
'required' => false,
'mapped' => false,
'attr' => array('maxlength' => 255),*/
])->add('submit', SubmitType::class, array('label' => 'form.send'))
->getForm();
$form->handleRequest($request);
$result['status'] = 'OK';
if ($result['status'] == 'OK') {
$subject = $form->get('subject')->getData();
$email_data = explode('?', $form->get('email')->getData());
$email = $email_data[0];
$email_cc = null;
$message = $form->get('message')->getData();
//$sent = true;
//$attachment = $form->get('attachment');
$anonymous = $form->get('anonymous')->getData();
$sent = $mailgunService->sendEmailAdvanced([
'subject' => $subject,
'to' => [$email],
'reply' => $anonymous == 'true' ? [] : [$user->getEmail()],
'template' => 'email/email-internal/default.html.twig',
'params' => [
'message' => $message,
'user' => $user
],
//'attachments' => $attachment != null ? new UploadedBase64EncodedFile(new Base64EncodedFile($attachment->getData())) : null
]);
$mailgunService->sendEmailAdvanced([
'subject' => $translator->trans('email.system.copy').' '.$subject,
'to' => [$user->getEmail()],
'reply' => $anonymous == 'true' ? [] : [$email],
'template' => 'email/email-internal/respond.html.twig',
'params' => [
'message' => $message,
'user' => $user
],
//'attachments' => $attachment != null ? new UploadedBase64EncodedFile(new Base64EncodedFile($attachment->getData())) : null
]);
$result['content'] = [
'sent' => $sent,
'subject' => $subject,
'to' => $email,
'cc' => $email_cc,
'message' => $message
];
} else {
$result['status'] = 'ERROR';
}
return new JsonResponse($result);
}
#[Route(path: '/ajax/file-collector', name: 'ajax_file_collector', methods: 'POST')]
function ajaxFileCollector(Request $request, UploadService $uploadService)
{
return new JsonResponse($uploadService->fileCollector($request->files->get('file'), $this->getParameter('collectorFile')));
}
#[Route(path: '/disabledate/{id}', name: 'ajax_disable_date', methods: 'GET')]
function _disableDate($id):JsonResponse
{
$result=array();
$user=$this->getDoctrine()->getRepository(\App\Entity\User::class)->find($id);
if(!is_null($user)){
$country=$user->getOffice()->getCountry();
$holiday=$this->getDoctrine()->getRepository(\App\Entity\LeaveBankHoliday::class)->findBy(array('location'=>$country));
$leaves=$this->getDoctrine()->getRepository(\App\Entity\LeaveRequest::class)->findBy(array('user'=>$id));
if(!is_null($holiday)){
foreach($holiday as $h){
$start=new \DateTime($h->getDate()->format('Y-m-d'));
$end=$h->getEndDate();
if(is_null($end)){
$end=new \DateTime($h->getDate()->format('Y-m-d'));
}else{
$end=new \DateTime($h->getEndDate()->format('Y-m-d'));
}
$int=date_diff($end,$start);
if($int->d < 0){
$tmpend=new \DateTime($end->format('Y-m-d'));
$end=new \DateTime($start->format('Y-m-d'));
$start=new \DateTime($tmpend->format('Y-m-d'));
}
$int=abs($int->d)+1;
for($i=0;$i<$int;$i++){
$result[count($result)]=$start->format('Y-m-d');
$start->modify('+1 day');
}
}
}
if(!is_null($leaves)){
foreach($leaves as $l){
$start=new \DateTime($l->getStartDate()->format('Y-m-d'));
$end=new \DateTime($l->getEndDate()->format('Y-m-d'));
$int=date_diff($end,$start);
if($int->d < 0){
$end=new \DateTime($l->getStartDate()->format('Y-m-d'));
$start=new \DateTime($l->getEndDate()->format('Y-m-d'));
}
$int=abs($int->d)+1;
for($i=0;$i<$int;$i++){
$result[count($result)]=$start->format('Y-m-d');
$start->modify('+1 day');
}
}
}
}
return new JsonResponse($result);
}
#[Route(path: '/ajax/session', name: 'ajax_session', methods: 'POST')]
function ajaxSession(Request $request, NotificationService $notification): JsonResponse
{
$firewall = $this->isGranted('ROLE_CLIENT_CONTACT') ? 'client' : 'main';
if (!$this->isGranted('ROLE_STAFF')) {
return new JsonResponse([
'status' => "TIMEOUT",
'firewall' => $firewall
]);
}
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$notification->check($user);
$user->setLastActivityAt(new \DateTime());
$entityManager->flush();
$result['status'] = 'OK';
$result['notification'] = $this->getDoctrine()->getRepository(Notification::class)->countLimitedUnread($user->getId());
$result['firewall'] = $firewall;
return new JsonResponse($result);
}
}