Failed Conditions
Push — master ( 0c93bb...a2be57 )
by Adrien
29:37 queued 19:11
created

Chart::writeLayout()   B

Complexity

Conditions 9
Paths 129

Size

Total Lines 60
Code Lines 40

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 41
CRAP Score 9

Importance

Changes 0
Metric Value
cc 9
eloc 40
nc 129
nop 2
dl 0
loc 60
ccs 41
cts 41
cp 1
crap 9
rs 7.5311
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx;
4
5
use PhpOffice\PhpSpreadsheet\Chart\Axis;
6
use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
7
use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
8
use PhpOffice\PhpSpreadsheet\Chart\GridLines;
9
use PhpOffice\PhpSpreadsheet\Chart\Layout;
10
use PhpOffice\PhpSpreadsheet\Chart\Legend;
11
use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
12
use PhpOffice\PhpSpreadsheet\Chart\Title;
13
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
14
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
15
use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
16
17
class Chart extends WriterPart
18
{
19
    protected $calculateCellValues;
20
21
    /**
22
     * @var int
23
     */
24
    private $seriesIndex;
25
26
    /**
27
     * Write charts to XML format.
28
     *
29
     * @param mixed $calculateCellValues
30
     *
31
     * @return string XML Output
32
     */
33 17
    public function writeChart(\PhpOffice\PhpSpreadsheet\Chart\Chart $chart, $calculateCellValues = true)
34
    {
35 17
        $this->calculateCellValues = $calculateCellValues;
36
37
        // Create XML writer
38 17
        $objWriter = null;
39 17
        if ($this->getParentWriter()->getUseDiskCaching()) {
40
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
41
        } else {
42 17
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
43
        }
44
        //    Ensure that data series values are up-to-date before we save
45 17
        if ($this->calculateCellValues) {
46 17
            $chart->refresh();
47
        }
48
49
        // XML header
50 17
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
51
52
        // c:chartSpace
53 17
        $objWriter->startElement('c:chartSpace');
54 17
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
55 17
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
56 17
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
57
58 17
        $objWriter->startElement('c:date1904');
59 17
        $objWriter->writeAttribute('val', 0);
60 17
        $objWriter->endElement();
61 17
        $objWriter->startElement('c:lang');
62 17
        $objWriter->writeAttribute('val', 'en-GB');
63 17
        $objWriter->endElement();
64 17
        $objWriter->startElement('c:roundedCorners');
65 17
        $objWriter->writeAttribute('val', 0);
66 17
        $objWriter->endElement();
67
68 17
        $this->writeAlternateContent($objWriter);
69
70 17
        $objWriter->startElement('c:chart');
71
72 17
        $this->writeTitle($objWriter, $chart->getTitle());
73
74 17
        $objWriter->startElement('c:autoTitleDeleted');
75 17
        $objWriter->writeAttribute('val', 0);
76 17
        $objWriter->endElement();
77
78 17
        $this->writePlotArea($objWriter, $chart->getPlotArea(), $chart->getXAxisLabel(), $chart->getYAxisLabel(), $chart->getChartAxisX(), $chart->getChartAxisY(), $chart->getMajorGridlines(), $chart->getMinorGridlines());
79
80 17
        $this->writeLegend($objWriter, $chart->getLegend());
81
82 17
        $objWriter->startElement('c:plotVisOnly');
83 17
        $objWriter->writeAttribute('val', (int) $chart->getPlotVisibleOnly());
84 17
        $objWriter->endElement();
85
86 17
        $objWriter->startElement('c:dispBlanksAs');
87 17
        $objWriter->writeAttribute('val', $chart->getDisplayBlanksAs());
88 17
        $objWriter->endElement();
89
90 17
        $objWriter->startElement('c:showDLblsOverMax');
91 17
        $objWriter->writeAttribute('val', 0);
92 17
        $objWriter->endElement();
93
94 17
        $objWriter->endElement();
95
96 17
        $this->writePrintSettings($objWriter);
97
98 17
        $objWriter->endElement();
99
100
        // Return
101 17
        return $objWriter->getData();
102
    }
103
104
    /**
105
     * Write Chart Title.
106
     */
107 17
    private function writeTitle(XMLWriter $objWriter, ?Title $title = null): void
108
    {
109 17
        if ($title === null) {
110 3
            return;
111
        }
112
113 15
        $objWriter->startElement('c:title');
114 15
        $objWriter->startElement('c:tx');
115 15
        $objWriter->startElement('c:rich');
116
117 15
        $objWriter->startElement('a:bodyPr');
118 15
        $objWriter->endElement();
119
120 15
        $objWriter->startElement('a:lstStyle');
121 15
        $objWriter->endElement();
122
123 15
        $objWriter->startElement('a:p');
124
125 15
        $caption = $title->getCaption();
126 15
        if ((is_array($caption)) && (count($caption) > 0)) {
127 2
            $caption = $caption[0];
128
        }
129 15
        $this->getParentWriter()->getWriterPartstringtable()->writeRichTextForCharts($objWriter, $caption, 'a');
130
131 15
        $objWriter->endElement();
132 15
        $objWriter->endElement();
133 15
        $objWriter->endElement();
134
135 15
        $this->writeLayout($objWriter, $title->getLayout());
136
137 15
        $objWriter->startElement('c:overlay');
138 15
        $objWriter->writeAttribute('val', 0);
139 15
        $objWriter->endElement();
140
141 15
        $objWriter->endElement();
142 15
    }
143
144
    /**
145
     * Write Chart Legend.
146
     */
147 17
    private function writeLegend(XMLWriter $objWriter, ?Legend $legend = null): void
148
    {
149 17
        if ($legend === null) {
150 5
            return;
151
        }
152
153 15
        $objWriter->startElement('c:legend');
154
155 15
        $objWriter->startElement('c:legendPos');
156 15
        $objWriter->writeAttribute('val', $legend->getPosition());
157 15
        $objWriter->endElement();
158
159 15
        $this->writeLayout($objWriter, $legend->getLayout());
160
161 15
        $objWriter->startElement('c:overlay');
162 15
        $objWriter->writeAttribute('val', ($legend->getOverlay()) ? '1' : '0');
163 15
        $objWriter->endElement();
164
165 15
        $objWriter->startElement('c:txPr');
166 15
        $objWriter->startElement('a:bodyPr');
167 15
        $objWriter->endElement();
168
169 15
        $objWriter->startElement('a:lstStyle');
170 15
        $objWriter->endElement();
171
172 15
        $objWriter->startElement('a:p');
173 15
        $objWriter->startElement('a:pPr');
174 15
        $objWriter->writeAttribute('rtl', 0);
175
176 15
        $objWriter->startElement('a:defRPr');
177 15
        $objWriter->endElement();
178 15
        $objWriter->endElement();
179
180 15
        $objWriter->startElement('a:endParaRPr');
181 15
        $objWriter->writeAttribute('lang', 'en-US');
182 15
        $objWriter->endElement();
183
184 15
        $objWriter->endElement();
185 15
        $objWriter->endElement();
186
187 15
        $objWriter->endElement();
188 15
    }
189
190
    /**
191
     * Write Chart Plot Area.
192
     */
193 17
    private function writePlotArea(XMLWriter $objWriter, PlotArea $plotArea, ?Title $xAxisLabel = null, ?Title $yAxisLabel = null, ?Axis $xAxis = null, ?Axis $yAxis = null, ?GridLines $majorGridlines = null, ?GridLines $minorGridlines = null): void
194
    {
195 17
        if ($plotArea === null) {
196
            return;
197
        }
198
199 17
        $id1 = $id2 = 0;
200 17
        $this->seriesIndex = 0;
201 17
        $objWriter->startElement('c:plotArea');
202
203 17
        $layout = $plotArea->getLayout();
204
205 17
        $this->writeLayout($objWriter, $layout);
206
207 17
        $chartTypes = self::getChartType($plotArea);
208 17
        $catIsMultiLevelSeries = $valIsMultiLevelSeries = false;
209 17
        $plotGroupingType = '';
210 17
        $chartType = null;
211 17
        foreach ($chartTypes as $chartType) {
212 17
            $objWriter->startElement('c:' . $chartType);
213
214 17
            $groupCount = $plotArea->getPlotGroupCount();
215 17
            $plotGroup = null;
216 17
            for ($i = 0; $i < $groupCount; ++$i) {
217 17
                $plotGroup = $plotArea->getPlotGroupByIndex($i);
218 17
                $groupType = $plotGroup->getPlotType();
219 17
                if ($groupType == $chartType) {
220 17
                    $plotStyle = $plotGroup->getPlotStyle();
221 17
                    if ($groupType === DataSeries::TYPE_RADARCHART) {
222 2
                        $objWriter->startElement('c:radarStyle');
223 2
                        $objWriter->writeAttribute('val', $plotStyle);
224 2
                        $objWriter->endElement();
225 16
                    } elseif ($groupType === DataSeries::TYPE_SCATTERCHART) {
226 2
                        $objWriter->startElement('c:scatterStyle');
227 2
                        $objWriter->writeAttribute('val', $plotStyle);
228 2
                        $objWriter->endElement();
229
                    }
230
231 17
                    $this->writePlotGroup($plotGroup, $chartType, $objWriter, $catIsMultiLevelSeries, $valIsMultiLevelSeries, $plotGroupingType);
232
                }
233
            }
234
235 17
            $this->writeDataLabels($objWriter, $layout);
236
237 17
            if ($chartType === DataSeries::TYPE_LINECHART && $plotGroup) {
238
                //    Line only, Line3D can't be smoothed
239 5
                $objWriter->startElement('c:smooth');
240 5
                $objWriter->writeAttribute('val', (int) $plotGroup->getSmoothLine());
241 5
                $objWriter->endElement();
242 14
            } elseif (($chartType === DataSeries::TYPE_BARCHART) || ($chartType === DataSeries::TYPE_BARCHART_3D)) {
243 8
                $objWriter->startElement('c:gapWidth');
244 8
                $objWriter->writeAttribute('val', 150);
245 8
                $objWriter->endElement();
246
247 8
                if ($plotGroupingType == 'percentStacked' || $plotGroupingType == 'stacked') {
248 2
                    $objWriter->startElement('c:overlap');
249 2
                    $objWriter->writeAttribute('val', 100);
250 8
                    $objWriter->endElement();
251
                }
252 9
            } elseif ($chartType === DataSeries::TYPE_BUBBLECHART) {
253 1
                $objWriter->startElement('c:bubbleScale');
254 1
                $objWriter->writeAttribute('val', 25);
255 1
                $objWriter->endElement();
256
257 1
                $objWriter->startElement('c:showNegBubbles');
258 1
                $objWriter->writeAttribute('val', 0);
259 1
                $objWriter->endElement();
260 9
            } elseif ($chartType === DataSeries::TYPE_STOCKCHART) {
261 2
                $objWriter->startElement('c:hiLowLines');
262 2
                $objWriter->endElement();
263
264 2
                $objWriter->startElement('c:upDownBars');
265
266 2
                $objWriter->startElement('c:gapWidth');
267 2
                $objWriter->writeAttribute('val', 300);
268 2
                $objWriter->endElement();
269
270 2
                $objWriter->startElement('c:upBars');
271 2
                $objWriter->endElement();
272
273 2
                $objWriter->startElement('c:downBars');
274 2
                $objWriter->endElement();
275
276 2
                $objWriter->endElement();
277
            }
278
279
            //    Generate 2 unique numbers to use for axId values
280 17
            $id1 = '75091328';
281 17
            $id2 = '75089408';
282
283 17
            if (($chartType !== DataSeries::TYPE_PIECHART) && ($chartType !== DataSeries::TYPE_PIECHART_3D) && ($chartType !== DataSeries::TYPE_DONUTCHART)) {
284 15
                $objWriter->startElement('c:axId');
285 15
                $objWriter->writeAttribute('val', $id1);
286 15
                $objWriter->endElement();
287 15
                $objWriter->startElement('c:axId');
288 15
                $objWriter->writeAttribute('val', $id2);
289 15
                $objWriter->endElement();
290
            } else {
291 3
                $objWriter->startElement('c:firstSliceAng');
292 3
                $objWriter->writeAttribute('val', 0);
293 3
                $objWriter->endElement();
294
295 3
                if ($chartType === DataSeries::TYPE_DONUTCHART) {
296 3
                    $objWriter->startElement('c:holeSize');
297 3
                    $objWriter->writeAttribute('val', 50);
298 3
                    $objWriter->endElement();
299
                }
300
            }
301
302 17
            $objWriter->endElement();
303
        }
304
305 17
        if (($chartType !== DataSeries::TYPE_PIECHART) && ($chartType !== DataSeries::TYPE_PIECHART_3D) && ($chartType !== DataSeries::TYPE_DONUTCHART)) {
306 15
            if ($chartType === DataSeries::TYPE_BUBBLECHART) {
307 1
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, $majorGridlines, $minorGridlines);
3 ignored issues
show
Bug introduced by
It seems like $majorGridlines can also be of type null; however, parameter $majorGridlines of PhpOffice\PhpSpreadsheet...Chart::writeValueAxis() does only seem to accept PhpOffice\PhpSpreadsheet\Chart\GridLines, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

307
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, /** @scrutinizer ignore-type */ $majorGridlines, $minorGridlines);
Loading history...
Bug introduced by
It seems like $minorGridlines can also be of type null; however, parameter $minorGridlines of PhpOffice\PhpSpreadsheet...Chart::writeValueAxis() does only seem to accept PhpOffice\PhpSpreadsheet\Chart\GridLines, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

307
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, $majorGridlines, /** @scrutinizer ignore-type */ $minorGridlines);
Loading history...
Bug introduced by
It seems like $xAxis can also be of type null; however, parameter $xAxis of PhpOffice\PhpSpreadsheet...Chart::writeValueAxis() does only seem to accept PhpOffice\PhpSpreadsheet\Chart\Axis, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

307
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, /** @scrutinizer ignore-type */ $xAxis, $majorGridlines, $minorGridlines);
Loading history...
308
            } else {
309 15
                $this->writeCategoryAxis($objWriter, $xAxisLabel, $id1, $id2, $catIsMultiLevelSeries, $xAxis);
1 ignored issue
show
Bug introduced by
It seems like $xAxis can also be of type null; however, parameter $yAxis of PhpOffice\PhpSpreadsheet...rt::writeCategoryAxis() does only seem to accept PhpOffice\PhpSpreadsheet\Chart\Axis, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

309
                $this->writeCategoryAxis($objWriter, $xAxisLabel, $id1, $id2, $catIsMultiLevelSeries, /** @scrutinizer ignore-type */ $xAxis);
Loading history...
310
            }
