Failed Conditions
Push — master ( a2bb82...a189d9 )
by Adrien
10:27 queued 01:00
created

Chart::writePlotArea()   F

Complexity

Conditions 23
Paths 274

Size

Total Lines 123
Code Lines 86

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 84
CRAP Score 23.0008

Importance

Changes 0
Metric Value
cc 23
eloc 86
nc 274
nop 9
dl 0
loc 123
ccs 84
cts 85
cp 0.9882
crap 23.0008
rs 2.4083
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

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:

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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 15
    public function writeChart(\PhpOffice\PhpSpreadsheet\Chart\Chart $pChart, $calculateCellValues = true)
34
    {
35 15
        $this->calculateCellValues = $calculateCellValues;
36
37
        // Create XML writer
38 15
        $objWriter = null;
39 15
        if ($this->getParentWriter()->getUseDiskCaching()) {
40
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
41
        } else {
42 15
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
43
        }
44
        //    Ensure that data series values are up-to-date before we save
45 15
        if ($this->calculateCellValues) {
46 15
            $pChart->refresh();
47
        }
48
49
        // XML header
50 15
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
51
52
        // c:chartSpace
53 15
        $objWriter->startElement('c:chartSpace');
54 15
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
55 15
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
56 15
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
57
58 15
        $objWriter->startElement('c:date1904');
59 15
        $objWriter->writeAttribute('val', 0);
60 15
        $objWriter->endElement();
61 15
        $objWriter->startElement('c:lang');
62 15
        $objWriter->writeAttribute('val', 'en-GB');
63 15
        $objWriter->endElement();
64 15
        $objWriter->startElement('c:roundedCorners');
65 15
        $objWriter->writeAttribute('val', 0);
66 15
        $objWriter->endElement();
67
68 15
        $this->writeAlternateContent($objWriter);
69
70 15
        $objWriter->startElement('c:chart');
71
72 15
        $this->writeTitle($objWriter, $pChart->getTitle());
73
74 15
        $objWriter->startElement('c:autoTitleDeleted');
75 15
        $objWriter->writeAttribute('val', 0);
76 15
        $objWriter->endElement();
77
78 15
        $this->writePlotArea($objWriter, $pChart->getWorksheet(), $pChart->getPlotArea(), $pChart->getXAxisLabel(), $pChart->getYAxisLabel(), $pChart->getChartAxisX(), $pChart->getChartAxisY(), $pChart->getMajorGridlines(), $pChart->getMinorGridlines());
79
80 15
        $this->writeLegend($objWriter, $pChart->getLegend());
81
82 15
        $objWriter->startElement('c:plotVisOnly');
83 15
        $objWriter->writeAttribute('val', (int) $pChart->getPlotVisibleOnly());
84 15
        $objWriter->endElement();
85
86 15
        $objWriter->startElement('c:dispBlanksAs');
87 15
        $objWriter->writeAttribute('val', $pChart->getDisplayBlanksAs());
88 15
        $objWriter->endElement();
89
90 15
        $objWriter->startElement('c:showDLblsOverMax');
91 15
        $objWriter->writeAttribute('val', 0);
92 15
        $objWriter->endElement();
93
94 15
        $objWriter->endElement();
95
96 15
        $this->writePrintSettings($objWriter);
97
98 15
        $objWriter->endElement();
99
100
        // Return
101 15
        return $objWriter->getData();
102
    }
103
104
    /**
105
     * Write Chart Title.
106
     *
107
     * @param XMLWriter $objWriter XML Writer
108
     * @param Title $title
109
     */
110 15
    private function writeTitle(XMLWriter $objWriter, ?Title $title = null): void
111
    {
112 15
        if ($title === null) {
113 1
            return;
114
        }
115
116 15
        $objWriter->startElement('c:title');
117 15
        $objWriter->startElement('c:tx');
118 15
        $objWriter->startElement('c:rich');
119
120 15
        $objWriter->startElement('a:bodyPr');
121 15
        $objWriter->endElement();
122
123 15
        $objWriter->startElement('a:lstStyle');
124 15
        $objWriter->endElement();
125
126 15
        $objWriter->startElement('a:p');
127
128 15
        $caption = $title->getCaption();
129 15
        if ((is_array($caption)) && (count($caption) > 0)) {
0 ignored issues
show
introduced by
The condition is_array($caption) is always false.
Loading history...
130 2
            $caption = $caption[0];
131
        }
132 15
        $this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $caption, 'a');
0 ignored issues
show
Bug introduced by
The method writeRichTextForCharts() does not exist on PhpOffice\PhpSpreadsheet\Writer\Xlsx\WriterPart. It seems like you code against a sub-type of PhpOffice\PhpSpreadsheet\Writer\Xlsx\WriterPart such as PhpOffice\PhpSpreadsheet\Writer\Xlsx\StringTable. ( Ignorable by Annotation )

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

132
        $this->getParentWriter()->getWriterPart('stringtable')->/** @scrutinizer ignore-call */ writeRichTextForCharts($objWriter, $caption, 'a');
Loading history...
133
134 15
        $objWriter->endElement();
135 15
        $objWriter->endElement();
136 15
        $objWriter->endElement();
137
138 15
        $this->writeLayout($objWriter, $title->getLayout());
139
140 15
        $objWriter->startElement('c:overlay');
141 15
        $objWriter->writeAttribute('val', 0);
142 15
        $objWriter->endElement();
143
144 15
        $objWriter->endElement();
