aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrvelices <rv-github@modusoptimus.com>2012-04-14 04:52:20 +0000
committerrvelices <rv-github@modusoptimus.com>2012-04-14 04:52:20 +0000
commit1b54eb8e9ca1d5ac7d2fc28b37c39bf369bd0729 (patch)
tree2c61d1f9b020f2e7db58ed20a28dcce648cba570
parent10bf036231fb219ecb4cc8b6121cfec196da7eef (diff)
bug 2615 php notice in calendar amd web service
multisize improve handling of cases where the original is smaller than a requested derivative, but rotation/watermarking is required git-svn-id: http://piwigo.org/svn/trunk@14143 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r--admin/batch_manager_global.php2
-rw-r--r--include/calendar_monthly.class.php6
-rw-r--r--include/derivative.inc.php32
-rw-r--r--include/ws_functions.inc.php2
4 files changed, 34 insertions, 8 deletions
diff --git a/admin/batch_manager_global.php b/admin/batch_manager_global.php
index ed27c4817..99641ce6f 100644
--- a/admin/batch_manager_global.php
+++ b/admin/batch_manager_global.php
@@ -734,7 +734,7 @@ if (count($page['cat_elements_id']) > 0)
$query = '
-SELECT id,path,representative_ext,file,filesize,level,name
+SELECT id,path,representative_ext,file,filesize,level,name,width,height,rotation
FROM '.IMAGES_TABLE;
if ($is_category)
diff --git a/include/calendar_monthly.class.php b/include/calendar_monthly.class.php
index 37c720bea..1109bbf1c 100644
--- a/include/calendar_monthly.class.php
+++ b/include/calendar_monthly.class.php
@@ -350,7 +350,7 @@ function build_month_calendar(&$tpl_var)
{
$page['chronology_date'][CDAY]=$day;
$query = '
-SELECT id, file,representative_ext,path,width, height, '.pwg_db_get_dayofweek($this->date_field).'-1 as dow';
+SELECT id, file,representative_ext,path,width,height,rotation, '.pwg_db_get_dayofweek($this->date_field).'-1 as dow';
$query.= $this->inner_sql;
$query.= $this->get_date_where();
$query.= '
@@ -392,6 +392,10 @@ SELECT id, file,representative_ext,path,width, height, '.pwg_db_get_dayofweek($t
}
list($cell_width, $cell_height) = ImageStdParams::get_by_type(IMG_SQUARE)->sizing->ideal_size;
+ if ($cell_width>120)
+ {
+ $cell_width = $cell_height = 120;
+ }
$tpl_weeks = array();
$tpl_crt_week = array();
diff --git a/include/derivative.inc.php b/include/derivative.inc.php
index ca840a4d9..f565364f3 100644
--- a/include/derivative.inc.php
+++ b/include/derivative.inc.php
@@ -26,6 +26,7 @@ final class SrcImage
public $id;
public $rel_path;
+ public $rotation = 0;
private $size=null;
private $flags=0;
@@ -58,9 +59,10 @@ final class SrcImage
$width = $infos['width'];
$height = $infos['height'];
+ $this->rotation = intval($infos['rotation']) % 4;
// 1 or 5 => 90 clockwise
// 3 or 7 => 270 clockwise
- if ($infos['rotation'] % 2 != 0)
+ if ($this->rotation % 2)
{
$width = $infos['height'];
$height = $infos['width'];
@@ -173,10 +175,30 @@ final class DerivativeImage
{
if ( $src->has_size() && $params->is_identity( $src->get_size() ) )
{
- // todo - what if we have a watermark maybe return a smaller size?
- $params = null;
- $rel_path = $rel_url = $src->rel_path;
- return;
+ if (!$params->use_watermark && !$src->rotation)
+ {
+ $params = null;
+ $rel_path = $rel_url = $src->rel_path;
+ return;
+ }
+ $defined_types = array_keys(ImageStdParams::get_defined_type_map());
+ for ($i=0; $i<count($defined_types); $i++)
+ {
+ if ($defined_types[$i] == $params->type)
+ {
+ for ($i--; $i>=0; $i--)
+ {
+ $smaller = ImageStdParams::get_by_type($defined_types[$i]);
+ if ($smaller->sizing->max_crop==$params->sizing->max_crop && $smaller->is_identity( $src->get_size() ))
+ {
+ $params = $smaller;
+ self::build($src, $params, $rel_path, $rel_url, $is_cached);
+ return;
+ }
+ }
+ break;
+ }
+ }
}
$tokens=array();
diff --git a/include/ws_functions.inc.php b/include/ws_functions.inc.php
index fd24b1136..31cc8662f 100644
--- a/include/ws_functions.inc.php
+++ b/include/ws_functions.inc.php
@@ -224,7 +224,7 @@ function ws_getMissingDerivatives($params, &$service)
$where_clauses[] = 'id IN ('.implode(',',$params['ids']).')';
}
- $query_model = 'SELECT id, path, representative_ext, width, height
+ $query_model = 'SELECT id, path, representative_ext, width,height,rotation
FROM '.IMAGES_TABLE.'
WHERE '.implode(' AND ', $where_clauses).'
ORDER BY id DESC