311
312 15
            $this->writeValueAxis($objWriter, $yAxisLabel, $chartType, $id1, $id2, $valIsMultiLevelSeries, $yAxis, $majorGridlines, $minorGridlines);
313
        }
314
315 17
        $objWriter->endElement();
316 17
    }
317
318
    /**
319
     * Write Data Labels.
320
     */
321 17
    private function writeDataLabels(XMLWriter $objWriter, ?Layout $chartLayout = null): void
322
    {
323 17
        $objWriter->startElement('c:dLbls');
324
325 17
        $objWriter->startElement('c:showLegendKey');
326 17
        $showLegendKey = (empty($chartLayout)) ? 0 : $chartLayout->getShowLegendKey();
327 17
        $objWriter->writeAttribute('val', ((empty($showLegendKey)) ? 0 : 1));
328 17
        $objWriter->endElement();
329
330 17
        $objWriter->startElement('c:showVal');
331 17
        $showVal = (empty($chartLayout)) ? 0 : $chartLayout->getShowVal();
332 17
        $objWriter->writeAttribute('val', ((empty($showVal)) ? 0 : 1));
333 17
        $objWriter->endElement();
334
335 17
        $objWriter->startElement('c:showCatName');
336 17
        $showCatName = (empty($chartLayout)) ? 0 : $chartLayout->getShowCatName();
337 17
        $objWriter->writeAttribute('val', ((empty($showCatName)) ? 0 : 1));
338 17
        $objWriter->endElement();
339
340 17
        $objWriter->startElement('c:showSerName');
341 17
        $showSerName = (empty($chartLayout)) ? 0 : $chartLayout->getShowSerName();
342 17
        $objWriter->writeAttribute('val', ((empty($showSerName)) ? 0 : 1));
343 17
        $objWriter->endElement();
344
345 17
        $objWriter->startElement('c:showPercent');
346 17
        $showPercent = (empty($chartLayout)) ? 0 : $chartLayout->getShowPercent();
347 17
        $objWriter->writeAttribute('val', ((empty($showPercent)) ? 0 : 1));
348 17
        $objWriter->endElement();
349
350 17
        $objWriter->startElement('c:showBubbleSize');
351 17
        $showBubbleSize = (empty($chartLayout)) ? 0 : $chartLayout->getShowBubbleSize();
352 17
        $objWriter->writeAttribute('val', ((empty($showBubbleSize)) ? 0 : 1));
353 17
        $objWriter->endElement();
354
355 17
        $objWriter->startElement('c:showLeaderLines');
356 17
        $showLeaderLines = (empty($chartLayout)) ? 1 : $chartLayout->getShowLeaderLines();
357 17
        $objWriter->writeAttribute('val', ((empty($showLeaderLines)) ? 0 : 1));
358 17
        $objWriter->endElement();
359
360 17
        $objWriter->endElement();
361 17
    }
362
363
    /**
364
     * Write Category Axis.
365
     *
366
     * @param string $id1
367
     * @param string $id2
368
     * @param bool $isMultiLevelSeries
369
     */
370 15
    private function writeCategoryAxis(XMLWriter $objWriter, ?Title $xAxisLabel, $id1, $id2, $isMultiLevelSeries, Axis $yAxis): void
371
    {
372 15
        $objWriter->startElement('c:catAx');
373
374 15
        if ($id1 > 0) {
375 15
            $objWriter->startElement('c:axId');
376 15
            $objWriter->writeAttribute('val', $id1);
377 15
            $objWriter->endElement();
378
        }
379
380 15
        $objWriter->startElement('c:scaling');
381 15
        $objWriter->startElement('c:orientation');
382 15
        $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('orientation'));
383 15
        $objWriter->endElement();