145 15
    }
146
147
    /**
148
     * Write Chart Legend.
149
     *
150
     * @param XMLWriter $objWriter XML Writer
151
     * @param Legend $legend
152
     */
153 15
    private function writeLegend(XMLWriter $objWriter, ?Legend $legend = null): void
154
    {
155 15
        if ($legend === null) {
156 3
            return;
157
        }
158
159 15
        $objWriter->startElement('c:legend');
160
161 15
        $objWriter->startElement('c:legendPos');
162 15
        $objWriter->writeAttribute('val', $legend->getPosition());
163 15
        $objWriter->endElement();
164
165 15
        $this->writeLayout($objWriter, $legend->getLayout());
166
167 15
        $objWriter->startElement('c:overlay');
168 15
        $objWriter->writeAttribute('val', ($legend->getOverlay()) ? '1' : '0');
169 15
        $objWriter->endElement();
170
171 15
        $objWriter->startElement('c:txPr');
172 15
        $objWriter->startElement('a:bodyPr');
173 15
        $objWriter->endElement();
174
175 15
        $objWriter->startElement('a:lstStyle');
176 15
        $objWriter->endElement();
177
178 15
        $objWriter->startElement('a:p');
179 15
        $objWriter->startElement('a:pPr');
180 15
        $objWriter->writeAttribute('rtl', 0);
181
182 15
        $objWriter->startElement('a:defRPr');
183 15
        $objWriter->endElement();
184 15
        $objWriter->endElement();
185
186 15
        $objWriter->startElement('a:endParaRPr');
187 15
        $objWriter->writeAttribute('lang', 'en-US');
188 15
        $objWriter->endElement();
189
190 15
        $objWriter->endElement();
191 15
        $objWriter->endElement();
192
193 15
        $objWriter->endElement();
194 15
    }
195
196
    /**
197
     * Write Chart Plot Area.
198
     *
199
     * @param XMLWriter $objWriter XML Writer
200
     * @param Title $xAxisLabel
201
     * @param Title $yAxisLabel
202
     * @param Axis $xAxis
203
     * @param Axis $yAxis
204
     */
205 15
    private function writePlotArea(XMLWriter $objWriter, \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $pSheet, PlotArea $plotArea, ?Title $xAxisLabel = null, ?Title $yAxisLabel = null, ?Axis $xAxis = null, ?Axis $yAxis = null, ?GridLines $majorGridlines = null, ?GridLines $minorGridlines = null): void
0 ignored issues
show
Unused Code introduced by
The parameter $pSheet is not used and could be removed. ( Ignorable by Annotation )

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

