mirror of
https://github.com/Piwigo/Piwigo.git
synced 2025-04-26 03:09:58 +03:00
feature 2548 multisize - custom sizes restricted to those requested by theme/plugin
code refacto git-svn-id: http://piwigo.org/svn/trunk@13021 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
a68826cbb3
commit
18036a70fc
9 changed files with 142 additions and 112 deletions
81
i.php
81
i.php
|
@ -65,14 +65,9 @@ function mkgetdir($dir)
|
|||
|
||||
function ilog()
|
||||
{
|
||||
global $conf, $ilogfh;
|
||||
global $conf;
|
||||
if (!$conf['enable_i_log']) return;
|
||||
if(!$ilogfh)
|
||||
{
|
||||
$dir=PHPWG_ROOT_PATH.$conf['data_location'].'tmp/';
|
||||
if (!mkgetdir($dir) or ! ($ilogfh=fopen($dir.'i.log', 'a')) )
|
||||
return;
|
||||
}
|
||||
|
||||
$line = date("c");
|
||||
foreach( func_get_args() as $arg)
|
||||
{
|
||||
|
@ -86,7 +81,11 @@ function ilog()
|
|||
$line .= $arg;
|
||||
}
|
||||
}
|
||||
fwrite($ilogfh, $line."\n");
|
||||
$file=PHPWG_ROOT_PATH.$conf['data_location'].'tmp/i.log';
|
||||
if (false == file_put_contents($file, $line."\n", FILE_APPEND))
|
||||
{
|
||||
mkgetdir(dirname($file));
|
||||
}
|
||||
}
|
||||
|
||||
function ierror($msg, $code)
|
||||
|
@ -124,6 +123,49 @@ function time_step( &$step )
|
|||
return intval(1000*($step - $tmp));
|
||||
}
|
||||
|
||||
function url_to_size($s)
|
||||
{
|
||||
$pos = strpos($s, 'x');
|
||||
if ($pos===false)
|
||||
{
|
||||
return array((int)$s, (int)$s);
|
||||
}
|
||||
return array((int)substr($s,0,$pos), (int)substr($s,$pos+1));
|
||||
}
|
||||
|
||||
function parse_custom_params($tokens)
|
||||
{
|
||||
if (count($tokens)<1)
|
||||
ierror('Empty array while parsing Sizing', 400);
|
||||
|
||||
$crop = 0;
|
||||
$min_size = null;
|
||||
|
||||
$token = array_shift($tokens);
|
||||
if ($token[0]=='s')
|
||||
{
|
||||
$size = url_to_size( substr($token,1) );
|
||||
}
|
||||
elseif ($token[0]=='e')
|
||||
{
|
||||
$crop = 1;
|
||||
$size = $min_size = url_to_size( substr($token,1) );
|
||||
}
|
||||
else
|
||||
{
|
||||
$size = url_to_size( $token );
|
||||
if (count($tokens)<2)
|
||||
ierror('Sizing arr', 400);
|
||||
|
||||
$token = array_shift($tokens);
|
||||
$crop = char_to_fraction($token);
|
||||
|
||||
$token = array_shift($tokens);
|
||||
$min_size = url_to_size( $token );
|
||||
}
|
||||
return new DerivativeParams( new SizingParams($size, $crop, $min_size) );
|
||||
}
|
||||
|
||||
function parse_request()
|
||||
{
|
||||
global $conf, $page;
|
||||
|
@ -199,14 +241,8 @@ function parse_request()
|
|||
|
||||
if ($page['derivative_type'] == IMG_CUSTOM)
|
||||
{
|
||||
try
|
||||
{
|
||||
$params = $page['derivative_params'] = DerivativeParams::from_url_tokens($deriv);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
ierror($e->getMessage(), 400);
|
||||
}
|
||||
$params = $page['derivative_params'] = parse_custom_params($deriv);
|
||||
|
||||
if ($params->sizing->ideal_size[0] < 20 or $params->sizing->ideal_size[1] < 20)
|
||||
{
|
||||
ierror('Invalid size', 400);
|
||||
|
@ -215,6 +251,19 @@ function parse_request()
|
|||
{
|
||||
ierror('Invalid crop', 400);
|
||||
}
|
||||
$greatest = ImageStdParams::get_by_type(IMG_XXLARGE);
|
||||
if ($params->max_width() > $greatest->max_width() || $params->max_height() > $greatest->max_height())
|
||||
{
|
||||
ierror('Too big', 403);
|
||||
}
|
||||
|
||||
$key = array();
|
||||
$params->add_url_tokens($key);
|
||||
$key = implode('_', $key);
|
||||
if (!isset(ImageStdParams::$custom[$key]))
|
||||
{
|
||||
ierror('Size not allowed', 403);
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_file(PHPWG_ROOT_PATH.$req.$ext) and
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue