Esempio n. 1
0
 /**
  * Returns link for a version of a file
  *
  * @param  File   $file
  * @param  Version $version   Version identifier
  * @param  string $extension Extension
  * @return string Versioned link
  */
 public function getLink(File $file, Version $version, $extension)
 {
     $link = $this->getBaseLink($file);
     $pinfo = pathinfo($link);
     $link = $pinfo['dirname'] . '/' . $pinfo['filename'] . '-' . $version->toString();
     $link .= '.' . $extension;
     return $link;
 }
 /**
  * @param Versionable $versionable
  * @param Version $version
  * @return string
  */
 public function getPathVersion(Versionable $versionable, Version $version)
 {
     list($resource, $file) = $this->extractResourceAndFileFromVersionable($versionable);
     $path = $this->getPrefix();
     if ($file) {
         $path .= 'files/';
     } else {
         $path .= 'resources/';
     }
     $path .= $this->directoryCalculator->calculateDirectory($file ?: $resource) . '/' . $version->toString();
     $path .= '/' . ($file ? $file->getId() : $resource->getId());
     return $path;
 }
Esempio n. 3
0
 /**
  * @param File $file
  * @param string $version
  * @param Response $internalResponse
  * @param mixed $adaptedResponse
  */
 public function __construct(Response $internalResponse, $adaptedResponse, $version, File $file = null)
 {
     $this->internalResponse = $internalResponse;
     $this->adaptedResponse = $adaptedResponse;
     $this->version = Version::get($version);
     $this->file = $file;
 }
 /**
  * @test
  */
 public function hasVersionShouldReturnWhetherResourceHasVersion()
 {
     $file = $this->getInstance(array('data' => array('versions' => array('tussi', 'watussi'))));
     $this->assertTrue($file->hasVersion(Version::get('tussi')));
     $this->assertTrue($file->hasVersion(Version::get('watussi')));
     $this->assertFalse($file->hasVersion(Version::get('lussi')));
 }
Esempio n. 5
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);
 }
Esempio n. 6
0
 public function __construct(File $file, array $versions)
 {
     parent::__construct($file);
     $this->versions = array_map(function ($version) {
         return Version::get($version);
     }, $versions);
 }
 /**
  * @test
  * @dataProvider provideAcceleratedOptions
  */
 public function shouldSetupAcceleratedResponseCorrectly($download, $enableAcceleration, $canAccelerate, $serverSignature, $expectAccel, $expectedHeader = '', $stripPrefix = '', $addPrefix = '', $expectedPath = null)
 {
     $this->renderer->enableAcceleration($enableAcceleration);
     $this->renderer->stripPrefixFromPath($stripPrefix);
     $this->renderer->addPrefixToPath($addPrefix);
     $resource = Resource::create()->addVersion(Version::get('xooxer'));
     $file = File::create(array('resource' => $resource, 'name' => 'lussuti.pdf'))->addVersion(Version::get('xooxer'));
     $this->adapter->expects($this->any())->method('canAccelerate')->will($this->returnValue($canAccelerate));
     $this->adapter->expects($this->any())->method('getServerSignature')->will($this->returnValue($serverSignature));
     $this->ed->expects($this->at(0))->method('dispatch')->with(Events::RENDERER_BEFORE_RENDER, $this->isInstanceOf('Xi\\Filelib\\Event\\FileEvent'));
     $this->storage->expects($this->once())->method('retrieveVersion')->with($resource, Version::get('xooxer'))->will($this->returnValue(ROOT_TESTS . '/data/refcard.pdf'));
     $vp = $this->getMockedVersionProvider();
     $vp->expects($this->any())->method('getApplicableVersionable')->will($this->returnValue($resource));
     $vp->expects($this->any())->method('ensureValidVersion')->with($this->equalTo(Version::get('xooxer')))->will($this->returnArgument(0));
     $this->pm->expects($this->any())->method('getVersionProvider')->with($file, Version::get('xooxer'))->will($this->returnValue($vp));
     $ret = $this->renderer->render($file, Version::get('xooxer'), array('download' => $download));
     $this->assertInstanceOf('Xi\\Filelib\\Renderer\\Response', $ret);
     $this->assertEquals(200, $ret->getStatusCode());
     $expectedHeaders = array('Content-Type' => 'application/pdf');
     if ($download) {
         $expectedHeaders['Content-disposition'] = "attachment; filename={$file->getName()}";
     }
     if (!$expectAccel) {
         $this->assertNotEquals('', $ret->getContent());
     } else {
         $this->assertEquals('', $ret->getContent());
         $expectedHeaders[$expectedHeader] = $expectedPath . '/refcard.pdf';
     }
     $this->assertEquals($expectedHeaders, $ret->getHeaders());
 }
 /**
  * @test
  * @dataProvider providePrefixes
  */
 public function getPathVersionRespectsPrefixes($prefix)
 {
     $dc = $this->getMockBuilder(DirectoryCalculator::class)->disableOriginalConstructor()->getMock();
     $dc->expects($this->any())->method('calculateDirectory')->will($this->returnValue('1/2/3'));
     $pc = new ImprovedPathCalculator($dc, $prefix);
     $resource = Resource::create(['id' => 'xooxoo']);
     $this->assertEquals(trim($prefix, '/') . '/resources/1/2/3/luslus/xooxoo', $pc->getPathVersion($resource, Version::get('luslus')));
 }