384 15
        $objWriter->endElement();
385
386 15
        $objWriter->startElement('c:delete');
387 15
        $objWriter->writeAttribute('val', 0);
388 15
        $objWriter->endElement();
389
390 15
        $objWriter->startElement('c:axPos');
391 15
        $objWriter->writeAttribute('val', 'b');
392 15
        $objWriter->endElement();
393
394 15
        if ($xAxisLabel !== null) {
395 3
            $objWriter->startElement('c:title');
396 3
            $objWriter->startElement('c:tx');
397 3
            $objWriter->startElement('c:rich');
398
399 3
            $objWriter->startElement('a:bodyPr');
400 3
            $objWriter->endElement();
401
402 3
            $objWriter->startElement('a:lstStyle');
403 3
            $objWriter->endElement();
404
405 3
            $objWriter->startElement('a:p');
406 3
            $objWriter->startElement('a:r');
407
408 3
            $caption = $xAxisLabel->getCaption();
409 3
            if (is_array($caption)) {
410 1
                $caption = $caption[0];
411
            }
412 3
            $objWriter->startElement('a:t');
413 3
            $objWriter->writeRawData(StringHelper::controlCharacterPHP2OOXML($caption));
414 3
            $objWriter->endElement();
415
416 3
            $objWriter->endElement();
417 3
            $objWriter->endElement();
418 3
            $objWriter->endElement();
419 3
            $objWriter->endElement();
420
421 3
            $layout = $xAxisLabel->getLayout();
422 3
            $this->writeLayout($objWriter, $layout);
423
424 3
            $objWriter->startElement('c:overlay');
425 3
            $objWriter->writeAttribute('val', 0);
426 3
            $objWriter->endElement();
427
428 3
            $objWriter->endElement();
429
        }
430
431 15
        $objWriter->startElement('c:numFmt');
432 15
        $objWriter->writeAttribute('formatCode', $yAxis->getAxisNumberFormat());
433 15
        $objWriter->writeAttribute('sourceLinked', $yAxis->getAxisNumberSourceLinked());
434 15
        $objWriter->endElement();
435
436 15
        $objWriter->startElement('c:majorTickMark');
437 15
        $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('major_tick_mark'));
438 15
        $objWriter->endElement();
439
440 15
        $objWriter->startElement('c:minorTickMark');
441 15
        $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('minor_tick_mark'));
442 15
        $objWriter->endElement();
443
444 15
        $objWriter->startElement('c:tickLblPos');
445 15
        $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('axis_labels'));
446 15
        $objWriter->endElement();
447
448 15
        if ($id2 > 0) {
449 15
            $objWriter->startElement('c:crossAx');
450 15
            $objWriter->writeAttribute('val', $id2);
451 15
            $objWriter->endElement();
452
453 15
            $objWriter->startElement('c:crosses');
454 15
            $objWriter->writeAttribute('val', $yAxis->getAxisOptionsProperty('horizontal_crosses'));
455 15
            $objWriter->endElement();
456
        }
457
458 15
        $objWriter->startElement('c:auto');
459 15
        $objWriter->writeAttribute('val', 1);
460 15
        $objWriter->endElement();
461
462 15
        $objWriter->startElement('c:lblAlgn');
463 15
        $objWriter->writeAttribute('val', 'ctr');
464 15
        $objWriter->endElement();
465
466 15
        $objWriter->startElement('c:lblOffset');
467 15
        $objWriter->writeAttribute('val', 100);
468 15
        $objWriter->endElement();
469
470 15
        if ($isMultiLevelSeries) {
471 2
            $objWriter->startElement('c:noMultiLvlLbl');
472 2
            $objWriter->writeAttribute('val', 0);
473 2
            $objWriter->endElement();
474
        }
475 15
        $objWriter->endElement();
476 15
    }
477
478
    /**
479
     * Write Value Axis.
480
     *
481
     * @param null|string $groupType Chart type
482
     * @param string $id1
483
     * @param string $id2
484
     * @param bool $isMultiLevelSeries
485
     */
486 15
    private function writeValueAxis(XMLWriter $objWriter, ?Title $yAxisLabel, $groupType, $id1, $id2, $isMultiLevelSeries, Axis $xAxis, GridLines $majorGridlines, GridLines $minorGridlines): void
487
    {
488 15
        $objWriter->startElement('c:valAx');
489
490 15
        if ($id2 > 0) {
491 15
            $objWriter->startElement('c:axId');
492 15
            $objWriter->writeAttribute('val', $id2);
493 15
            $objWriter->endElement();
494
        }
495
496 15
        $objWriter->startElement('c:scaling');
497
498 15
        if ($xAxis->getAxisOptionsProperty('maximum') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...rty('maximum') !== null is always true.
Loading history...
499
            $objWriter->startElement('c:max');
500
            $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('maximum'));
501
            $objWriter->endElement();
502
        }
503
504 15
        if ($xAxis->getAxisOptionsProperty('minimum') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...rty('minimum') !== null is always true.
Loading history...
505
            $objWriter->startElement('c:min');
506
            $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minimum'));
507
            $objWriter->endElement();
508
        }
509
510 15
        $objWriter->startElement('c:orientation');
511 15
        $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('orientation'));
512
513 15
        $objWriter->endElement();
514 15
        $objWriter->endElement();
515
516 15
        $objWriter->startElement('c:delete');
517 15
        $objWriter->writeAttribute('val', 0);
518 15
        $objWriter->endElement();
519
520 15
        $objWriter->startElement('c:axPos');
521 15
        $objWriter->writeAttribute('val', 'l');
522 15
        $objWriter->endElement();
523
524 15
        $objWriter->startElement('c:majorGridlines');
525 15
        $objWriter->startElement('c:spPr');
526
527 15
        if ($majorGridlines->getLineColorProperty('value') !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getLine...perty('value') !== null is always true.
Loading history...
528
            $objWriter->startElement('a:ln');
529
            $objWriter->writeAttribute('w', $majorGridlines->getLineStyleProperty('width'));
530
            $objWriter->startElement('a:solidFill');
531
            $objWriter->startElement("a:{$majorGridlines->getLineColorProperty('type')}");
532
            $objWriter->writeAttribute('val', $majorGridlines->getLineColorProperty('value'));
533
            $objWriter->startElement('a:alpha');
534
            $objWriter->writeAttribute('val', $majorGridlines->getLineColorProperty('alpha'));
535
            $objWriter->endElement(); //end alpha
536
            $objWriter->endElement(); //end srgbClr
537
            $objWriter->endElement(); //end solidFill
538
539
            $objWriter->startElement('a:prstDash');
540
            $objWriter->writeAttribute('val', $majorGridlines->getLineStyleProperty('dash'));
541
            $objWriter->endElement();
542
543
            if ($majorGridlines->getLineStyleProperty('join') == 'miter') {
544
                $objWriter->startElement('a:miter');
545
                $objWriter->writeAttribute('lim', '800000');
546
                $objWriter->endElement();
547
            } else {
548
                $objWriter->startElement('a:bevel');
549
                $objWriter->endElement();
550
            }
551
552
            if ($majorGridlines->getLineStyleProperty(['arrow', 'head', 'type']) !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getLine...ead', 'type')) !== null is always true.
Loading history...
553
                $objWriter->startElement('a:headEnd');
554
                $objWriter->writeAttribute('type', $majorGridlines->getLineStyleProperty(['arrow', 'head', 'type']));
555
                $objWriter->writeAttribute('w', $majorGridlines->getLineStyleArrowParameters('head', 'w'));
556
                $objWriter->writeAttribute('len', $majorGridlines->getLineStyleArrowParameters('head', 'len'));
557
                $objWriter->endElement();
558
            }
559
560
            if ($majorGridlines->getLineStyleProperty(['arrow', 'end', 'type']) !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getLine...end', 'type')) !== null is always true.
Loading history...
561
                $objWriter->startElement('a:tailEnd');
562
                $objWriter->writeAttribute('type', $majorGridlines->getLineStyleProperty(['arrow', 'end', 'type']));
563
                $objWriter->writeAttribute('w', $majorGridlines->getLineStyleArrowParameters('end', 'w'));
564
                $objWriter->writeAttribute('len', $majorGridlines->getLineStyleArrowParameters('end', 'len'));
565
                $objWriter->endElement();
566
            }
567
            $objWriter->endElement(); //end ln
568
        }
569 15
        $objWriter->startElement('a:effectLst');
570
571 15
        if ($majorGridlines->getGlowSize() !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getGlowSize() !== null is always true.
Loading history...
572
            $objWriter->startElement('a:glow');
573
            $objWriter->writeAttribute('rad', $majorGridlines->getGlowSize());
574
            $objWriter->startElement("a:{$majorGridlines->getGlowColor('type')}");
575
            $objWriter->writeAttribute('val', $majorGridlines->getGlowColor('value'));
576
            $objWriter->startElement('a:alpha');
577
            $objWriter->writeAttribute('val', $majorGridlines->getGlowColor('alpha'));
578
            $objWriter->endElement(); //end alpha
579
            $objWriter->endElement(); //end schemeClr
580
            $objWriter->endElement(); //end glow
581
        }
