Passed
Push — master ( 8f7a40...e78bca )
by
unknown
16:52 queued 09:09
created

Table   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 103
Duplicated Lines 0 %

Test Coverage

Coverage 96.61%

Importance

Changes 0
Metric Value
wmc 20
eloc 61
c 0
b 0
f 0
dl 0
loc 103
ccs 57
cts 59
cp 0.9661
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
D writeTable() 0 94 20
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx;
4
5
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
6
use PhpOffice\PhpSpreadsheet\Reader\Xlsx\Namespaces;
7
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
8
use PhpOffice\PhpSpreadsheet\Worksheet\Table as WorksheetTable;
9
10
class Table extends WriterPart
11
{
12
    /**
13
     * Write Table to XML format.
14
     *
15
     * @param int $tableRef Table ID
16
     *
17
     * @return string XML Output
18
     */
19 9
    public function writeTable(WorksheetTable $table, int $tableRef): string
20
    {
21
        // Create XML writer
22 9
        $objWriter = null;
23 9
        if ($this->getParentWriter()->getUseDiskCaching()) {
24
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
25
        } else {
26 9
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
27
        }
28
29
        // XML header
30 9
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
31
32
        // Table
33 9
        $name = 'Table' . $tableRef;
34 9
        $range = $table->getRange();
35
36 9
        $objWriter->startElement('table');
37 9
        $objWriter->writeAttribute('xmlns', Namespaces::MAIN);
38 9
        $objWriter->writeAttribute('id', (string) $tableRef);
39 9
        $objWriter->writeAttribute('name', $name);
40 9
        $objWriter->writeAttribute('displayName', $table->getName() ?: $name);
41 9
        $objWriter->writeAttribute('ref', $range);
42 9
        $objWriter->writeAttribute('headerRowCount', $table->getShowHeaderRow() ? '1' : '0');
43 9
        $objWriter->writeAttribute('totalsRowCount', $table->getShowTotalsRow() ? '1' : '0');
44
45
        // Table Boundaries
46 9
        [$rangeStart, $rangeEnd] = Coordinate::rangeBoundaries($table->getRange());
47
48
        // Table Auto Filter
49 9
        if ($table->getShowHeaderRow() && $table->getAllowFilter() === true) {
50 8
            $objWriter->startElement('autoFilter');
51 8
            $objWriter->writeAttribute('ref', $range);
52 8
            foreach (range($rangeStart[0], $rangeEnd[0]) as $offset => $columnIndex) {
53 8
                $column = $table->getColumnByOffset($offset);
54
55 8
                if (!$column->getShowFilterButton()) {
56 2
                    $objWriter->startElement('filterColumn');
57 2
                    $objWriter->writeAttribute('colId', (string) $offset);
58 2
                    $objWriter->writeAttribute('hiddenButton', '1');
59 2
                    $objWriter->endElement();
60
                } else {
61 8
                    $column = $table->getAutoFilter()->getColumnByOffset($offset);
62 8
                    AutoFilter::writeAutoFilterColumn($objWriter, $column, $offset);
63
                }
64
            }
65 8
            $objWriter->endElement(); // autoFilter
66
        }
67
68
        // Table Columns
69 9
        $objWriter->startElement('tableColumns');
70 9
        $objWriter->writeAttribute('count', (string) ($rangeEnd[0] - $rangeStart[0] + 1));
71 9
        foreach (range($rangeStart[0], $rangeEnd[0]) as $offset => $columnIndex) {
72 9
            $worksheet = $table->getWorksheet();
73 9
            if (!$worksheet) {
74
                continue;
75
            }
76
77 9
            $column = $table->getColumnByOffset($offset);
78 9
            $cell = $worksheet->getCell([$columnIndex, $rangeStart[1]]);
79
80 9
            $objWriter->startElement('tableColumn');
81 9
            $objWriter->writeAttribute('id', (string) ($offset + 1));
82 9
            $objWriter->writeAttribute('name', $table->getShowHeaderRow() ? $cell->getValueString() : ('Column' . ($offset + 1)));
83
84 9
            if ($table->getShowTotalsRow()) {
85 2
                if ($column->getTotalsRowLabel()) {
86 2
                    $objWriter->writeAttribute('totalsRowLabel', $column->getTotalsRowLabel());
87
                }
88 2
                if ($column->getTotalsRowFunction()) {
89 2
                    $objWriter->writeAttribute('totalsRowFunction', $column->getTotalsRowFunction());
90
                }
91
            }
92 9
            if ($column->getColumnFormula()) {
93 4
                $objWriter->writeElement('calculatedColumnFormula', $column->getColumnFormula());
94
            }
95
96 9
            $objWriter->endElement();
97
        }
98 9
        $objWriter->endElement();
99
100
        // Table Styles
101 9
        $objWriter->startElement('tableStyleInfo');
102 9
        $objWriter->writeAttribute('name', $table->getStyle()->getTheme());
103 9
        $objWriter->writeAttribute('showFirstColumn', $table->getStyle()->getShowFirstColumn() ? '1' : '0');
104 9
        $objWriter->writeAttribute('showLastColumn', $table->getStyle()->getShowLastColumn() ? '1' : '0');
105 9
        $objWriter->writeAttribute('showRowStripes', $table->getStyle()->getShowRowStripes() ? '1' : '0');
106 9
        $objWriter->writeAttribute('showColumnStripes', $table->getStyle()->getShowColumnStripes() ? '1' : '0');
107 9
        $objWriter->endElement();
108
109 9
        $objWriter->endElement();
110
111
        // Return
112 9
        return $objWriter->getData();
113
    }
114
}
115