Exemple #1
0
 /**
  * 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);
 }
Exemple #4
0
 /**
  * @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;
 }