/** * Renders a file to a response * * @param mixed $file * @param mixed $version Version string or object * @param array $options * @return mixed */ public function render($file, $version, array $options = array()) { $version = Version::get($version); $response = new Response(); if (!$file instanceof File) { $file = $this->fileRepository->find($file); if (!$file) { return $this->adaptResponse($response->setStatusCode(404), $version, null); } } // Renderer / authorization evil tag team try { $event = new FileEvent($file); $this->eventDispatcher->dispatch(Events::RENDERER_BEFORE_RENDER, $event); } catch (AccessDeniedException $e) { return $this->adaptResponse($response->setStatusCode(403), $version, $file); } try { $provider = $this->profiles->getVersionProvider($file, $version); $version = $provider->ensureValidVersion($version); } catch (InvalidVersionException $e) { return $this->adaptResponse($response->setStatusCode(404), $version, null); } if (!$this->versionIsObtainable($file, $version)) { return $this->adaptResponse($response->setStatusCode(404), $version, $file); } $options = $this->mergeOptions($options); if ($options['download'] == true) { $response->setHeader('Content-disposition', "attachment; filename={$file->getName()}"); } $retrieved = new FileObject($this->retrieve($file, $version)); $response->setHeader('Content-Type', $retrieved->getMimetype()); $this->injectContentToResponse($retrieved, $response); return $this->adaptResponse($response, $version, $file); }
/** * @param string $link * @return array */ public function reverseLink($link) { $pinfo = pathinfo($link); $split = explode('-', $pinfo['filename']); $version = array_pop($split); $version = Version::get($version); $uuid = implode('-', $split); $file = $this->fileRepository->findByUuid($uuid); return array($file, $version); }
/** * @test */ public function findAllShouldReturnAnArrayOfFileInstancesIfFilesAreFound() { $upload = ROOT_TESTS . '/data/self-lussing-manatee.jpg'; $this->filelib->getFileRepository()->upload($upload, $this->filelib->getFolderRepository()->createByUrl('arto-tenhunen')); $this->filelib->getFileRepository()->upload($upload, $this->filelib->getFolderRepository()->createByUrl('arto-tenhunen/on')); $this->filelib->getFileRepository()->upload($upload, $this->filelib->getFolderRepository()->createByUrl('arto-tenhunen/on/suurmies')); $files = $this->op->findAll(); $this->assertCount(3, $files); }
/** * @param File $file * @param Version $version * @return bool */ public function unpublishVersion(File $file, Version $version) { $event = new PublisherEvent($file, array($version)); $this->eventDispatcher->dispatch(Events::FILE_BEFORE_UNPUBLISH, $event); if ($this->versionUnpublisher($file, $version)) { $this->fileRepository->update($file); $event = new PublisherEvent($file, array($version)); $this->eventDispatcher->dispatch(Events::FILE_AFTER_UNPUBLISH, $event); return true; } return false; }
public function provideAllVersions(File $file) { $versionable = $this->getApplicableVersionable($file); $versions = $this->createAllTemporaryVersions($file); foreach ($versions as $version => $tmp) { $version = Version::get($version); $this->storage->storeVersion($versionable, $version, $tmp); $versionable->addVersion($version); unlink($tmp); } $this->fileRepository->update($file); $event = new VersionProviderEvent($this, $file, array_keys($versions)); $this->eventDispatcher->dispatch(Events::VERSIONS_PROVIDED, $event); }
/** * Updates a folder * * @param Folder $folder Folder */ public function update(Folder $folder) { $route = $this->buildRoute($folder); $folder->setUrl($route); $this->backend->updateFolder($folder); foreach ($this->findFiles($folder) as $file) { $this->fileRepository->update($file); } foreach ($this->findSubFolders($folder) as $subFolder) { $this->update($subFolder); } $event = new FolderEvent($folder); $this->eventDispatcher->dispatch(Events::FOLDER_AFTER_UPDATE, $event); return $folder; }