src/Controller/Accounting/CertificateAdminController.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Accounting;
  3. use Sonata\AdminBundle\Controller\CRUDController as BaseController;
  4. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. class CertificateAdminController extends BaseController
  9. {
  10.     public function editAction($id null)
  11.     {
  12.         $user $this->container->get('security.token_storage')->getToken()->getUser();
  13.         $object $this->admin->getObject($id);
  14.         if ($user->isAccountant() && $object->getUser()->getManager()->getId() != $user->getAccountant()->getId()) {
  15.             die('Este cliente no es tuya.');
  16.         }
  17.         return parent::editAction($id);
  18.     }
  19.     public function deleteAction($id)
  20.     {
  21.         $user $this->container->get('security.token_storage')->getToken()->getUser();
  22.         $object $this->admin->getObject($id);
  23.         if ($user->isAccountant() && $object->getUser()->getManager()->getId() != $user->getAccountant()->getId()) {
  24.             die('Este cliente no es tuya.');
  25.         }
  26.         return parent::deleteAction($id);
  27.     }
  28.     /**
  29.      * @param Request $request
  30.      *
  31.      * @return RedirectResponse
  32.      */
  33.     public function batchActionDownload(ProxyQueryInterface $selectedModelQueryRequest $request null)
  34.     {
  35.         $this->admin->checkAccess('edit');
  36.         $this->admin->checkAccess('delete');
  37.         $modelManager $this->admin->getModelManager();
  38.         $selectedModels $selectedModelQuery->execute();
  39.         try {
  40.             return $this->zipDownloadDocumentsAction($selectedModels);
  41.         } catch (\Exception $e) {
  42.             $this->addFlash('sonata_flash_error''flash_batch_download_error');
  43.             return new RedirectResponse(
  44.                 $this->admin->generateUrl('list', [
  45.                     'filter' => $this->admin->getFilterParameters(),
  46.                 ])
  47.             );
  48.         }
  49.         $this->addFlash('sonata_flash_success''flash_batch_download_success');
  50.         return new RedirectResponse(
  51.             $this->admin->generateUrl('list', [
  52.                 'filter' => $this->admin->getFilterParameters(),
  53.             ])
  54.         );
  55.     }
  56.     /**
  57.      * Create and download some zip documents.
  58.      *
  59.      * @param array $documents
  60.      * @param mixed $certificates
  61.      *
  62.      * @return Symfony\Component\HttpFoundation\Response
  63.      */
  64.     public function zipDownloadDocumentsAction($certificates)
  65.     {
  66.         $files = [];
  67.         $em $this->getDoctrine()->getManager();
  68.         foreach ($certificates as $certificate) {
  69.             $webPath __DIR__.'/../../../private/assets/asesor/certificados/'.$certificate->getUser()->getId().'-'.$certificate->getFolder().'/'.$certificate->getFilename();
  70.             if (is_file($webPath)) {
  71.                 array_push($files$webPath);
  72.             }
  73.         }
  74.         $zip = new \ZipArchive();
  75.         $zipName 'Certificados-'.time().'.zip';
  76.         $zipPath __DIR__.'/../../../public/assets/'.$zipName;
  77.         $zip->open($zipPath, \ZipArchive::CREATE);
  78.         foreach ($files as $file) {
  79.             $zip->addFromString(basename($file), file_get_contents($file));
  80.         }
  81.         $zip->close();
  82.         if (is_file($zipPath) && !is_dir($zipPath)) {
  83.             $response = new Response(file_get_contents($zipPath));
  84.             $response->headers->set('Content-Type''application/zip');
  85.             $response->headers->set('Content-Disposition''attachment;filename="'.$zipName.'"');
  86.             $response->headers->set('Content-length'filesize($zipPath));
  87.             @unlink($zipPath);
  88.         } else {
  89.             dd($zipNameis_file($zipPath));
  90.         }
  91.         return $response;
  92.     }
  93. }