582
583 15
        if ($majorGridlines->getShadowProperty('presets') !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...rty('presets') !== null is always true.
Loading history...
584
            $objWriter->startElement("a:{$majorGridlines->getShadowProperty('effect')}");
585
            if ($majorGridlines->getShadowProperty('blur') !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...operty('blur') !== null is always true.
Loading history...
586
                $objWriter->writeAttribute('blurRad', $majorGridlines->getShadowProperty('blur'));
587
            }
588
            if ($majorGridlines->getShadowProperty('distance') !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...ty('distance') !== null is always true.
Loading history...
589
                $objWriter->writeAttribute('dist', $majorGridlines->getShadowProperty('distance'));
590
            }
591
            if ($majorGridlines->getShadowProperty('direction') !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...y('direction') !== null is always true.
Loading history...
592
                $objWriter->writeAttribute('dir', $majorGridlines->getShadowProperty('direction'));
593
            }
594
            if ($majorGridlines->getShadowProperty('algn') !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...operty('algn') !== null is always true.
Loading history...
595
                $objWriter->writeAttribute('algn', $majorGridlines->getShadowProperty('algn'));
596
            }
597
            if ($majorGridlines->getShadowProperty(['size', 'sx']) !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...'size', 'sx')) !== null is always true.
Loading history...
598
                $objWriter->writeAttribute('sx', $majorGridlines->getShadowProperty(['size', 'sx']));
599
            }
600
            if ($majorGridlines->getShadowProperty(['size', 'sy']) !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...'size', 'sy')) !== null is always true.
Loading history...
601
                $objWriter->writeAttribute('sy', $majorGridlines->getShadowProperty(['size', 'sy']));
602
            }
603
            if ($majorGridlines->getShadowProperty(['size', 'kx']) !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...'size', 'kx')) !== null is always true.
Loading history...
604
                $objWriter->writeAttribute('kx', $majorGridlines->getShadowProperty(['size', 'kx']));
605
            }
606
            if ($majorGridlines->getShadowProperty('rotWithShape') !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getShad...rotWithShape') !== null is always true.
Loading history...
607
                $objWriter->writeAttribute('rotWithShape', $majorGridlines->getShadowProperty('rotWithShape'));
608
            }
609
            $objWriter->startElement("a:{$majorGridlines->getShadowProperty(['color', 'type'])}");
610
            $objWriter->writeAttribute('val', $majorGridlines->getShadowProperty(['color', 'value']));
611
612
            $objWriter->startElement('a:alpha');
613
            $objWriter->writeAttribute('val', $majorGridlines->getShadowProperty(['color', 'alpha']));
614
            $objWriter->endElement(); //end alpha
615
616
            $objWriter->endElement(); //end color:type
617
            $objWriter->endElement(); //end shadow
618
        }
619
620 15
        if ($majorGridlines->getSoftEdgesSize() !== null) {
0 ignored issues
show
introduced by
The condition $majorGridlines->getSoftEdgesSize() !== null is always true.
Loading history...
621
            $objWriter->startElement('a:softEdge');
622
            $objWriter->writeAttribute('rad', $majorGridlines->getSoftEdgesSize());
623
            $objWriter->endElement(); //end softEdge
624
        }
625
626 15
        $objWriter->endElement(); //end effectLst
627 15
        $objWriter->endElement(); //end spPr
628 15
        $objWriter->endElement(); //end majorGridLines
629
630 15
        if ($minorGridlines->getObjectState()) {
631
            $objWriter->startElement('c:minorGridlines');
632
            $objWriter->startElement('c:spPr');
633
634
            if ($minorGridlines->getLineColorProperty('value') !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getLine...perty('value') !== null is always true.
Loading history...
635
                $objWriter->startElement('a:ln');
636
                $objWriter->writeAttribute('w', $minorGridlines->getLineStyleProperty('width'));
637
                $objWriter->startElement('a:solidFill');
638
                $objWriter->startElement("a:{$minorGridlines->getLineColorProperty('type')}");
639
                $objWriter->writeAttribute('val', $minorGridlines->getLineColorProperty('value'));
640
                $objWriter->startElement('a:alpha');
641
                $objWriter->writeAttribute('val', $minorGridlines->getLineColorProperty('alpha'));
642
                $objWriter->endElement(); //end alpha
643
                $objWriter->endElement(); //end srgbClr
644
                $objWriter->endElement(); //end solidFill
645
646
                $objWriter->startElement('a:prstDash');
647
                $objWriter->writeAttribute('val', $minorGridlines->getLineStyleProperty('dash'));
648
                $objWriter->endElement();
649
650
                if ($minorGridlines->getLineStyleProperty('join') == 'miter') {
651
                    $objWriter->startElement('a:miter');
652
                    $objWriter->writeAttribute('lim', '800000');
653
                    $objWriter->endElement();
654
                } else {
655
                    $objWriter->startElement('a:bevel');
656
                    $objWriter->endElement();
657
                }
658
659
                if ($minorGridlines->getLineStyleProperty(['arrow', 'head', 'type']) !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getLine...ead', 'type')) !== null is always true.
Loading history...
660
                    $objWriter->startElement('a:headEnd');
661
                    $objWriter->writeAttribute('type', $minorGridlines->getLineStyleProperty(['arrow', 'head', 'type']));
662
                    $objWriter->writeAttribute('w', $minorGridlines->getLineStyleArrowParameters('head', 'w'));
663
                    $objWriter->writeAttribute('len', $minorGridlines->getLineStyleArrowParameters('head', 'len'));
664
                    $objWriter->endElement();
665
                }
666
667
                if ($minorGridlines->getLineStyleProperty(['arrow', 'end', 'type']) !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getLine...end', 'type')) !== null is always true.
Loading history...
668
                    $objWriter->startElement('a:tailEnd');
669
                    $objWriter->writeAttribute('type', $minorGridlines->getLineStyleProperty(['arrow', 'end', 'type']));
670
                    $objWriter->writeAttribute('w', $minorGridlines->getLineStyleArrowParameters('end', 'w'));
671
                    $objWriter->writeAttribute('len', $minorGridlines->getLineStyleArrowParameters('end', 'len'));
672
                    $objWriter->endElement();
673
                }
674
                $objWriter->endElement(); //end ln
675
            }
676
677
            $objWriter->startElement('a:effectLst');
678
679
            if ($minorGridlines->getGlowSize() !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getGlowSize() !== null is always true.
Loading history...
680
                $objWriter->startElement('a:glow');
681
                $objWriter->writeAttribute('rad', $minorGridlines->getGlowSize());
682
                $objWriter->startElement("a:{$minorGridlines->getGlowColor('type')}");
683
                $objWriter->writeAttribute('val', $minorGridlines->getGlowColor('value'));
684
                $objWriter->startElement('a:alpha');
685
                $objWriter->writeAttribute('val', $minorGridlines->getGlowColor('alpha'));
686
                $objWriter->endElement(); //end alpha
687
                $objWriter->endElement(); //end schemeClr
688
                $objWriter->endElement(); //end glow
689
            }
690
691
            if ($minorGridlines->getShadowProperty('presets') !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...rty('presets') !== null is always true.
Loading history...
692
                $objWriter->startElement("a:{$minorGridlines->getShadowProperty('effect')}");
693
                if ($minorGridlines->getShadowProperty('blur') !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...operty('blur') !== null is always true.
Loading history...
694
                    $objWriter->writeAttribute('blurRad', $minorGridlines->getShadowProperty('blur'));
695
                }
696
                if ($minorGridlines->getShadowProperty('distance') !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...ty('distance') !== null is always true.
Loading history...
697
                    $objWriter->writeAttribute('dist', $minorGridlines->getShadowProperty('distance'));
698
                }
699
                if ($minorGridlines->getShadowProperty('direction') !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...y('direction') !== null is always true.
Loading history...
700
                    $objWriter->writeAttribute('dir', $minorGridlines->getShadowProperty('direction'));
701
                }
702
                if ($minorGridlines->getShadowProperty('algn') !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...operty('algn') !== null is always true.
Loading history...
703
                    $objWriter->writeAttribute('algn', $minorGridlines->getShadowProperty('algn'));
704
                }
705
                if ($minorGridlines->getShadowProperty(['size', 'sx']) !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...'size', 'sx')) !== null is always true.
Loading history...
706
                    $objWriter->writeAttribute('sx', $minorGridlines->getShadowProperty(['size', 'sx']));
707
                }
708
                if ($minorGridlines->getShadowProperty(['size', 'sy']) !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...'size', 'sy')) !== null is always true.
Loading history...
709
                    $objWriter->writeAttribute('sy', $minorGridlines->getShadowProperty(['size', 'sy']));
710
                }
711
                if ($minorGridlines->getShadowProperty(['size', 'kx']) !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...'size', 'kx')) !== null is always true.
Loading history...
712
                    $objWriter->writeAttribute('kx', $minorGridlines->getShadowProperty(['size', 'kx']));
713
                }
714
                if ($minorGridlines->getShadowProperty('rotWithShape') !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getShad...rotWithShape') !== null is always true.
Loading history...
715
                    $objWriter->writeAttribute('rotWithShape', $minorGridlines->getShadowProperty('rotWithShape'));
716
                }
717
                $objWriter->startElement("a:{$minorGridlines->getShadowProperty(['color', 'type'])}");
