Passed
Push — master ( 79149c...dd37f9 )
by Richard
05:12 queued 11s
created

smarty_function_html_table()   F

Complexity

Conditions 34
Paths 7753

Size

Total Lines 113
Code Lines 80

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 80
dl 0
loc 113
rs 0
c 0
b 0
f 0
cc 34
nc 7753
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_table} function plugin
11
 *
12
 * Type:     function<br>
13
 * Name:     html_table<br>
14
 * Date:     Feb 17, 2003<br>
15
 * Purpose:  make an html table from an array of data<br>
16
 * Input:<br>
17
 *         - loop = array to loop through
18
 *         - cols = number of columns, comma separated list of column names
19
 *                  or array of column names
20
 *         - rows = number of rows
21
 *         - table_attr = table attributes
22
 *         - th_attr = table heading attributes (arrays are cycled)
23
 *         - tr_attr = table row attributes (arrays are cycled)
24
 *         - td_attr = table cell attributes (arrays are cycled)
25
 *         - trailpad = value to pad trailing cells with
26
 *         - caption = text for caption element 
27
 *         - vdir = vertical direction (default: "down", means top-to-bottom)
28
 *         - hdir = horizontal direction (default: "right", means left-to-right)
29
 *         - inner = inner loop (default "cols": print $loop line by line,
30
 *                   $loop will be printed column by column otherwise)
31
 *
32
 *
33
 * Examples:
34
 * <pre>
35
 * {table loop=$data}
36
 * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
37
 * {table loop=$data cols="first,second,third" tr_attr=$colors}
38
 * </pre>
39
 * @author   Monte Ohrt <monte at ohrt dot com>
40
 * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
41
 * @author credit to boots <boots dot smarty at yahoo dot com>
42
 * @version  1.1
43
 * @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table}
44
 *          (Smarty online manual)
45
 * @param array
46
 * @param Smarty
47
 * @return string
48
 */
49
function smarty_function_html_table($params, &$smarty)
50
{
51
    $table_attr = 'border="1"';
52
    $tr_attr = '';
53
    $th_attr = '';
54
    $td_attr = '';
55
    $cols = $cols_count = 3;
56
    $rows = 3;
57
    $trailpad = '&nbsp;';
58
    $vdir = 'down';
59
    $hdir = 'right';
60
    $inner = 'cols';
61
    $caption = '';
62
63
    if (!isset($params['loop'])) {
64
        $smarty->trigger_error("html_table: missing 'loop' parameter");
65
        return;
66
    }
67
68
    foreach ($params as $_key=>$_value) {
69
        switch ($_key) {
70
            case 'loop':
71
                $$_key = (array)$_value;
72
                break;
73
74
            case 'cols':
75
                if (is_array($_value) && !empty($_value)) {
76
                    $cols = $_value;
77
                    $cols_count = count($_value);
78
                } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
79
                    $cols = explode(',', $_value);
80
                    $cols_count = count($cols);
81
                } elseif (!empty($_value)) {
82
                    $cols_count = (int)$_value;
83
                } else {
84
                    $cols_count = $cols;
85
                }
86
                break;
87
88
            case 'rows':
89
                $$_key = (int)$_value;
90
                break;
91
92
            case 'table_attr':
93
            case 'trailpad':
94
            case 'hdir':
95
            case 'vdir':
96
            case 'inner':
97
            case 'caption':
98
                $$_key = (string)$_value;
99
                break;
100
101
            case 'tr_attr':
102
            case 'td_attr':
103
            case 'th_attr':
104
                $$_key = $_value;
105
                break;
106
        }
107
    }
108
109
    $loop_count = count($loop);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $loop seems to be never defined.
Loading history...
110
    if (empty($params['rows'])) {
111
        /* no rows specified */
112
        $rows = ceil($loop_count/$cols_count);
113
    } elseif (empty($params['cols'])) {
114
        if (!empty($params['rows'])) {
115
            /* no cols specified, but rows */
116
            $cols_count = ceil($loop_count/$rows);
117
        }
118
    }
119
120
    $output = "<table $table_attr>\n";
121
122
    if (!empty($caption)) {
0 ignored issues
show
introduced by
The condition empty($caption) is always true.
Loading history...
123
        $output .= '<caption>' . $caption . "</caption>\n";
124
    }
125
126
    if (is_array($cols)) {
127
        $cols = ($hdir == 'right') ? $cols : array_reverse($cols);
0 ignored issues
show
introduced by
The condition $hdir == 'right' is always true.
Loading history...
128
        $output .= "<thead><tr>\n";
129
130
        for ($r=0; $r<$cols_count; $r++) {
131
            $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
132
            $output .= $cols[$r];
133
            $output .= "</th>\n";
134
        }
135
        $output .= "</tr></thead>\n";
136
    }
137
138
    $output .= "<tbody>\n";
139
    for ($r=0; $r<$rows; $r++) {
140
        $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
141
        $rx =  ($vdir == 'down') ? $r*$cols_count : ($rows-1-$r)*$cols_count;
142
143
        for ($c=0; $c<$cols_count; $c++) {
144
            $x =  ($hdir == 'right') ? $rx+$c : $rx+$cols_count-1-$c;
145
            if ($inner!='cols') {
146
                /* shuffle x to loop over rows*/
147
                $x = floor($x/$cols_count) + ($x%$cols_count)*$rows;
148
            }
149
150
            if ($x<$loop_count) {
151
                $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n";
152
            } else {
153
                $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n";
154
            }
155
        }
156
        $output .= "</tr>\n";
157
    }
158
    $output .= "</tbody>\n";
159
    $output .= "</table>\n";
160
    
161
    return $output;
162
}
163
164
function smarty_function_html_table_cycle($name, $var, $no) {
0 ignored issues
show
Unused Code introduced by
The parameter $name is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

164
function smarty_function_html_table_cycle(/** @scrutinizer ignore-unused */ $name, $var, $no) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
165
    if(!is_array($var)) {
166
        $ret = $var;
167
    } else {
168
        $ret = $var[$no % count($var)];
169
    }
170
    
171
    return ($ret) ? ' '.$ret : '';
172
}
173
174
175
/* vim: set expandtab: */
176
177
?>
0 ignored issues
show
Best Practice introduced by
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...
178