PluginProbe
TablePress – Tables in WordPress made easy / 3.4
TablePress – Tables in WordPress made easy v3.4
3.4 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.12 1.14 1.9.2 2.0.4 2.1.7 2.1.8 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3 2.3.1 2.3.2 2.4 2.4.1 2.4.2 2.4.3 All 45 releases
tablepress / libraries / vendor / PhpSpreadsheet / Reader / Xml / PageSettings.php

PageSettings.php in TablePress – Tables in WordPress made easy 3.4, at libraries/vendor/PhpSpreadsheet/Reader/Xml/PageSettings.php

146 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace TablePress\PhpOffice\PhpSpreadsheet\Reader\Xml;
4
5 use TablePress\PhpOffice\PhpSpreadsheet\Reader\Xlsx\Namespaces;
6 use TablePress\PhpOffice\PhpSpreadsheet\Spreadsheet;
7 use TablePress\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
8 use SimpleXMLElement;
9 use stdClass;
10
11 class PageSettings
12 {
13 /** @var (object{
14 * orientation: string,
15 * scale: ?int,
16 * printOrder: ?string,
17 * paperSize: int,
18 * horizontalCentered: bool,
19 * verticalCentered: bool,
20 * leftMargin: float,
21 * rightMargin: float,
22 * topMargin: float,
23 * bottomMargin: float,
24 * headerMargin: float,
25 * footerMargin: float,
26 * } &stdClass)
27 */
28 private stdClass $printSettings;
29
30 public function __construct(SimpleXMLElement $xmlX)
31 {
32 $printSettings = $this->pageSetup($xmlX, $this->getPrintDefaults());
33 $this->printSettings = $this->printSetup($xmlX, $printSettings); //* @phpstan-ignore assign.propertyType (I don't know what Phpstan wants)
34 }
35
36 public function loadPageSettings(Spreadsheet $spreadsheet): void
37 {
38 $spreadsheet->getActiveSheet()->getPageSetup()
39 ->setPaperSize($this->printSettings->paperSize)
40 ->setOrientation($this->printSettings->orientation)
41 ->setScale($this->printSettings->scale)
42 ->setVerticalCentered($this->printSettings->verticalCentered)
43 ->setHorizontalCentered($this->printSettings->horizontalCentered)
44 ->setPageOrder($this->printSettings->printOrder);
45 $spreadsheet->getActiveSheet()->getPageMargins()
46 ->setTop($this->printSettings->topMargin)
47 ->setHeader($this->printSettings->headerMargin)
48 ->setLeft($this->printSettings->leftMargin)
49 ->setRight($this->printSettings->rightMargin)
50 ->setBottom($this->printSettings->bottomMargin)
51 ->setFooter($this->printSettings->footerMargin);
52 }
53
54 private function getPrintDefaults(): stdClass
55 {
56 return (object) [
57 'paperSize' => 9,
58 'orientation' => PageSetup::ORIENTATION_DEFAULT,
59 'scale' => 100,
60 'horizontalCentered' => false,
61 'verticalCentered' => false,
62 'printOrder' => PageSetup::PAGEORDER_DOWN_THEN_OVER,
63 'topMargin' => 0.75,
64 'headerMargin' => 0.3,
65 'leftMargin' => 0.7,
66 'rightMargin' => 0.7,
67 'bottomMargin' => 0.75,
68 'footerMargin' => 0.3,
69 ];
70 }
71
72 private function pageSetup(SimpleXMLElement $xmlX, stdClass $printDefaults): stdClass
73 {
74 if (isset($xmlX->WorksheetOptions->PageSetup)) {
75 foreach ($xmlX->WorksheetOptions->PageSetup as $pageSetupData) {
76 foreach ($pageSetupData as $pageSetupKey => $pageSetupValue) {
77 $pageSetupAttributes = $pageSetupValue->attributes(Namespaces::URN_EXCEL);
78 if ($pageSetupAttributes !== null) {
79 switch ($pageSetupKey) {
80 case 'Layout':
81 $this->setLayout($printDefaults, $pageSetupAttributes);
82
83 break;
84 case 'Header':
85 $printDefaults->headerMargin = (float) $pageSetupAttributes->Margin ?: 1.0;
86
87 break;
88 case 'Footer':
89 $printDefaults->footerMargin = (float) $pageSetupAttributes->Margin ?: 1.0;
90
91 break;
92 case 'PageMargins':
93 $this->setMargins($printDefaults, $pageSetupAttributes);
94
95 break;
96 }
97 }
98 }
99 }
100 }
101
102 return $printDefaults;
103 }
104
105 private function printSetup(SimpleXMLElement $xmlX, stdClass $printDefaults): stdClass
106 {
107 if (isset($xmlX->WorksheetOptions->Print)) {
108 foreach ($xmlX->WorksheetOptions->Print as $printData) {
109 foreach ($printData as $printKey => $printValue) {
110 switch ($printKey) {
111 case 'LeftToRight':
112 $printDefaults->printOrder = PageSetup::PAGEORDER_OVER_THEN_DOWN;
113
114 break;
115 case 'PaperSizeIndex':
116 $printDefaults->paperSize = (int) $printValue ?: 9;
117
118 break;
119 case 'Scale':
120 $printDefaults->scale = (int) $printValue ?: 100;
121
122 break;
123 }
124 }
125 }
126 }
127
128 return $printDefaults;
129 }
130
131 private function setLayout(stdClass $printDefaults, SimpleXMLElement $pageSetupAttributes): void
132 {
133 $printDefaults->orientation = (string) strtolower($pageSetupAttributes->Orientation ?? '') ?: PageSetup::ORIENTATION_PORTRAIT;
134 $printDefaults->horizontalCentered = (bool) $pageSetupAttributes->CenterHorizontal ?: false;
135 $printDefaults->verticalCentered = (bool) $pageSetupAttributes->CenterVertical ?: false;
136 }
137
138 private function setMargins(stdClass $printDefaults, SimpleXMLElement $pageSetupAttributes): void
139 {
140 $printDefaults->leftMargin = (float) $pageSetupAttributes->Left ?: 1.0;
141 $printDefaults->rightMargin = (float) $pageSetupAttributes->Right ?: 1.0;
142 $printDefaults->topMargin = (float) $pageSetupAttributes->Top ?: 1.0;
143 $printDefaults->bottomMargin = (float) $pageSetupAttributes->Bottom ?: 1.0;
144 }
145 }
146