X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2FThumbnailer.php;h=7d0d9c33203f9724afdde1b3db102d54aaa53d2b;hb=d37348efe280f0b72807ea6f62fca63e2ad28991;hp=b669adaedef74afcbca8d80219901b91f8a12b7c;hpb=1b93137e16694f52952c930848e1a7928e8a00a6;p=github%2Fshaarli%2FShaarli.git diff --git a/application/Thumbnailer.php b/application/Thumbnailer.php index b669adae..7d0d9c33 100644 --- a/application/Thumbnailer.php +++ b/application/Thumbnailer.php @@ -1,6 +1,11 @@ conf = $conf; + + if (! $this->checkRequirements()) { + $this->conf->set('thumbnails.enabled', false); + $this->conf->write(true); + // TODO: create a proper error handling system able to catch exceptions... + die(t('php-gd extension must be loaded to use thumbnails. Thumbnails are now disabled. Please reload the page.')); + } + $this->wt = new WebThumbnailer(); - \WebThumbnailer\Application\ConfigManager::addFile('inc/web-thumbnailer.json'); + WTConfigManager::addFile('inc/web-thumbnailer.json'); $this->wt->maxWidth($this->conf->get('thumbnails.width')) ->maxHeight($this->conf->get('thumbnails.height')) ->crop(true) @@ -44,6 +78,50 @@ class Thumbnailer */ public function get($url) { - return $this->wt->thumbnail($url); + if ($this->conf->get('thumbnails.mode') === self::MODE_COMMON + && ! $this->isCommonMediaOrImage($url) + ) { + return false; + } + + try { + return $this->wt->thumbnail($url); + } catch (WebThumbnailerException $e) { + // Exceptions are only thrown in debug mode. + error_log(get_class($e) . ': ' . $e->getMessage()); + } + return false; + } + + /** + * We check weather the given URL is from a common media domain, + * or if the file extension is an image. + * + * @param string $url to check + * + * @return bool true if it's an image or from a common media domain, false otherwise. + */ + public function isCommonMediaOrImage($url) + { + foreach (self::COMMON_MEDIA_DOMAINS as $domain) { + if (strpos($url, $domain) !== false) { + return true; + } + } + + if (endsWith($url, '.jpg') || endsWith($url, '.png') || endsWith($url, '.jpeg')) { + return true; + } + + return false; + } + + /** + * Make sure that requirements are match to use thumbnails: + * - php-gd is loaded + */ + protected function checkRequirements() + { + return extension_loaded('gd'); } }