FormatHandler   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 42
dl 0
loc 67
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A handle() 0 61 4
1
<?php
2
declare(strict_types=1);
3
4
namespace MisterIcy\ExcelWriter\Handlers;
5
6
use MisterIcy\ExcelWriter\Generator\AbstractGenerator;
7
use MisterIcy\ExcelWriter\Generator\GeneratorInterface;
8
use MisterIcy\ExcelWriter\Properties\AbstractProperty;
9
use PhpOffice\PhpSpreadsheet\Cell\Cell;
10
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
11
use PhpOffice\PhpSpreadsheet\Style\Alignment;
12
use PhpOffice\PhpSpreadsheet\Style\Border;
13
use PhpOffice\PhpSpreadsheet\Style\Color;
14
use PhpOffice\PhpSpreadsheet\Style\Style;
15
16
/**
17
 * Class FormatHandler
18
 * @package MisterIcy\ExcelWriter\Handlers
19
 */
20
final class FormatHandler extends AbstractHandler
21
{
22
    /**
23
     * @param AbstractGenerator $generator
24
     * @return null
25
     */
26
    public function handle(GeneratorInterface $generator)
27
    {
28
        /** @scrutinizer ignore-call */
29
        $spreadsheet = $generator->getSpreadsheet();
30
        /** @scrutinizer ignore-call */
31
        $data = $generator->getData();
32
        /** @scrutinizer ignore-call */
33
        $properties = $generator->getProperties();
34
        /** @var AbstractProperty $property */
35
        $columns = 1;
36
        foreach ($properties->getProperties() as $property) {
37
            if (($width = $property->getWidth()) > 0) {
38
                $spreadsheet->getActiveSheet()
39
                    ->getColumnDimension(
40
                        Coordinate::stringFromColumnIndex($columns)
41
                    )->setWidth($width);
42
            }
43
44
            if (($header = $property->getTitle()) !== '') {
45
                $spreadsheet->getActiveSheet()
46
                    ->setCellValueByColumnAndRow($columns, 1, $header);
47
            }
48
49
            $columns++;
50
        }
51
52
        $highestRow = 1 + count($data);
53
        $highestCol = count($properties->getProperties());
54
55
        $style = new Style();
56
        $style->getFont()
57
            ->setName('Arial')
58
            ->setSize(8);
59
60
        $style->getBorders()
61
            ->getLeft()
62
            ->setBorderStyle(Border::BORDER_THIN);
63
64
        $style->getBorders()
65
            ->getRight()
66
            ->setBorderStyle(Border::BORDER_THIN);
67
68
        $style->getBorders()
69
            ->getBottom()
70
            ->setBorderStyle(Border::BORDER_THIN);
71
72
        $style->getBorders()
73
            ->getTop()
74
            ->setBorderStyle(Border::BORDER_THIN);
75
76
        $style->getAlignment()
77
            ->setWrapText(true)
78
            ->setShrinkToFit(true)
79
            ->setHorizontal(Alignment::HORIZONTAL_CENTER)
80
            ->setVertical(Alignment::VERTICAL_CENTER);
81
82
        $col = Coordinate::stringFromColumnIndex($highestCol);
83
84
        $spreadsheet->getActiveSheet()
85
            ->duplicateStyle($style, sprintf("A1:%s%d", $col, $highestRow));
86
        return parent::handle($generator);
87
    }
88
}
89