Esempio n. 1
0
 /**
  * Update the mapped file for Entity (obj)
  *
  * @param \Doctrine\ORM\Event\PreUpdateEventArgs  $args
  */
 public function preUpdate(PreUpdateEventArgs $args)
 {
     $mappings = $this->mappingFactory->fromEventArgs($args);
     foreach ($mappings as $mapping) {
         //Uploaded or setted file
         $file = $mapping->getFilePropertyValue();
         $currentFileData = $args->hasChangedField($mapping->getPropertyName()) ? $args->getOldValue($mapping->getPropertyName()) : null;
         //If no new file
         if (is_null($file) || !$file instanceof File) {
             //Preserve old fileData if current file exists, else null
             if ($currentFileData) {
                 $mapping->setFileDataPropertyValue($this->fileStorage->checkFileExists($currentFileData) ? $currentFileData : null);
             }
         } else {
             if ($file instanceof \Iphp\FileStoreBundle\File\File && $file->isDeleted()) {
                 if ($this->fileStorage->removeFile($currentFileData)) {
                     $mapping->setFileDataPropertyValue(null);
                 }
             } else {
                 if ($currentFileData && !$this->fileStorage->isSameFile($file, $currentFileData)) {
                     $this->fileStorage->removeFile($currentFileData);
                 }
                 $fileData = $this->fileStorage->upload($mapping, $file);
                 $mapping->setFileDataPropertyValue($fileData);
             }
         }
     }
     $this->dataStorage->recomputeChangeSet($args);
 }
 /**
  * Removes the file if necessary.
  *
  * @param \Doctrine\Common\EventArgs $args The event arguments.
  */
 public function postRemove(EventArgs $args)
 {
     $mappings = $this->getMappingsFromArgs($args);
     foreach ($mappings as $mapping) {
         if ($mapping->getDeleteOnRemove()) {
             $this->fileStorage->removeFile($mapping->resolveFileName());
         }
     }
 }
 /**
  * array with 2 items - file (UploadedFile) and delete (checkbox)
  * @param $fileDataFromForm
  * @return int
  */
 public function reverseTransform($fileDataFromForm)
 {
     //if file field != file upload field - no need to store 'delete' in serialized file data
     if (isset($fileDataFromForm['delete']) && !$fileDataFromForm['delete']) {
         unset($fileDataFromForm['delete']);
     }
     if ($this->mapping && isset($fileDataFromForm['delete']) && $fileDataFromForm['delete']) {
         if ($this->mode == self::MODE_FILEDATA_FIELD) {
             return null;
         }
         //Todo: move to uploaderListener
         //File may no exists
         try {
             $this->fileStorage->removeFile($this->mapping->resolveFileName($fileDataFromForm['fileName']));
         } catch (\Exception $e) {
         }
     }
     return isset($fileDataFromForm['file']) ? $fileDataFromForm['file'] : ($this->mode == self::MODE_UPLOAD_FIELD ? null : $fileDataFromForm);
 }