Esempio n. 9
0
 public function __construct(VersionProvider $provider, Versionable $versionable, $versions = array())
 {
     $this->provider = $provider;
     $this->versionable = $versionable;
     $this->versions = array_map(function ($version) {
         return Version::get($version);
     }, $versions);
 }
Esempio n. 10
0
 /**
  * @test
  */
 public function linkerShouldExcludeRootProperly()
 {
     $extension = 'lus';
     $file = File::create(array('name' => 'lamantiini.lus', 'folder_id' => 2, 'resource' => Resource::create(array('id' => 1))));
     $linker = new BeautifurlLinker();
     $linker->attachTo($this->filelib);
     $this->assertEquals('lussuttaja/lamantiini-loso.lus', $linker->getLink($file, Version::get('loso'), $extension));
 }
 /**
  * @test
  */
 public function storeVersionFailsIfDirectoryNotCreatable()
 {
     $root = ROOT_TESTS . '/data/files';
     $storage = new FilesystemStorageAdapter($root);
     chmod($root, 0400);
     $resource = Resource::create(['id' => 666, 'uuid' => Uuid::uuid4()]);
     $this->setExpectedException('Xi\\Filelib\\Storage\\FileIOException');
     $storage->storeVersion($resource, Version::get('puupster'), $this->getSelfLussingManatee());
 }
 /**
  * @test
  */
 public function getsPathVersionForFile()
 {
     $dc = $this->getMockBuilder(DirectoryCalculator::class)->disableOriginalConstructor()->getMock();
     $dc->expects($this->exactly(2))->method('calculateDirectory')->will($this->onConsecutiveCalls('1/2/3', '3/2/1'));
     $pc = new LegacyPathCalculator($dc);
     $resource = Resource::create(['id' => 'xooxoo']);
     $file = File::create(['resource' => $resource, 'id' => 'looloo']);
     $this->assertEquals('1/2/3/luslus/sub/xooxoo/3/2/1/looloo', $pc->getPathVersion($file, Version::get('luslus')));
 }
 /**
  * @test
  */
 public function publishesAndUnpublishes()
 {
     $this->assertFalse($this->filesystem->has($this->path));
     $this->assertTrue($this->adapter->publish($this->file, Version::get('xooxer'), $this->vp, $this->linker));
     $this->assertTrue($this->filesystem->has($this->path));
     $this->assertFalse($this->adapter->publish($this->file, Version::get('xooxer'), $this->vp, $this->linker));
     $this->assertTrue($this->adapter->unpublish($this->file, Version::get('xooxer'), $this->vp, $this->linker));
     $this->assertFalse($this->filesystem->has($this->path));
     $this->assertFalse($this->adapter->unpublish($this->file, Version::get('xooxer'), $this->vp, $this->linker));
 }
 /**
  * @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);
 }
Esempio n. 15
0
 /**
  * @test
  */
 public function eventShouldInitializeCorrectly()
 {
     $file = File::create();
     $versions = array('tussi', 'lussi');
     $event = new PublisherEvent($file, $versions);
     $this->assertSame($file, $event->getFile());
     $versions = $event->getVersions();
     $this->assertCount(2, $versions);
     $this->assertEquals(array(Version::get('tussi'), Version::get('lussi')), $versions);
 }
 /**
  * @test
  */
 public function eventShouldInitializeCorrectly()
 {
     $vp = $this->getMockedVersionProvider();
     $file = File::create();
     $versions = array('tussi', 'lussi');
     $event = new VersionProviderEvent($vp, $file, $versions);
     $this->assertSame($file, $event->getVersionable());
     $this->assertSame($vp, $event->getProvider());
     $this->assertEquals(array(Version::get('tussi'), Version::get('lussi')), $event->getVersions());
 }
 /**
  * @test
  * @dataProvider provideVersionsAndValidities
  */
 public function checksVersionValidity($version, $expected)
 {
     if (!$expected) {
         $this->setExpectedException('Xi\\Filelib\\InvalidVersionException');
     }
     $plugin = new OriginalVersionPlugin('originale');
     $version = Version::get($version);
     $version2 = $plugin->ensureValidVersion($version);
     $this->assertSame($version, $version2);
     $this->assertInstanceOf('Xi\\Filelib\\Version', $version2);
 }
