smarty_function_html_image()   F
last analyzed

Complexity

Conditions 30
Paths 3172

Size

Total Lines 101
Code Lines 74

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 74
dl 0
loc 101
rs 0
c 0
b 0
f 0
cc 30
nc 3172
nop 2

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 <[email protected]> - 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
 */
37
function 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)) {
0 ignored issues
show
introduced by beckmi
The condition empty($file) is always true.
Loading history...
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
?>
0 ignored issues
show
Best Practice introduced by geekwright
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...
143