src/Admin/ArquivoEmpresaAdmin.php line 19

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin;
  4. use Sonata\AdminBundle\Admin\AbstractAdmin;
  5. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  6. use Sonata\AdminBundle\Datagrid\ListMapper;
  7. use Sonata\AdminBundle\Form\FormMapper;
  8. use Sonata\AdminBundle\Show\ShowMapper;
  9. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  10. use App\Enums\TiposArquivosEmpresa;
  11. use Sonata\AdminBundle\Form\Type\ModelType;
  12. use Sonata\Form\Type\DatePickerType;
  13. use Symfony\Component\Form\Extension\Core\Type\FileType;
  14. use Symfony\Component\Validator\Constraints as Assert;
  15. final class ArquivoEmpresaAdmin extends AbstractAdmin
  16. {
  17.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  18.     {
  19.         $datagridMapper
  20.             ->add('id')
  21.             ->add('createdAt')
  22.             ->add('tipo')
  23.             ->add('expiredAt')
  24.             ;
  25.     }
  26.     protected function configureListFields(ListMapper $listMapper): void
  27.     {
  28.         $listMapper
  29.             ->add('empresa.razaoSocial'null, ['label'=>'Cliente'])
  30.             ->add('tipo')
  31.             ->add('createdAt'null, ['label'=>'Data de cadastro'])
  32.             ->add('expiredAt'null, ['label'=>'Data de expiração'])
  33.             ->add('_action'null, [
  34.                 'actions' => [
  35.                     'show' => [],
  36.                     'edit' => [],
  37.                     'delete' => [],
  38.                 ],
  39.             ]);
  40.     }
  41.     protected function configureFormFields(FormMapper $formMapper): void
  42.     {
  43.         
  44.         /** @var ArquivoDownload $arquivo */
  45.         $arquivo $this->getSubject();
  46.         $imgReq  false;
  47.         $fileFieldOptions = [
  48.             'data_class' => null,
  49.             'required' => $imgReq,
  50.             'label' => 'Arquivo',
  51.             'help' => ''
  52.         ];
  53.         if (!is_null($arquivo) && $arquivo->getArquivo() != '') {
  54.             $fileFieldOptions['help'] = '<a href="/'.$arquivo->getArquivo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar Arquivo</a>';
  55.         }
  56.         
  57.         $formMapper
  58.             ->add('empresa'ModelType::class, [
  59.                 'placeholder' => '-- Selecione --',
  60.                 'label' => 'Cliente',
  61.                 'required' => true,
  62.                 'expanded' => false,
  63.                 'multiple' => false
  64.             ], ['attr'=>['disabled'=>true]])
  65.             ->add('tipo'ChoiceType::class, [
  66.                 'label'=>'Tipo',
  67.                 'choices' => TiposArquivosEmpresa::getAssociatedValues(),
  68.             ])
  69.             ->add('expiredAt'DatePickerType::class,['label'=>'Data de expiração''required'=>false])
  70.             ->add('arquivoFile'FileType::class, [
  71.                 'constraints' => [new Assert\File([
  72.                     'mimeTypes' => [
  73.                         'application/pdf',
  74.                         'application/x-pdf',
  75.                         'image/jpeg',
  76.                         'image/jpg',
  77.                         'image/png'
  78.                     ],
  79.                     'mimeTypesMessage' => 'O sistema não aceita este formato'
  80.                 ])],
  81.                 'label' => 'Arquivo',
  82.                 'help' => $fileFieldOptions['help'],
  83.                 'required' => false,
  84.             ])
  85.             ;
  86.     }
  87.     protected function configureShowFields(ShowMapper $showMapper): void
  88.     {
  89.         $showMapper
  90.             ->add('id')
  91.             ->add('empresa.razaoSocial'null, ['label'=>'Cliente'])
  92.             ->add('createdAt'null, ['label'=>'Data de cadastro'])
  93.             ->add('tipo')
  94.             ->add('expiredAt'null, ['label'=>'Data de expiração'])
  95.             ;
  96.     }
  97.     
  98.     public function prePersist($object)
  99.     {
  100.         /** @var ArquivoDownload $object */
  101.         ini_set('upload_max_filesize''50M');
  102.         if($object->getArquivoFile()){
  103.             $this->manageFilesUpload($object);
  104.         }
  105.         
  106.         $object->setCreatedAt(new \DateTime());
  107.         return $object;
  108.     }
  109.     public function preUpdate($object)
  110.     {
  111.         /** @var ArquivoDownload $object */
  112.         ini_set('upload_max_filesize''50M');
  113.         if($object->getArquivoFile()){
  114.             if($object->getArquivoOriginal()){
  115.                 if(file_exists($object->getArquivoOriginal())) {
  116.                  @unlink($object->getArquivoOriginal());
  117.                 } 
  118.             }
  119.             $this->manageFilesUpload($object);
  120.         }
  121.         return $object;
  122.     }
  123.     public function postRemove($object)
  124.     {
  125.         parent::postRemove($object); // TODO: Change the autogenerated stub
  126.         if($object->getArquivo()){
  127.             if (file_exists($object->getArquivo())) {
  128.                 @unlink($object->getArquivo());
  129.             }
  130.         }
  131.     }
  132.     /**
  133.      * @param ArquivoDownload $obj
  134.      * @return ArquivoDownload
  135.      */
  136.     private function manageFilesUpload($obj)
  137.     {
  138.         $file $obj->getArquivoFile();
  139.         $nameFile $filename md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
  140.         $uploadPath "uploads/arquivos-clientes";
  141.         $file->move($uploadPath$nameFile);
  142.         $obj->setArquivoOriginal($uploadPath "/" $filename);
  143.         $obj->setArquivo($uploadPath "/" $filename);
  144.     }
  145. }