src/Admin/ArquivoDownloadAdmin.php line 19

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use App\Entity\ArquivoDownload;
  5. use App\Entity\ContaPagar;
  6. use Sonata\AdminBundle\Admin\AbstractAdmin;
  7. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  8. use Sonata\AdminBundle\Datagrid\ListMapper;
  9. use Sonata\AdminBundle\Form\FormMapper;
  10. use Sonata\AdminBundle\Form\Type\ModelType;
  11. use Sonata\AdminBundle\Route\RouteCollection;
  12. use Sonata\AdminBundle\Show\ShowMapper;
  13. use Symfony\Component\Form\Extension\Core\Type\FileType;
  14. use Symfony\Component\Validator\Constraints as Assert;
  15. final class ArquivoDownloadAdmin extends AbstractAdmin
  16. {
  17.     protected function configureRoutes(RouteCollection $collection)
  18.     {
  19.         $collection->add('dowloadArquivo');
  20.     }
  21.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  22.     {
  23.         $datagridMapper
  24.             ->add('categoria.secao',null, ['label'=>'Seção'])
  25.             ->add('categoria',null, ['label'=>'Categoria'])
  26.             ->add('titulo','doctrine_orm_callback',[
  27.                 'label'=>'Título',
  28.                 'callback'   => array($this'filterTitulo'),
  29.             ])
  30.             ->add('descricao','doctrine_orm_callback',[
  31.                 'label'=>'Descrição',
  32.                 'callback'   => array($this'filterDescricao'),
  33.             ])
  34.             ;
  35.     }
  36.     public function filterTitulo($queryBuilder$alias$field$value)
  37.     {
  38.         if (!$value['value']) {
  39.             return;
  40.         }
  41.         $value mb_strtolower($value['value']);
  42.         $queryBuilder
  43.             ->andWhere("LOWER($alias.titulo) LIKE :nome" )
  44.             ->setParameter('nome'"%$value%");
  45.         return true;
  46.     }
  47.     public function filterDescricao($queryBuilder$alias$field$value)
  48.     {
  49.         if (!$value['value']) {
  50.             return;
  51.         }
  52.         $value mb_strtolower($value['value']);
  53.         $queryBuilder
  54.             ->andWhere("LOWER($alias.descricao) LIKE :nome" )
  55.             ->setParameter('nome'"%$value%");
  56.         return true;
  57.     }
  58.     protected function configureListFields(ListMapper $listMapper): void
  59.     {
  60.         $listMapper
  61.             ->addIdentifier('categoria.secao.nome'null, ['label'=>'Seção'])
  62.             ->addIdentifier('categoria.nome'null, ['label'=>'Categoria'])
  63.             ->add('titulo'null, ['label'=>'Título'])
  64.             ->add('descricao'null, ['label'=>'Descrição'])
  65.             ->add('createdAt'null, ['label'=>'Data de Upload'])
  66.             ->add('_action'null, [
  67.                 'actions' => [
  68.                     //'show' => [],
  69.                     'edit' => [],
  70.                     'centroCusto' => [
  71.                         'template' => 'Download/download_btn.html.twig',
  72.                     ],
  73.                     'delete' => [],
  74.                 ],
  75.             ]);
  76.     }
  77.     protected function configureFormFields(FormMapper $formMapper): void
  78.     {
  79.         /** @var ArquivoDownload $arquivo */
  80.         $arquivo $this->getSubject();
  81.         $imgReq  false;
  82.         $fileFieldOptions = [
  83.             'data_class' => null,
  84.             'required' => $imgReq,
  85.             'label' => 'Arquivo',
  86.             'help' => ''
  87.         ];
  88.         if (!is_null($arquivo) && $arquivo->getArquivo() != '') {
  89.             $fileFieldOptions['help'] = '<a href="/'.$arquivo->getArquivo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar Arquivo</a>';
  90.         }
  91.         $formMapper
  92.             ->add('categoria'ModelType::class, [
  93.                 'placeholder' => '-- Selecione --',
  94.                 'label' => 'Categoria do Arquivo',
  95.                 'required' => true,
  96.                 'expanded' => false,
  97.                 'multiple' => false,
  98.             ])
  99.             ->add('titulo'null, ['label'=>'Título'])
  100.             ->add('descricao'null, ['label'=>'Descrição'])
  101.             ->add('franquiaPodeAcessar'null, ['label'=>'Permitir Franquia Fazer Download'])
  102.             ->add('arquivoFile'FileType::class, [
  103.                 'constraints' => [new Assert\File([
  104.                     'mimeTypes' => [
  105.                         'application/pdf',
  106.                         'application/x-pdf',
  107.                         'image/jpeg',
  108.                         'image/jpg',
  109.                         'image/png'
  110.                     ],
  111.                     'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .pdf'
  112.                 ])],
  113.                 'label' => 'Arquivo',
  114.                 'help' => $fileFieldOptions['help'],
  115.                 'required' => false,
  116.             ])
  117.             ;
  118.     }
  119.     protected function configureShowFields(ShowMapper $showMapper): void
  120.     {
  121.         $showMapper
  122.             ->add('titulo')
  123.             ->add('descricao')
  124.             ->add('createdAt')
  125.             ->add('franquiaPodeAcessar')
  126.             ->add('arquivo')
  127.             ->add('arquivoOriginal')
  128.             ;
  129.     }
  130.     public function prePersist($object)
  131.     {
  132.         /** @var ArquivoDownload $object */
  133.         ini_set('upload_max_filesize''50M');
  134.         if($object->getArquivoFile()){
  135.             $this->manageFilesUpload($object);
  136.         }
  137.         return $object;
  138.     }
  139.     public function preUpdate($object)
  140.     {
  141.         /** @var ArquivoDownload $object */
  142.         ini_set('upload_max_filesize''50M');
  143.         if($object->getArquivoFile()){
  144.             if($object->getArquivoOriginal()){
  145.                 if(file_exists($object->getArquivoOriginal())) {
  146.                  @unlink($object->getArquivoOriginal());
  147.                 } 
  148.             }
  149.             $this->manageFilesUpload($object);
  150.         }
  151.         return $object;
  152.     }
  153.     public function postRemove($object)
  154.     {
  155.         parent::postRemove($object); // TODO: Change the autogenerated stub
  156.         if($object->getArquivo()){
  157.             if (file_exists($object->getArquivo())) {
  158.                 @unlink($object->getArquivo());
  159.             }
  160.         }
  161.     }
  162.     /**
  163.      * @param ArquivoDownload $obj
  164.      * @return ArquivoDownload
  165.      */
  166.     private function manageFilesUpload($obj)
  167.     {
  168.         $file $obj->getArquivoFile();
  169.         $nameFile $filename md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
  170.         $uploadPath "uploads/download";
  171.         $file->move($uploadPath$nameFile);
  172.         $obj->setArquivoOriginal($uploadPath "/" $filename);
  173.         $obj->setArquivo($uploadPath "/" $filename);
  174.     }
  175. }