Skip to content

Instantly share code, notes, and snippets.

@pekkis
Created July 25, 2014 06:56
Show Gist options
  • Save pekkis/e7b80128d6cb75acf4fb to your computer and use it in GitHub Desktop.
Save pekkis/e7b80128d6cb75acf4fb to your computer and use it in GitHub Desktop.
Arbitrary version plugin from D-pörssi
<?php
use Xi\Filelib\Backend\Adapter\MongoBackendAdapter;
use Xi\Filelib\FileLibrary;
use Xi\Filelib\Profile\FileProfile;
use Xi\Filelib\Plugin\RandomizeNamePlugin;
use Xi\Filelib\Plugin\Image\VersionPlugin;
use Xi\Filelib\Publisher\Adapter\Filesystem\SymlinkFilesystemPublisherAdapter;
use Xi\Filelib\Storage\Adapter\FilesystemStorageAdapter;
use Xi\Filelib\Storage\Adapter\Filesystem\DirectoryIdCalculator\TimeDirectoryIdCalculator;
use Xi\Filelib\Publisher\Publisher;
use Xi\Filelib\Publisher\Linker\ReversibleCreationTimeLinker;
use Xi\Filelib\Plugin\Image\ArbitraryVersionPlugin;
use Xi\Filelib\Version;
use Xi\Filelib\Renderer\AcceleratedRenderer;
use Xi\Filelib\Renderer\Adapter\SymfonyRendererAdapter;
use Xi\Filelib\File\File;
use Xi\Filelib\Plugin\Image\Command\Command;
$filelib->addPlugin(
new ArbitraryVersionPlugin(
'card',
function () {
return ['x'];
},
function () {
return ['x2'];
},
function () {
return ['x' => 25];
},
function (Version $version) {
$params = $version->getParams();
if (!isset($params['x'])) {
return false;
}
return in_array($params['x'], [25, 50, 100, 280]);
},
function (File $file, Version $version) {
$params = $version->getParams();
if ($version->hasModifier('x2')) {
$params['x'] = $params['x'] * 2;
}
return Command::createCommandsFromDefinitions(
[
['setImageCompression', 8],
['setImageFormat', 'jpg'],
['setImageCompressionQuality', 80],
['cropThumbnailImage', [$params['x'], (int) $params['x'] * 1.32]],
]
);
},
'image/jpeg',
true,
function () {
return [
[
['x' => 25],
[]
],
[
['x' => 50],
[]
],
];
}
)
);
server {
listen 80;
server_name filebank.dporssi2011.tunk.io;
root /wwwroot/dporssi2011/public;
location ~* ^/files/.+\.(jpg|jpeg|gif|png|ico)$ {
access_log off;
gzip off;
expires 30d;
try_files $uri @php;
}
location @php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root/renderer.php;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param APPLICATION_ENV development;
fastcgi_param APPLICATION_LANGUAGE fi;
fastcgi_param APPLICATION_LOCALE fi_FI;
include /wwwroot/conf/fastcgi_params;
}
location /protected/ {
internal;
alias /wwwroot/dporssi2011/data/files/;
}
}
<?php
use Xi\Filelib\Renderer\Adapter\SymfonyRendererAdapter;
use Xi\Filelib\Renderer\Renderer;
use Xi\Filelib\Publisher\Publisher;
/** @var SymfonyRendererAdapter $adapter */
$adapter = Zend_Registry::get('pimple')['filelib_renderer_adapter'];
/** @var Renderer $renderer */
$renderer = Zend_Registry::get('pimple')['filelib_renderer'];
/** @var Publisher $publisher */
$publisher = Zend_Registry::get('pimple')['filelib_publisher'];
$request = Request::createFromGlobals();
$adapter->setRequest($request);
list ($file, $version) = $publisher->reverseUrl($request->getUri());
/** @var Response $response */
$response = $renderer->render($file, $version);
$publisher->publishVersion($file, $version);
$response->headers->set('X-Filelib-Render', $version->toString());
$response->send();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment