<?php
declare(strict_types=1);
namespace App\Admin;
use App\Entity\ArquivoDownload;
use App\Entity\ContaPagar;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Show\ShowMapper;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Validator\Constraints as Assert;
final class ArquivoDownloadAdmin extends AbstractAdmin
{
protected function configureRoutes(RouteCollection $collection)
{
$collection->add('dowloadArquivo');
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('categoria.secao',null, ['label'=>'Seção'])
->add('categoria',null, ['label'=>'Categoria'])
->add('titulo','doctrine_orm_callback',[
'label'=>'Título',
'callback' => array($this, 'filterTitulo'),
])
->add('descricao','doctrine_orm_callback',[
'label'=>'Descrição',
'callback' => array($this, 'filterDescricao'),
])
;
}
public function filterTitulo($queryBuilder, $alias, $field, $value)
{
if (!$value['value']) {
return;
}
$value = mb_strtolower($value['value']);
$queryBuilder
->andWhere("LOWER($alias.titulo) LIKE :nome" )
->setParameter('nome', "%$value%");
return true;
}
public function filterDescricao($queryBuilder, $alias, $field, $value)
{
if (!$value['value']) {
return;
}
$value = mb_strtolower($value['value']);
$queryBuilder
->andWhere("LOWER($alias.descricao) LIKE :nome" )
->setParameter('nome', "%$value%");
return true;
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->addIdentifier('categoria.secao.nome', null, ['label'=>'Seção'])
->addIdentifier('categoria.nome', null, ['label'=>'Categoria'])
->add('titulo', null, ['label'=>'Título'])
->add('descricao', null, ['label'=>'Descrição'])
->add('createdAt', null, ['label'=>'Data de Upload'])
->add('_action', null, [
'actions' => [
//'show' => [],
'edit' => [],
'centroCusto' => [
'template' => 'Download/download_btn.html.twig',
],
'delete' => [],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
/** @var ArquivoDownload $arquivo */
$arquivo = $this->getSubject();
$imgReq = false;
$fileFieldOptions = [
'data_class' => null,
'required' => $imgReq,
'label' => 'Arquivo',
'help' => ''
];
if (!is_null($arquivo) && $arquivo->getArquivo() != '') {
$fileFieldOptions['help'] = '<a href="/'.$arquivo->getArquivo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar Arquivo</a>';
}
$formMapper
->add('categoria', ModelType::class, [
'placeholder' => '-- Selecione --',
'label' => 'Categoria do Arquivo',
'required' => true,
'expanded' => false,
'multiple' => false,
])
->add('titulo', null, ['label'=>'Título'])
->add('descricao', null, ['label'=>'Descrição'])
->add('franquiaPodeAcessar', null, ['label'=>'Permitir Franquia Fazer Download'])
->add('arquivoFile', FileType::class, [
'constraints' => [new Assert\File([
'mimeTypes' => [
'application/pdf',
'application/x-pdf',
'image/jpeg',
'image/jpg',
'image/png'
],
'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .pdf'
])],
'label' => 'Arquivo',
'help' => $fileFieldOptions['help'],
'required' => false,
])
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('titulo')
->add('descricao')
->add('createdAt')
->add('franquiaPodeAcessar')
->add('arquivo')
->add('arquivoOriginal')
;
}
public function prePersist($object)
{
/** @var ArquivoDownload $object */
ini_set('upload_max_filesize', '50M');
if($object->getArquivoFile()){
$this->manageFilesUpload($object);
}
return $object;
}
public function preUpdate($object)
{
/** @var ArquivoDownload $object */
ini_set('upload_max_filesize', '50M');
if($object->getArquivoFile()){
if($object->getArquivoOriginal()){
if(file_exists($object->getArquivoOriginal())) {
@unlink($object->getArquivoOriginal());
}
}
$this->manageFilesUpload($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());
}
}
}
/**
* @param ArquivoDownload $obj
* @return ArquivoDownload
*/
private function manageFilesUpload($obj)
{
$file = $obj->getArquivoFile();
$nameFile = $filename = md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
$uploadPath = "uploads/download";
$file->move($uploadPath, $nameFile);
$obj->setArquivoOriginal($uploadPath . "/" . $filename);
$obj->setArquivo($uploadPath . "/" . $filename);
}
}