lib/boab/cms-bundle/src/Manager/DocumentTypeManager.php line 19

Open in your IDE?
  1. <?php
  2. namespace Boab\CmsBundle\Manager;
  3. use Boab\CmsBundle\Entity\Document;
  4. use Boab\CmsBundle\Util\FileUploader;
  5. use Boab\CmsBundle\Entity\DocumentInterface;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Form\FormBuilderInterface;
  8. use Symfony\Component\Form\Extension\Core\Type\FileType;
  9. use Symfony\Component\HttpFoundation\File\UploadedFile;
  10. use Symfony\Component\Validator\Constraints as Constraints;
  11. use Symfony\Component\Form\FormEvents;
  12. use Symfony\Component\Form\FormEvent;
  13. class DocumentTypeManager extends AbstractContentType implements AdminFormInterface
  14. {
  15.     private $oldFile;
  16.     public function __construct(FileUploader $uploader)
  17.     {
  18.         $this->uploader $uploader;
  19.     }
  20.     public function buildForm(FormBuilderInterface $builder, array $options=[])  
  21.     {
  22.         parent::buildForm($builder$options);
  23.         $builder->add('document'FileType::class, [
  24.             'attr'=>[
  25.                 'class'=>'select-document'
  26.             ],            
  27.             'required'=>false,
  28.             'constraints' => $this->getFileConstraints($options),             
  29.         ]);  
  30.         
  31.         $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event){
  32.             $content $event->getData();
  33.             $this->oldFile $content->getDocumentPath();
  34.         });   
  35.         $builder->addEventListener(FormEvents::SUBMIT, function(FormEvent $event){
  36.             $content $event->getData();
  37.             if($content->getDocument() instanceof UploadedFile){
  38.                 $ext $content->getDocument()->guessExtension();
  39.                 $content->setExtension($ext);
  40.             }
  41.         });              
  42.     }     
  43.     public function getFileConstraints($options)
  44.     {
  45.         if($options["data"]->getId() && !$options["data"]->getUploadedFile()){
  46.             return;
  47.         }
  48.         $constraints = [
  49.             new Constraints\File([
  50.                 'maxSize' => '2100k',
  51.                 'mimeTypes' => [
  52.                     'application/pdf',
  53.                     'application/x-pdf',
  54.                     'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  55.                 ],
  56.                 'mimeTypesMessage' => 'Please upload a valid PDF',
  57.             ]),
  58.         ] ;
  59.         array_unshift($constraints, new Constraints\NotBlank());
  60.         return $constraints;
  61.     }
  62.     public function prePersist(DocumentInterface $content)
  63.     {
  64.         $this->preUpdate($content);
  65.     }
  66.     public function preUpdate(DocumentInterface $content)
  67.     {
  68.         $uploadFile $content->getDocument();
  69.         if($uploadFile instanceof UploadedFile ){
  70.             $fileName $this->uploader->upload($uploadFile$content->getUploadRoot());
  71.             $content->setFileName($fileName);
  72.             if($this->oldFile){
  73.                 $this->uploader->deleteFile($this->oldFile);
  74.             }
  75.         }
  76.     }
  77.     public function preRemove(DocumentInterface $document)
  78.     {
  79.         $docPath sprintf("%s/%s"$document->getUploadRoot(), $document->getFileName());
  80.         $this->uploader->deleteFile($docPath);
  81.     }
  82. }