From 62aafe5ace667e110dcf74de91c74e79cee662ea Mon Sep 17 00:00:00 2001 From: Toni Uebernickel Date: Wed, 29 May 2013 13:52:47 +0200 Subject: [PATCH 1/2] add branch alias for 1.0.x version line --- composer.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 98b5d6b42..f1ad00033 100644 --- a/composer.json +++ b/composer.json @@ -35,5 +35,11 @@ "psr-0": { "Liip\\ImagineBundle": "" } }, - "target-dir": "Liip/ImagineBundle" + "target-dir": "Liip/ImagineBundle", + + "extra": { + "branch-alias": { + "dev-develop": "1.0.x-dev" + } + } } From a1781b7c180a0d9a497da656a289e2c3fee35690 Mon Sep 17 00:00:00 2001 From: Maksim Kotlyar Date: Fri, 6 Dec 2013 20:04:12 +0200 Subject: [PATCH 2/2] [resolver] remove request from resolve method. --- Controller/ImagineController.php | 15 ++++---- Imagine/Cache/CacheManager.php | 4 +- Imagine/Cache/Resolver/AmazonS3Resolver.php | 2 +- Imagine/Cache/Resolver/AwsS3Resolver.php | 2 +- Imagine/Cache/Resolver/CacheResolver.php | 6 +-- Imagine/Cache/Resolver/NoCacheResolver.php | 5 +-- Imagine/Cache/Resolver/ResolverInterface.php | 4 +- Imagine/Cache/Resolver/WebPathResolver.php | 22 +++++++++-- Resources/config/imagine.xml | 6 +++ Resources/doc/filters.md | 2 +- Tests/Controller/ImagineControllerTest.php | 6 +++ Tests/Imagine/Cache/CacheManagerTest.php | 9 ++--- .../Cache/Resolver/AmazonS3ResolverTest.php | 4 +- .../Cache/Resolver/AwsS3ResolverTest.php | 4 +- .../Cache/Resolver/CacheResolverTest.php | 17 +++------ .../Cache/Resolver/WebPathResolverTest.php | 38 ++++++++++++++----- Tests/bootstrap.php | 14 ++++--- UPGRADE.md | 7 ++++ 18 files changed, 109 insertions(+), 58 deletions(-) create mode 100644 UPGRADE.md diff --git a/Controller/ImagineController.php b/Controller/ImagineController.php index c2979924d..11a2cd5e3 100644 --- a/Controller/ImagineController.php +++ b/Controller/ImagineController.php @@ -51,16 +51,17 @@ public function __construct(DataManager $dataManager, FilterManager $filterManag */ public function filterAction(Request $request, $path, $filter) { - $targetPath = $this->cacheManager->resolve($request, $path, $filter); - if ($targetPath instanceof Response) { - return $targetPath; + $originalImagePath = $path; + $filteredImagePath = $this->cacheManager->resolve($originalImagePath, $filter); + if ($filteredImagePath instanceof Response) { + return $filteredImagePath; } - $image = $this->dataManager->find($filter, $path); - $response = $this->filterManager->get($request, $filter, $image, $path); + $originalImage = $this->dataManager->find($filter, $originalImagePath); + $response = $this->filterManager->get($request, $filter, $originalImage, $originalImagePath); - if ($targetPath) { - $response = $this->cacheManager->store($response, $targetPath, $filter); + if ($filteredImagePath) { + $response = $this->cacheManager->store($response, $filteredImagePath, $filter); } return $response; diff --git a/Imagine/Cache/CacheManager.php b/Imagine/Cache/CacheManager.php index 76b44bca0..e494c9180 100644 --- a/Imagine/Cache/CacheManager.php +++ b/Imagine/Cache/CacheManager.php @@ -173,7 +173,7 @@ public function generateUrl($path, $filter, $absolute = false) * * @throws NotFoundHttpException if the path can not be resolved */ - public function resolve(Request $request, $path, $filter) + public function resolve($path, $filter) { if (false !== strpos($path, '/../') || 0 === strpos($path, '../')) { throw new NotFoundHttpException(sprintf("Source image was searched with '%s' outside of the defined root path", $path)); @@ -185,7 +185,7 @@ public function resolve(Request $request, $path, $filter) return false; } - return $resolver->resolve($request, $path, $filter); + return $resolver->resolve($path, $filter); } /** diff --git a/Imagine/Cache/Resolver/AmazonS3Resolver.php b/Imagine/Cache/Resolver/AmazonS3Resolver.php index 5a622bddc..bd8c1ca41 100644 --- a/Imagine/Cache/Resolver/AmazonS3Resolver.php +++ b/Imagine/Cache/Resolver/AmazonS3Resolver.php @@ -84,7 +84,7 @@ public function setCacheManager(CacheManager $cacheManager) /** * {@inheritDoc} */ - public function resolve(Request $request, $path, $filter) + public function resolve($path, $filter) { $objectPath = $this->getObjectPath($path, $filter); if ($this->objectExists($objectPath)) { diff --git a/Imagine/Cache/Resolver/AwsS3Resolver.php b/Imagine/Cache/Resolver/AwsS3Resolver.php index 7da87a89c..3a0e76980 100644 --- a/Imagine/Cache/Resolver/AwsS3Resolver.php +++ b/Imagine/Cache/Resolver/AwsS3Resolver.php @@ -85,7 +85,7 @@ public function setCacheManager(CacheManager $cacheManager) /** * {@inheritDoc} */ - public function resolve(Request $request, $path, $filter) + public function resolve($path, $filter) { $objectPath = $this->getObjectPath($path, $filter); if ($this->objectExists($objectPath)) { diff --git a/Imagine/Cache/Resolver/CacheResolver.php b/Imagine/Cache/Resolver/CacheResolver.php index 8bafec06b..0f5dbf75d 100644 --- a/Imagine/Cache/Resolver/CacheResolver.php +++ b/Imagine/Cache/Resolver/CacheResolver.php @@ -4,7 +4,7 @@ use Doctrine\Common\Cache\Cache; -use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolverInterface; @@ -55,14 +55,14 @@ public function __construct(Cache $cache, ResolverInterface $cacheResolver, arra /** * {@inheritDoc} */ - public function resolve(Request $request, $path, $filter) + public function resolve($path, $filter) { $key = $this->generateCacheKey('resolve', $path, $filter); if ($this->cache->contains($key)) { return $this->cache->fetch($key); } - $targetPath = $this->resolver->resolve($request, $path, $filter); + $targetPath = $this->resolver->resolve($path, $filter); $this->saveToCache($key, $targetPath); /* diff --git a/Imagine/Cache/Resolver/NoCacheResolver.php b/Imagine/Cache/Resolver/NoCacheResolver.php index 0a8ced5f9..42514d52a 100644 --- a/Imagine/Cache/Resolver/NoCacheResolver.php +++ b/Imagine/Cache/Resolver/NoCacheResolver.php @@ -2,7 +2,6 @@ namespace Liip\ImagineBundle\Imagine\Cache\Resolver; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** @@ -13,9 +12,9 @@ class NoCacheResolver extends WebPathResolver /** * {@inheritDoc} */ - public function resolve(Request $request, $path, $filter) + public function resolve($path, $filter) { - $this->setBasePath($request->getBaseUrl()); + $this->setBasePath($this->container->get('request')->getBaseUrl()); return $this->getFilePath($path, $filter); } diff --git a/Imagine/Cache/Resolver/ResolverInterface.php b/Imagine/Cache/Resolver/ResolverInterface.php index 0b91b4d84..f873b88ec 100644 --- a/Imagine/Cache/Resolver/ResolverInterface.php +++ b/Imagine/Cache/Resolver/ResolverInterface.php @@ -2,7 +2,6 @@ namespace Liip\ImagineBundle\Imagine\Cache\Resolver; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; interface ResolverInterface @@ -10,7 +9,6 @@ interface ResolverInterface /** * Resolves filtered path for rendering in the browser. * - * @param Request $request The request made against a _imagine_* filter route. * @param string $path The path where the resolved file is expected. * @param string $filter The name of the imagine filter in effect. * @@ -19,7 +17,7 @@ interface ResolverInterface * * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException In case the path can not be resolved. */ - function resolve(Request $request, $path, $filter); + function resolve($path, $filter); /** * Stores the content of the given Response. diff --git a/Imagine/Cache/Resolver/WebPathResolver.php b/Imagine/Cache/Resolver/WebPathResolver.php index 4e537e278..6555bf466 100644 --- a/Imagine/Cache/Resolver/WebPathResolver.php +++ b/Imagine/Cache/Resolver/WebPathResolver.php @@ -4,15 +4,31 @@ use Symfony\Component\Finder\Finder; use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\DependencyInjection\ContainerAwareInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; -class WebPathResolver extends AbstractFilesystemResolver +class WebPathResolver extends AbstractFilesystemResolver implements ContainerAwareInterface { + /** + * @var ContainerInterface + */ + protected $container; + + /** + * {@inheritDoc} + */ + public function setContainer(ContainerInterface $container = null) + { + $this->container = $container; + } + /** * {@inheritDoc} */ - public function resolve(Request $request, $path, $filter) + public function resolve($path, $filter) { + $request = $this->container->get('request'); + $browserPath = $this->decodeBrowserPath($this->getBrowserPath($path, $filter)); $this->basePath = $request->getBaseUrl(); $targetPath = $this->getFilePath($path, $filter); diff --git a/Resources/config/imagine.xml b/Resources/config/imagine.xml index 02edbb8c2..b6e7af156 100644 --- a/Resources/config/imagine.xml +++ b/Resources/config/imagine.xml @@ -185,11 +185,17 @@ %liip_imagine.cache_mkdir_mode% + + service_container + + + service_container + diff --git a/Resources/doc/filters.md b/Resources/doc/filters.md index 4b8037b88..b896485f9 100644 --- a/Resources/doc/filters.md +++ b/Resources/doc/filters.md @@ -172,7 +172,7 @@ but it illustrates the core idea. ``` php public function filterAction(Request $request, $path, $filter) { - $targetPath = $this->cacheManager->resolve($request, $path, $filter); + $targetPath = $this->cacheManager->resolve($path, $filter); if ($targetPath instanceof Response) { return $targetPath; } diff --git a/Tests/Controller/ImagineControllerTest.php b/Tests/Controller/ImagineControllerTest.php index 891df2c25..9eea0ae50 100644 --- a/Tests/Controller/ImagineControllerTest.php +++ b/Tests/Controller/ImagineControllerTest.php @@ -18,6 +18,7 @@ use Liip\ImagineBundle\Tests\AbstractTest; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\HttpFoundation\Request; /** @@ -100,6 +101,11 @@ public function testFilterActionLive() $controller = new ImagineController($dataManager, $filterManager, $cacheManager); $request = Request::create('/media/cache/thumbnail/cats.jpeg'); + + $container = new Container(); + $container->set('request', $request); + $webPathResolver->setContainer($container); + $response = $controller->filterAction($request, 'cats.jpeg', 'thumbnail'); $targetPath = realpath($this->webRoot).'/media/cache/thumbnail/cats.jpeg'; diff --git a/Tests/Imagine/Cache/CacheManagerTest.php b/Tests/Imagine/Cache/CacheManagerTest.php index d7c61d4bb..3e4ce39a2 100644 --- a/Tests/Imagine/Cache/CacheManagerTest.php +++ b/Tests/Imagine/Cache/CacheManagerTest.php @@ -89,26 +89,25 @@ public function testResolveInvalidPath($path) $cacheManager = new CacheManager($this->getMockFilterConfiguration(), $this->getMockRouter(), $this->fixturesDir.'/assets'); $this->setExpectedException('Symfony\Component\HttpKernel\Exception\NotFoundHttpException'); - $cacheManager->resolve(new Request(), $path, 'thumbnail'); + $cacheManager->resolve($path, 'thumbnail'); } public function testResolveWithoutResolver() { $cacheManager = new CacheManager($this->getMockFilterConfiguration(), $this->getMockRouter(), $this->fixturesDir.'/assets'); - $this->assertFalse($cacheManager->resolve(new Request(), 'cats.jpeg', 'thumbnail')); + $this->assertFalse($cacheManager->resolve('cats.jpeg', 'thumbnail')); } public function testFallbackToDefaultResolver() { $response = new Response('', 200); - $request = new Request(); $resolver = $this->getMockResolver(); $resolver ->expects($this->once()) ->method('resolve') - ->with($request, 'cats.jpeg', 'thumbnail') + ->with('cats.jpeg', 'thumbnail') ->will($this->returnValue('/thumbs/cats.jpeg')) ; $resolver @@ -140,7 +139,7 @@ public function testFallbackToDefaultResolver() $cacheManager->addResolver('default', $resolver); // Resolve fallback to default resolver - $this->assertEquals('/thumbs/cats.jpeg', $cacheManager->resolve($request, 'cats.jpeg', 'thumbnail')); + $this->assertEquals('/thumbs/cats.jpeg', $cacheManager->resolve('cats.jpeg', 'thumbnail')); // Store fallback to default resolver $this->assertEquals($response, $cacheManager->store($response, '/thumbs/cats.jpeg', 'thumbnail')); diff --git a/Tests/Imagine/Cache/Resolver/AmazonS3ResolverTest.php b/Tests/Imagine/Cache/Resolver/AmazonS3ResolverTest.php index d81071e61..96a71c062 100644 --- a/Tests/Imagine/Cache/Resolver/AmazonS3ResolverTest.php +++ b/Tests/Imagine/Cache/Resolver/AmazonS3ResolverTest.php @@ -149,7 +149,7 @@ public function testResolveNewObject() ; $resolver = new AmazonS3Resolver($s3, 'images.example.com'); - $targetPath = $resolver->resolve(new Request(), '/some-folder/targetpath.jpg', 'thumb'); + $targetPath = $resolver->resolve('/some-folder/targetpath.jpg', 'thumb'); $this->assertEquals('thumb/some-folder/targetpath.jpg', $targetPath); } @@ -170,7 +170,7 @@ public function testResolveRedirectsOnExisting() ; $resolver = new AmazonS3Resolver($s3, 'images.example.com'); - $response = $resolver->resolve(new Request(), '/some-folder/targetpath.jpg', 'thumb'); + $response = $resolver->resolve('/some-folder/targetpath.jpg', 'thumb'); $this->assertInstanceOf('Symfony\Component\HttpFoundation\Response', $response); $this->assertEquals(301, $response->getStatusCode()); diff --git a/Tests/Imagine/Cache/Resolver/AwsS3ResolverTest.php b/Tests/Imagine/Cache/Resolver/AwsS3ResolverTest.php index 4c70c1db7..14045d9e5 100644 --- a/Tests/Imagine/Cache/Resolver/AwsS3ResolverTest.php +++ b/Tests/Imagine/Cache/Resolver/AwsS3ResolverTest.php @@ -160,7 +160,7 @@ public function testResolveNewObject() ; $resolver = new AwsS3Resolver($s3, 'images.example.com'); - $targetPath = $resolver->resolve(new Request(), '/some-folder/targetpath.jpg', 'thumb'); + $targetPath = $resolver->resolve('/some-folder/targetpath.jpg', 'thumb'); $this->assertEquals('thumb/some-folder/targetpath.jpg', $targetPath); } @@ -181,7 +181,7 @@ public function testResolveRedirectsOnExisting() ; $resolver = new AwsS3Resolver($s3, 'images.example.com'); - $response = $resolver->resolve(new Request(), '/some-folder/targetpath.jpg', 'thumb'); + $response = $resolver->resolve('/some-folder/targetpath.jpg', 'thumb'); $this->assertInstanceOf('Symfony\Component\HttpFoundation\Response', $response); $this->assertEquals(301, $response->getStatusCode()); diff --git a/Tests/Imagine/Cache/Resolver/CacheResolverTest.php b/Tests/Imagine/Cache/Resolver/CacheResolverTest.php index bcaff8e09..212b7fa8b 100644 --- a/Tests/Imagine/Cache/Resolver/CacheResolverTest.php +++ b/Tests/Imagine/Cache/Resolver/CacheResolverTest.php @@ -7,7 +7,6 @@ use Liip\ImagineBundle\Tests\AbstractTest; use Liip\ImagineBundle\Tests\Fixtures\MemoryCache; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** @@ -21,23 +20,21 @@ class CacheResolverTest extends AbstractTest public function testResolveIsSavedToCache() { - $request = new Request(); - $resolver = $this->getMockResolver(); $resolver ->expects($this->once()) ->method('resolve') - ->with($request, $this->path, $this->filter) + ->with($this->path, $this->filter) ->will($this->returnValue($this->targetPath)) ; $cacheResolver = new CacheResolver(new MemoryCache(), $resolver); - $this->assertEquals($this->targetPath, $cacheResolver->resolve($request, $this->path, $this->filter)); + $this->assertEquals($this->targetPath, $cacheResolver->resolve($this->path, $this->filter)); // Call multiple times to verify the cache is used. - $this->assertEquals($this->targetPath, $cacheResolver->resolve($request, $this->path, $this->filter)); - $this->assertEquals($this->targetPath, $cacheResolver->resolve($request, $this->path, $this->filter)); + $this->assertEquals($this->targetPath, $cacheResolver->resolve($this->path, $this->filter)); + $this->assertEquals($this->targetPath, $cacheResolver->resolve($this->path, $this->filter)); } public function testStoreIsForwardedToResolver() @@ -92,13 +89,11 @@ public function testGetBrowserPath() */ public function testRemoveUsesIndex() { - $request = new Request(); - $resolver = $this->getMockResolver(); $resolver ->expects($this->once()) ->method('resolve') - ->with($request, $this->path, $this->filter) + ->with($this->path, $this->filter) ->will($this->returnValue($this->targetPath)) ; $resolver @@ -110,7 +105,7 @@ public function testRemoveUsesIndex() $cache = new MemoryCache(); $cacheResolver = new CacheResolver($cache, $resolver); - $cacheResolver->resolve($request, $this->path, $this->filter); + $cacheResolver->resolve($this->path, $this->filter); /* * Three items: diff --git a/Tests/Imagine/Cache/Resolver/WebPathResolverTest.php b/Tests/Imagine/Cache/Resolver/WebPathResolverTest.php index fcc96be5c..1fb8fdf4f 100644 --- a/Tests/Imagine/Cache/Resolver/WebPathResolverTest.php +++ b/Tests/Imagine/Cache/Resolver/WebPathResolverTest.php @@ -4,7 +4,7 @@ use Liip\ImagineBundle\Imagine\Cache\Resolver\WebPathResolver; use Liip\ImagineBundle\Tests\AbstractTest; -use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\HttpFoundation\Response; /** @@ -72,8 +72,12 @@ public function testDefaultBehavior() ->will($this->returnValue('/app.php')) ; + $container = new Container(); + $container->set('request', $request); + $this->resolver->setContainer($container); + // Resolve the requested image for the given filter. - $targetPath = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $targetPath = $this->resolver->resolve('cats.jpeg', 'thumbnail'); // The realpath() is important for filesystems that are virtual in some way (encrypted, different mount options, ..) $this->assertEquals(str_replace('/', DIRECTORY_SEPARATOR, realpath($this->cacheDir).'/thumbnail/cats.jpeg'), $targetPath, '->resolve() correctly converts the requested file into target path within webRoot.'); @@ -116,12 +120,16 @@ public function testMissingRewrite() ->will($this->returnValue('')) ; + $container = new Container(); + $container->set('request', $request); + $this->resolver->setContainer($container); + // The file has already been cached by this resolver. - $targetPath = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $targetPath = $this->resolver->resolve('cats.jpeg', 'thumbnail'); $this->filesystem->mkdir(dirname($targetPath)); file_put_contents($targetPath, file_get_contents($this->dataRoot.'/cats.jpeg')); - $response = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $response = $this->resolver->resolve('cats.jpeg', 'thumbnail'); $this->assertInstanceOf('Symfony\Component\HttpFoundation\Response', $response, '->resolve() returns a Response instance if the target file already exists.'); $this->assertEquals(302, $response->getStatusCode(), @@ -148,12 +156,16 @@ public function testMissingRewriteWithBaseUrl() ->will($this->returnValue('/app_dev.php')) ; + $container = new Container(); + $container->set('request', $request); + $this->resolver->setContainer($container); + // The file has already been cached by this resolver. - $targetPath = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $targetPath = $this->resolver->resolve('cats.jpeg', 'thumbnail'); $this->filesystem->mkdir(dirname($targetPath)); file_put_contents($targetPath, file_get_contents($this->dataRoot.'/cats.jpeg')); - $response = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $response = $this->resolver->resolve('cats.jpeg', 'thumbnail'); $this->assertInstanceOf('Symfony\Component\HttpFoundation\Response', $response, '->resolve() returns a Response instance if the target file already exists.'); $this->assertEquals(302, $response->getStatusCode(), @@ -180,8 +192,12 @@ public function testResolveWithBasePath() ->will($this->returnValue(str_replace('/', DIRECTORY_SEPARATOR, '/sandbox/app_dev.php'))) ; + $container = new Container(); + $container->set('request', $request); + $this->resolver->setContainer($container); + // Resolve the requested image for the given filter. - $targetPath = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $targetPath = $this->resolver->resolve('cats.jpeg', 'thumbnail'); // The realpath() is important for filesystems that are virtual in some way (encrypted, different mount options, ..) $this->assertEquals(str_replace('/', DIRECTORY_SEPARATOR, realpath($this->cacheDir).'/thumbnail/cats.jpeg'), $targetPath, '->resolve() correctly converts the requested file into target path within webRoot.'); @@ -230,12 +246,16 @@ public function testMissingRewriteWithBasePathWithScriptname() ->will($this->returnValue('/sandbox/app_dev.php')) ; + $container = new Container(); + $container->set('request', $request); + $this->resolver->setContainer($container); + // The file has already been cached by this resolver. - $targetPath = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $targetPath = $this->resolver->resolve('cats.jpeg', 'thumbnail'); $this->filesystem->mkdir(dirname($targetPath)); file_put_contents($targetPath, file_get_contents($this->dataRoot.'/cats.jpeg')); - $response = $this->resolver->resolve($request, 'cats.jpeg', 'thumbnail'); + $response = $this->resolver->resolve('cats.jpeg', 'thumbnail'); $this->assertInstanceOf('Symfony\Component\HttpFoundation\Response', $response, '->resolve() returns a Response instance if the target file already exists.'); $this->assertEquals(302, $response->getStatusCode(), diff --git a/Tests/bootstrap.php b/Tests/bootstrap.php index 7839509b8..51010f24b 100644 --- a/Tests/bootstrap.php +++ b/Tests/bootstrap.php @@ -1,8 +1,12 @@