718
                $objWriter->writeAttribute('val', $minorGridlines->getShadowProperty(['color', 'value']));
719
                $objWriter->startElement('a:alpha');
720
                $objWriter->writeAttribute('val', $minorGridlines->getShadowProperty(['color', 'alpha']));
721
                $objWriter->endElement(); //end alpha
722
                $objWriter->endElement(); //end color:type
723
                $objWriter->endElement(); //end shadow
724
            }
725
726
            if ($minorGridlines->getSoftEdgesSize() !== null) {
0 ignored issues
show
introduced by
The condition $minorGridlines->getSoftEdgesSize() !== null is always true.
Loading history...
727
                $objWriter->startElement('a:softEdge');
728
                $objWriter->writeAttribute('rad', $minorGridlines->getSoftEdgesSize());
729
                $objWriter->endElement(); //end softEdge
730
            }
731
732
            $objWriter->endElement(); //end effectLst
733
            $objWriter->endElement(); //end spPr
734
            $objWriter->endElement(); //end minorGridLines
735
        }
736
737 15
        if ($yAxisLabel !== null) {
738 11
            $objWriter->startElement('c:title');
739 11
            $objWriter->startElement('c:tx');
740 11
            $objWriter->startElement('c:rich');
741
742 11
            $objWriter->startElement('a:bodyPr');
743 11
            $objWriter->endElement();
744
745 11
            $objWriter->startElement('a:lstStyle');
746 11
            $objWriter->endElement();
747
748 11
            $objWriter->startElement('a:p');
749 11
            $objWriter->startElement('a:r');
750
751 11
            $caption = $yAxisLabel->getCaption();
752 11
            if (is_array($caption)) {
753 2
                $caption = $caption[0];
754
            }
755
756 11
            $objWriter->startElement('a:t');
757 11
            $objWriter->writeRawData(StringHelper::controlCharacterPHP2OOXML($caption));
758 11
            $objWriter->endElement();
759
760 11
            $objWriter->endElement();
761 11
            $objWriter->endElement();
762 11
            $objWriter->endElement();
763 11
            $objWriter->endElement();
764
765 11
            if ($groupType !== DataSeries::TYPE_BUBBLECHART) {
766 11
                $layout = $yAxisLabel->getLayout();
767 11
                $this->writeLayout($objWriter, $layout);
768
            }
769
770 11
            $objWriter->startElement('c:overlay');
771 11
            $objWriter->writeAttribute('val', 0);
772 11
            $objWriter->endElement();
773
774 11
            $objWriter->endElement();
775
        }
776
777 15
        $objWriter->startElement('c:numFmt');
778 15
        $objWriter->writeAttribute('formatCode', $xAxis->getAxisNumberFormat());
779 15
        $objWriter->writeAttribute('sourceLinked', $xAxis->getAxisNumberSourceLinked());
780 15
        $objWriter->endElement();
781
782 15
        $objWriter->startElement('c:majorTickMark');
783 15
        $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_tick_mark'));
784 15
        $objWriter->endElement();
785
786 15
        $objWriter->startElement('c:minorTickMark');
787 15
        $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minor_tick_mark'));
788 15
        $objWriter->endElement();
789
790 15
        $objWriter->startElement('c:tickLblPos');
791 15
        $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('axis_labels'));
792 15
        $objWriter->endElement();
793
794 15
        $objWriter->startElement('c:spPr');
795
796 15
        if ($xAxis->getFillProperty('value') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getFillProperty('value') !== null is always true.
Loading history...
797
            $objWriter->startElement('a:solidFill');
798
            $objWriter->startElement('a:' . $xAxis->getFillProperty('type'));
799
            $objWriter->writeAttribute('val', $xAxis->getFillProperty('value'));
800
            $objWriter->startElement('a:alpha');
801
            $objWriter->writeAttribute('val', $xAxis->getFillProperty('alpha'));
802
            $objWriter->endElement();
803
            $objWriter->endElement();
804
            $objWriter->endElement();
805
        }
806
807 15
        $objWriter->startElement('a:ln');
808
809 15
        $objWriter->writeAttribute('w', $xAxis->getLineStyleProperty('width'));
810 15
        $objWriter->writeAttribute('cap', $xAxis->getLineStyleProperty('cap'));
811 15
        $objWriter->writeAttribute('cmpd', $xAxis->getLineStyleProperty('compound'));
812
813 15
        if ($xAxis->getLineProperty('value') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getLineProperty('value') !== null is always true.
Loading history...
814
            $objWriter->startElement('a:solidFill');
815
            $objWriter->startElement('a:' . $xAxis->getLineProperty('type'));
816
            $objWriter->writeAttribute('val', $xAxis->getLineProperty('value'));
817
            $objWriter->startElement('a:alpha');
818
            $objWriter->writeAttribute('val', $xAxis->getLineProperty('alpha'));
819
            $objWriter->endElement();
820
            $objWriter->endElement();
821
            $objWriter->endElement();
822
        }
823
824 15
        $objWriter->startElement('a:prstDash');
825 15
        $objWriter->writeAttribute('val', $xAxis->getLineStyleProperty('dash'));
826 15
        $objWriter->endElement();
827
828 15
        if ($xAxis->getLineStyleProperty('join') == 'miter') {
829
            $objWriter->startElement('a:miter');
830
            $objWriter->writeAttribute('lim', '800000');
831
            $objWriter->endElement();
832
        } else {
833 15
            $objWriter->startElement('a:bevel');
834 15
            $objWriter->endElement();
835
        }
836
837 15
        if ($xAxis->getLineStyleProperty(['arrow', 'head', 'type']) !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getLineStyleProp...ead', 'type')) !== null is always true.
Loading history...
838
            $objWriter->startElement('a:headEnd');
839
            $objWriter->writeAttribute('type', $xAxis->getLineStyleProperty(['arrow', 'head', 'type']));
840
            $objWriter->writeAttribute('w', $xAxis->getLineStyleArrowWidth('head'));
841
            $objWriter->writeAttribute('len', $xAxis->getLineStyleArrowLength('head'));
842
            $objWriter->endElement();
843
        }
844
845 15
        if ($xAxis->getLineStyleProperty(['arrow', 'end', 'type']) !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getLineStyleProp...end', 'type')) !== null is always true.
Loading history...
846
            $objWriter->startElement('a:tailEnd');
847
            $objWriter->writeAttribute('type', $xAxis->getLineStyleProperty(['arrow', 'end', 'type']));
848
            $objWriter->writeAttribute('w', $xAxis->getLineStyleArrowWidth('end'));
849
            $objWriter->writeAttribute('len', $xAxis->getLineStyleArrowLength('end'));
850
            $objWriter->endElement();
851
        }
852
853 15
        $objWriter->endElement();
854
855 15
        $objWriter->startElement('a:effectLst');
856
857 15
        if ($xAxis->getGlowProperty('size') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getGlowProperty('size') !== null is always true.
Loading history...
858
            $objWriter->startElement('a:glow');
859
            $objWriter->writeAttribute('rad', $xAxis->getGlowProperty('size'));
860
            $objWriter->startElement("a:{$xAxis->getGlowProperty(['color', 'type'])}");
861
            $objWriter->writeAttribute('val', $xAxis->getGlowProperty(['color', 'value']));
862
            $objWriter->startElement('a:alpha');
863
            $objWriter->writeAttribute('val', $xAxis->getGlowProperty(['color', 'alpha']));
864
            $objWriter->endElement();
865
            $objWriter->endElement();
866
            $objWriter->endElement();
867
        }
868
869 15
        if ($xAxis->getShadowProperty('presets') !== null) {
870
            $objWriter->startElement("a:{$xAxis->getShadowProperty('effect')}");
871
872
            if ($xAxis->getShadowProperty('blur') !== null) {
873
                $objWriter->writeAttribute('blurRad', $xAxis->getShadowProperty('blur'));
1 ignored issue
show
Bug introduced by
It seems like $xAxis->getShadowProperty('blur') can also be of type array; however, parameter $value of XMLWriter::writeAttribute() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

873
                $objWriter->writeAttribute('blurRad', /** @scrutinizer ignore-type */ $xAxis->getShadowProperty('blur'));
Loading history...
874
            }
875
            if ($xAxis->getShadowProperty('distance') !== null) {
876
                $objWriter->writeAttribute('dist', $xAxis->getShadowProperty('distance'));
877
            }
878
            if ($xAxis->getShadowProperty('direction') !== null) {
879
                $objWriter->writeAttribute('dir', $xAxis->getShadowProperty('direction'));
880
            }
881
            if ($xAxis->getShadowProperty('algn') !== null) {
882
                $objWriter->writeAttribute('algn', $xAxis->getShadowProperty('algn'));
883
            }
884
            if ($xAxis->getShadowProperty(['size', 'sx']) !== null) {
885
                $objWriter->writeAttribute('sx', $xAxis->getShadowProperty(['size', 'sx']));
886
            }
887
            if ($xAxis->getShadowProperty(['size', 'sy']) !== null) {
888
                $objWriter->writeAttribute('sy', $xAxis->getShadowProperty(['size', 'sy']));
889
            }
890
            if ($xAxis->getShadowProperty(['size', 'kx']) !== null) {
891
                $objWriter->writeAttribute('kx', $xAxis->getShadowProperty(['size', 'kx']));
892
            }
893
            if ($xAxis->getShadowProperty('rotWithShape') !== null) {
894
                $objWriter->writeAttribute('rotWithShape', $xAxis->getShadowProperty('rotWithShape'));
895
            }
896
897
            $objWriter->startElement("a:{$xAxis->getShadowProperty(['color', 'type'])}");
898
            $objWriter->writeAttribute('val', $xAxis->getShadowProperty(['color', 'value']));
899
            $objWriter->startElement('a:alpha');
900
            $objWriter->writeAttribute('val', $xAxis->getShadowProperty(['color', 'alpha']));
901
            $objWriter->endElement();
902
            $objWriter->endElement();
903
904
            $objWriter->endElement();
905
        }