205
    private function writePlotArea(XMLWriter $objWriter, /** @scrutinizer ignore-unused */ \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $pSheet, PlotArea $plotArea, ?Title $xAxisLabel = null, ?Title $yAxisLabel = null, ?Axis $xAxis = null, ?Axis $yAxis = null, ?GridLines $majorGridlines = null, ?GridLines $minorGridlines = null): void

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
206
    {
207 15
        if ($plotArea === null) {
208
            return;
209
        }
210
211 15
        $id1 = $id2 = 0;
212 15
        $this->seriesIndex = 0;
213 15
        $objWriter->startElement('c:plotArea');
214
215 15
        $layout = $plotArea->getLayout();
216
217 15
        $this->writeLayout($objWriter, $layout);
218
219 15
        $chartTypes = self::getChartType($plotArea);
220 15
        $catIsMultiLevelSeries = $valIsMultiLevelSeries = false;
221 15
        $plotGroupingType = '';
222 15
        $chartType = null;
223 15
        foreach ($chartTypes as $chartType) {
224 15
            $objWriter->startElement('c:' . $chartType);
225
226 15
            $groupCount = $plotArea->getPlotGroupCount();
227 15
            $plotGroup = null;
228 15
            for ($i = 0; $i < $groupCount; ++$i) {
229 15
                $plotGroup = $plotArea->getPlotGroupByIndex($i);
230 15
                $groupType = $plotGroup->getPlotType();
231 15
                if ($groupType == $chartType) {
232 15
                    $plotStyle = $plotGroup->getPlotStyle();
233 15
                    if ($groupType === DataSeries::TYPE_RADARCHART) {
234 2
                        $objWriter->startElement('c:radarStyle');
235 2
                        $objWriter->writeAttribute('val', $plotStyle);
236 2
                        $objWriter->endElement();
237 14
                    } elseif ($groupType === DataSeries::TYPE_SCATTERCHART) {
238 2
                        $objWriter->startElement('c:scatterStyle');
239 2
                        $objWriter->writeAttribute('val', $plotStyle);
240 2
                        $objWriter->endElement();
241
                    }
242
243 15
                    $this->writePlotGroup($plotGroup, $chartType, $objWriter, $catIsMultiLevelSeries, $valIsMultiLevelSeries, $plotGroupingType);
244
                }
245
            }
246
247 15
            $this->writeDataLabels($objWriter, $layout);
248
249 15
            if ($chartType === DataSeries::TYPE_LINECHART && $plotGroup) {
250
                //    Line only, Line3D can't be smoothed
251 3
                $objWriter->startElement('c:smooth');
252 3
                $objWriter->writeAttribute('val', (int) $plotGroup->getSmoothLine());
253 3
                $objWriter->endElement();
254 14
            } elseif (($chartType === DataSeries::TYPE_BARCHART) || ($chartType === DataSeries::TYPE_BARCHART_3D)) {
255 8
                $objWriter->startElement('c:gapWidth');
256 8
                $objWriter->writeAttribute('val', 150);
257 8
                $objWriter->endElement();
258
259 8
                if ($plotGroupingType == 'percentStacked' || $plotGroupingType == 'stacked') {
260 2
                    $objWriter->startElement('c:overlap');
261 2
                    $objWriter->writeAttribute('val', 100);
262 8
                    $objWriter->endElement();
263
                }
264 9
            } elseif ($chartType === DataSeries::TYPE_BUBBLECHART) {
265 1
                $objWriter->startElement('c:bubbleScale');
266 1
                $objWriter->writeAttribute('val', 25);
267 1
                $objWriter->endElement();
268
269 1
                $objWriter->startElement('c:showNegBubbles');
270 1
                $objWriter->writeAttribute('val', 0);
271 1
                $objWriter->endElement();
272 9
            } elseif ($chartType === DataSeries::TYPE_STOCKCHART) {
273 2
                $objWriter->startElement('c:hiLowLines');
274 2
                $objWriter->endElement();
275
276 2
                $objWriter->startElement('c:upDownBars');
277
278 2
                $objWriter->startElement('c:gapWidth');
279 2
                $objWriter->writeAttribute('val', 300);
280 2
                $objWriter->endElement();
281
282 2
                $objWriter->startElement('c:upBars');
283 2
                $objWriter->endElement();
284
285 2
                $objWriter->startElement('c:downBars');
286 2
                $objWriter->endElement();
287
288 2
                $objWriter->endElement();
289
            }
290
291
            //    Generate 2 unique numbers to use for axId values
292 15
            $id1 = '75091328';
293 15
            $id2 = '75089408';
294
295 15
            if (($chartType !== DataSeries::TYPE_PIECHART) && ($chartType !== DataSeries::TYPE_PIECHART_3D) && ($chartType !== DataSeries::TYPE_DONUTCHART)) {
296 13
                $objWriter->startElement('c:axId');
297 13
                $objWriter->writeAttribute('val', $id1);
298 13
                $objWriter->endElement();
299 13
                $objWriter->startElement('c:axId');
300 13
                $objWriter->writeAttribute('val', $id2);
301 13
                $objWriter->endElement();
302
            } else {
303 3
                $objWriter->startElement('c:firstSliceAng');
304 3
                $objWriter->writeAttribute('val', 0);
305 3
                $objWriter->endElement();
306
307 3
                if ($chartType === DataSeries::TYPE_DONUTCHART) {
308 3
                    $objWriter->startElement('c:holeSize');
309 3
                    $objWriter->writeAttribute('val', 50);
310 3
                    $objWriter->endElement();
311
                }
312
            }
313
314 15
            $objWriter->endElement();
315
        }
316
317 15
        if (($chartType !== DataSeries::TYPE_PIECHART) && ($chartType !== DataSeries::TYPE_PIECHART_3D) && ($chartType !== DataSeries::TYPE_DONUTCHART)) {
318 13
            if ($chartType === DataSeries::TYPE_BUBBLECHART) {
319 1
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, $majorGridlines, $minorGridlines);
3 ignored issues
show
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

319
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, /** @scrutinizer ignore-type */ $xAxis, $majorGridlines, $minorGridlines);
Loading history...
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

319
                $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

319
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, $majorGridlines, /** @scrutinizer ignore-type */ $minorGridlines);
Loading history...
320
            } else {
321 13
                $this->writeCategoryAxis($objWriter, $xAxisLabel, $id1, $id2, $catIsMultiLevelSeries, $yAxis);
1 ignored issue
show
Bug introduced by
It seems like $yAxis 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

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

892
                $objWriter->writeAttribute('blurRad', /** @scrutinizer ignore-type */ $xAxis->getShadowProperty('blur'));
Loading history...
893
            }
894
            if ($xAxis->getShadowProperty('distance') !== null) {
895
                $objWriter->writeAttribute('dist', $xAxis->getShadowProperty('distance'));
896
            }
897
            if ($xAxis->getShadowProperty('direction') !== null) {
898
                $objWriter->writeAttribute('dir', $xAxis->getShadowProperty('direction'));
899
            }
900
            if ($xAxis->getShadowProperty('algn') !== null) {
901
                $objWriter->writeAttribute('algn', $xAxis->getShadowProperty('algn'));
902
            }
903
            if ($xAxis->getShadowProperty(['size', 'sx']) !== null) {
904
                $objWriter->writeAttribute('sx', $xAxis->getShadowProperty(['size', 'sx']));
905
            }
906
            if ($xAxis->getShadowProperty(['size', 'sy']) !== null) {
907
                $objWriter->writeAttribute('sy', $xAxis->getShadowProperty(['size', 'sy']));
908
            }
909
            if ($xAxis->getShadowProperty(['size', 'kx']) !== null) {
910
                $objWriter->writeAttribute('kx', $xAxis->getShadowProperty(['size', 'kx']));
911
            }
912
            if ($xAxis->getShadowProperty('rotWithShape') !== null) {
913
                $objWriter->writeAttribute('rotWithShape', $xAxis->getShadowProperty('rotWithShape'));
914
            }
915
916
            $objWriter->startElement("a:{$xAxis->getShadowProperty(['color', 'type'])}");
917
            $objWriter->writeAttribute('val', $xAxis->getShadowProperty(['color', 'value']));
918
            $objWriter->startElement('a:alpha');
