X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2FThumbnailer.php;h=c4ff8d7abac86a87983cd9b58b9a980fae832540;hb=b99e00f7cd5f7e2090f44cd97bfb426db55340c2;hp=d2284e795eb3b43261cfc4577832e610a390b036;hpb=787faa42f3a2bcbf83a7853f23f3667a6febf9da;p=github%2Fshaarli%2FShaarli.git diff --git a/application/Thumbnailer.php b/application/Thumbnailer.php index d2284e79..c4ff8d7a 100644 --- a/application/Thumbnailer.php +++ b/application/Thumbnailer.php @@ -3,9 +3,8 @@ namespace Shaarli; use Shaarli\Config\ConfigManager; -use WebThumbnailer\Exception\WebThumbnailerException; -use WebThumbnailer\WebThumbnailer; use WebThumbnailer\Application\ConfigManager as WTConfigManager; +use WebThumbnailer\WebThumbnailer; /** * Class Thumbnailer @@ -14,6 +13,28 @@ use WebThumbnailer\Application\ConfigManager as WTConfigManager; */ class Thumbnailer { + protected const COMMON_MEDIA_DOMAINS = [ + 'imgur.com', + 'flickr.com', + 'youtube.com', + 'wikimedia.org', + 'redd.it', + 'gfycat.com', + 'media.giphy.com', + 'twitter.com', + 'twimg.com', + 'instagram.com', + 'pinterest.com', + 'pinterest.fr', + 'soundcloud.com', + 'tumblr.com', + 'deviantart.com', + ]; + + public const MODE_ALL = 'all'; + public const MODE_COMMON = 'common'; + public const MODE_NONE = 'none'; + /** * @var WebThumbnailer instance. */ @@ -34,10 +55,13 @@ class Thumbnailer $this->conf = $conf; if (! $this->checkRequirements()) { - $this->conf->set('thumbnails.enabled', false); + $this->conf->set('thumbnails.mode', Thumbnailer::MODE_NONE); $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.')); + die(t( + 'php-gd extension must be loaded to use thumbnails. ' + . 'Thumbnails are now disabled. Please reload the page.' + )); } $this->wt = new WebThumbnailer(); @@ -57,13 +81,43 @@ class Thumbnailer */ public function get($url) { + if ( + $this->conf->get('thumbnails.mode') === self::MODE_COMMON + && ! $this->isCommonMediaOrImage($url) + ) { + return false; + } + try { return $this->wt->thumbnail($url); - } catch (WebThumbnailerException $e) { + } catch (\Throwable $e) { // Exceptions are only thrown in debug mode. - error_log(get_class($e) .': '. $e->getMessage()); - return false; + 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; } /**