906
907 15
        if ($xAxis->getSoftEdgesSize() !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getSoftEdgesSize() !== null is always true.
Loading history...
908
            $objWriter->startElement('a:softEdge');
909
            $objWriter->writeAttribute('rad', $xAxis->getSoftEdgesSize());
910
            $objWriter->endElement();
911
        }
912
913 15
        $objWriter->endElement(); //effectList
914 15
        $objWriter->endElement(); //end spPr
915
916 15
        if ($id1 > 0) {
917 15
            $objWriter->startElement('c:crossAx');
918 15
            $objWriter->writeAttribute('val', $id2);
919 15
            $objWriter->endElement();
920
921 15
            if ($xAxis->getAxisOptionsProperty('horizontal_crosses_value') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...rosses_value') !== null is always true.
Loading history...
922
                $objWriter->startElement('c:crossesAt');
923
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses_value'));
924
                $objWriter->endElement();
925
            } else {
926 15
                $objWriter->startElement('c:crosses');
927 15
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses'));
928 15
                $objWriter->endElement();
929
            }
930
931 15
            $objWriter->startElement('c:crossBetween');
932 15
            $objWriter->writeAttribute('val', 'midCat');
933 15
            $objWriter->endElement();
934
935 15
            if ($xAxis->getAxisOptionsProperty('major_unit') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...('major_unit') !== null is always true.
Loading history...
936
                $objWriter->startElement('c:majorUnit');
937
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_unit'));
938
                $objWriter->endElement();
939
            }
940
941 15
            if ($xAxis->getAxisOptionsProperty('minor_unit') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...('minor_unit') !== null is always true.
Loading history...
942
                $objWriter->startElement('c:minorUnit');
943
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minor_unit'));
944
                $objWriter->endElement();
945
            }
946
        }
947
948 15
        if ($isMultiLevelSeries) {
949 1
            if ($groupType !== DataSeries::TYPE_BUBBLECHART) {
950
                $objWriter->startElement('c:noMultiLvlLbl');
951
                $objWriter->writeAttribute('val', 0);
952
                $objWriter->endElement();
953
            }
954
        }
955
956 15
        $objWriter->endElement();
957 15
    }
958
959
    /**
960
     * Get the data series type(s) for a chart plot series.
961
     *
962
     * @return string[]
963
     */
964 17
    private static function getChartType(PlotArea $plotArea): array
965
    {
966 17
        $groupCount = $plotArea->getPlotGroupCount();
967
968 17
        if ($groupCount == 1) {
969 16
            $chartType = [$plotArea->getPlotGroupByIndex(0)->getPlotType()];
970
        } else {
971 2
            $chartTypes = [];
972 2
            for ($i = 0; $i < $groupCount; ++$i) {
973 2
                $chartTypes[] = $plotArea->getPlotGroupByIndex($i)->getPlotType();
974
            }
975 2
            $chartType = array_unique($chartTypes);
976 2
            if (count($chartTypes) == 0) {
977
                throw new WriterException('Chart is not yet implemented');
978
            }
979
        }
980
981 17
        return $chartType;
982
    }
983
984
    /**
985
     * Method writing plot series values.
986
     *
987
     * @param int $val value for idx (default: 3)
988
     * @param string $fillColor hex color (default: FF9900)
989
     */
990 3
    private function writePlotSeriesValuesElement(XMLWriter $objWriter, $val = 3, $fillColor = 'FF9900'): void
991
    {
992 3
        $objWriter->startElement('c:dPt');
993 3
        $objWriter->startElement('c:idx');
994 3
        $objWriter->writeAttribute('val', $val);
995 3
        $objWriter->endElement();
996
997 3
        $objWriter->startElement('c:bubble3D');
998 3
        $objWriter->writeAttribute('val', 0);
999 3
        $objWriter->endElement();
1000
1001 3
        $objWriter->startElement('c:spPr');
1002 3
        $objWriter->startElement('a:solidFill');
1003 3
        $objWriter->startElement('a:srgbClr');
1004 3
        $objWriter->writeAttribute('val', $fillColor);
1005 3
        $objWriter->endElement();
1006 3
        $objWriter->endElement();
1007 3
        $objWriter->endElement();
1008 3
        $objWriter->endElement();
1009 3
    }
1010
1011
    /**
1012
     * Write Plot Group (series of related plots).
1013
     *
1014
     * @param string $groupType Type of plot for dataseries
1015
     * @param bool $catIsMultiLevelSeries Is category a multi-series category
1016
     * @param bool $valIsMultiLevelSeries Is value set a multi-series set
1017
     * @param string $plotGroupingType Type of grouping for multi-series values
1018
     */
1019 17
    private function writePlotGroup(?DataSeries $plotGroup, $groupType, XMLWriter $objWriter, &$catIsMultiLevelSeries, &$valIsMultiLevelSeries, &$plotGroupingType): void
1020
    {
1021 17
        if ($plotGroup === null) {
1022
            return;
1023
        }
1024
1025 17
        if (($groupType == DataSeries::TYPE_BARCHART) || ($groupType == DataSeries::TYPE_BARCHART_3D)) {
1026 8
            $objWriter->startElement('c:barDir');
1027 8
            $objWriter->writeAttribute('val', $plotGroup->getPlotDirection());
1028 8
            $objWriter->endElement();
1029
        }
1030
1031 17
        if ($plotGroup->getPlotGrouping() !== null) {
0 ignored issues
show
introduced by
The condition $plotGroup->getPlotGrouping() !== null is always true.
Loading history...
1032 12
            $plotGroupingType = $plotGroup->getPlotGrouping();
1033 12
            $objWriter->startElement('c:grouping');
1034 12
            $objWriter->writeAttribute('val', $plotGroupingType);
1035 12
            $objWriter->endElement();
1036
        }
1037
1038
        //    Get these details before the loop, because we can use the count to check for varyColors
1039 17
        $plotSeriesOrder = $plotGroup->getPlotOrder();
1040 17
        $plotSeriesCount = count($plotSeriesOrder);
1041
1042 17
        if (($groupType !== DataSeries::TYPE_RADARCHART) && ($groupType !== DataSeries::TYPE_STOCKCHART)) {
1043 15
            if ($groupType !== DataSeries::TYPE_LINECHART) {
1044 12
                if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART) || ($plotSeriesCount > 1)) {
1045 11
                    $objWriter->startElement('c:varyColors');
1046 11
                    $objWriter->writeAttribute('val', 1);
1047 11
                    $objWriter->endElement();
1048
                } else {
1049 2
                    $objWriter->startElement('c:varyColors');
1050 2
                    $objWriter->writeAttribute('val', 0);
1051 2
                    $objWriter->endElement();
1052
                }
1053
            }
1054
        }
1055
1056 17
        $plotSeriesIdx = 0;
1057 17
        foreach ($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) {
1058 17
            $objWriter->startElement('c:ser');
1059
1060 17
            $plotLabel = $plotGroup->getPlotLabelByIndex($plotSeriesIdx);
1061 17
            if ($plotLabel && $groupType !== DataSeries::TYPE_LINECHART) {
1062 14
                $fillColor = $plotLabel->getFillColor();
1063 14
                if ($fillColor !== null && !is_array($fillColor)) {
1064
                    $objWriter->startElement('c:spPr');
1065
                    $objWriter->startElement('a:solidFill');
1066
                    $objWriter->startElement('a:srgbClr');
1067
                    $objWriter->writeAttribute('val', $fillColor);
1068
                    $objWriter->endElement();
1069
                    $objWriter->endElement();
1070
                    $objWriter->endElement();
1071
                }
1072
            }
1073
1074 17
            $objWriter->startElement('c:idx');
1075 17
            $objWriter->writeAttribute('val', $this->seriesIndex + $plotSeriesIdx);
1076 17
            $objWriter->endElement();
1077
1078 17
            $objWriter->startElement('c:order');
1079 17
            $objWriter->writeAttribute('val', $this->seriesIndex + $plotSeriesRef);
1080 17
            $objWriter->endElement();
1081
1082
            //    Values
1083 17
            $plotSeriesValues = $plotGroup->getPlotValuesByIndex($plotSeriesRef);
1084
1085 17
            if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART)) {
1086 3
                $fillColorValues = $plotSeriesValues->getFillColor();
1087 3
                if ($fillColorValues !== null && is_array($fillColorValues)) {
1088 1
                    foreach ($plotSeriesValues->getDataValues() as $dataKey => $dataValue) {
1089 1
                        $this->writePlotSeriesValuesElement($objWriter, $dataKey, ($fillColorValues[$dataKey] ?? 'FF9900'));
1090
                    }
1091
                } else {
1092 2
                    $this->writePlotSeriesValuesElement($objWriter);
1093
                }
1094
            }