919
            $objWriter->writeAttribute('val', $xAxis->getShadowProperty(['color', 'alpha']));
920
            $objWriter->endElement();
921
            $objWriter->endElement();
922
923
            $objWriter->endElement();
924
        }
925
926 13
        if ($xAxis->getSoftEdgesSize() !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getSoftEdgesSize() !== null is always true.
Loading history...
927
            $objWriter->startElement('a:softEdge');
928
            $objWriter->writeAttribute('rad', $xAxis->getSoftEdgesSize());
929
            $objWriter->endElement();
930
        }
931
932 13
        $objWriter->endElement(); //effectList
933 13
        $objWriter->endElement(); //end spPr
934
935 13
        if ($id1 > 0) {
936 13
            $objWriter->startElement('c:crossAx');
937 13
            $objWriter->writeAttribute('val', $id2);
938 13
            $objWriter->endElement();
939
940 13
            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...
941
                $objWriter->startElement('c:crossesAt');
942
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses_value'));
943
                $objWriter->endElement();
944
            } else {
945 13
                $objWriter->startElement('c:crosses');
946 13
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses'));
947 13
                $objWriter->endElement();
948
            }
949
950 13
            $objWriter->startElement('c:crossBetween');
951 13
            $objWriter->writeAttribute('val', 'midCat');
952 13
            $objWriter->endElement();
953
954 13
            if ($xAxis->getAxisOptionsProperty('major_unit') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...('major_unit') !== null is always true.
Loading history...
955
                $objWriter->startElement('c:majorUnit');
956
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_unit'));
957
                $objWriter->endElement();
958
            }
959
960 13
            if ($xAxis->getAxisOptionsProperty('minor_unit') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...('minor_unit') !== null is always true.
Loading history...
961
                $objWriter->startElement('c:minorUnit');
962
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minor_unit'));
963
                $objWriter->endElement();
964
            }
965
        }
966
967 13
        if ($isMultiLevelSeries) {
968 1
            if ($groupType !== DataSeries::TYPE_BUBBLECHART) {
969
                $objWriter->startElement('c:noMultiLvlLbl');
970
                $objWriter->writeAttribute('val', 0);
971
                $objWriter->endElement();
972
            }
973
        }
974
975 13
        $objWriter->endElement();
976 13
    }
977
978
    /**
979
     * Get the data series type(s) for a chart plot series.
980
     *
981
     * @param PlotArea $plotArea
982
     *
983
     * @return array|string
984
     */
985 15
    private static function getChartType($plotArea)
986
    {
987 15
        $groupCount = $plotArea->getPlotGroupCount();
988
989 15
        if ($groupCount == 1) {
0 ignored issues
show
introduced by
The condition $groupCount == 1 is always false.
Loading history...
990 14
            $chartType = [$plotArea->getPlotGroupByIndex(0)->getPlotType()];
991
        } else {
992 2
            $chartTypes = [];
993 2
            for ($i = 0; $i < $groupCount; ++$i) {
994 2
                $chartTypes[] = $plotArea->getPlotGroupByIndex($i)->getPlotType();
995
            }
996 2
            $chartType = array_unique($chartTypes);
997 2
            if (count($chartTypes) == 0) {
998
                throw new WriterException('Chart is not yet implemented');
999
            }
1000
        }
1001
1002 15
        return $chartType;
1003
    }
1004
1005
    /**
1006
     * Method writing plot series values.
1007
     *
1008
     * @param XMLWriter $objWriter XML Writer
1009
     * @param int       $val       value for idx (default: 3)
1010
     * @param string    $fillColor hex color (default: FF9900)
1011
     *
1012
     * @return XMLWriter XML Writer
1013
     */
1014 3
    private function writePlotSeriesValuesElement($objWriter, $val = 3, $fillColor = 'FF9900')
1015
    {
1016 3
        $objWriter->startElement('c:dPt');
1017 3
        $objWriter->startElement('c:idx');
1018 3
        $objWriter->writeAttribute('val', $val);
1019 3
        $objWriter->endElement();
1020
1021 3
        $objWriter->startElement('c:bubble3D');
1022 3
        $objWriter->writeAttribute('val', 0);
1023 3
        $objWriter->endElement();
1024
1025 3
        $objWriter->startElement('c:spPr');
1026 3
        $objWriter->startElement('a:solidFill');
1027 3
        $objWriter->startElement('a:srgbClr');
1028 3
        $objWriter->writeAttribute('val', $fillColor);
1029 3
        $objWriter->endElement();
1030 3
        $objWriter->endElement();
1031 3
        $objWriter->endElement();
1032 3
        $objWriter->endElement();
1033
1034 3
        return $objWriter;
1035
    }
1036
1037
    /**
1038
     * Write Plot Group (series of related plots).
1039
     *
1040
     * @param DataSeries $plotGroup
1041
     * @param string $groupType Type of plot for dataseries
1042
     * @param XMLWriter $objWriter XML Writer
1043
     * @param bool &$catIsMultiLevelSeries Is category a multi-series category
1044
     * @param bool &$valIsMultiLevelSeries Is value set a multi-series set
1045
     * @param string &$plotGroupingType Type of grouping for multi-series values
1046
     */
1047 15
    private function writePlotGroup($plotGroup, $groupType, $objWriter, &$catIsMultiLevelSeries, &$valIsMultiLevelSeries, &$plotGroupingType): void
