Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1373434
image_tag_processor.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Jan 31, 4:58 PM
Size
6 KB
Mime Type
text/x-php
Expires
Mon, Feb 2, 4:58 PM (3 h, 48 m)
Engine
blob
Format
Raw Data
Handle
883455
Attached To
rINP In-Portal
image_tag_processor.php
View Options
<?php
class
ImageTagProcessor
extends
kDBTagProcessor
{
function
Image
(
$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'
).
'"'
;
}
$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
);
}
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
->
Application
->
recallObject
(
$this
->
getPrefixSpecial
());
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
);
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
));
// if we need primary thumbnail which is preloaded with products list
$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
->
Application
->
recallObject
(
$this
->
getPrefixSpecial
(),
null
);
$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'
))
)
$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
=
''
;
}
$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
);
}
function
GetFullPath
(
$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
;
}
// 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
(
getArrayValue
(
$params
,
'img_path'
)
);
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
)
{
trigger_error
(
'Image <b>'
.
$img_path
.
'</b> <span class="debug_error">missing or invalid</span>'
,
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
;
}
$size_clause
=
' width="'
.
$width
.
'" height="'
.
$height
.
'"'
;
return
$size_clause
;
}
// used in admin
function
ImageUrl
(
$params
)
{
$object
=&
$this
->
Application
->
recallObject
(
$this
->
getPrefixSpecial
(),
$this
->
Prefix
,
$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
;
}
}
?>
Event Timeline
Log In to Comment