1095
1096
            //    Labels
1097 17
            $plotSeriesLabel = $plotGroup->getPlotLabelByIndex($plotSeriesRef);
1098 17
            if ($plotSeriesLabel && ($plotSeriesLabel->getPointCount() > 0)) {
1099 17
                $objWriter->startElement('c:tx');
1100 17
                $objWriter->startElement('c:strRef');
1101 17
                $this->writePlotSeriesLabel($plotSeriesLabel, $objWriter);
1102 17
                $objWriter->endElement();
1103 17
                $objWriter->endElement();
1104
            }
1105
1106
            //    Formatting for the points
1107 17
            if (($groupType == DataSeries::TYPE_LINECHART) || ($groupType == DataSeries::TYPE_STOCKCHART)) {
1108 6
                $plotLineWidth = 12700;
1109 6
                if ($plotSeriesValues) {
1110 6
                    $plotLineWidth = $plotSeriesValues->getLineWidth();
1111
                }
1112
1113 6
                $objWriter->startElement('c:spPr');
1114 6
                $objWriter->startElement('a:ln');
1115 6
                $objWriter->writeAttribute('w', $plotLineWidth);
1116 6
                if ($groupType == DataSeries::TYPE_STOCKCHART) {
1117 2
                    $objWriter->startElement('a:noFill');
1118 2
                    $objWriter->endElement();
1119 5
                } elseif ($plotLabel) {
1120 5
                    $fillColor = $plotLabel->getFillColor();
1121 5
                    if (is_string($fillColor)) {
1122 1
                        $objWriter->startElement('a:solidFill');
1123 1
                        $objWriter->startElement('a:srgbClr');
1124 1
                        $objWriter->writeAttribute('val', $fillColor);
1125 1
                        $objWriter->endElement();
1126 1
                        $objWriter->endElement();
1127
                    }
1128
                }
1129 6
                $objWriter->endElement();
1130 6
                $objWriter->endElement();
1131
            }
1132
1133 17
            if ($plotSeriesValues) {
1134 17
                $plotSeriesMarker = $plotSeriesValues->getPointMarker();
1135 17
                if ($plotSeriesMarker) {
1136 1
                    $objWriter->startElement('c:marker');
1137 1
                    $objWriter->startElement('c:symbol');
1138 1
                    $objWriter->writeAttribute('val', $plotSeriesMarker);
1139 1
                    $objWriter->endElement();
1140
1141 1
                    if ($plotSeriesMarker !== 'none') {
1142 1
                        $objWriter->startElement('c:size');
1143 1
                        $objWriter->writeAttribute('val', 3);
1144 1
                        $objWriter->endElement();
1145
                    }
1146
1147 1
                    $objWriter->endElement();
1148
                }
1149
            }
1150
1151 17
            if (($groupType === DataSeries::TYPE_BARCHART) || ($groupType === DataSeries::TYPE_BARCHART_3D) || ($groupType === DataSeries::TYPE_BUBBLECHART)) {
1152 8
                $objWriter->startElement('c:invertIfNegative');
1153 8
                $objWriter->writeAttribute('val', 0);
1154 8
                $objWriter->endElement();
1155
            }
1156
1157
            //    Category Labels
1158 17
            $plotSeriesCategory = $plotGroup->getPlotCategoryByIndex($plotSeriesRef);
1159 17
            if ($plotSeriesCategory && ($plotSeriesCategory->getPointCount() > 0)) {
1160 15
                $catIsMultiLevelSeries = $catIsMultiLevelSeries || $plotSeriesCategory->isMultiLevelSeries();
1161
1162 15
                if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART)) {
1163 3
                    if ($plotGroup->getPlotStyle() !== null) {
1164 1
                        $plotStyle = $plotGroup->getPlotStyle();
1165 1
                        if ($plotStyle) {
1166 1
                            $objWriter->startElement('c:explosion');
1167 1
                            $objWriter->writeAttribute('val', 25);
1168 1
                            $objWriter->endElement();
1169
                        }
1170
                    }
1171
                }
1172
1173 15
                if (($groupType === DataSeries::TYPE_BUBBLECHART) || ($groupType === DataSeries::TYPE_SCATTERCHART)) {
1174 2
                    $objWriter->startElement('c:xVal');
1175
                } else {
1176 14
                    $objWriter->startElement('c:cat');
1177
                }
1178
1179 15
                $this->writePlotSeriesValues($plotSeriesCategory, $objWriter, $groupType, 'str');
1180 15
                $objWriter->endElement();
1181
            }
1182
1183
            //    Values
1184 17
            if ($plotSeriesValues) {
1185 17
                $valIsMultiLevelSeries = $valIsMultiLevelSeries || $plotSeriesValues->isMultiLevelSeries();
1186
1187 17
                if (($groupType === DataSeries::TYPE_BUBBLECHART) || ($groupType === DataSeries::TYPE_SCATTERCHART)) {
1188 2
                    $objWriter->startElement('c:yVal');
1189
                } else {
1190 16
                    $objWriter->startElement('c:val');
1191
                }
1192
1193 17
                $this->writePlotSeriesValues($plotSeriesValues, $objWriter, $groupType, 'num');
1194 17
                $objWriter->endElement();
1195
            }
1196
1197 17
            if ($groupType === DataSeries::TYPE_BUBBLECHART) {
1198 1
                $this->writeBubbles($plotSeriesValues, $objWriter);
1 ignored issue
show
Bug introduced by
It seems like $plotSeriesValues can also be of type false; however, parameter $plotSeriesValues of PhpOffice\PhpSpreadsheet...x\Chart::writeBubbles() does only seem to accept PhpOffice\PhpSpreadsheet...t\DataSeriesValues|null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1198
                $this->writeBubbles(/** @scrutinizer ignore-type */ $plotSeriesValues, $objWriter);
Loading history...
1199
            }
1200
1201 17
            $objWriter->endElement();
1202
        }
1203
1204 17
        $this->seriesIndex += $plotSeriesIdx + 1;
1205 17
    }
1206
1207
    /**
1208
     * Write Plot Series Label.
1209
     */
1210 17
    private function writePlotSeriesLabel(?DataSeriesValues $plotSeriesLabel, XMLWriter $objWriter): void
1211
    {
1212 17
        if ($plotSeriesLabel === null) {
1213
            return;
1214
        }
1215
1216 17
        $objWriter->startElement('c:f');
1217 17
        $objWriter->writeRawData($plotSeriesLabel->getDataSource());
1218 17
        $objWriter->endElement();
1219
1220 17
        $objWriter->startElement('c:strCache');
1221 17
        $objWriter->startElement('c:ptCount');
1222 17
        $objWriter->writeAttribute('val', $plotSeriesLabel->getPointCount());
1223 17
        $objWriter->endElement();
1224
1225 17
        foreach ($plotSeriesLabel->getDataValues() as $plotLabelKey => $plotLabelValue) {
1226 17
            $objWriter->startElement('c:pt');
1227 17
            $objWriter->writeAttribute('idx', $plotLabelKey);
1228
1229 17
            $objWriter->startElement('c:v');
1230 17
            $objWriter->writeRawData($plotLabelValue);
1231 17
            $objWriter->endElement();
1232 17
            $objWriter->endElement();
1233
        }
1234 17
        $objWriter->endElement();
1235 17
    }
1236
1237
    /**
1238
     * Write Plot Series Values.
1239
     *
1240
     * @param string $groupType Type of plot for dataseries
1241
     * @param string $dataType Datatype of series values
1242
     */
1243 17
    private function writePlotSeriesValues(?DataSeriesValues $plotSeriesValues, XMLWriter $objWriter, $groupType, $dataType = 'str'): void