Esempio n. 18
0
 /**
  * @test
  */
 public function getVersionProviderShouldDelegateToProfile()
 {
     $vp = $this->getMockedVersionProvider();
     $file = File::create(array('profile' => 'meisterlus'));
     $version = Version::get('kloo');
     $profile = $this->getMockedFileProfile('meisterlus');
     $profile->expects($this->once())->method('getVersionProvider')->with($file, $version)->will($this->returnValue($vp));
     $this->manager->addProfile($profile);
     $ret = $this->manager->getVersionProvider($file, $version);
     $this->assertSame($vp, $ret);
 }
 /**
  * @test
  */
 public function unpublishShouldUnpublishFileVersion()
 {
     $adapter = new CopyFilesystemPublisherAdapter(ROOT_TESTS . '/data/publisher/public', "600", "700", '');
     $publisher = new Publisher($adapter, new UniversalSequentialLinker());
     $publisher->attachTo($this->filelib);
     $file = $this->filelib->uploadFile(ROOT_TESTS . '/data/self-lussing-manatee.jpg');
     $publisher->publishVersion($file, Version::get('original'));
     $path = ROOT_TESTS . '/data/publisher/public/' . $publisher->getUrl($file, Version::get('original'));
     $this->assertFileExists($path);
     $this->assertFalse(is_link($path));
     $publisher->unpublishVersion($file, Version::get('original'));
     $this->assertFileNotExists($path);
 }
Esempio n. 20
0
 /**
  * @test
  */
 public function toArrayShouldWorkAsExpected()
 {
     $resource = Resource::create();
     $resource->setHash('hashisen-kone');
     $resource->setUuid('uuid');
     $resource->setId(655);
     $resource->setDateCreated(new \DateTime('1978-03-21'));
     $resource->setMimetype('video/lus');
     $resource->setSize(5678);
     $resource->setExclusive(true);
     $resource->addVersion(Version::get('kraa'));
     $resource->addVersion(Version::get('xoo'));
     $this->assertEquals(array('id' => 655, 'uuid' => 'uuid', 'hash' => 'hashisen-kone', 'date_created' => new \DateTime('1978-03-21'), 'data' => array('versions' => array('kraa', 'xoo')), 'size' => 5678, 'mimetype' => 'video/lus', 'exclusive' => true), $resource->toArray());
 }
