Chris@0
|
1 <?php
|
Chris@0
|
2 namespace Consolidation\OutputFormatters\Formatters;
|
Chris@0
|
3
|
Chris@0
|
4 use Symfony\Component\Console\Output\OutputInterface;
|
Chris@0
|
5 use Symfony\Component\Console\Helper\Table;
|
Chris@0
|
6
|
Chris@0
|
7 use Consolidation\OutputFormatters\Validate\ValidDataTypesInterface;
|
Chris@0
|
8 use Consolidation\OutputFormatters\Options\FormatterOptions;
|
Chris@0
|
9 use Consolidation\OutputFormatters\Validate\ValidDataTypesTrait;
|
Chris@0
|
10 use Consolidation\OutputFormatters\StructuredData\TableDataInterface;
|
Chris@0
|
11 use Consolidation\OutputFormatters\Transformations\ReorderFields;
|
Chris@0
|
12 use Consolidation\OutputFormatters\Exception\IncompatibleDataException;
|
Chris@0
|
13 use Consolidation\OutputFormatters\StructuredData\PropertyList;
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * Display sections of data.
|
Chris@0
|
17 *
|
Chris@0
|
18 * This formatter takes data in the RowsOfFields data type.
|
Chris@0
|
19 * Each row represents one section; the data in each section
|
Chris@0
|
20 * is rendered in two columns, with the key in the first column
|
Chris@0
|
21 * and the value in the second column.
|
Chris@0
|
22 */
|
Chris@0
|
23 class SectionsFormatter implements FormatterInterface, ValidDataTypesInterface, RenderDataInterface
|
Chris@0
|
24 {
|
Chris@0
|
25 use ValidDataTypesTrait;
|
Chris@0
|
26 use RenderTableDataTrait;
|
Chris@0
|
27
|
Chris@0
|
28 public function validDataTypes()
|
Chris@0
|
29 {
|
Chris@0
|
30 return
|
Chris@0
|
31 [
|
Chris@0
|
32 new \ReflectionClass('\Consolidation\OutputFormatters\StructuredData\RowsOfFields')
|
Chris@0
|
33 ];
|
Chris@0
|
34 }
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * @inheritdoc
|
Chris@0
|
38 */
|
Chris@0
|
39 public function validate($structuredData)
|
Chris@0
|
40 {
|
Chris@0
|
41 // If the provided data was of class RowsOfFields
|
Chris@0
|
42 // or PropertyList, it will be converted into
|
Chris@0
|
43 // a TableTransformation object by the restructure call.
|
Chris@0
|
44 if (!$structuredData instanceof TableDataInterface) {
|
Chris@0
|
45 throw new IncompatibleDataException(
|
Chris@0
|
46 $this,
|
Chris@0
|
47 $structuredData,
|
Chris@0
|
48 $this->validDataTypes()
|
Chris@0
|
49 );
|
Chris@0
|
50 }
|
Chris@0
|
51 return $structuredData;
|
Chris@0
|
52 }
|
Chris@0
|
53
|
Chris@0
|
54 /**
|
Chris@0
|
55 * @inheritdoc
|
Chris@0
|
56 */
|
Chris@0
|
57 public function write(OutputInterface $output, $tableTransformer, FormatterOptions $options)
|
Chris@0
|
58 {
|
Chris@0
|
59 $table = new Table($output);
|
Chris@0
|
60 $table->setStyle('compact');
|
Chris@0
|
61 foreach ($tableTransformer as $rowid => $row) {
|
Chris@0
|
62 $rowLabel = $tableTransformer->getRowLabel($rowid);
|
Chris@0
|
63 $output->writeln('');
|
Chris@0
|
64 $output->writeln($rowLabel);
|
Chris@0
|
65 $sectionData = new PropertyList($row);
|
Chris@0
|
66 $sectionOptions = new FormatterOptions([], $options->getOptions());
|
Chris@0
|
67 $sectionTableTransformer = $sectionData->restructure($sectionOptions);
|
Chris@0
|
68 $table->setRows($sectionTableTransformer->getTableData(true));
|
Chris@0
|
69 $table->render();
|
Chris@0
|
70 }
|
Chris@0
|
71 }
|
Chris@0
|
72 }
|