1048
    {
1049 15
        if ($plotGroup === null) {
1050
            return;
1051
        }
1052
1053 15
        if (($groupType == DataSeries::TYPE_BARCHART) || ($groupType == DataSeries::TYPE_BARCHART_3D)) {
1054 8
            $objWriter->startElement('c:barDir');
1055 8
            $objWriter->writeAttribute('val', $plotGroup->getPlotDirection());
1056 8
            $objWriter->endElement();
1057
        }
1058
1059 15
        if ($plotGroup->getPlotGrouping() !== null) {
0 ignored issues
show
introduced by
The condition $plotGroup->getPlotGrouping() !== null is always true.
Loading history...
1060 10
            $plotGroupingType = $plotGroup->getPlotGrouping();
1061 10
            $objWriter->startElement('c:grouping');
1062 10
            $objWriter->writeAttribute('val', $plotGroupingType);
1063 10
            $objWriter->endElement();
1064
        }
1065
1066
        //    Get these details before the loop, because we can use the count to check for varyColors
1067 15
        $plotSeriesOrder = $plotGroup->getPlotOrder();
1068 15
        $plotSeriesCount = count($plotSeriesOrder);
1069
1070 15
        if (($groupType !== DataSeries::TYPE_RADARCHART) && ($groupType !== DataSeries::TYPE_STOCKCHART)) {
1071 13
            if ($groupType !== DataSeries::TYPE_LINECHART) {
1072 12
                if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART) || ($plotSeriesCount > 1)) {
1073 11
                    $objWriter->startElement('c:varyColors');
1074 11
                    $objWriter->writeAttribute('val', 1);
1075 11
                    $objWriter->endElement();
1076
                } else {
1077 2
                    $objWriter->startElement('c:varyColors');
1078 2
                    $objWriter->writeAttribute('val', 0);
1079 2
                    $objWriter->endElement();
1080
                }
1081
            }
1082
        }
1083
1084 15
        $plotSeriesIdx = 0;
1085 15
        foreach ($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) {
1086 15
            $objWriter->startElement('c:ser');
1087
1088 15
            $plotLabel = $plotGroup->getPlotLabelByIndex($plotSeriesIdx);
1089 15
            if ($plotLabel) {
1090 15
                $fillColor = $plotLabel->getFillColor();
1091 15
                if ($fillColor !== null && !is_array($fillColor)) {
1092
                    $objWriter->startElement('c:spPr');
1093
                    $objWriter->startElement('a:solidFill');
1094
                    $objWriter->startElement('a:srgbClr');
1095
                    $objWriter->writeAttribute('val', $fillColor);
1096
                    $objWriter->endElement();
1097
                    $objWriter->endElement();
1098
                    $objWriter->endElement();
1099
                }
1100
            }
1101
1102 15
            $objWriter->startElement('c:idx');
1103 15
            $objWriter->writeAttribute('val', $this->seriesIndex + $plotSeriesIdx);
1104 15
            $objWriter->endElement();
1105
1106 15
            $objWriter->startElement('c:order');
1107 15
            $objWriter->writeAttribute('val', $this->seriesIndex + $plotSeriesRef);
1108 15
            $objWriter->endElement();
1109
1110
            //    Values
1111 15
            $plotSeriesValues = $plotGroup->getPlotValuesByIndex($plotSeriesRef);
1112
1113 15
            if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART)) {
1114 3
                $fillColorValues = $plotSeriesValues->getFillColor();
1115 3
                if ($fillColorValues !== null && is_array($fillColorValues)) {
1116 1
                    foreach ($plotSeriesValues->getDataValues() as $dataKey => $dataValue) {
1117 1
                        $this->writePlotSeriesValuesElement($objWriter, $dataKey, ($fillColorValues[$dataKey] ?? 'FF9900'));
1118
                    }
1119
                } else {
1120 2
                    $this->writePlotSeriesValuesElement($objWriter);
1121
                }
1122
            }
1123
1124
            //    Labels
1125 15
            $plotSeriesLabel = $plotGroup->getPlotLabelByIndex($plotSeriesRef);
1126 15
            if ($plotSeriesLabel && ($plotSeriesLabel->getPointCount() > 0)) {
1127 15
                $objWriter->startElement('c:tx');
1128 15
                $objWriter->startElement('c:strRef');
1129 15
                $this->writePlotSeriesLabel($plotSeriesLabel, $objWriter);
1130 15
                $objWriter->endElement();
1131 15
                $objWriter->endElement();
1132
            }
1133
1134
            //    Formatting for the points
1135 15
            if (($groupType == DataSeries::TYPE_LINECHART) || ($groupType == DataSeries::TYPE_STOCKCHART)) {
1136 4
                $plotLineWidth = 12700;
1137 4
                if ($plotSeriesValues) {
1138 4
                    $plotLineWidth = $plotSeriesValues->getLineWidth();
1139
                }
1140
1141 4
                $objWriter->startElement('c:spPr');
1142 4
                $objWriter->startElement('a:ln');
1143 4
                $objWriter->writeAttribute('w', $plotLineWidth);
1144 4
                if ($groupType == DataSeries::TYPE_STOCKCHART) {
1145 2
                    $objWriter->startElement('a:noFill');
1146 2
                    $objWriter->endElement();
1147
                }
1148 4
                $objWriter->endElement();
1149 4
                $objWriter->endElement();
1150
            }
