2016-11-09 18:57:02 +01:00
|
|
|
<?php
|
|
|
|
|
2017-11-11 14:01:21 +01:00
|
|
|
namespace Shaarli;
|
|
|
|
|
|
|
|
use Shaarli\Config\ConfigManager;
|
|
|
|
use WebThumbnailer\Exception\WebThumbnailerException;
|
2016-11-09 18:57:02 +01:00
|
|
|
use WebThumbnailer\WebThumbnailer;
|
2017-11-11 14:01:21 +01:00
|
|
|
use WebThumbnailer\Application\ConfigManager as WTConfigManager;
|
2016-11-09 18:57:02 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Class Thumbnailer
|
|
|
|
*
|
|
|
|
* Utility class used to retrieve thumbnails using web-thumbnailer dependency.
|
|
|
|
*/
|
|
|
|
class Thumbnailer
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var WebThumbnailer instance.
|
|
|
|
*/
|
|
|
|
protected $wt;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var ConfigManager instance.
|
|
|
|
*/
|
|
|
|
protected $conf;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Thumbnailer constructor.
|
|
|
|
*
|
|
|
|
* @param ConfigManager $conf instance.
|
|
|
|
*/
|
|
|
|
public function __construct($conf)
|
|
|
|
{
|
|
|
|
$this->conf = $conf;
|
2018-04-06 18:21:47 +02:00
|
|
|
|
|
|
|
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.'));
|
|
|
|
}
|
|
|
|
|
2016-11-09 18:57:02 +01:00
|
|
|
$this->wt = new WebThumbnailer();
|
2017-11-11 14:01:21 +01:00
|
|
|
WTConfigManager::addFile('inc/web-thumbnailer.json');
|
2016-11-09 18:57:02 +01:00
|
|
|
$this->wt->maxWidth($this->conf->get('thumbnails.width'))
|
|
|
|
->maxHeight($this->conf->get('thumbnails.height'))
|
|
|
|
->crop(true)
|
|
|
|
->debug($this->conf->get('dev.debug', false));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve a thumbnail for given URL
|
|
|
|
*
|
|
|
|
* @param string $url where to look for a thumbnail.
|
|
|
|
*
|
|
|
|
* @return bool|string The thumbnail relative cache file path, or false if none has been found.
|
|
|
|
*/
|
|
|
|
public function get($url)
|
|
|
|
{
|
2017-11-11 14:01:21 +01:00
|
|
|
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;
|
|
|
|
}
|
2016-11-09 18:57:02 +01:00
|
|
|
}
|
2018-04-06 18:21:47 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Make sure that requirements are match to use thumbnails:
|
|
|
|
* - php-gd is loaded
|
|
|
|
*/
|
|
|
|
protected function checkRequirements()
|
|
|
|
{
|
|
|
|
return extension_loaded('gd');
|
|
|
|
}
|
2016-11-09 18:57:02 +01:00
|
|
|
}
|