Total Complexity | 120 |
Total Lines | 817 |
Duplicated Lines | 0 % |
Changes | 0 |
Complex classes like console_table often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use console_table, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
57 | class console_table |
||
58 | { |
||
59 | /** |
||
60 | * The table headers. |
||
61 | * |
||
62 | * @var array |
||
63 | */ |
||
64 | var $_headers = array(); |
||
65 | /** |
||
66 | * The data of the table. |
||
67 | * |
||
68 | * @var array |
||
69 | */ |
||
70 | var $_data = array(); |
||
71 | /** |
||
72 | * The maximum number of columns in a row. |
||
73 | * |
||
74 | * @var integer |
||
75 | */ |
||
76 | var $_max_cols = 0; |
||
77 | /** |
||
78 | * The maximum number of rows in the table. |
||
79 | * |
||
80 | * @var integer |
||
81 | */ |
||
82 | var $_max_rows = 0; |
||
83 | /** |
||
84 | * Lengths of the columns, calculated when rows are added to the table. |
||
85 | * |
||
86 | * @var array |
||
87 | */ |
||
88 | var $_cell_lengths = array(); |
||
89 | /** |
||
90 | * Heights of the rows. |
||
91 | * |
||
92 | * @var array |
||
93 | */ |
||
94 | var $_row_heights = array(); |
||
95 | /** |
||
96 | * How many spaces to use to pad the table. |
||
97 | * |
||
98 | * @var integer |
||
99 | */ |
||
100 | var $_padding = 1; |
||
101 | /** |
||
102 | * Column filters. |
||
103 | * |
||
104 | * @var array |
||
105 | */ |
||
106 | var $_filters = array(); |
||
107 | /** |
||
108 | * Columns to calculate totals for. |
||
109 | * |
||
110 | * @var array |
||
111 | */ |
||
112 | var $_calculateTotals; |
||
113 | /** |
||
114 | * Alignment of the columns. |
||
115 | * |
||
116 | * @var array |
||
117 | */ |
||
118 | var $_col_align = array(); |
||
119 | /** |
||
120 | * Default alignment of columns. |
||
121 | * |
||
122 | * @var integer |
||
123 | */ |
||
124 | var $_defaultAlign; |
||
125 | /** |
||
126 | * Character set of the data. |
||
127 | * |
||
128 | * @var string |
||
129 | */ |
||
130 | var $_charset = 'utf-8'; |
||
131 | /** |
||
132 | * Border characters. |
||
133 | * Allowed keys: |
||
134 | * - intersection - intersection ("+") |
||
135 | * - horizontal - horizontal rule character ("-") |
||
136 | * - vertical - vertical rule character ("|") |
||
137 | * |
||
138 | * @var array |
||
139 | */ |
||
140 | var $_border = array( |
||
141 | 'intersection' => '+', |
||
142 | 'horizontal' => '-', |
||
143 | 'vertical' => '|', |
||
144 | ); |
||
145 | /** |
||
146 | * If borders are shown or not |
||
147 | * Allowed keys: top, right, bottom, left, inner: true and false |
||
148 | * |
||
149 | * @var array |
||
150 | */ |
||
151 | var $_borderVisibility = array( |
||
152 | 'top' => true, |
||
153 | 'right' => true, |
||
154 | 'bottom' => true, |
||
155 | 'left' => true, |
||
156 | 'inner' => true |
||
157 | ); |
||
158 | /** |
||
159 | * Whether the data has ANSI colors. |
||
160 | * |
||
161 | * @var Console_Color2 |
||
|
|||
162 | */ |
||
163 | var $_ansiColor = false; |
||
164 | /** |
||
165 | * Constructor. |
||
166 | * |
||
167 | * @param integer $align Default alignment. One of |
||
168 | * CONSOLE_TABLE_ALIGN_LEFT, |
||
169 | * CONSOLE_TABLE_ALIGN_CENTER or |
||
170 | * CONSOLE_TABLE_ALIGN_RIGHT. |
||
171 | * @param string $border The character used for table borders or |
||
172 | * CONSOLE_TABLE_BORDER_ASCII. |
||
173 | * @param integer $padding How many spaces to use to pad the table. |
||
174 | * @param string $charset A charset supported by the mbstring PHP |
||
175 | * extension. |
||
176 | * @param boolean $color Whether the data contains ansi color codes. |
||
177 | */ |
||
178 | function __construct($align = CONSOLE_TABLE_ALIGN_LEFT, |
||
179 | $border = CONSOLE_TABLE_BORDER_ASCII, $padding = 1, |
||
180 | $charset = null, $color = false) |
||
181 | { |
||
182 | $this->_defaultAlign = $align; |
||
183 | $this->setBorder($border); |
||
184 | $this->_padding = $padding; |
||
185 | if ($color) { |
||
186 | if (!class_exists('Console_Color2')) { |
||
187 | include_once 'Console/Color2.php'; |
||
188 | } |
||
189 | $this->_ansiColor = new Console_Color2(); |
||
190 | } |
||
191 | if (!empty($charset)) { |
||
192 | $this->setCharset($charset); |
||
193 | } |
||
194 | } |
||
195 | /** |
||
196 | * Converts an array to a table. |
||
197 | * |
||
198 | * @param array $headers Headers for the table. |
||
199 | * @param array $data A two dimensional array with the table |
||
200 | * data. |
||
201 | * @param boolean $returnObject Whether to return the Console_Table object |
||
202 | * instead of the rendered table. |
||
203 | * |
||
204 | * @static |
||
205 | * |
||
206 | * @return Console_Table|string A Console_Table object or the generated |
||
207 | * table. |
||
208 | */ |
||
209 | function fromArray($headers, $data, $returnObject = false) |
||
210 | { |
||
211 | if (!is_array($headers) || !is_array($data)) { |
||
212 | return false; |
||
213 | } |
||
214 | $table = new Console_Table(); |
||
215 | $table->setHeaders($headers); |
||
216 | foreach ($data as $row) { |
||
217 | $table->addRow($row); |
||
218 | } |
||
219 | return $returnObject ? $table : $table->getTable(); |
||
220 | } |
||
221 | /** |
||
222 | * Adds a filter to a column. |
||
223 | * |
||
224 | * Filters are standard PHP callbacks which are run on the data before |
||
225 | * table generation is performed. Filters are applied in the order they |
||
226 | * are added. The callback function must accept a single argument, which |
||
227 | * is a single table cell. |
||
228 | * |
||
229 | * @param integer $col Column to apply filter to. |
||
230 | * @param mixed &$callback PHP callback to apply. |
||
231 | * |
||
232 | * @return void |
||
233 | */ |
||
234 | function addFilter($col, &$callback) |
||
235 | { |
||
236 | $this->_filters[] = array($col, &$callback); |
||
237 | } |
||
238 | /** |
||
239 | * Sets the charset of the provided table data. |
||
240 | * |
||
241 | * @param string $charset A charset supported by the mbstring PHP |
||
242 | * extension. |
||
243 | * |
||
244 | * @return void |
||
245 | */ |
||
246 | function setCharset($charset) |
||
247 | { |
||
248 | $locale = setlocale(LC_CTYPE, 0); |
||
249 | setlocale(LC_CTYPE, 'en_US'); |
||
250 | $this->_charset = strtolower($charset); |
||
251 | setlocale(LC_CTYPE, $locale); |
||
252 | } |
||
253 | /** |
||
254 | * Set the table border settings |
||
255 | * |
||
256 | * Border definition modes: |
||
257 | * - CONSOLE_TABLE_BORDER_ASCII: Default border with +, - and | |
||
258 | * - array with keys "intersection", "horizontal" and "vertical" |
||
259 | * - single character string that sets all three of the array keys |
||
260 | * |
||
261 | * @param mixed $border Border definition |
||
262 | * |
||
263 | * @return void |
||
264 | * @see $_border |
||
265 | */ |
||
266 | function setBorder($border) |
||
267 | { |
||
268 | if ($border === CONSOLE_TABLE_BORDER_ASCII) { |
||
269 | $intersection = '+'; |
||
270 | $horizontal = '-'; |
||
271 | $vertical = '|'; |
||
272 | } else if (is_string($border)) { |
||
273 | $intersection = $horizontal = $vertical = $border; |
||
274 | } else if ($border == '') { |
||
275 | $intersection = $horizontal = $vertical = ''; |
||
276 | } else { |
||
277 | extract($border); |
||
278 | } |
||
279 | $this->_border = array( |
||
280 | 'intersection' => $intersection, |
||
281 | 'horizontal' => $horizontal, |
||
282 | 'vertical' => $vertical, |
||
283 | ); |
||
284 | } |
||
285 | /** |
||
286 | * Set which borders shall be shown. |
||
287 | * |
||
288 | * @param array $visibility Visibility settings. |
||
289 | * Allowed keys: left, right, top, bottom, inner |
||
290 | * |
||
291 | * @return void |
||
292 | * @see $_borderVisibility |
||
293 | */ |
||
294 | function setBorderVisibility($visibility) |
||
295 | { |
||
296 | $this->_borderVisibility = array_merge( |
||
297 | $this->_borderVisibility, |
||
298 | array_intersect_key( |
||
299 | $visibility, |
||
300 | $this->_borderVisibility |
||
301 | ) |
||
302 | ); |
||
303 | } |
||
304 | /** |
||
305 | * Sets the alignment for the columns. |
||
306 | * |
||
307 | * @param integer $col_id The column number. |
||
308 | * @param integer $align Alignment to set for this column. One of |
||
309 | * CONSOLE_TABLE_ALIGN_LEFT |
||
310 | * CONSOLE_TABLE_ALIGN_CENTER |
||
311 | * CONSOLE_TABLE_ALIGN_RIGHT. |
||
312 | * |
||
313 | * @return void |
||
314 | */ |
||
315 | function setAlign($col_id, $align = CONSOLE_TABLE_ALIGN_LEFT) |
||
316 | { |
||
317 | switch ($align) { |
||
318 | case CONSOLE_TABLE_ALIGN_CENTER: |
||
319 | $pad = STR_PAD_BOTH; |
||
320 | break; |
||
321 | case CONSOLE_TABLE_ALIGN_RIGHT: |
||
322 | $pad = STR_PAD_LEFT; |
||
323 | break; |
||
324 | default: |
||
325 | $pad = STR_PAD_RIGHT; |
||
326 | break; |
||
327 | } |
||
328 | $this->_col_align[$col_id] = $pad; |
||
329 | } |
||
330 | /** |
||
331 | * Specifies which columns are to have totals calculated for them and |
||
332 | * added as a new row at the bottom. |
||
333 | * |
||
334 | * @param array $cols Array of column numbers (starting with 0). |
||
335 | * |
||
336 | * @return void |
||
337 | */ |
||
338 | function calculateTotalsFor($cols) |
||
339 | { |
||
340 | $this->_calculateTotals = $cols; |
||
341 | } |
||
342 | /** |
||
343 | * Sets the headers for the columns. |
||
344 | * |
||
345 | * @param array $headers The column headers. |
||
346 | * |
||
347 | * @return void |
||
348 | */ |
||
349 | function setHeaders($headers) |
||
350 | { |
||
351 | $this->_headers = array(array_values($headers)); |
||
352 | $this->_updateRowsCols($headers); |
||
353 | } |
||
354 | /** |
||
355 | * Adds a row to the table. |
||
356 | * |
||
357 | * @param array $row The row data to add. |
||
358 | * @param boolean $append Whether to append or prepend the row. |
||
359 | * |
||
360 | * @return void |
||
361 | */ |
||
362 | function addRow($row, $append = true) |
||
363 | { |
||
364 | if ($append) { |
||
365 | $this->_data[] = array_values($row); |
||
366 | } else { |
||
367 | array_unshift($this->_data, array_values($row)); |
||
368 | } |
||
369 | $this->_updateRowsCols($row); |
||
370 | } |
||
371 | /** |
||
372 | * Inserts a row after a given row number in the table. |
||
373 | * |
||
374 | * If $row_id is not given it will prepend the row. |
||
375 | * |
||
376 | * @param array $row The data to insert. |
||
377 | * @param integer $row_id Row number to insert before. |
||
378 | * |
||
379 | * @return void |
||
380 | */ |
||
381 | function insertRow($row, $row_id = 0) |
||
382 | { |
||
383 | array_splice($this->_data, $row_id, 0, array($row)); |
||
384 | $this->_updateRowsCols($row); |
||
385 | } |
||
386 | /** |
||
387 | * Adds a column to the table. |
||
388 | * |
||
389 | * @param array $col_data The data of the column. |
||
390 | * @param integer $col_id The column index to populate. |
||
391 | * @param integer $row_id If starting row is not zero, specify it here. |
||
392 | * |
||
393 | * @return void |
||
394 | */ |
||
395 | function addCol($col_data, $col_id = 0, $row_id = 0) |
||
396 | { |
||
397 | foreach ($col_data as $col_cell) { |
||
398 | $this->_data[$row_id++][$col_id] = $col_cell; |
||
399 | } |
||
400 | $this->_updateRowsCols(); |
||
401 | $this->_max_cols = max($this->_max_cols, $col_id + 1); |
||
402 | } |
||
403 | /** |
||
404 | * Adds data to the table. |
||
405 | * |
||
406 | * @param array $data A two dimensional array with the table data. |
||
407 | * @param integer $col_id Starting column number. |
||
408 | * @param integer $row_id Starting row number. |
||
409 | * |
||
410 | * @return void |
||
411 | */ |
||
412 | function addData($data, $col_id = 0, $row_id = 0) |
||
413 | { |
||
414 | foreach ($data as $row) { |
||
415 | if ($row === CONSOLE_TABLE_HORIZONTAL_RULE) { |
||
416 | $this->_data[$row_id] = CONSOLE_TABLE_HORIZONTAL_RULE; |
||
417 | $row_id++; |
||
418 | continue; |
||
419 | } |
||
420 | $starting_col = $col_id; |
||
421 | foreach ($row as $cell) { |
||
422 | $this->_data[$row_id][$starting_col++] = $cell; |
||
423 | } |
||
424 | $this->_updateRowsCols(); |
||
425 | $this->_max_cols = max($this->_max_cols, $starting_col); |
||
426 | $row_id++; |
||
427 | } |
||
428 | } |
||
429 | /** |
||
430 | * Adds a horizontal seperator to the table. |
||
431 | * |
||
432 | * @return void |
||
433 | */ |
||
434 | function addSeparator() |
||
435 | { |
||
436 | $this->_data[] = CONSOLE_TABLE_HORIZONTAL_RULE; |
||
437 | } |
||
438 | /** |
||
439 | * Returns the generated table. |
||
440 | * |
||
441 | * @return string The generated table. |
||
442 | */ |
||
443 | function getTable() |
||
444 | { |
||
445 | $this->_applyFilters(); |
||
446 | $this->_calculateTotals(); |
||
447 | $this->_validateTable(); |
||
448 | return $this->_buildTable(); |
||
449 | } |
||
450 | /** |
||
451 | * Calculates totals for columns. |
||
452 | * |
||
453 | * @return void |
||
454 | */ |
||
455 | function _calculateTotals() |
||
456 | { |
||
457 | if (empty($this->_calculateTotals)) { |
||
458 | return; |
||
459 | } |
||
460 | $this->addSeparator(); |
||
461 | $totals = array(); |
||
462 | foreach ($this->_data as $row) { |
||
463 | if (is_array($row)) { |
||
464 | foreach ($this->_calculateTotals as $columnID) { |
||
465 | $totals[$columnID] += $row[$columnID]; |
||
466 | } |
||
467 | } |
||
468 | } |
||
469 | $this->_data[] = $totals; |
||
470 | $this->_updateRowsCols(); |
||
471 | } |
||
472 | /** |
||
473 | * Applies any column filters to the data. |
||
474 | * |
||
475 | * @return void |
||
476 | */ |
||
477 | function _applyFilters() |
||
478 | { |
||
479 | if (empty($this->_filters)) { |
||
480 | return; |
||
481 | } |
||
482 | foreach ($this->_filters as $filter) { |
||
483 | $column = $filter[0]; |
||
484 | $callback = $filter[1]; |
||
485 | foreach ($this->_data as $row_id => $row_data) { |
||
486 | if ($row_data !== CONSOLE_TABLE_HORIZONTAL_RULE) { |
||
487 | $this->_data[$row_id][$column] = |
||
488 | call_user_func($callback, $row_data[$column]); |
||
489 | } |
||
490 | } |
||
491 | } |
||
492 | } |
||
493 | /** |
||
494 | * Ensures that column and row counts are correct. |
||
495 | * |
||
496 | * @return void |
||
497 | */ |
||
498 | function _validateTable() |
||
499 | { |
||
500 | if (!empty($this->_headers)) { |
||
501 | $this->_calculateRowHeight(-1, $this->_headers[0]); |
||
502 | } |
||
503 | for ($i = 0; $i < $this->_max_rows; $i++) { |
||
504 | for ($j = 0; $j < $this->_max_cols; $j++) { |
||
505 | if (!isset($this->_data[$i][$j]) && |
||
506 | (!isset($this->_data[$i]) || |
||
507 | $this->_data[$i] !== CONSOLE_TABLE_HORIZONTAL_RULE)) { |
||
508 | $this->_data[$i][$j] = ''; |
||
509 | } |
||
510 | } |
||
511 | $this->_calculateRowHeight($i, $this->_data[$i]); |
||
512 | if ($this->_data[$i] !== CONSOLE_TABLE_HORIZONTAL_RULE) { |
||
513 | ksort($this->_data[$i]); |
||
514 | } |
||
515 | } |
||
516 | $this->_splitMultilineRows(); |
||
517 | // Update cell lengths. |
||
518 | for ($i = 0; $i < count($this->_headers); $i++) { |
||
519 | $this->_calculateCellLengths($this->_headers[$i]); |
||
520 | } |
||
521 | for ($i = 0; $i < $this->_max_rows; $i++) { |
||
522 | $this->_calculateCellLengths($this->_data[$i]); |
||
523 | } |
||
524 | ksort($this->_data); |
||
525 | } |
||
526 | /** |
||
527 | * Splits multiline rows into many smaller one-line rows. |
||
528 | * |
||
529 | * @return void |
||
530 | */ |
||
531 | function _splitMultilineRows() |
||
532 | { |
||
533 | ksort($this->_data); |
||
534 | $sections = array(&$this->_headers, &$this->_data); |
||
535 | $max_rows = array(count($this->_headers), $this->_max_rows); |
||
536 | $row_height_offset = array(-1, 0); |
||
537 | for ($s = 0; $s <= 1; $s++) { |
||
538 | $inserted = 0; |
||
539 | $new_data = $sections[$s]; |
||
540 | for ($i = 0; $i < $max_rows[$s]; $i++) { |
||
541 | // Process only rows that have many lines. |
||
542 | $height = $this->_row_heights[$i + $row_height_offset[$s]]; |
||
543 | if ($height > 1) { |
||
544 | // Split column data into one-liners. |
||
545 | $split = array(); |
||
546 | for ($j = 0; $j < $this->_max_cols; $j++) { |
||
547 | $split[$j] = preg_split('/\r?\n|\r/', |
||
548 | $sections[$s][$i][$j]); |
||
549 | } |
||
550 | $new_rows = array(); |
||
551 | // Construct new 'virtual' rows - insert empty strings for |
||
552 | // columns that have less lines that the highest one. |
||
553 | for ($i2 = 0; $i2 < $height; $i2++) { |
||
554 | for ($j = 0; $j < $this->_max_cols; $j++) { |
||
555 | $new_rows[$i2][$j] = !isset($split[$j][$i2]) |
||
556 | ? '' |
||
557 | : $split[$j][$i2]; |
||
558 | } |
||
559 | } |
||
560 | // Replace current row with smaller rows. $inserted is |
||
561 | // used to take account of bigger array because of already |
||
562 | // inserted rows. |
||
563 | array_splice($new_data, $i + $inserted, 1, $new_rows); |
||
564 | $inserted += count($new_rows) - 1; |
||
565 | } |
||
566 | } |
||
567 | // Has the data been modified? |
||
568 | if ($inserted > 0) { |
||
569 | $sections[$s] = $new_data; |
||
570 | $this->_updateRowsCols(); |
||
571 | } |
||
572 | } |
||
573 | } |
||
574 | /** |
||
575 | * Builds the table. |
||
576 | * |
||
577 | * @return string The generated table string. |
||
578 | */ |
||
579 | function _buildTable() |
||
580 | { |
||
581 | if (!count($this->_data)) { |
||
582 | return ''; |
||
583 | } |
||
584 | $vertical = $this->_border['vertical']; |
||
585 | $separator = $this->_getSeparator(); |
||
586 | $return = array(); |
||
587 | for ($i = 0; $i < count($this->_data); $i++) { |
||
588 | for ($j = 0; $j < count($this->_data[$i]); $j++) { |
||
589 | if ($this->_data[$i] !== CONSOLE_TABLE_HORIZONTAL_RULE && |
||
590 | $this->_strlen($this->_data[$i][$j]) < |
||
591 | $this->_cell_lengths[$j]) { |
||
592 | $this->_data[$i][$j] = $this->_strpad($this->_data[$i][$j], |
||
593 | $this->_cell_lengths[$j], |
||
594 | ' ', |
||
595 | $this->_col_align[$j]); |
||
596 | } |
||
597 | } |
||
598 | if ($this->_data[$i] !== CONSOLE_TABLE_HORIZONTAL_RULE) { |
||
599 | $row_begin = $this->_borderVisibility['left'] |
||
600 | ? $vertical . str_repeat(' ', $this->_padding) |
||
601 | : ''; |
||
602 | $row_end = $this->_borderVisibility['right'] |
||
603 | ? str_repeat(' ', $this->_padding) . $vertical |
||
604 | : ''; |
||
605 | $implode_char = str_repeat(' ', $this->_padding) . $vertical |
||
606 | . str_repeat(' ', $this->_padding); |
||
607 | $return[] = $row_begin |
||
608 | . implode($implode_char, $this->_data[$i]) . $row_end; |
||
609 | } elseif (!empty($separator)) { |
||
610 | $return[] = $separator; |
||
611 | } |
||
612 | } |
||
613 | $return = implode(PHP_EOL, $return); |
||
614 | if (!empty($separator)) { |
||
615 | if ($this->_borderVisibility['inner']) { |
||
616 | $return = $separator . PHP_EOL . $return; |
||
617 | } |
||
618 | if ($this->_borderVisibility['bottom']) { |
||
619 | $return .= PHP_EOL . $separator; |
||
620 | } |
||
621 | } |
||
622 | $return .= PHP_EOL; |
||
623 | if (!empty($this->_headers)) { |
||
624 | $return = $this->_getHeaderLine() . PHP_EOL . $return; |
||
625 | } |
||
626 | return $return; |
||
627 | } |
||
628 | /** |
||
629 | * Creates a horizontal separator for header separation and table |
||
630 | * start/end etc. |
||
631 | * |
||
632 | * @return string The horizontal separator. |
||
633 | */ |
||
634 | function _getSeparator() |
||
654 | } |
||
655 | /** |
||
656 | * Returns the header line for the table. |
||
657 | * |
||
658 | * @return string The header line of the table. |
||
659 | */ |
||
660 | function _getHeaderLine() |
||
661 | { |
||
662 | // Make sure column count is correct |
||
663 | for ($j = 0; $j < count($this->_headers); $j++) { |
||
664 | for ($i = 0; $i < $this->_max_cols; $i++) { |
||
665 | if (!isset($this->_headers[$j][$i])) { |
||
666 | $this->_headers[$j][$i] = ''; |
||
667 | } |
||
668 | } |
||
669 | } |
||
670 | for ($j = 0; $j < count($this->_headers); $j++) { |
||
671 | for ($i = 0; $i < count($this->_headers[$j]); $i++) { |
||
672 | if ($this->_strlen($this->_headers[$j][$i]) < |
||
673 | $this->_cell_lengths[$i]) { |
||
674 | $this->_headers[$j][$i] = |
||
675 | $this->_strpad($this->_headers[$j][$i], |
||
676 | $this->_cell_lengths[$i], |
||
677 | ' ', |
||
678 | $this->_col_align[$i]); |
||
679 | } |
||
680 | } |
||
681 | } |
||
682 | $vertical = $this->_border['vertical']; |
||
683 | $row_begin = $this->_borderVisibility['left'] |
||
684 | ? $vertical . str_repeat(' ', $this->_padding) |
||
685 | : ''; |
||
686 | $row_end = $this->_borderVisibility['right'] |
||
687 | ? str_repeat(' ', $this->_padding) . $vertical |
||
688 | : ''; |
||
689 | $implode_char = str_repeat(' ', $this->_padding) . $vertical |
||
690 | . str_repeat(' ', $this->_padding); |
||
691 | $separator = $this->_getSeparator(); |
||
692 | if (!empty($separator) && $this->_borderVisibility['top']) { |
||
693 | $return[] = $separator; |
||
694 | } |
||
695 | for ($j = 0; $j < count($this->_headers); $j++) { |
||
696 | $return[] = $row_begin |
||
697 | . implode($implode_char, $this->_headers[$j]) . $row_end; |
||
698 | } |
||
699 | return implode(PHP_EOL, $return); |
||
700 | } |
||
701 | /** |
||
702 | * Updates values for maximum columns and rows. |
||
703 | * |
||
704 | * @param array $rowdata Data array of a single row. |
||
705 | * |
||
706 | * @return void |
||
707 | */ |
||
708 | function _updateRowsCols($rowdata = null) |
||
709 | { |
||
710 | // Update maximum columns. |
||
711 | $this->_max_cols = max($this->_max_cols, count($rowdata)); |
||
712 | // Update maximum rows. |
||
713 | ksort($this->_data); |
||
714 | $keys = array_keys($this->_data); |
||
715 | $this->_max_rows = end($keys) + 1; |
||
716 | switch ($this->_defaultAlign) { |
||
717 | case CONSOLE_TABLE_ALIGN_CENTER: |
||
718 | $pad = STR_PAD_BOTH; |
||
719 | break; |
||
720 | case CONSOLE_TABLE_ALIGN_RIGHT: |
||
721 | $pad = STR_PAD_LEFT; |
||
722 | break; |
||
723 | default: |
||
724 | $pad = STR_PAD_RIGHT; |
||
725 | break; |
||
726 | } |
||
727 | // Set default column alignments |
||
728 | for ($i = 0; $i < $this->_max_cols; $i++) { |
||
729 | if (!isset($this->_col_align[$i])) { |
||
730 | $this->_col_align[$i] = $pad; |
||
731 | } |
||
732 | } |
||
733 | } |
||
734 | /** |
||
735 | * Calculates the maximum length for each column of a row. |
||
736 | * |
||
737 | * @param array $row The row data. |
||
738 | * |
||
739 | * @return void |
||
740 | */ |
||
741 | function _calculateCellLengths($row) |
||
742 | { |
||
743 | for ($i = 0; $i < count($row); $i++) { |
||
744 | if (!isset($this->_cell_lengths[$i])) { |
||
745 | $this->_cell_lengths[$i] = 0; |
||
746 | } |
||
747 | $this->_cell_lengths[$i] = max($this->_cell_lengths[$i], |
||
748 | $this->_strlen($row[$i])); |
||
749 | } |
||
750 | } |
||
751 | /** |
||
752 | * Calculates the maximum height for all columns of a row. |
||
753 | * |
||
754 | * @param integer $row_number The row number. |
||
755 | * @param array $row The row data. |
||
756 | * |
||
757 | * @return void |
||
758 | */ |
||
759 | function _calculateRowHeight($row_number, $row) |
||
772 | } |
||
773 | } |
||
774 | /** |
||
775 | * Returns the character length of a string. |
||
776 | * |
||
777 | * @param string $str A multibyte or singlebyte string. |
||
778 | * |
||
779 | * @return integer The string length. |
||
780 | */ |
||
781 | function _strlen($str) |
||
796 | } |
||
797 | /** |
||
798 | * Returns part of a string. |
||
799 | * |
||
800 | * @param string $string The string to be converted. |
||
801 | * @param integer $start The part's start position, zero based. |
||
802 | * @param integer $length The part's length. |
||
803 | * |
||
804 | * @return string The string's part. |
||
805 | */ |
||
806 | function _substr($string, $start, $length = null) |
||
823 | } |
||
824 | /** |
||
825 | * Returns a string padded to a certain length with another string. |
||
826 | * |
||
827 | * This method behaves exactly like str_pad but is multibyte safe. |
||
828 | * |
||
829 | * @param string $input The string to be padded. |
||
830 | * @param integer $length The length of the resulting string. |
||
831 | * @param string $pad The string to pad the input string with. Must |
||
832 | * be in the same charset like the input string. |
||
833 | * @param const $type The padding type. One of STR_PAD_LEFT, |
||
834 | * STR_PAD_RIGHT, or STR_PAD_BOTH. |
||
835 | * |
||
836 | * @return string The padded string. |
||
837 | */ |
||
838 | function _strpad($input, $length, $pad = ' ', $type = STR_PAD_RIGHT) |
||
874 | } |
||
875 | } |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths