src/Admin/UItemTopicoAdmin.php line 18

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 Sonata\Form\Type\CollectionType;
  11. use Sonata\AdminBundle\Form\Type\ModelType;
  12. use Symfony\Component\Form\Extension\Core\Type\FileType;
  13. use Symfony\Component\Validator\Constraints as Assert;
  14. final class UItemTopicoAdmin extends AbstractAdmin
  15. {
  16.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  17.     {
  18.         $datagridMapper
  19.             ->add('titulo'null, ['label'=>'Título'])
  20.             ->add('type'null, ['label'=>'Tipo'])
  21.             ->add('content'null, ['label'=>'Conteúdo'])
  22.             ->add('topico'null, ['label'=>'Tópico'])
  23.             ->add('topico.aula'null, ['label'=>'Aula'])
  24.             ->add('topico.aula.curso'null, ['label'=>'Curso'])
  25.             ;
  26.     }
  27.     protected function configureListFields(ListMapper $listMapper): void
  28.     {
  29.         $listMapper
  30.             ->add('titulo'null, ['label'=>'Título'])
  31.             ->add('type'null, ['label'=>'Tipo'])
  32.             ->add('_action'null, [
  33.                 'actions' => [
  34.                     'show' => [],
  35.                     'edit' => [],
  36.                     'delete' => [],
  37.                 ],
  38.             ]);
  39.     }
  40.     protected function configureFormFields(FormMapper $formMapper): void
  41.     {
  42.         /** @var ArquivoDownload $arquivo */
  43.         $topicoCurso $this->getSubject();
  44.         $imgReq  false;
  45.         $fileFieldOptions = [
  46.             'data_class' => null,
  47.             'required' => $imgReq,
  48.             'label' => 'Arquivo',
  49.             'help' => '* Coloque o arquivo conforme o tipo deste item de tópico'
  50.         ];
  51.         if (!is_null($topicoCurso) && $topicoCurso->getArquivo() != '') {
  52.             if($topicoCurso->getType()=='imagem'){
  53.                 $fileFieldOptions['help'] = '<a href="/'.$topicoCurso->getArquivo().'" target="_blank"/><img src="/'.$topicoCurso->getArquivo().'" style="max-height:200px"/></a>';
  54.             } else {
  55.                 $fileFieldOptions['help'] = '<a href="/'.$topicoCurso->getArquivo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar Arquivo</a>';
  56.             }
  57.         }
  58.         
  59.         $filePerguntaFieldOptions = [
  60.             'data_class' => null,
  61.             'required' => $imgReq,
  62.             'label' => 'Imagem',
  63.             'help' => '* Imagem referente à pergunta deste item de tópico'
  64.         ];
  65.         if (!is_null($topicoCurso) && $topicoCurso->getArquivoPergunta() != '') {
  66.             $filePerguntaFieldOptions['help'] = '<a href="/'.$topicoCurso->getArquivoPergunta().'" target="_blank"/><img src="/'.$topicoCurso->getArquivoPergunta().'" style="max-height:200px"/></a>';
  67.         }
  68.         
  69.         $formMapper
  70.             ->add('ordenacao'null, ['label'=>'Ordenação'])
  71.             ->add('topico'ModelType::class, [
  72.                 'placeholder' => '-- Selecione --',
  73.                 'label' => 'Tópico',
  74.                 'required' => true,
  75.                 'expanded' => false,
  76.                 'multiple' => false
  77.             ], ['attr'=>['disabled'=>true]])
  78.             ->add('titulo'null, ['label'=>'Título'])
  79.             ->add('type'ChoiceType::class, [
  80.                 'choices' => [
  81.                     'Selecione'             => '',
  82.                     'Texto'                 => 'texto',
  83.                     'Imagem/Figura'         => 'imagem',
  84.                     'Arquivo PDF'           => 'pdf',
  85.                     'Link vídeo externo'    => 'link-video',
  86.                     'Áudio'                 => 'audio',
  87.                 ],
  88.                 'label'=>'Tipo'
  89.             ])
  90.             ->add('content'null, ['label'=>"Conteúdo"'required'=>true'attr'=>['class'=>'editorHtml']])
  91.             ->add('arquivoFile'FileType::class, [
  92.                 'constraints' => [new Assert\File([
  93.                     'mimeTypes' => [
  94.                         'application/pdf',
  95.                         'application/x-pdf',
  96.                         'image/jpeg',
  97.                         'image/jpg',
  98.                         'image/png',
  99.                         'audio/mpeg',
  100.                         'audio/ogg',
  101.                         'audio/mp3',
  102.                         'audio/mpeg3',
  103.                         'audio/x-mpeg-3',
  104.                         'video/x-mpeg',
  105.                         'audio/*'
  106.                     ],
  107.                     'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .pdf, imagem ou audio'
  108.                 ])],
  109.                 'label' => 'Arquivo do conteúdo',
  110.                 'help' => $fileFieldOptions['help'],
  111.                 'required' => false,
  112.             ])
  113.             ->add('imagemFull'null, ['label'=>'Imagem com 100% da tela'])
  114.             ->add('pergunta'null, ['label'=>"Pergunta avaliativa"'required'=>false'attr'=>['class'=>'editorHtml']])
  115.             ->add('arquivoPerguntaFile'FileType::class, [
  116.                 'constraints' => [new Assert\File([
  117.                     'mimeTypes' => [
  118.                         'image/jpeg',
  119.                         'image/jpg'
  120.                     ],
  121.                     'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .jpeg ou .jpg, imagem ou audio'
  122.                 ])],
  123.                 'label' => 'Imagem da pergunta',
  124.                 'help' => $filePerguntaFieldOptions['help'],
  125.                 'required' => false,
  126.             ])
  127.             // admin.aternativa_questao_topico
  128.             ->add('alternativasQuestao'CollectionType::class, [
  129.                 'label' => 'Aternativas de resposta para a questão',
  130.                 'by_reference' => false,
  131.             ], [
  132.                 'edit' => 'inline',
  133.                 'inline' => 'table',
  134. //                'sortable' => 'posicao',
  135.             ])
  136.             ;
  137.     }
  138.     protected function configureShowFields(ShowMapper $showMapper): void
  139.     {
  140.         $showMapper
  141.             ->add('id'null, ['label'=>'Código'])
  142.             ->add('titulo'null, ['label'=>'Título'])
  143.             ->add('type'null, ['label'=>'Tipo'])
  144.             ->add('content'null, ['label'=>'Conteúdo'])
  145.             ;
  146.     }
  147.     
  148.     /* ####### UPLOAD ARQUIVO ####### */
  149.     
  150.     public function prePersist($object)
  151.     {
  152.         /** @var ArquivoDownload $object */
  153.         ini_set('upload_max_filesize''50M');
  154.         if($object->getArquivoFile()){
  155.             $this->manageFilesUpload($object);
  156.         }
  157.         
  158.         if($object->getArquivoPerguntaFile()){
  159.             $this->manageFilesPerguntaUpload($object);
  160.         }
  161.         return $object;
  162.     }
  163.     public function preUpdate($object)
  164.     {
  165.         /** @var ArquivoDownload $object */
  166.         ini_set('upload_max_filesize''50M');
  167.         if($object->getArquivoFile()){
  168.             if($object->getArquivo()){
  169.                 if(file_exists($object->getArquivo())) {
  170.                     @unlink($object->getArquivo());
  171.                 }
  172.             }
  173.             $this->manageFilesUpload($object);
  174.         }
  175.         
  176.         //$object->setArquivo(null);
  177.         
  178.         if($object->getArquivoPerguntaFile()){
  179.             if($object->getArquivoPergunta()){
  180.                 if(file_exists($object->getArquivoPergunta())) {
  181.                     @unlink($object->getArquivoPergunta());
  182.                 }
  183.             }
  184.             $this->manageFilesPerguntaUpload($object);
  185.         }
  186.         
  187.         return $object;
  188.     }
  189.     public function postRemove($object)
  190.     {
  191.         parent::postRemove($object); // TODO: Change the autogenerated stub
  192.         if($object->getArquivo()){
  193.             if (file_exists($object->getArquivo())) {
  194.                 @unlink($object->getArquivo());
  195.             }
  196.         }
  197.         
  198.         if($object->getArquivoPergunta()){
  199.             if (file_exists($object->getArquivoPergunta())) {
  200.                 @unlink($object->getArquivoPergunta());
  201.             }
  202.         }
  203.     }
  204.     /**
  205.      * @param ArquivoDownload $obj
  206.      * @return ArquivoDownload
  207.      */
  208.     private function manageFilesUpload($obj)
  209.     {
  210.         if($obj->getArquivoFile()){
  211.             $file $obj->getArquivoFile();
  212.             $nameFile $filename md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
  213.             $uploadPath "uploads/uniltec";
  214.             $file->move($uploadPath$nameFile);
  215.             $obj->setArquivoOriginal($uploadPath "/" $filename);
  216.             $obj->setArquivo($uploadPath "/" $filename);
  217.         }
  218.     }
  219.     
  220.     /**
  221.      * @param ArquivoDownload $obj
  222.      * @return ArquivoDownload
  223.      */
  224.     private function manageFilesPerguntaUpload($obj)
  225.     {
  226.         if($obj->getArquivoPerguntaFile()){
  227.             $file $obj->getArquivoPerguntaFile();
  228.             $nameFile $filename md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
  229.             $uploadPath "uploads/uniltec";
  230.             $file->move($uploadPath$nameFile);
  231.             $obj->setArquivoPerguntaOriginal($uploadPath "/" $filename);
  232.             $obj->setArquivoPergunta($uploadPath "/" $filename); 
  233.         }
  234.     }
  235. }