/** * @param AdapterInterface $ea * @param array $config * @param object $object * @throws \RuntimeException * @return array */ protected function processFileUploads(AdapterInterface $ea, array &$config, $meta, $object) { $files = []; if (empty($config['uploadable'])) { return $files; } $uploads = $this->getPropertyValueFromObject($meta, $config['fileInfoField'], $object); if (!is_array($uploads) || !ArrayUtils::filterRecursive($uploads, null, true)) { // No uploaded files return $files; } if (ArrayUtils::hasStringKeys($uploads)) { $uploads = [$uploads]; } $pathGenerator = null; if (!empty($config['pathGenerator'])) { $pathGenerator = $config['pathGenerator']; } if (empty($config['fileField']) || !$meta->hasAssociation($config['fileField'])) { $fileClass = $this->getFileClass(); } else { $fileClass = $meta->getAssociationTargetClass($config['fileField']); } if (!$fileClass) { throw new \RuntimeException('Target file class cannot be found.'); } $uploadableSubscriber = $this->getUploadableSubscriber(); $fileInfoClass = $uploadableSubscriber->getDefaultFileInfoClass(); foreach ($uploads as $fileInfoArray) { $file = $this->createFile($fileClass, $fileInfoArray, $pathGenerator); $fileInfo = $this->createFileInfo($fileInfoClass, $fileInfoArray); $uploadableSubscriber->addEntityFileInfo($file, $fileInfo); $files[] = $file; } $om = $ea->getObjectManager(); if ($meta->hasAssociation($config['fileField'])) { $uow = $om->getUnitOfWork(); $value = $meta->isCollectionValuedAssociation($config['fileField']) ? $files : $file; $this->updateField($object, $uow, $ea, $meta, $config['fileField'], $value); if ($meta->isCollectionValuedAssociation($config['fileField'])) { $uow->computeChangeSet($meta, $object); } else { $ea->recomputeSingleObjectChangeSet($uow, $meta, $object); } } $this->getEventManager()->trigger(__FUNCTION__, $this, $files); foreach ($files as $file) { $om->persist($file); } return $files; }
/** * {@inheritDoc} */ public function setCreationOptions(array $options) { $this->creationOptions = ArrayUtils::filterRecursive($options, null, true); return $this; }
/** * @param HttpRequest $files * @return bool */ public static function hasUploadedFiles(HttpRequest $request) { $files = $request->getFiles()->toArray(); return (bool) ArrayUtils::filterRecursive($files, function ($value) { return $value && $value !== UPLOAD_ERR_NO_FILE; }, true); }