/** * 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); }