src/Admin/ContratoCursoAlunoAdmin.php line 16

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 Sonata\Form\Type\DatePickerType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextType;
  11. use App\Entity\Usuario;
  12. final class ContratoCursoAlunoAdmin extends AbstractAdmin
  13. {
  14.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  15.     {
  16.         $datagridMapper
  17.             ->add('id')
  18.             ->add('curso.titulo'null, ['label'=>'Curso'])
  19.             ->add('usuario.nome'null, ['label'=>'Aluno'])
  20.             //->add('curso', null, ['label'=>'Curso'])
  21.             // ->add('aluno', null, ['label'=>''])
  22.             ->add('matricula'null, ['label'=>'Matrícula'])
  23.             ;
  24.     }
  25.     protected function configureListFields(ListMapper $listMapper): void
  26.     {
  27.         $listMapper
  28.             ->add('curso.titulo'null, ['label'=>'Curso'])
  29.             ->add('usuario.nome'null, ['label'=>'Aluno'])
  30.             ->add('usuario.email'null, ['label'=>'Email'])
  31.             ->add('matricula'null, ['label'=>'Matrícula'])
  32.             ->add('createdAt'null, ['label'=>'Contratação'])
  33.             ->add('progress'null, ['label'=>'Progresso'])
  34.             ->add('dataFinal'null, ['label'=>'Encerramento'])
  35.             ->add('_action'null, [
  36.                 'actions' => [
  37.                     'show' => [],
  38.                     'edit' => [],
  39.                     'delete' => [],
  40.                 ],
  41.             ]);
  42.     }
  43.     protected function configureFormFields(FormMapper $formMapper): void
  44.     {
  45.         $formMapper
  46.             ->add('isLiberado'null, ['label'=>'Liberado'])
  47.             //->add('usuario', null, ['label'=>'Usuário'])
  48.             ->add('curso'null, ['label'=>'Curso'])
  49.             ->add('alunoIdentifier'TextType::class, [
  50.                 'label'    => 'Identificador do Aluno (e-mail)',
  51.                 'mapped'   => false,
  52.                 'required' => true,
  53.             ])
  54.             //->add('progress', null, ['label'=>'Progresso'])
  55.             //->add('matricula', null, ['label'=>'Matrícula'])
  56.             //->add('createdAt', DatePickerType::class,['label'=>'Contratação'])
  57.             ->add('dataFinal'DatePickerType::class,['label'=>'Encerramento'])
  58.             ;
  59.     }
  60.     protected function configureShowFields(ShowMapper $showMapper): void
  61.     {
  62.         $showMapper
  63.             ->add('id')
  64.             ->add('curso.titulo'null, ['label'=>'Curso'])
  65.             ->add('usuario.nome'null, ['label'=>'Aluno'])
  66.             ->add('usuario.email'null, ['label'=>'Email'])
  67.             ->add('isLiberado'null, ['label'=>'Liberado'])
  68.             ->add('matricula'null, ['label'=>'Matrícula'])
  69.             ->add('createdAt'null, ['label'=>'Contratação'])
  70.             ->add('progress'null, ['label'=>'Progresso'])
  71.             ->add('dataFinal'null, ['label'=>'Encerramento'])
  72.             ;
  73.     }
  74.     
  75.     public function prePersist($object)
  76.     {
  77.         /** @var PropostaComercial $object */
  78.         parent::prePersist($object);
  79.         $object->setMatricula($this->randomMatricula());
  80.         $object->setCreatedAt(new \DateTime());
  81.         $object->setProgress(0);
  82.         
  83.         // 2) Recupera o valor do campo não mapeado
  84.         $form $this->getForm(); 
  85.         $identifier $form->get('alunoIdentifier')->getData();
  86.     
  87.             // pega o EM “oficial” do Sonata para a entidade Usuario
  88.             $em $this->getModelManager()
  89.                        ->getEntityManager(Usuario::class);
  90.         
  91.             $uAluno $em
  92.                 ->getRepository(Usuario::class)
  93.                 ->findOneBy(['email' => $identifier]);
  94.         
  95.             if (!$uAluno) {
  96.                 throw new \RuntimeException(
  97.                     sprintf('Aluno não encontrado para "%s".'$identifier)
  98.                 );
  99.             }
  100.             
  101.             $object->setUsuario($uAluno);
  102.     }
  103.     
  104.     private function randomMatricula() {
  105.         $alphabet 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
  106.         $pass = array(); //remember to declare $pass as an array
  107.         $alphaLength strlen($alphabet) - 1//put the length -1 in cache
  108.         for ($i 0$i 8$i++) {
  109.             $n rand(0$alphaLength);
  110.             $pass[] = $alphabet[$n];
  111.         }
  112.         return implode($pass); //turn the array into a string
  113.     }
  114. }