bug #17002 [Console][Table] fixed render row that contains multiple cells. (aitboudad)

This PR was merged into the 2.7 branch.

Discussion
----------

[Console][Table] fixed render row that contains multiple cells.

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets |  #16998
| License       | MIT
| Doc PR        | n/a

Commits
-------

3790ac7 [Console][Table] fixed render row with multiple cells.
This commit is contained in:
Fabien Potencier 2015-12-18 17:14:15 +01:00
commit dae4267216
2 changed files with 29 additions and 10 deletions

View File

@ -343,7 +343,6 @@ class Table
// Remove any new line breaks and replace it with a new line // Remove any new line breaks and replace it with a new line
foreach ($rows[$rowKey] as $column => $cell) { foreach ($rows[$rowKey] as $column => $cell) {
$rows[$rowKey] = $this->fillCells($rows[$rowKey], $column);
if (!strstr($cell, "\n")) { if (!strstr($cell, "\n")) {
continue; continue;
} }
@ -363,7 +362,7 @@ class Table
$tableRows = array(); $tableRows = array();
foreach ($rows as $rowKey => $row) { foreach ($rows as $rowKey => $row) {
$tableRows[] = $row; $tableRows[] = $this->fillCells($row);
if (isset($unmergedRows[$rowKey])) { if (isset($unmergedRows[$rowKey])) {
$tableRows = array_merge($tableRows, $unmergedRows[$rowKey]); $tableRows = array_merge($tableRows, $unmergedRows[$rowKey]);
} }
@ -429,21 +428,23 @@ class Table
* fill cells for a row that contains colspan > 1. * fill cells for a row that contains colspan > 1.
* *
* @param array $row * @param array $row
* @param int $column
* *
* @return array * @return array
*/ */
private function fillCells($row, $column) private function fillCells($row)
{ {
$cell = $row[$column]; $newRow = array();
if ($cell instanceof TableCell && $cell->getColspan() > 1) { foreach ($row as $column => $cell) {
foreach (range($column + 1, $column + $cell->getColspan() - 1) as $position) { $newRow[] = $cell;
// insert empty value into rows at column position if ($cell instanceof TableCell && $cell->getColspan() > 1) {
array_splice($row, $position, 0, ''); foreach (range($column + 1, $column + $cell->getColspan() - 1) as $position) {
// insert empty value at column position
$newRow[] = '';
}
} }
} }
return $row; return $newRow ?: $row;
} }
/** /**

View File

@ -459,6 +459,24 @@ TABLE
| ISBN | Title | Author | | ISBN | Title | Author |
+------+-------+--------+ +------+-------+--------+
TABLE
),
'Row with multiple cells' => array(
array(),
array(
array(
new TableCell('1', array('colspan' => 3)),
new TableCell('2', array('colspan' => 2)),
new TableCell('3', array('colspan' => 2)),
new TableCell('4', array('colspan' => 2)),
),
),
'default',
<<<TABLE
+--+--+--+--+--+--+--+--+--+
| 1 | 2 | 3 | 4 |
+--+--+--+--+--+--+--+--+--+
TABLE TABLE
), ),
); );