1151
1152 15
            if ($plotSeriesValues) {
1153 15
                $plotSeriesMarker = $plotSeriesValues->getPointMarker();
1154 15
                if ($plotSeriesMarker) {
1155 1
                    $objWriter->startElement('c:marker');
1156 1
                    $objWriter->startElement('c:symbol');
1157 1
                    $objWriter->writeAttribute('val', $plotSeriesMarker);
1158 1
                    $objWriter->endElement();
1159
1160 1
                    if ($plotSeriesMarker !== 'none') {
1161 1
                        $objWriter->startElement('c:size');
1162 1
                        $objWriter->writeAttribute('val', 3);
1163 1
                        $objWriter->endElement();
1164
                    }
1165
1166 1
                    $objWriter->endElement();
1167
                }
1168
            }
1169
1170 15
            if (($groupType === DataSeries::TYPE_BARCHART) || ($groupType === DataSeries::TYPE_BARCHART_3D) || ($groupType === DataSeries::TYPE_BUBBLECHART)) {
1171 8
                $objWriter->startElement('c:invertIfNegative');
1172 8
                $objWriter->writeAttribute('val', 0);
1173 8
                $objWriter->endElement();
1174
            }
1175
1176
            //    Category Labels
1177 15
            $plotSeriesCategory = $plotGroup->getPlotCategoryByIndex($plotSeriesRef);
1178 15
            if ($plotSeriesCategory && ($plotSeriesCategory->getPointCount() > 0)) {
1179 15
                $catIsMultiLevelSeries = $catIsMultiLevelSeries || $plotSeriesCategory->isMultiLevelSeries();
1180
1181 15
                if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART)) {
1182 3
                    if ($plotGroup->getPlotStyle() !== null) {
1183 1
                        $plotStyle = $plotGroup->getPlotStyle();
1184 1
                        if ($plotStyle) {
1185 1
                            $objWriter->startElement('c:explosion');
1186 1
                            $objWriter->writeAttribute('val', 25);
1187 1
                            $objWriter->endElement();
1188
                        }
1189
                    }
1190
                }
1191
1192 15
                if (($groupType === DataSeries::TYPE_BUBBLECHART) || ($groupType === DataSeries::TYPE_SCATTERCHART)) {
1193 2
                    $objWriter->startElement('c:xVal');
1194
                } else {
1195 14
                    $objWriter->startElement('c:cat');
1196
                }
1197
1198 15
                $this->writePlotSeriesValues($plotSeriesCategory, $objWriter, $groupType, 'str');
1199 15
                $objWriter->endElement();
1200
            }
1201
1202
            //    Values
1203 15
            if ($plotSeriesValues) {
1204 15
                $valIsMultiLevelSeries = $valIsMultiLevelSeries || $plotSeriesValues->isMultiLevelSeries();
1205
1206 15
                if (($groupType === DataSeries::TYPE_BUBBLECHART) || ($groupType === DataSeries::TYPE_SCATTERCHART)) {
1207 2
                    $objWriter->startElement('c:yVal');
1208
                } else {
1209 14
                    $objWriter->startElement('c:val');
1210
                }
1211
1212 15
                $this->writePlotSeriesValues($plotSeriesValues, $objWriter, $groupType, 'num');
1213 15
                $objWriter->endElement();
1214
            }
1215
1216 15
            if ($groupType === DataSeries::TYPE_BUBBLECHART) {
1217 1
                $this->writeBubbles($plotSeriesValues, $objWriter);
1218
            }
1219
1220 15
            $objWriter->endElement();
1221
        }
1222
1223 15
        $this->seriesIndex += $plotSeriesIdx + 1;
1224 15
    }
1225
1226
    /**
1227
     * Write Plot Series Label.
1228
     *
1229
     * @param DataSeriesValues $plotSeriesLabel
1230
     * @param XMLWriter $objWriter XML Writer
1231
     */
1232 15
    private function writePlotSeriesLabel($plotSeriesLabel, $objWriter): void
1233
    {
1234 15
        if ($plotSeriesLabel === null) {
1235
            return;
1236
        }
1237
1238 15
        $objWriter->startElement('c:f');
1239 15
        $objWriter->writeRawData($plotSeriesLabel->getDataSource());
1240 15
        $objWriter->endElement();
1241
1242 15
        $objWriter->startElement('c:strCache');
1243 15
        $objWriter->startElement('c:ptCount');
1244 15
        $objWriter->writeAttribute('val', $plotSeriesLabel->getPointCount());
1245 15
        $objWriter->endElement();
1246
1247 15
        foreach ($plotSeriesLabel->getDataValues() as $plotLabelKey => $plotLabelValue) {
1248 15
            $objWriter->startElement('c:pt');
1249 15
            $objWriter->writeAttribute('idx', $plotLabelKey);
1250
1251 15
            $objWriter->startElement('c:v');
1252 15
            $objWriter->writeRawData($plotLabelValue);
1253 15
            $objWriter->endElement();
1254 15
            $objWriter->endElement();
1255
        }
1256 15
        $objWriter->endElement();
1257 15
    }
1258
1259
    /**
1260
     * Write Plot Series Values.
1261
     *
1262
     * @param DataSeriesValues $plotSeriesValues
1263
     * @param XMLWriter $objWriter XML Writer
1264
     * @param string $groupType Type of plot for dataseries
1265
     * @param string $dataType Datatype of series values
1266
     */
1267 15
    private function writePlotSeriesValues($plotSeriesValues, XMLWriter $objWriter, $groupType, $dataType = 'str'): void
