<?php
declare(strict_types=1);
namespace App\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\Form\Type\DatePickerType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use App\Entity\Usuario;
final class ContratoCursoAlunoAdmin extends AbstractAdmin
{
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('id')
->add('curso.titulo', null, ['label'=>'Curso'])
->add('usuario.nome', null, ['label'=>'Aluno'])
//->add('curso', null, ['label'=>'Curso'])
// ->add('aluno', null, ['label'=>''])
->add('matricula', null, ['label'=>'Matrícula'])
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->add('curso.titulo', null, ['label'=>'Curso'])
->add('usuario.nome', null, ['label'=>'Aluno'])
->add('usuario.email', null, ['label'=>'Email'])
->add('matricula', null, ['label'=>'Matrícula'])
->add('createdAt', null, ['label'=>'Contratação'])
->add('progress', null, ['label'=>'Progresso'])
->add('dataFinal', null, ['label'=>'Encerramento'])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->add('isLiberado', null, ['label'=>'Liberado'])
//->add('usuario', null, ['label'=>'Usuário'])
->add('curso', null, ['label'=>'Curso'])
->add('alunoIdentifier', TextType::class, [
'label' => 'Identificador do Aluno (e-mail)',
'mapped' => false,
'required' => true,
])
//->add('progress', null, ['label'=>'Progresso'])
//->add('matricula', null, ['label'=>'Matrícula'])
//->add('createdAt', DatePickerType::class,['label'=>'Contratação'])
->add('dataFinal', DatePickerType::class,['label'=>'Encerramento'])
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('id')
->add('curso.titulo', null, ['label'=>'Curso'])
->add('usuario.nome', null, ['label'=>'Aluno'])
->add('usuario.email', null, ['label'=>'Email'])
->add('isLiberado', null, ['label'=>'Liberado'])
->add('matricula', null, ['label'=>'Matrícula'])
->add('createdAt', null, ['label'=>'Contratação'])
->add('progress', null, ['label'=>'Progresso'])
->add('dataFinal', null, ['label'=>'Encerramento'])
;
}
public function prePersist($object)
{
/** @var PropostaComercial $object */
parent::prePersist($object);
$object->setMatricula($this->randomMatricula());
$object->setCreatedAt(new \DateTime());
$object->setProgress(0);
// 2) Recupera o valor do campo não mapeado
$form = $this->getForm();
$identifier = $form->get('alunoIdentifier')->getData();
// pega o EM “oficial” do Sonata para a entidade Usuario
$em = $this->getModelManager()
->getEntityManager(Usuario::class);
$uAluno = $em
->getRepository(Usuario::class)
->findOneBy(['email' => $identifier]);
if (!$uAluno) {
throw new \RuntimeException(
sprintf('Aluno não encontrado para "%s".', $identifier)
);
}
$object->setUsuario($uAluno);
}
private function randomMatricula() {
$alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$pass = array(); //remember to declare $pass as an array
$alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
for ($i = 0; $i < 8; $i++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
return implode($pass); //turn the array into a string
}
}