src/Service/OfferService.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Offer;
  4. use App\Repository\OfferRepository;
  5. use Symfony\Contracts\Translation\TranslatorInterface;
  6. use Symfony\Component\HttpFoundation\File\UploadedFile;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. class OfferService extends BaseService
  9. {
  10.     /**
  11.      * @param OfferRepository $repository
  12.      */
  13.     public function __construct(
  14.         OfferRepository $repository,
  15.         BaseService $baseService,
  16.         UrlGeneratorInterface $urlGenerator,
  17.         TranslatorInterface $translator
  18.     ) {
  19.         $this->reflectFromParent($baseService);
  20.         $this->repository = $repository;
  21.         $this->urlGenerator = $urlGenerator;
  22.         $this->translator = $translator;
  23.     }
  24.     public function filterJob($request)
  25.     {
  26.         $requestData = null;
  27.         if ($request) {
  28.             foreach ($request as $key => $value) {
  29.                 if (empty($value)) continue;
  30.                 if ($key == 'contract') {
  31.                     $requestData['filter_' . $key] = $value;
  32.                 }
  33.                 if (in_array($key, ['expertise', 'campuses', 'skill'])) {
  34.                     $requestData['memberOf_' . $key] = $value;
  35.                 }
  36.             }
  37.         }
  38.         return $this->repository->getListAll($requestData);
  39.     }
  40.     public function getListAll($requestData)
  41.     {
  42.         return $this->repository->getListAll($requestData);
  43.     }
  44.     public function getBySlug($slug, $request)
  45.     {
  46.         return $this->repository->getBySlug($slug, $request);
  47.     }
  48.     public function getById($id)
  49.     {
  50.         return $this->repository->getById($id);
  51.     }
  52.     public function getUrl($entity, $review = null)
  53.     {
  54.         $url = $this->urlGenerator->generate('job_board.detail', [
  55.             'slug' => $entity->getSlug()
  56.         ], UrlGeneratorInterface::ABSOLUTE_URL);
  57.         if ($review) {
  58.             $url .= '?review=1';
  59.         }
  60.         return $this->urlHelper->getAbsoluteUrl($url);
  61.     }
  62.     public function uploadFile(UploadedFile $fileUpload, $folder)
  63.     {
  64.         $newMedia = $this->mediaService->uploadFile($fileUpload, $folder);
  65.         return $newMedia['path'];
  66.     }
  67.     public function addEntity($request)
  68.     {
  69.         $input = [];
  70.         $input['status'] = Offer::STATUS_INACTIVE;
  71.         if ($request->request->get('offerType')) {
  72.             if (count($request->get('offerType')) > 1) {
  73.                 $input['offerType'] = Offer::OFFER_TYPE_ALL;
  74.             } else {
  75.                 $input['offerType'] = array_values($request->request->get('offerType'))[0];
  76.             }
  77.             $request->request->remove('offerType');
  78.         }
  79.         // Upload logo
  80.         $logo = $request->files->get('logo');
  81.         if ($logo) {
  82.             $input['logo'] = $this->uploadFile($logo, $this->container->getParameter('dir.offer_logo'));
  83.             $request->files->remove('logo');
  84.         }
  85.         // Upload description File
  86.         $descriptionFile = $request->files->get('descriptionFile');
  87.         if ($descriptionFile) {
  88.             $input['descriptionFile'] = $this->uploadFile($descriptionFile, $this->container->getParameter('dir.offer_files'));
  89.             $request->files->remove('descriptionFile');
  90.         }
  91.         $entity = $this->add($request, $input, null, 'ENTITY', false, ['offerTitle'], true);
  92.         // Update code
  93.         $this->updateGenerateCode($entity);
  94.         if ($entity) {
  95.             $this->sendMailOffer($this->autoMapper->map($entity, 'App\DTO\Offer\OfferOutput'));
  96.         }
  97.         return $this->autoMapper->map($entity, 'App\DTO\Offer\OfferOutputList');
  98.     }
  99.     public function updateEntity($request)
  100.     {
  101.         $input = [];
  102.         $entity = $this->get($request->get('id'));
  103.         if ($request->request->get('offerType')) {
  104.             if (count($request->get('offerType')) > 1) {
  105.                 $input['offerType'] = Offer::OFFER_TYPE_ALL;
  106.             } else {
  107.                 $input['offerType'] = array_values($request->request->get('offerType'))[0];
  108.             }
  109.             $request->request->remove('offerType');
  110.         }
  111.         // Remove logo
  112.         if ($request->get('removeLogo')) {
  113.             $this->removeLogo($entity);
  114.         }
  115.         // Upload logo
  116.         $logo = $request->files->get('logo');
  117.         if ($logo) {
  118.             $input['logo'] = $this->uploadFile($logo, $this->container->getParameter('dir.offer_logo'));
  119.             $request->files->remove('logo');
  120.         }
  121.         // Remove file
  122.         if ($request->get('removeFile')) {
  123.             $this->removeFile($entity);
  124.         }
  125.         // Upload description File
  126.         $descriptionFile = $request->files->get('descriptionFile');
  127.         if ($descriptionFile) {
  128.             $input['descriptionFile'] = $this->uploadFile($descriptionFile, $this->container->getParameter('dir.offer_files'));
  129.             $request->files->remove('descriptionFile');
  130.         }
  131.         $entity = $this->update($entity, $request, $input, null, 'ENTITY', false, true);
  132.         return $this->autoMapper->map($entity, 'App\DTO\Offer\OfferOutput');
  133.     }
  134.     public function updateGenerateCode($entity)
  135.     {
  136.         if (!$entity->getId()) return;
  137.         $code = 'ESTI' . str_pad($entity->getId(), 4, '0', STR_PAD_LEFT);
  138.         $entity->setCode($code);
  139.         $this->repository->save($entity);
  140.     }
  141.     public function updateStatus($request)
  142.     {
  143.         $entity = $this->get($request->get('id'));
  144.         $status = $request->get('status');
  145.         $entity->setStatus($status);
  146.         $this->repository->save($entity);
  147.         return $this->autoMapper->map($entity, 'App\DTO\Offer\OfferOutputList');
  148.     }
  149.     public function deleteEntity($id)
  150.     {
  151.         $entity = $this->get($id);
  152.         $logo = $entity->getLogo() ?? null;
  153.         $pathDescriptionFile = $entity->getDescriptionFile() ?? null;
  154.         $this->delete($entity);
  155.         if ($logo) {
  156.             $this->mediaService->deleteFile($logo);
  157.         }
  158.         if ($pathDescriptionFile) {
  159.             $this->mediaService->deleteFile($pathDescriptionFile);
  160.         }
  161.         return true;
  162.     }
  163.     public function removeLogo($entity)
  164.     {
  165.         $fileName = $entity->getLogo() ?? null;
  166.         if ($fileName) {
  167.             $this->mediaService->deleteFile($fileName);
  168.         }
  169.         $entity->setLogo(null);
  170.         $this->entityManager->flush();
  171.         return;
  172.     }
  173.     public function removeFile($entity)
  174.     {
  175.         $fileName = $entity->getDescriptionFile() ?? null;
  176.         if ($fileName) {
  177.             $this->mediaService->deleteFile($fileName);
  178.         }
  179.         $entity->setDescriptionFile(null);
  180.         $this->entityManager->flush();
  181.         return;
  182.     }
  183.     public function sendMailOffer($offer)
  184.     {
  185.         if (!empty($offer->campuses)) {
  186.             $offer->campuses = implode(', ', array_column($offer->campuses, 'name'));
  187.         }
  188.         if (!empty($offer->skill)) {
  189.             $offer->skill = implode(', ', array_column($offer->skill, 'name'));
  190.         }
  191.         if (!empty($offer->expertise)) {
  192.             $offer->expertise = implode(', ', array_column($offer->expertise, 'name'));
  193.         }
  194.         if (is_int($offer->offerType)) {
  195.             $arrOfferType = [0 => 'Téléphone', 1 => 'Email', 2 => 'Téléphone, Email'];
  196.             $offer->offerType = $arrOfferType[$offer->offerType];
  197.         }
  198.         $subjectMail = $this->translator->trans('offer.mail.title');
  199.         $bodyMail = $this->container->get('twig')->render('email/offer/offer.html.twig', [
  200.             'offer' => $offer
  201.         ]);
  202.         $recipientsString = $this->container->getParameter('mail.contact.recipients');
  203.         $this->sendMail(explode(",", $recipientsString), $subjectMail, $bodyMail);
  204.     }
  205. }