Esempio n. 21
0
 /**
  * @test
  */
 public function eventShouldInitializeCorrectly()
 {
     $file = $this->getMockedFile();
     $response = new Response();
     $adaptedResponse = new AdaptedResponse();
     $event = new RenderEvent($response, $adaptedResponse, 'gran-tenhunen', $file);
     $this->assertSame($file, $event->getFile());
     $this->assertEquals(Version::get('gran-tenhunen'), $event->getVersion());
     $this->assertSame($response, $event->getInternalResponse());
     $this->assertSame($adaptedResponse, $event->getAdaptedResponse());
     $replacementResponse = new AdaptedResponse();
     $event->setAdaptedResponse($replacementResponse);
     $this->assertSame($replacementResponse, $event->getAdaptedResponse());
 }
Esempio n. 22
0
 /**
  * @test
  */
 public function cachesVersions()
 {
     $id = 'tusso con lusso';
     $version = Version::get('tenhunizer');
     $versionable = File::create(array('id' => $id));
     $versionable2 = Resource::create(array('id' => $id));
     $this->assertFalse($this->cache->getVersion($versionable, $version));
     $this->cache->setVersion($versionable, $version, $this->retrieved);
     $this->cache->setVersion($versionable2, $version, $this->retrieved2);
     $this->assertSame($this->retrieved, $this->cache->getVersion($versionable, $version));
     $this->assertSame($this->retrieved2, $this->cache->getVersion($versionable2, $version));
     $this->assertNotSame($this->cache->getVersion($versionable, $version), $this->cache->getVersion($versionable2, $version));
     $this->cache->deleteVersion($versionable, $version);
     $this->assertFalse($this->cache->getVersion($versionable, $version));
     $this->assertSame($this->retrieved2, $this->cache->getVersion($versionable2, $version));
 }
Esempio n. 23
0
 public function setUp()
 {
     $this->version = Version::get('xoo');
     $fo = $this->getMockBuilder('\\Xi\\Filelib\\Folder\\FolderRepository')->disableOriginalConstructor()->getMock();
     $fo->expects($this->any())->method('find')->will($this->returnCallback(function ($id) {
         if ($id == 1) {
             return Folder::create(array('id' => 1, 'name' => 'root', 'parent_id' => null, 'url' => ''));
         } elseif ($id == 2) {
             return Folder::create(array('id' => 2, 'name' => 'lussuttaja', 'parent_id' => 1, 'url' => '/lussuttaja'));
         } elseif ($id == 3) {
             return Folder::create(array('id' => 2, 'name' => 'tussin', 'parent_id' => 2, 'url' => '/lussuttaja/tussin'));
         } elseif ($id == 4) {
             return Folder::create(array('id' => 2, 'name' => 'banaanin', 'parent_id' => 2, 'url' => '/lussuttaja/banaanin'));
         }
         return null;
     }));
     $this->fo = $fo;
     $vp = $this->getMockedVersionProvider();
     $vp->expects($this->any())->method('getExtension')->with($this->isInstanceOf('Xi\\Filelib\\File\\File'), $this->version)->will($this->returnValue('xoo'));
     $this->versionProvider = $vp;
 }
Esempio n. 24
0
 /**
  * @test
  */
 public function setsVersion()
 {
     $version = new Version('tenhunen', array('suuruus' => 'ylistetty'), array('x5', 'x6'));
     $this->assertEquals('tenhunen', $version->getVersion());
     $ret = $version->setVersion('tenhunizer');
     $this->assertNotSame($version, $ret);
     $this->assertEquals('tenhunizer', $ret->getVersion());
 }
 /**
  * @test
  * @dataProvider provideFiles
  */
 public function createsLinks($file, $levels, $fpd, $beautifurl)
 {
     $linker = new ReversibleSequentialLinker($levels, $fpd);
     $linker->attachTo($this->getMockedFilelib());
     $this->assertEquals($beautifurl, $linker->getLink($file, Version::get('xoo'), $this->versionProvider->getExtension($file, Version::get('xoo'))));
 }
