function nodeRename(PropertyMapping $propertyMapping, $fileName, $params) { $obj = $propertyMapping->getObj(); $id = isset($params['id']) && $params['id'] ? strtolower($params['id']) : 'id'; $id = $obj->{'get' . ucfirst($id)}(); $nodeId = ceil($id / 100); $dirName = $nodeId . '/' . $id; return $dirName; }
protected function getFieldValueByParam(PropertyMapping $propertyMapping, $params) { $obj = $propertyMapping->getObj(); $fieldValue = ''; if (isset($params['use_field_name']) && $params['use_field_name']) { $fieldValue = $propertyMapping->getFileDataPropertyName(); } else { $field = isset($params['field']) && $params['field'] ? $params['field'] : 'id'; $fieldValue = $obj->{'get' . ucfirst($field)}(); } if (!$fieldValue) { $fieldValue = $obj->getId(); } return $fieldValue; }
function dateRename(PropertyMapping $propertyMapping, $fileName, $params) { $obj = $propertyMapping->getObj(); $field = isset($params['field']) && $params['field'] ? $params['field'] : 'id'; $depth = isset($params['depth']) && $params['depth'] ? strtolower($params['depth']) : 'day'; $date = $obj->{'get' . ucfirst($field)}(); $date = $date ? $date->getTimestamp() : time(); $tpl = "Y/m/d"; if ($depth == 'month') { $tpl = "Y/m"; } if ($depth == 'year') { $tpl = "Y"; } $dirName = date($tpl, $date); return $dirName; }
/** * 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); }
/** * upload field and file data field are SAME ($obj->file) * @param EventArgs $args * @param PropertyMapping $mapping */ protected function updateSeparateProperties(\Doctrine\Common\EventArgs $args, PropertyMapping $mapping) { $uploadedFile = $mapping->getFileUploadPropertyValue(); $currentFileData = $mapping->getFileDataPropertyValue(); $previousFileData = $this->dataStorage->previusFieldDataIfChanged($mapping->getFileDataPropertyName(), $args); $currentFileName = $previousFileData ? $mapping->resolveFileName($previousFileData['fileName']) : null; //delete current file if ($previousFileData && (is_null($currentFileData) || $uploadedFile && $uploadedFile instanceof \Iphp\FileStoreBundle\File\File && $uploadedFile->isDeleted())) { if ($this->fileStorage->removeFile($currentFileName)) { $mapping->setFileDataPropertyValue(null); } } else { if ($uploadedFile && $uploadedFile instanceof File) { //Old value (file) exists and uploaded new file if ($currentFileName && !$this->fileStorage->isSameFile($uploadedFile, $currentFileName)) { //before upload new file delete old file $this->fileStorage->removeFile($currentFileName); } $fileData = $this->fileStorage->upload($mapping, $uploadedFile); $mapping->setFileDataPropertyValue($fileData); } } }
/** * Creates the property mapping from the read annotation and configured mapping. * * @param object $obj The object. * @param \ReflectionClass $class * @param \Iphp\FileStoreBundle\Mapping\Annotation\UploadableField $field The read annotation. * @return \Iphp\FileStoreBundle\Mapping\PropertyMapping The property mapping. * @throws \InvalidArgumentException */ protected function createMapping($obj, \ReflectionClass $class, UploadableField $field) { if (!array_key_exists($field->getMapping(), $this->mappingsConfig)) { throw new \InvalidArgumentException(sprintf('No mapping named "%s" configured.', $field->getMapping())); } $config = $this->mappingsConfig[$field->getMapping()]; $mapping = new PropertyMapping($obj, $config, $this->namerServiceInvoker); $mapping->setFileUploadProperty($class->getProperty($field->getFileUploadPropertyName())); $mapping->setFileDataProperty($class->getProperty($field->getFileDataPropertyName())); $mapping->setMappingName($field->getMapping()); return $mapping; }
/** * {@inheritDoc} * File may be \Symfony\Component\HttpFoundation\File\File or \Symfony\Component\HttpFoundation\File\UploadedFile */ public function upload(PropertyMapping $mapping, File $file) { $originalName = $this->getOriginalName($file); $mimeType = $this->getMimeType($file); //transform filename and directory name if namer exists in mapping definition list($fileName, $webPath) = $mapping->prepareFileName($originalName, $this); $fullFileName = $mapping->resolveFileName($fileName); //check if file already placed in needed position if (!$this->isSameFile($file, $fullFileName)) { $fileInfo = pathinfo($fullFileName); if ($file instanceof UploadedFile) { $this->checkDirectory($fileInfo['dirname']); $file->move($fileInfo['dirname'], $fileInfo['basename']); } else { $this->copyFile($file->getPathname(), $fileInfo['dirname'], $fileInfo['basename']); } } $fileData = array('fileName' => $fileName, 'originalName' => $originalName, 'mimeType' => $mimeType, 'size' => filesize($fullFileName), 'path' => $webPath); if (!$fileData['path']) { $fileData['path'] = substr($fullFileName, strlen($this->webDir)); } $ext = substr($originalName, strrpos($originalName, '.') + 1); if ((in_array($fileData['mimeType'], array('image/png', 'image/jpeg', 'image/pjpeg')) || in_array($ext, array('jpeg', 'jpg', 'png'))) && function_exists('getimagesize')) { list($width, $height, $type) = @getimagesize($fullFileName); $fileData = array_merge($fileData, array('width' => $width, 'height' => $height)); } return $fileData; }
/** * {@inheritDoc} */ public function removeByMapping(PropertyMapping $mapping) { if ($mapping->getDeleteOnRemove()) { $fileData = $mapping->getFileDataPropertyValue(); if ($fileData && file_exists($fileData['dir'] . '/' . $fileData['fileName'])) { @unlink($fileData['dir'] . '/' . $fileData['fileName']); } } }
/** * Creates the property mapping from the read annotation and configured mapping. * * @param object $obj The object. * @param \Iphp\FileStoreBundle\Mapping\Annotation\UploadableField $field The read annotation. * @return \Iphp\FileStoreBundle\Mapping\PropertyMapping The property mapping. * @throws \InvalidArgumentException */ protected function createMapping($obj, UploadableField $field) { $class = $this->dataStorage->getReflectionClass($obj); if (!array_key_exists($field->getMapping(), $this->mappings)) { throw new \InvalidArgumentException(sprintf('No mapping named "%s" configured.', $field->getMapping())); } $config = $this->mappings[$field->getMapping()]; $mapping = new PropertyMapping($obj, $config, $this->container); $mapping->setProperty($class->getProperty($field->getPropertyName())); $mapping->setFileNameProperty($class->getProperty($field->getFileNameProperty())); $mapping->setMappingName($field->getMapping()); return $mapping; }