src/Admin/ArquivoOsAdmin.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\TiposArquivosOs;
  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 ArquivoOsAdmin 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.             ->add('os')
  25.             ;
  26.     }
  27.     protected function configureListFields(ListMapper $listMapper): void
  28.     {
  29.         $listMapper
  30.             ->add('os.id'null, ['label'=>'ID OS'])
  31.             ->add('os.proposta.numeroFormatado'null, ['label'=>'Os'])
  32.             ->add('tipo')
  33.             ->add('createdAt'null, ['label'=>'Data de cadastro'])
  34.             ->add('expiredAt'null, ['label'=>'Data de expiração'])
  35.             ->add('_action'null, [
  36.                 'actions' => [
  37.                     'show' => [],
  38.                     'edit' => [],
  39.                     'delete' => [],
  40.                 ],
  41.             ]);
  42.     }
  43.     protected function configureFormFields(FormMapper $formMapper): void
  44.     {
  45.         
  46.         /** @var ArquivoDownload $arquivo */
  47.         $arquivo $this->getSubject();
  48.         $imgReq  false;
  49.         $fileFieldOptions = [
  50.             'data_class' => null,
  51.             'required' => $imgReq,
  52.             'label' => 'Arquivo',
  53.             'help' => ''
  54.         ];
  55.         if (!is_null($arquivo) && $arquivo->getArquivo() != '') {
  56.             $fileFieldOptions['help'] = '<a href="/'.$arquivo->getArquivo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar Arquivo</a>';
  57.         }
  58.         
  59.         $formMapper
  60.             ->add('os'ModelType::class, [
  61.                 'placeholder' => '-- Selecione --',
  62.                 'label' => 'OS',
  63.                 'required' => true,
  64.                 'expanded' => false,
  65.                 'multiple' => false
  66.             ], ['attr'=>['disabled'=>true]])
  67.             ->add('tipo'ChoiceType::class, [
  68.                 'label'=>'Tipo',
  69.                 'choices' => TiposArquivosOs::getAssociatedValues(),
  70.             ])
  71.             ->add('expiredAt'DatePickerType::class,['label'=>'Data de expiração''required'=>false])
  72.             ->add('arquivoFile'FileType::class, [
  73.                 'constraints' => [new Assert\File([
  74.                     'mimeTypes' => [
  75.                         'application/pdf',
  76.                         'application/x-pdf',
  77.                         'image/jpeg',
  78.                         'image/jpg',
  79.                         'image/png'
  80.                     ],
  81.                     'mimeTypesMessage' => 'O sistema não aceita este formato'
  82.                 ])],
  83.                 'label' => 'Arquivo',
  84.                 'help' => $fileFieldOptions['help'],
  85.                 'required' => false,
  86.             ])
  87.             ;
  88.     }
  89.     protected function configureShowFields(ShowMapper $showMapper): void
  90.     {
  91.         $showMapper
  92.             ->add('id')
  93.             ->add('empresa.razaoSocial'null, ['label'=>'Cliente'])
  94.             ->add('createdAt'null, ['label'=>'Data de cadastro'])
  95.             ->add('tipo')
  96.             ->add('expiredAt'null, ['label'=>'Data de expiração'])
  97.             ;
  98.     }
  99.     
  100.     public function prePersist($object)
  101.     {
  102.         /** @var ArquivoDownload $object */
  103.         ini_set('upload_max_filesize''50M');
  104.         if($object->getArquivoFile()){
  105.             $this->manageFilesUpload($object);
  106.         }
  107.         
  108.         $object->setCreatedAt(new \DateTime());
  109.         return $object;
  110.     }
  111.     public function preUpdate($object)
  112.     {
  113.         /** @var ArquivoDownload $object */
  114.         ini_set('upload_max_filesize''50M');
  115.         if($object->getArquivoFile()){
  116.             if($object->getArquivoOriginal()){
  117.                 if(file_exists($object->getArquivoOriginal())) {
  118.                  @unlink($object->getArquivoOriginal());
  119.                 } 
  120.             }
  121.             $this->manageFilesUpload($object);
  122.         }
  123.         return $object;
  124.     }
  125.     public function postRemove($object)
  126.     {
  127.         parent::postRemove($object); // TODO: Change the autogenerated stub
  128.         if($object->getArquivo()){
  129.             if (file_exists($object->getArquivo())) {
  130.                 @unlink($object->getArquivo());
  131.             }
  132.         }
  133.     }
  134.     /**
  135.      * @param ArquivoDownload $obj
  136.      * @return ArquivoDownload
  137.      */
  138.     private function manageFilesUpload($obj)
  139.     {
  140.         $file $obj->getArquivoFile();
  141.         $nameFile $filename md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
  142.         $uploadPath "uploads/arquivos-os";
  143.         $file->move($uploadPath$nameFile);
  144.         $obj->setArquivoOriginal($uploadPath "/" $filename);
  145.         $obj->setArquivo($uploadPath "/" $filename);
  146.         
  147.     }
  148.     
  149. }