1<?php 2/** 3 * Smarty plugin 4 * @package Smarty 5 * @subpackage plugins 6 */ 7 8 9/** 10 * Smarty {html_image} function plugin 11 * 12 * Type: function<br> 13 * Name: html_image<br> 14 * Date: Feb 24, 2003<br> 15 * Purpose: format HTML tags for the image<br> 16 * Input:<br> 17 * - file = file (and path) of image (required) 18 * - height = image height (optional, default actual height) 19 * - width = image width (optional, default actual width) 20 * - basedir = base directory for absolute paths, default 21 * is environment variable DOCUMENT_ROOT 22 * - path_prefix = prefix for path output (optional, default empty) 23 * 24 * Examples: {html_image file="/images/masthead.gif"} 25 * Output: <img src="/images/masthead.gif" width=400 height=23> 26 * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image} 27 * (Smarty online manual) 28 * @author Monte Ohrt <monte at ohrt dot com> 29 * @author credits to Duda <duda@big.hu> - wrote first image function 30 * in repository, helped with lots of functionality 31 * @version 1.0 32 * @param array 33 * @param Smarty 34 * @return string 35 * @uses smarty_function_escape_special_chars() 36 */ 37function smarty_function_html_image($params, &$smarty) 38{ 39 require_once $smarty->_get_plugin_filepath('shared','escape_special_chars'); 40 41 $alt = ''; 42 $file = ''; 43 $height = ''; 44 $width = ''; 45 $extra = ''; 46 $prefix = ''; 47 $suffix = ''; 48 $path_prefix = ''; 49 $server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; 50 $basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : ''; 51 foreach($params as $_key => $_val) { 52 switch($_key) { 53 case 'file': 54 case 'height': 55 case 'width': 56 case 'dpi': 57 case 'path_prefix': 58 case 'basedir': 59 $$_key = $_val; 60 break; 61 62 case 'alt': 63 if(!is_array($_val)) { 64 $$_key = smarty_function_escape_special_chars($_val); 65 } else { 66 $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); 67 } 68 break; 69 70 case 'link': 71 case 'href': 72 $prefix = '<a href="' . $_val . '">'; 73 $suffix = '</a>'; 74 break; 75 76 default: 77 if(!is_array($_val)) { 78 $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; 79 } else { 80 $smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); 81 } 82 break; 83 } 84 } 85 86 if (empty($file)) { 87 $smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); 88 return; 89 } 90 91 if (substr($file,0,1) == '/') { 92 $_image_path = $basedir . $file; 93 } else { 94 $_image_path = $file; 95 } 96 97 if(!isset($params['width']) || !isset($params['height'])) { 98 if(!$_image_data = @getimagesize($_image_path)) { 99 if(!file_exists($_image_path)) { 100 $smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); 101 return; 102 } else if(!is_readable($_image_path)) { 103 $smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); 104 return; 105 } else { 106 $smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); 107 return; 108 } 109 } 110 if ($smarty->security && 111 ($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) && 112 (require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) && 113 (!smarty_core_is_secure($_params, $smarty)) ) { 114 $smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE); 115 } 116 117 if(!isset($params['width'])) { 118 $width = $_image_data[0]; 119 } 120 if(!isset($params['height'])) { 121 $height = $_image_data[1]; 122 } 123 124 } 125 126 if(isset($params['dpi'])) { 127 if(strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) { 128 $dpi_default = 72; 129 } else { 130 $dpi_default = 96; 131 } 132 $_resize = $dpi_default/$params['dpi']; 133 $width = round($width * $_resize); 134 $height = round($height * $_resize); 135 } 136 137 return $prefix . '<img src="'.$path_prefix.$file.'" alt="'.$alt.'" width="'.$width.'" height="'.$height.'"'.$extra.' />' . $suffix; 138} 139 140/* vim: set expandtab: */ 141 142?> 143