| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- namespace Intervention\Image;
- use Illuminate\Support\ServiceProvider;
- use Illuminate\Http\Response as IlluminateResponse;
- class ImageServiceProviderLaravel4 extends ServiceProvider
- {
- /**
- * Bootstrap the application events.
- *
- * @return void
- */
- public function boot()
- {
- $this->package('intervention/image');
- // try to create imagecache route only if imagecache is present
- if (class_exists('Intervention\\Image\\ImageCache')) {
- $app = $this->app;
- // load imagecache config
- $app['config']->package('intervention/imagecache', __DIR__.'/../../../../imagecache/src/config', 'imagecache');
- $config = $app['config'];
- // create dynamic manipulation route
- if (is_string($config->get('imagecache::route'))) {
- // add original to route templates
- $config->set('imagecache::templates.original', null);
- // setup image manipulator route
- $app['router']->get($config->get('imagecache::route').'/{template}/{filename}', ['as' => 'imagecache', function ($template, $filename) use ($app, $config) {
- // disable session cookies for image route
- $app['config']->set('session.driver', 'array');
- // find file
- foreach ($config->get('imagecache::paths') as $path) {
- // don't allow '..' in filenames
- $image_path = $path.'/'.str_replace('..', '', $filename);
- if (file_exists($image_path) && is_file($image_path)) {
- break;
- } else {
- $image_path = false;
- }
- }
- // abort if file not found
- if ($image_path === false) {
- $app->abort(404);
- }
- // define template callback
- $callback = $config->get("imagecache::templates.{$template}");
- if (is_callable($callback) || class_exists($callback)) {
- // image manipulation based on callback
- $content = $app['image']->cache(function ($image) use ($image_path, $callback) {
-
- switch (true) {
- case is_callable($callback):
- return $callback($image->make($image_path));
- break;
-
- case class_exists($callback):
- return $image->make($image_path)->filter(new $callback);
- break;
- }
- }, $config->get('imagecache::lifetime'));
- } else {
- // get original image file contents
- $content = file_get_contents($image_path);
- }
- // define mime type
- $mime = finfo_buffer(finfo_open(FILEINFO_MIME_TYPE), $content);
- // return http response
- return new IlluminateResponse($content, 200, [
- 'Content-Type' => $mime,
- 'Cache-Control' => 'max-age='.($config->get('imagecache::lifetime')*60).', public',
- 'Etag' => md5($content)
- ]);
- }])->where(['template' => join('|', array_keys($config->get('imagecache::templates'))), 'filename' => '[ \w\\.\\/\\-]+']);
- }
- }
- }
- /**
- * Register the service provider.
- *
- * @return void
- */
- public function register()
- {
- $app = $this->app;
- $app['image'] = $app->share(function ($app) {
- return new ImageManager($app['config']->get('image::config'));
- });
- $app->alias('image', 'Intervention\Image\ImageManager');
- }
- }
|