1244
    {
1245 17
        if ($plotSeriesValues === null) {
1246
            return;
1247
        }
1248
1249 17
        if ($plotSeriesValues->isMultiLevelSeries()) {
1250 2
            $levelCount = $plotSeriesValues->multiLevelCount();
1251
1252 2
            $objWriter->startElement('c:multiLvlStrRef');
1253
1254 2
            $objWriter->startElement('c:f');
1255 2
            $objWriter->writeRawData($plotSeriesValues->getDataSource());
1256 2
            $objWriter->endElement();
1257
1258 2
            $objWriter->startElement('c:multiLvlStrCache');
1259
1260 2
            $objWriter->startElement('c:ptCount');
1261 2
            $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1262 2
            $objWriter->endElement();
1263
1264 2
            for ($level = 0; $level < $levelCount; ++$level) {
1265 2
                $objWriter->startElement('c:lvl');
1266
1267 2
                foreach ($plotSeriesValues->getDataValues() as $plotSeriesKey => $plotSeriesValue) {
1268 2
                    if (isset($plotSeriesValue[$level])) {
1269 2
                        $objWriter->startElement('c:pt');
1270 2
                        $objWriter->writeAttribute('idx', $plotSeriesKey);
1271
1272 2
                        $objWriter->startElement('c:v');
1273 2
                        $objWriter->writeRawData($plotSeriesValue[$level]);
1274 2
                        $objWriter->endElement();
1275 2
                        $objWriter->endElement();
1276
                    }
1277
                }
1278
1279 2
                $objWriter->endElement();
1280
            }
1281
1282 2
            $objWriter->endElement();
1283
1284 2
            $objWriter->endElement();
1285
        } else {
1286 17
            $objWriter->startElement('c:' . $dataType . 'Ref');
1287
1288 17
            $objWriter->startElement('c:f');
1289 17
            $objWriter->writeRawData($plotSeriesValues->getDataSource());
1290 17
            $objWriter->endElement();
1291
1292 17
            $objWriter->startElement('c:' . $dataType . 'Cache');
1293
1294 17
            if (($groupType != DataSeries::TYPE_PIECHART) && ($groupType != DataSeries::TYPE_PIECHART_3D) && ($groupType != DataSeries::TYPE_DONUTCHART)) {
1295 15
                if (($plotSeriesValues->getFormatCode() !== null) && ($plotSeriesValues->getFormatCode() !== '')) {
1296 1
                    $objWriter->startElement('c:formatCode');
1297 1
                    $objWriter->writeRawData($plotSeriesValues->getFormatCode());
1298 1
                    $objWriter->endElement();
1299
                }
1300
            }
1301
1302 17
            $objWriter->startElement('c:ptCount');
1303 17
            $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1304 17
            $objWriter->endElement();
1305
1306 17
            $dataValues = $plotSeriesValues->getDataValues();
1307 17
            if (!empty($dataValues)) {
1308 17
                if (is_array($dataValues)) {
0 ignored issues
show
introduced by
The condition is_array($dataValues) is always true.
Loading history...
1309 17
                    foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) {
1310 17
                        $objWriter->startElement('c:pt');
1311 17
                        $objWriter->writeAttribute('idx', $plotSeriesKey);
1312
1313 17
                        $objWriter->startElement('c:v');
1314 17
                        $objWriter->writeRawData($plotSeriesValue);
1315 17
                        $objWriter->endElement();
1316 17
                        $objWriter->endElement();
1317
                    }
1318
                }
1319
            }
1320
1321 17
            $objWriter->endElement();
1322
1323 17
            $objWriter->endElement();
1324
        }
1325 17
    }
1326
1327
    /**
1328
     * Write Bubble Chart Details.
1329
     */
1330 1
    private function writeBubbles(?DataSeriesValues $plotSeriesValues, XMLWriter $objWriter): void
1331
    {
1332 1
        if ($plotSeriesValues === null) {
1333
            return;
1334
        }
1335
1336 1
        $objWriter->startElement('c:bubbleSize');
1337 1
        $objWriter->startElement('c:numLit');
1338
1339 1
        $objWriter->startElement('c:formatCode');
1340 1
        $objWriter->writeRawData('General');
1341 1
        $objWriter->endElement();
1342
1343 1
        $objWriter->startElement('c:ptCount');
1344 1
        $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1345 1
        $objWriter->endElement();
1346
1347 1
        $dataValues = $plotSeriesValues->getDataValues();
1348 1
        if (!empty($dataValues)) {
1349 1
            if (is_array($dataValues)) {
0 ignored issues
show
introduced by
The condition is_array($dataValues) is always true.
Loading history...
1350 1
                foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) {
1351 1
                    $objWriter->startElement('c:pt');
1352 1
                    $objWriter->writeAttribute('idx', $plotSeriesKey);
1353 1
                    $objWriter->startElement('c:v');
1354 1
                    $objWriter->writeRawData(1);
1355 1
                    $objWriter->endElement();
1356 1
                    $objWriter->endElement();
1357
                }
1358
            }
1359
        }
1360
1361 1
        $objWriter->endElement();
1362 1
        $objWriter->endElement();
1363
1364 1
        $objWriter->startElement('c:bubble3D');
1365 1
        $objWriter->writeAttribute('val', 0);
1366 1
        $objWriter->endElement();
1367 1
    }
1368
1369
    /**
1370
     * Write Layout.
1371
     */
1372 17
    private function writeLayout(XMLWriter $objWriter, ?Layout $layout = null): void
1373
    {
1374 17
        $objWriter->startElement('c:layout');
1375
1376 17
        if ($layout !== null) {
1377 5
            $objWriter->startElement('c:manualLayout');
1378
1379 5
            $layoutTarget = $layout->getLayoutTarget();
1380 5
            if ($layoutTarget !== null) {
0 ignored issues
show
introduced by
The condition $layoutTarget !== null is always true.
Loading history...
1381 1
                $objWriter->startElement('c:layoutTarget');
1382 1
                $objWriter->writeAttribute('val', $layoutTarget);
1383 1
                $objWriter->endElement();
1384
            }
1385
1386 5
            $xMode = $layout->getXMode();
1387 5
            if ($xMode !== null) {
0 ignored issues
show
introduced by
The condition $xMode !== null is always true.
Loading history...
1388 1
                $objWriter->startElement('c:xMode');
1389 1
                $objWriter->writeAttribute('val', $xMode);
1390 1
                $objWriter->endElement();
1391
            }
1392
1393 5
            $yMode = $layout->getYMode();
1394 5
            if ($yMode !== null) {
0 ignored issues
show
introduced by
The condition $yMode !== null is always true.
Loading history...
1395 1
                $objWriter->startElement('c:yMode');
1396 1
                $objWriter->writeAttribute('val', $yMode);
1397 1
                $objWriter->endElement();
1398
            }
1399
1400 5
            $x = $layout->getXPosition();
1401 5
            if ($x !== null) {
0 ignored issues
show
introduced by
The condition $x !== null is always true.
Loading history...
1402 1
                $objWriter->startElement('c:x');
1403 1
                $objWriter->writeAttribute('val', $x);
1404 1
                $objWriter->endElement();
1405
            }
1406
1407 5
            $y = $layout->getYPosition();
1408 5
            if ($y !== null) {
0 ignored issues
show
introduced by
The condition $y !== null is always true.
Loading history...
1409 1
                $objWriter->startElement('c:y');
1410 1
                $objWriter->writeAttribute('val', $y);
1411 1
                $objWriter->endElement();
1412
            }
1413
1414 5
            $w = $layout->getWidth();
1415 5
            if ($w !== null) {
0 ignored issues
show
introduced by
The condition $w !== null is always true.
Loading history...
1416 1
                $objWriter->startElement('c:w');
1417 1
                $objWriter->writeAttribute('val', $w);
1418 1
                $objWriter->endElement();
1419
            }
1420
1421 5
            $h = $layout->getHeight();
1422 5
            if ($h !== null) {
0 ignored issues
show
introduced by
The condition $h !== null is always true.
Loading history...
1423 1
                $objWriter->startElement('c:h');
1424 1
                $objWriter->writeAttribute('val', $h);
1425 1
                $objWriter->endElement();
1426
            }
1427
1428 5
            $objWriter->endElement();
1429
        }
1430
1431 17
        $objWriter->endElement();
1432 17
    }
1433
1434
    /**
1435
     * Write Alternate Content block.
1436
     */
1437 17
    private function writeAlternateContent(XMLWriter $objWriter): void
1438
    {
1439 17
        $objWriter->startElement('mc:AlternateContent');
1440 17
        $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
1441
1442 17
        $objWriter->startElement('mc:Choice');
1443 17
        $objWriter->writeAttribute('xmlns:c14', 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart');
1444 17
        $objWriter->writeAttribute('Requires', 'c14');
1445
1446 17
        $objWriter->startElement('c14:style');
1447 17
        $objWriter->writeAttribute('val', '102');
1448 17
        $objWriter->endElement();
1449 17
        $objWriter->endElement();
1450
1451 17
        $objWriter->startElement('mc:Fallback');
1452 17
        $objWriter->startElement('c:style');
1453 17
        $objWriter->writeAttribute('val', '2');
1454 17
        $objWriter->endElement();
1455 17
        $objWriter->endElement();
1456
1457 17
        $objWriter->endElement();
1458 17
    }
1459
1460
    /**
1461
     * Write Printer Settings.
1462
     */
1463 17
    private function writePrintSettings(XMLWriter $objWriter): void
1464
    {
1465 17
        $objWriter->startElement('c:printSettings');
1466
1467 17
        $objWriter->startElement('c:headerFooter');
1468 17
        $objWriter->endElement();
1469
1470 17
        $objWriter->startElement('c:pageMargins');
1471 17
        $objWriter->writeAttribute('footer', 0.3);
1472 17
        $objWriter->writeAttribute('header', 0.3);
1473 17
        $objWriter->writeAttribute('r', 0.7);
1474 17
        $objWriter->writeAttribute('l', 0.7);
1475 17
        $objWriter->writeAttribute('t', 0.75);
1476 17
        $objWriter->writeAttribute('b', 0.75);
1477 17
        $objWriter->endElement();
1478
1479 17
        $objWriter->startElement('c:pageSetup');
1480 17
        $objWriter->writeAttribute('orientation', 'portrait');
1481 17
        $objWriter->endElement();
1482
1483 17
        $objWriter->endElement();
1484 17
    }
1485
}
1486