Index: trunk/kernel/units/images/image_tag_processor.php
===================================================================
diff -u -N -r7867 -r8388
--- trunk/kernel/units/images/image_tag_processor.php (.../image_tag_processor.php) (revision 7867)
+++ trunk/kernel/units/images/image_tag_processor.php (.../image_tag_processor.php) (revision 8388)
@@ -2,21 +2,32 @@
class ImageTagProcessor extends kDBTagProcessor {
- function Image($params)
+ /**
+ * Prepares all image parameters as list block parameters (for easy usage)
+ *
+ * @param kDBList $object
+ * @param Array $block_params
+ * @author Alex
+ */
+ function PrepareListElementParams(&$object, &$block_params)
{
- $params['img_path'] = $this->ImageSrc($params);
- if ($params['img_path'] === false) return ;
- $params['img_size'] = $this->ImageSize($params);
- if (!$params['img_size']){
- $params['img_size'] = ' width="'.getArrayValue($params, 'DefaultWidth').'"';
+ $image_url = $this->ImageSrc($block_params);
+ if (!$image_url) {
+ return ;
}
- $object =& $this->Application->recallObject($this->getPrefixSpecial(), null);
- $params['alt'] = htmlspecialchars($object->GetField('AltName'));
- $params['name'] = $this->SelectParam($params, 'block,render_as');
-
- return $this->Application->ParseBlock($params);
+
+ $block_params['img_path'] = $image_url;
+ $image_dimensions = $this->ImageSize($block_params);
+ $block_params['img_size'] = $image_dimensions ? $image_dimensions : ' width="'.$block_params['DefaultWidth'].'"';
+ $block_params['alt'] = htmlspecialchars($object->GetField('AltName')); // really used ?
}
-
+
+ /**
+ * [AGGREGATED TAG] works as
+ *
+ * @param Array $params
+ * @return string
+ */
function ItemImage($params)
{
$this->LoadItemImage($params);
@@ -28,15 +39,16 @@
}
}
$params['name'] = $this->SelectParam($params, 'render_as,block');
- $object =& $this->Application->recallObject($this->getPrefixSpecial());
+ $object =& $this->getObject($params);
if ( !$object->isLoaded() && !$this->SelectParam($params, 'default_image,DefaultImage') ) return false;
$params['alt'] = htmlspecialchars($object->GetField('AltName'));
return $this->Application->ParseBlock($params);
}
- function LargeImageExists($params) {
- $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
+ function LargeImageExists($params)
+ {
+ $object =& $this->getObject($params);
if ( $object->GetDBField('SameImages') == null || $object->GetDBField('SameImages')=='1' )
{
return false;
@@ -50,9 +62,8 @@
function LoadItemImage($params)
{
$parent_item =& $this->Application->recallObject($params['PrefixSpecial']);
+
$object =& $this->Application->recallObject($this->getPrefixSpecial(), null, Array('skip_autoload' => true));
-
- // if we need primary thumbnail which is preloaded with products list
$object->Clear();
// if we need primary thumbnail which is preloaded with products list
@@ -101,40 +112,46 @@
function ImageSrc($params)
{
- $object =& $this->Application->recallObject($this->getPrefixSpecial(), null);
+ $object =& $this->getObject($params);
+
+ $base_url = rtrim($this->Application->BaseURL(), '/');
+
$ret = '';
// if we need thumb, or full image is same as thumb
if ( $this->SelectParam($params, 'thumbnail,Thumbnail') || $object->GetDBField('SameImages') )
{
// return local image or url
- $ret = $object->GetDBField('LocalThumb') ? PROTOCOL.SERVER_NAME.BASE_PATH.'/'.$object->GetDBField('ThumbPath') : $object->GetDBField('ThumbUrl');
- if ( $object->GetDBField('LocalThumb') && !file_exists(FULL_PATH.'/'.$object->GetDBField('ThumbPath')) && !constOn('DBG_IMAGE_RECOVERY')) $ret = '';
+ $ret = $object->GetDBField('LocalThumb') ? $base_url.$object->GetDBField('ThumbPath') : $object->GetDBField('ThumbUrl');
+ if ($object->GetDBField('LocalThumb') && !file_exists(FULL_PATH.$object->GetDBField('ThumbPath')) && !constOn('DBG_IMAGE_RECOVERY')) {
+ // local thumbnail file is missing
+ $ret = '';
+ }
}
else { // if we need full which is not the same as thumb
- $ret = $object->GetDBField('LocalImage') ? PROTOCOL.SERVER_NAME.BASE_PATH.'/'.$object->GetDBField('LocalPath') : $object->GetDBField('Url');
- if ( $object->GetDBField('LocalImage') && !file_exists(FULL_PATH.'/'.$object->GetDBField('LocalPath')) ) $ret = '';
+ $ret = $object->GetDBField('LocalImage') ? $base_url.$object->GetDBField('LocalPath') : $object->GetDBField('Url');
+ if ($object->GetDBField('LocalImage') && !file_exists(FULL_PATH.$object->GetDBField('LocalPath'))) {
+ // local full image file is missing
+ $ret = '';
+ }
}
$default_image = $this->SelectParam($params, 'default_image,DefaultImage');
- return ($ret && $ret != PROTOCOL.SERVER_NAME.BASE_PATH && $ret != PROTOCOL.SERVER_NAME.BASE_PATH.'/') ? $ret : ($default_image ? PROTOCOL.SERVER_NAME.BASE_PATH.THEMES_PATH.'/'.$default_image : false);
+ return ($ret && $ret != $base_url) ? $ret : ($default_image ? $base_url.THEMES_PATH.'/'.$default_image : false);
}
- function GetFullPath($path)
+ function getFullPath($path)
{
- if(!$path) return $path;
+ if (!$path) {
+ return $path;
+ }
// absolute url
- if( preg_match('/^(.*):\/\/(.*)$/U', $path) )
- {
- if(strpos($path, PROTOCOL.SERVER_NAME.BASE_PATH) === 0)
- {
- $path = str_replace(PROTOCOL.SERVER_NAME.BASE_PATH, FULL_PATH.'/', $path);
- }
- return $path;
+ if (preg_match('/^(.*):\/\/(.*)$/U', $path)) {
+ return preg_replace('/^'.preg_quote($this->Application->BaseURL(), '/').'(.*)/', FULL_PATH.'/\\1', $path);
}
// relative url
- return FULL_PATH.'/'.substr(THEMES_PATH,1).'/'.$path;
+ return FULL_PATH.'/'.substr(THEMES_PATH, 1).'/'.$path;
}
/**
@@ -147,14 +164,14 @@
*/
function ImageSize($params)
{
- $img_path = $this->GetFullPath( getArrayValue($params, 'img_path') );
+ $img_path = $this->getFullPath($params['img_path']);
- if (!file_exists($img_path)) return false;
+ if (!file_exists($img_path)) {
+ return false;
+ }
+
$image_info = @getimagesize($img_path);
-
-// if( !($img_path && file_exists($img_path) && isset($image_info) ) )
- if( !$image_info )
- {
+ if (!$image_info) {
trigger_error('Image '.$img_path.' missing or invalid', E_USER_WARNING);
return false;
}
@@ -167,36 +184,59 @@
$too_large = is_numeric($max_width) ? ($orig_width > $max_width) : false;
$too_large = $too_large || (is_numeric($max_height) ? ($orig_height > $max_height) : false);
- if($too_large)
- {
+ if ($too_large) {
$width_ratio = $max_width ? $max_width / $orig_width : 1;
$height_ratio = $max_height ? $max_height / $orig_height : 1;
$ratio = min($width_ratio, $height_ratio);
$width = ceil($orig_width * $ratio);
$height = ceil($orig_height * $ratio);
}
- else
- {
+ else {
$width = $orig_width;
$height = $orig_height;
}
-
- $size_clause = ' width="'.$width.'" height="'.$height.'"';
- return $size_clause;
+
+ return ' width="'.$width.'" height="'.$height.'"';
}
+ /**
+ * Prepares image parameters & parses block with them (for admin)
+ *
+ * @param Array $params
+ * @return string
+ */
+ function Image($params)
+ {
+ $image_url = $this->ImageSrc($params);
+ if (!$image_url) {
+ return ;
+ }
+
+ $object =& $this->getObject($params);
+ $params['img_path'] = $image_url;
+ $image_dimensions = $this->ImageSize($params);
+ $params['img_size'] = $image_dimensions ? $image_dimensions : ' width="'.$params['DefaultWidth'].'"';
+ $params['alt'] = htmlspecialchars($object->GetField('AltName')); // really used ?
+ $params['name'] = $this->SelectParam($params, 'block,render_as');
- // used in admin
+ return $this->Application->ParseBlock($params);
+ }
+
+
+ /**
+ * Returns url for image in case when image source is url (for admin)
+ *
+ * @param Array $params
+ * @return string
+ */
function ImageUrl($params)
{
- $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
- if ($object->GetDBField('SameImages') ? $object->GetDBField('LocalThumb') : $object->GetDBField('LocalImage') )
- {
+ $object =& $this->getObject($params);
+ if ($object->GetDBField('SameImages') ? $object->GetDBField('LocalThumb') : $object->GetDBField('LocalImage') ) {
$ret = $this->Application->Phrase(getArrayValue($params,'local_phrase'));
}
- else
- {
+ else {
$ret = $object->GetDBField('SameImages') ? $object->GetDBField('ThumbUrl') : $object->GetDBField('Url');
}
return $ret;