Esempio n. 26
0
 /**
  * @param Version $version
  * @return Version
  * @throws InvalidVersionException
  */
 public function ensureValidVersion(Version $version)
 {
     $version = parent::ensureValidVersion($version);
     $unknownParams = array_map(function ($param) {
         return '\'' . $param . '\'';
     }, array_diff(array_keys($version->getParams()), call_user_func($this->allowedParamsGetter)));
     if (count($unknownParams)) {
         throw new InvalidVersionException(sprintf("Unknown version parameters: %s", implode(', ', $unknownParams)));
     }
     $unknownModifiers = array_map(function ($param) {
         return '\'' . $param . '\'';
     }, array_diff($version->getModifiers(), call_user_func($this->allowedModifiersGetter)));
     if (count($unknownModifiers)) {
         throw new InvalidVersionException(sprintf("Unknown version modifiers: %s", implode(', ', $unknownModifiers)));
     }
     $newParams = array_merge(call_user_func($this->defaultParamsGetter), $version->getParams());
     $version = new Version($version->getVersion(), $newParams, $version->getModifiers());
     $isValid = call_user_func_array($this->versionValidityChecker, array($version));
     if (!$isValid) {
         throw new InvalidVersionException(sprintf("Invalid version '%s'", $version->toString()));
     }
     return $version;
 }
Esempio n. 27
0
 /**
  * @test
  */
 public function throwsUpInvalidVersion()
 {
     $this->plugin->expects($this->once())->method('getProvidedVersions')->will($this->returnValue(array('sooxer')));
     $version = Version::get('tooxer');
     $this->setExpectedException('Xi\\Filelib\\InvalidVersionException');
     $this->plugin->ensureValidVersion($version);
 }
 /**
  * @test
  * @dataProvider updateResourceProvider
  * @param mixed $resourceId
  * @param mixed $versions
  */
 public function updateResourceShouldUpdateResource($resourceId, $versions)
 {
     $this->setUpSimpleDataSet();
     $resource = $this->findResource($resourceId);
     $this->assertInstanceOf('Xi\\Filelib\\Resource\\Resource', $resource);
     $this->assertNotNull($resource->getUuid());
     $this->assertEquals($resourceId, $resource->getId());
     $this->assertNotEquals($versions, $resource->getVersions());
     $this->assertTrue($resource->isExclusive());
     $expectedVersions = array_merge($resource->getVersions(), $versions);
     foreach ($versions as $version) {
         $resource->addVersion(Version::get($version));
     }
     $resource->setExclusive(false);
     $this->assertTrue($this->backend->updateResource($resource));
     $resource2 = $this->findResource($resourceId);
     $this->assertEquals($expectedVersions, $resource2->getVersions());
     $this->assertFalse($resource2->isExclusive());
 }
Esempio n. 29
0
 /**
  * @test
  */
 public function failedProviderFails()
 {
     $resource = Resource::create();
     $file = File::create(array('resource' => $resource, 'name' => 'lussuti.pdf'));
     $vp = $this->getMockedVersionProvider(array('xooxer'), true);
     $this->pm->expects($this->any())->method('getVersionProvider')->with($file, Version::get('xooxer'))->will($this->returnValue($vp));
     $vp->expects($this->atLeastOnce())->method('getApplicableVersionable')->will($this->returnValue($resource));
     $vp->expects($this->atLeastOnce())->method('ensureValidVersion')->will($this->returnArgument(0));
     $vp->expects($this->once())->method('provideVersion')->with($file, Version::get('xooxer'))->will($this->throwException(new RuntimeException('Oh noes')));
     $this->fiop->expects($this->never())->method('update');
     $ret = $this->renderer->render($file, 'xooxer');
     $this->assertInstanceOf('Xi\\Filelib\\Renderer\\Response', $ret);
     $this->assertEquals(404, $ret->getStatusCode());
 }
Esempio n. 30
0
 /**
  * @param File $file
  * @param Version $version
  * @param string $extension
  * @return string
  */
 public function getLink(File $file, Version $version, $extension)
 {
     $pinfo = pathinfo($this->getFileName($file));
     return $file->getDateCreated()->format($this->getFormat()) . '/' . $pinfo['filename'] . '-' . $version->toString() . '.' . $extension;
 }