<?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 Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Sonata\Form\Type\CollectionType;
use Sonata\AdminBundle\Form\Type\ModelType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Validator\Constraints as Assert;
final class UItemTopicoAdmin extends AbstractAdmin
{
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('titulo', null, ['label'=>'Título'])
->add('type', null, ['label'=>'Tipo'])
->add('content', null, ['label'=>'Conteúdo'])
->add('topico', null, ['label'=>'Tópico'])
->add('topico.aula', null, ['label'=>'Aula'])
->add('topico.aula.curso', null, ['label'=>'Curso'])
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->add('titulo', null, ['label'=>'Título'])
->add('type', null, ['label'=>'Tipo'])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
/** @var ArquivoDownload $arquivo */
$topicoCurso = $this->getSubject();
$imgReq = false;
$fileFieldOptions = [
'data_class' => null,
'required' => $imgReq,
'label' => 'Arquivo',
'help' => '* Coloque o arquivo conforme o tipo deste item de tópico'
];
if (!is_null($topicoCurso) && $topicoCurso->getArquivo() != '') {
if($topicoCurso->getType()=='imagem'){
$fileFieldOptions['help'] = '<a href="/'.$topicoCurso->getArquivo().'" target="_blank"/><img src="/'.$topicoCurso->getArquivo().'" style="max-height:200px"/></a>';
} else {
$fileFieldOptions['help'] = '<a href="/'.$topicoCurso->getArquivo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar Arquivo</a>';
}
}
$filePerguntaFieldOptions = [
'data_class' => null,
'required' => $imgReq,
'label' => 'Imagem',
'help' => '* Imagem referente à pergunta deste item de tópico'
];
if (!is_null($topicoCurso) && $topicoCurso->getArquivoPergunta() != '') {
$filePerguntaFieldOptions['help'] = '<a href="/'.$topicoCurso->getArquivoPergunta().'" target="_blank"/><img src="/'.$topicoCurso->getArquivoPergunta().'" style="max-height:200px"/></a>';
}
$formMapper
->add('ordenacao', null, ['label'=>'Ordenação'])
->add('topico', ModelType::class, [
'placeholder' => '-- Selecione --',
'label' => 'Tópico',
'required' => true,
'expanded' => false,
'multiple' => false
], ['attr'=>['disabled'=>true]])
->add('titulo', null, ['label'=>'Título'])
->add('type', ChoiceType::class, [
'choices' => [
'Selecione' => '',
'Texto' => 'texto',
'Imagem/Figura' => 'imagem',
'Arquivo PDF' => 'pdf',
'Link vídeo externo' => 'link-video',
'Áudio' => 'audio',
],
'label'=>'Tipo'
])
->add('content', null, ['label'=>"Conteúdo", 'required'=>true, 'attr'=>['class'=>'editorHtml']])
->add('arquivoFile', FileType::class, [
'constraints' => [new Assert\File([
'mimeTypes' => [
'application/pdf',
'application/x-pdf',
'image/jpeg',
'image/jpg',
'image/png',
'audio/mpeg',
'audio/ogg',
'audio/mp3',
'audio/mpeg3',
'audio/x-mpeg-3',
'video/x-mpeg',
'audio/*'
],
'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .pdf, imagem ou audio'
])],
'label' => 'Arquivo do conteúdo',
'help' => $fileFieldOptions['help'],
'required' => false,
])
->add('imagemFull', null, ['label'=>'Imagem com 100% da tela'])
->add('pergunta', null, ['label'=>"Pergunta avaliativa", 'required'=>false, 'attr'=>['class'=>'editorHtml']])
->add('arquivoPerguntaFile', FileType::class, [
'constraints' => [new Assert\File([
'mimeTypes' => [
'image/jpeg',
'image/jpg'
],
'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .jpeg ou .jpg, imagem ou audio'
])],
'label' => 'Imagem da pergunta',
'help' => $filePerguntaFieldOptions['help'],
'required' => false,
])
// admin.aternativa_questao_topico
->add('alternativasQuestao', CollectionType::class, [
'label' => 'Aternativas de resposta para a questão',
'by_reference' => false,
], [
'edit' => 'inline',
'inline' => 'table',
// 'sortable' => 'posicao',
])
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('id', null, ['label'=>'Código'])
->add('titulo', null, ['label'=>'Título'])
->add('type', null, ['label'=>'Tipo'])
->add('content', null, ['label'=>'Conteúdo'])
;
}
/* ####### UPLOAD ARQUIVO ####### */
public function prePersist($object)
{
/** @var ArquivoDownload $object */
ini_set('upload_max_filesize', '50M');
if($object->getArquivoFile()){
$this->manageFilesUpload($object);
}
if($object->getArquivoPerguntaFile()){
$this->manageFilesPerguntaUpload($object);
}
return $object;
}
public function preUpdate($object)
{
/** @var ArquivoDownload $object */
ini_set('upload_max_filesize', '50M');
if($object->getArquivoFile()){
if($object->getArquivo()){
if(file_exists($object->getArquivo())) {
@unlink($object->getArquivo());
}
}
$this->manageFilesUpload($object);
}
//$object->setArquivo(null);
if($object->getArquivoPerguntaFile()){
if($object->getArquivoPergunta()){
if(file_exists($object->getArquivoPergunta())) {
@unlink($object->getArquivoPergunta());
}
}
$this->manageFilesPerguntaUpload($object);
}
return $object;
}
public function postRemove($object)
{
parent::postRemove($object); // TODO: Change the autogenerated stub
if($object->getArquivo()){
if (file_exists($object->getArquivo())) {
@unlink($object->getArquivo());
}
}
if($object->getArquivoPergunta()){
if (file_exists($object->getArquivoPergunta())) {
@unlink($object->getArquivoPergunta());
}
}
}
/**
* @param ArquivoDownload $obj
* @return ArquivoDownload
*/
private function manageFilesUpload($obj)
{
if($obj->getArquivoFile()){
$file = $obj->getArquivoFile();
$nameFile = $filename = md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
$uploadPath = "uploads/uniltec";
$file->move($uploadPath, $nameFile);
$obj->setArquivoOriginal($uploadPath . "/" . $filename);
$obj->setArquivo($uploadPath . "/" . $filename);
}
}
/**
* @param ArquivoDownload $obj
* @return ArquivoDownload
*/
private function manageFilesPerguntaUpload($obj)
{
if($obj->getArquivoPerguntaFile()){
$file = $obj->getArquivoPerguntaFile();
$nameFile = $filename = md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
$uploadPath = "uploads/uniltec";
$file->move($uploadPath, $nameFile);
$obj->setArquivoPerguntaOriginal($uploadPath . "/" . $filename);
$obj->setArquivoPergunta($uploadPath . "/" . $filename);
}
}
}