1268
    {
1269 15
        if ($plotSeriesValues === null) {
1270
            return;
1271
        }
1272
1273 15
        if ($plotSeriesValues->isMultiLevelSeries()) {
1274 2
            $levelCount = $plotSeriesValues->multiLevelCount();
1275
1276 2
            $objWriter->startElement('c:multiLvlStrRef');
1277
1278 2
            $objWriter->startElement('c:f');
1279 2
            $objWriter->writeRawData($plotSeriesValues->getDataSource());
1280 2
            $objWriter->endElement();
1281
1282 2
            $objWriter->startElement('c:multiLvlStrCache');
1283
1284 2
            $objWriter->startElement('c:ptCount');
1285 2
            $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1286 2
            $objWriter->endElement();
1287
1288 2
            for ($level = 0; $level < $levelCount; ++$level) {
1289 2
                $objWriter->startElement('c:lvl');
1290
1291 2
                foreach ($plotSeriesValues->getDataValues() as $plotSeriesKey => $plotSeriesValue) {
1292 2
                    if (isset($plotSeriesValue[$level])) {
1293 2
                        $objWriter->startElement('c:pt');
1294 2
                        $objWriter->writeAttribute('idx', $plotSeriesKey);
1295
1296 2
                        $objWriter->startElement('c:v');
1297 2
                        $objWriter->writeRawData($plotSeriesValue[$level]);
1298 2
                        $objWriter->endElement();
1299 2
                        $objWriter->endElement();
1300
                    }
1301
                }
1302
1303 2
                $objWriter->endElement();
1304
            }
1305
1306 2
            $objWriter->endElement();
1307
1308 2
            $objWriter->endElement();
1309
        } else {
1310 15
            $objWriter->startElement('c:' . $dataType . 'Ref');
1311
1312 15
            $objWriter->startElement('c:f');
1313 15
            $objWriter->writeRawData($plotSeriesValues->getDataSource());
1314 15
            $objWriter->endElement();
1315
1316 15
            $objWriter->startElement('c:' . $dataType . 'Cache');
1317
1318 15
            if (($groupType != DataSeries::TYPE_PIECHART) && ($groupType != DataSeries::TYPE_PIECHART_3D) && ($groupType != DataSeries::TYPE_DONUTCHART)) {
1319 13
                if (($plotSeriesValues->getFormatCode() !== null) && ($plotSeriesValues->getFormatCode() !== '')) {
1320
                    $objWriter->startElement('c:formatCode');
1321
                    $objWriter->writeRawData($plotSeriesValues->getFormatCode());
1322
                    $objWriter->endElement();
1323
                }
1324
            }
1325
1326 15
            $objWriter->startElement('c:ptCount');
1327 15
            $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1328 15
            $objWriter->endElement();
1329
1330 15
            $dataValues = $plotSeriesValues->getDataValues();
1331 15
            if (!empty($dataValues)) {
1332 15
                if (is_array($dataValues)) {
0 ignored issues
show
introduced by
The condition is_array($dataValues) is always true.
Loading history...
1333 15
                    foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) {
1334 15
                        $objWriter->startElement('c:pt');
1335 15
                        $objWriter->writeAttribute('idx', $plotSeriesKey);
1336
1337 15
                        $objWriter->startElement('c:v');
1338 15
                        $objWriter->writeRawData($plotSeriesValue);
1339 15
                        $objWriter->endElement();
1340 15
                        $objWriter->endElement();
1341
                    }
1342
                }
1343
            }
1344
1345 15
            $objWriter->endElement();
1346
1347 15
            $objWriter->endElement();
1348
        }
1349 15
    }
1350
1351
    /**
1352
     * Write Bubble Chart Details.
1353
     *
1354
     * @param DataSeriesValues $plotSeriesValues
1355
     * @param XMLWriter $objWriter XML Writer
1356
     */
1357 1
    private function writeBubbles($plotSeriesValues, $objWriter): void
1358
    {
1359 1
        if ($plotSeriesValues === null) {
1360
            return;
1361
        }
1362
1363 1
        $objWriter->startElement('c:bubbleSize');
1364 1
        $objWriter->startElement('c:numLit');
1365
1366 1
        $objWriter->startElement('c:formatCode');
1367 1
        $objWriter->writeRawData('General');
1368 1
        $objWriter->endElement();
1369
1370 1
        $objWriter->startElement('c:ptCount');
1371 1
        $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1372 1
        $objWriter->endElement();
1373
1374 1
        $dataValues = $plotSeriesValues->getDataValues();
1375 1
        if (!empty($dataValues)) {
1376 1
            if (is_array($dataValues)) {
0 ignored issues
show
introduced by
The condition is_array($dataValues) is always true.
Loading history...
1377 1
                foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) {
1378 1
                    $objWriter->startElement('c:pt');
1379 1
                    $objWriter->writeAttribute('idx', $plotSeriesKey);
1380 1
                    $objWriter->startElement('c:v');
1381 1
                    $objWriter->writeRawData(1);
1382 1
                    $objWriter->endElement();
1383 1
                    $objWriter->endElement();
1384
                }
1385
            }
1386
        }
1387
1388 1
        $objWriter->endElement();
1389 1
        $objWriter->endElement();
1390
1391 1
        $objWriter->startElement('c:bubble3D');
1392 1
        $objWriter->writeAttribute('val', 0);
1393 1
        $objWriter->endElement();
1394 1
    }
