ImageSrc($block_params);
if (!$image_url) {
return ;
}
$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);
$params['img_path'] = $this->ImageSrc($params);
$params['img_size'] = $this->ImageSize($params);
if (!$params['img_size']){
if (isset($params['DefaultWidth'])) {
$params['img_size'] = ' width="'.getArrayValue($params, 'DefaultWidth').'"';
}
}
$params['name'] = $this->SelectParam($params, 'render_as,block');
$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->getObject($params);
if ( $object->GetDBField('SameImages') == null || $object->GetDBField('SameImages')=='1' )
{
return false;
}
else
{
return true;
}
}
function LoadItemImage($params)
{
$parent_item =& $this->Application->recallObject($params['PrefixSpecial']);
$object =& $this->Application->recallObject($this->getPrefixSpecial(), null, Array('skip_autoload' => true));
$object->Clear();
// if we need primary thumbnail which is preloaded with products list
if (
$this->SelectParam($params, 'thumbnail,Thumbnail') &&
(
(
$this->SelectParam($params, 'primary,Primary')
||
!isset($params['name'])
)
&&
!$this->Application->GetVar('img_id')
&&
isset($parent_item->Fields['LocalThumb'])
)
)
{
$object->SetDefaultValues();
$object->SetDBFieldsFromHash($parent_item->GetFieldValues(), Array('SameImages', 'LocalThumb', 'ThumbPath', 'ThumbUrl', 'LocalImage', 'LocalPath', 'Url') );
$object->Loaded = true;
}
else { // if requested image is not primary thumbnail - load it directly
$id_field = $this->Application->getUnitOption($this->Prefix, 'ForeignKey');
$parent_table_key = $this->Application->getUnitOption($this->Prefix, 'ParentTableKey');
$keys[$id_field] = $parent_item->GetDBField($parent_table_key);
// which image to load?
if ( getArrayValue($params, 'Primary') ) { //load primary image
$keys['DefaultImg'] = 1;
}
elseif ( getArrayValue($params, 'name') ) { //load by name
$keys['Name'] = $params['name'];
}
elseif ( $image_id = $this->Application->GetVar($this->Prefix.'_id') ) {
$keys['ImageId'] = $image_id;
}
else {
$keys['DefaultImg'] = 1; //if primary was not set explicity and name was also not passed - load primary
}
$object->Load($keys);
}
}
function ImageSrc($params)
{
$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') ? $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') ? $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 != $base_url) ? $ret : ($default_image ? $base_url.THEMES_PATH.'/'.$default_image : false);
}
function getFullPath($path)
{
if (!$path) {
return $path;
}
// absolute url
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;
}
/**
* Makes size clause for img tag, such as
* ' width="80" height="100"' according to max_width
* and max_heght limits.
*
* @param array $params
* @return string
*/
function ImageSize($params)
{
$img_path = $this->getFullPath($params['img_path']);
if (!file_exists($img_path)) {
return false;
}
$image_info = @getimagesize($img_path);
if (!$image_info) {
trigger_error('Image '.$img_path.' missing or invalid', E_USER_WARNING);
return false;
}
$orig_width = getArrayValue($image_info, 0);
$orig_height = getArrayValue($image_info, 1);
$max_width = getArrayValue($params, 'MaxWidth');
$max_height = getArrayValue($params, 'MaxHeight');
$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) {
$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 {
$width = $orig_width;
$height = $orig_height;
}
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');
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->getObject($params);
if ($object->GetDBField('SameImages') ? $object->GetDBField('LocalThumb') : $object->GetDBField('LocalImage') ) {
$ret = $this->Application->Phrase(getArrayValue($params,'local_phrase'));
}
else {
$ret = $object->GetDBField('SameImages') ? $object->GetDBField('ThumbUrl') : $object->GetDBField('Url');
}
return $ret;
}
}
?>