1395
1396
    /**
1397
     * Write Layout.
1398
     *
1399
     * @param XMLWriter $objWriter XML Writer
1400
     * @param Layout $layout
1401
     */
1402 15
    private function writeLayout(XMLWriter $objWriter, ?Layout $layout = null): void
1403
    {
1404 15
        $objWriter->startElement('c:layout');
1405
1406 15
        if ($layout !== null) {
1407 5
            $objWriter->startElement('c:manualLayout');
1408
1409 5
            $layoutTarget = $layout->getLayoutTarget();
1410 5
            if ($layoutTarget !== null) {
0 ignored issues
show
introduced by
The condition $layoutTarget !== null is always true.
Loading history...
1411 1
                $objWriter->startElement('c:layoutTarget');
1412 1
                $objWriter->writeAttribute('val', $layoutTarget);
1413 1
                $objWriter->endElement();
1414
            }
1415
1416 5
            $xMode = $layout->getXMode();
1417 5
            if ($xMode !== null) {
0 ignored issues
show
introduced by
The condition $xMode !== null is always true.
Loading history...
1418 1
                $objWriter->startElement('c:xMode');
1419 1
                $objWriter->writeAttribute('val', $xMode);
1420 1
                $objWriter->endElement();
1421
            }
1422
1423 5
            $yMode = $layout->getYMode();
1424 5
            if ($yMode !== null) {
0 ignored issues
show
introduced by
The condition $yMode !== null is always true.
Loading history...
1425 1
                $objWriter->startElement('c:yMode');
1426 1
                $objWriter->writeAttribute('val', $yMode);
1427 1
                $objWriter->endElement();
1428
            }
1429
1430 5
            $x = $layout->getXPosition();
1431 5
            if ($x !== null) {
0 ignored issues
show
introduced by
The condition $x !== null is always true.
Loading history...
1432 1
                $objWriter->startElement('c:x');
1433 1
                $objWriter->writeAttribute('val', $x);
1434 1
                $objWriter->endElement();
1435
            }
1436
1437 5
            $y = $layout->getYPosition();
1438 5
            if ($y !== null) {
0 ignored issues
show
introduced by
The condition $y !== null is always true.
Loading history...
1439 1
                $objWriter->startElement('c:y');
1440 1
                $objWriter->writeAttribute('val', $y);
1441 1
                $objWriter->endElement();
1442
            }
1443
1444 5
            $w = $layout->getWidth();
1445 5
            if ($w !== null) {
0 ignored issues
show
introduced by
The condition $w !== null is always true.
Loading history...
1446 1
                $objWriter->startElement('c:w');
1447 1
                $objWriter->writeAttribute('val', $w);
1448 1
                $objWriter->endElement();
1449
            }
1450
1451 5
            $h = $layout->getHeight();
1452 5
            if ($h !== null) {
0 ignored issues
show
introduced by
The condition $h !== null is always true.
Loading history...
1453 1
                $objWriter->startElement('c:h');
1454 1
                $objWriter->writeAttribute('val', $h);
1455 1
                $objWriter->endElement();
1456
            }
1457
1458 5
            $objWriter->endElement();
1459
        }
1460
1461 15
        $objWriter->endElement();
1462 15
    }
1463
1464
    /**
1465
     * Write Alternate Content block.
1466
     *
1467
     * @param XMLWriter $objWriter XML Writer
1468
     */
1469 15
    private function writeAlternateContent($objWriter): void
1470
    {
1471 15
        $objWriter->startElement('mc:AlternateContent');
1472 15
        $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
1473
1474 15
        $objWriter->startElement('mc:Choice');
1475 15
        $objWriter->writeAttribute('xmlns:c14', 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart');
1476 15
        $objWriter->writeAttribute('Requires', 'c14');
1477
1478 15
        $objWriter->startElement('c14:style');
1479 15
        $objWriter->writeAttribute('val', '102');
1480 15
        $objWriter->endElement();
1481 15
        $objWriter->endElement();
1482
1483 15
        $objWriter->startElement('mc:Fallback');
1484 15
        $objWriter->startElement('c:style');
1485 15
        $objWriter->writeAttribute('val', '2');
1486 15
        $objWriter->endElement();
1487 15
        $objWriter->endElement();
1488
1489 15
        $objWriter->endElement();
1490 15
    }
1491
1492
    /**
1493
     * Write Printer Settings.
1494
     *
1495
     * @param XMLWriter $objWriter XML Writer
1496
     */
1497 15
    private function writePrintSettings($objWriter): void
1498
    {
1499 15
        $objWriter->startElement('c:printSettings');
1500
1501 15
        $objWriter->startElement('c:headerFooter');
1502 15
        $objWriter->endElement();
1503
1504 15
        $objWriter->startElement('c:pageMargins');
1505 15
        $objWriter->writeAttribute('footer', 0.3);
1506 15
        $objWriter->writeAttribute('header', 0.3);
1507 15
        $objWriter->writeAttribute('r', 0.7);
1508 15
        $objWriter->writeAttribute('l', 0.7);
1509 15
        $objWriter->writeAttribute('t', 0.75);
1510 15
        $objWriter->writeAttribute('b', 0.75);
1511 15
        $objWriter->endElement();
1512
1513 15
        $objWriter->startElement('c:pageSetup');
1514 15
        $objWriter->writeAttribute('orientation', 'portrait');
1515 15
        $objWriter->endElement();
1516
1517 15
        $objWriter->endElement();
1518 15
    }
1519
}
1520