Completed
Push — develop ( c96e2d...d2f55f )
by Adrien
48:43 queued 44:11
created

Chart::writeBubbles()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 37
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 25
CRAP Score 5.0014

Importance

Changes 0
Metric Value
cc 5
eloc 25
nc 4
nop 2
dl 0
loc 37
ccs 25
cts 26
cp 0.9615
crap 5.0014
rs 8.439
c 0
b 0
f 0
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 \PhpOffice\PhpSpreadsheet\Chart\Chart $pChart
30
     * @param mixed $calculateCellValues
31
     *
32
     * @throws WriterException
33
     *
34
     * @return string XML Output
35
     */
36 13
    public function writeChart(\PhpOffice\PhpSpreadsheet\Chart\Chart $pChart, $calculateCellValues = true)
37
    {
38 13
        $this->calculateCellValues = $calculateCellValues;
39
40
        // Create XML writer
41 13
        $objWriter = null;
42 13
        if ($this->getParentWriter()->getUseDiskCaching()) {
43
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
44
        } else {
45 13
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
46
        }
47
        //    Ensure that data series values are up-to-date before we save
48 13
        if ($this->calculateCellValues) {
49 13
            $pChart->refresh();
50
        }
51
52
        // XML header
53 13
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
54
55
        // c:chartSpace
56 13
        $objWriter->startElement('c:chartSpace');
57 13
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
58 13
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
59 13
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
60
61 13
        $objWriter->startElement('c:date1904');
62 13
        $objWriter->writeAttribute('val', 0);
63 13
        $objWriter->endElement();
64 13
        $objWriter->startElement('c:lang');
65 13
        $objWriter->writeAttribute('val', 'en-GB');
66 13
        $objWriter->endElement();
67 13
        $objWriter->startElement('c:roundedCorners');
68 13
        $objWriter->writeAttribute('val', 0);
69 13
        $objWriter->endElement();
70
71 13
        $this->writeAlternateContent($objWriter);
72
73 13
        $objWriter->startElement('c:chart');
74
75 13
        $this->writeTitle($objWriter, $pChart->getTitle());
76
77 13
        $objWriter->startElement('c:autoTitleDeleted');
78 13
        $objWriter->writeAttribute('val', 0);
79 13
        $objWriter->endElement();
80
81 13
        $this->writePlotArea($objWriter, $pChart->getWorksheet(), $pChart->getPlotArea(), $pChart->getXAxisLabel(), $pChart->getYAxisLabel(), $pChart->getChartAxisX(), $pChart->getChartAxisY(), $pChart->getMajorGridlines(), $pChart->getMinorGridlines());
82
83 13
        $this->writeLegend($objWriter, $pChart->getLegend());
84
85 13
        $objWriter->startElement('c:plotVisOnly');
86 13
        $objWriter->writeAttribute('val', 1);
87 13
        $objWriter->endElement();
88
89 13
        $objWriter->startElement('c:dispBlanksAs');
90 13
        $objWriter->writeAttribute('val', 'gap');
91 13
        $objWriter->endElement();
92
93 13
        $objWriter->startElement('c:showDLblsOverMax');
94 13
        $objWriter->writeAttribute('val', 0);
95 13
        $objWriter->endElement();
96
97 13
        $objWriter->endElement();
98
99 13
        $this->writePrintSettings($objWriter);
100
101 13
        $objWriter->endElement();
102
103
        // Return
104 13
        return $objWriter->getData();
105
    }
106
107
    /**
108
     * Write Chart Title.
109
     *
110
     * @param XMLWriter $objWriter XML Writer
111
     * @param Title $title
112
     *
113
     * @throws WriterException
114
     */
115 13
    private function writeTitle(XMLWriter $objWriter, Title $title = null)
116
    {
117 13
        if ($title === null) {
118 1
            return;
119
        }
120
121 13
        $objWriter->startElement('c:title');
122 13
        $objWriter->startElement('c:tx');
123 13
        $objWriter->startElement('c:rich');
124
125 13
        $objWriter->startElement('a:bodyPr');
126 13
        $objWriter->endElement();
127
128 13
        $objWriter->startElement('a:lstStyle');
129 13
        $objWriter->endElement();
130
131 13
        $objWriter->startElement('a:p');
132
133 13
        $caption = $title->getCaption();
134 13
        if ((is_array($caption)) && (count($caption) > 0)) {
0 ignored issues
show
introduced by
The condition is_array($caption) && count($caption) > 0 can never be true.
Loading history...
135 1
            $caption = $caption[0];
136
        }
137 13
        $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

137
        $this->getParentWriter()->getWriterPart('stringtable')->/** @scrutinizer ignore-call */ writeRichTextForCharts($objWriter, $caption, 'a');
Loading history...
138
139 13
        $objWriter->endElement();
140 13
        $objWriter->endElement();
141 13
        $objWriter->endElement();
142
143 13
        $this->writeLayout($objWriter, $title->getLayout());
144
145 13
        $objWriter->startElement('c:overlay');
146 13
        $objWriter->writeAttribute('val', 0);
147 13
        $objWriter->endElement();
148
149 13
        $objWriter->endElement();
150 13
    }
151
152
    /**
153
     * Write Chart Legend.
154
     *
155
     * @param XMLWriter $objWriter XML Writer
156
     * @param Legend $legend
157
     *
158
     * @throws WriterException
159
     */
160 13
    private function writeLegend(XMLWriter $objWriter, Legend $legend = null)
161
    {
162 13
        if ($legend === null) {
163 2
            return;
164
        }
165
166 13
        $objWriter->startElement('c:legend');
167
168 13
        $objWriter->startElement('c:legendPos');
169 13
        $objWriter->writeAttribute('val', $legend->getPosition());
170 13
        $objWriter->endElement();
171
172 13
        $this->writeLayout($objWriter, $legend->getLayout());
173
174 13
        $objWriter->startElement('c:overlay');
175 13
        $objWriter->writeAttribute('val', ($legend->getOverlay()) ? '1' : '0');
176 13
        $objWriter->endElement();
177
178 13
        $objWriter->startElement('c:txPr');
179 13
        $objWriter->startElement('a:bodyPr');
180 13
        $objWriter->endElement();
181
182 13
        $objWriter->startElement('a:lstStyle');
183 13
        $objWriter->endElement();
184
185 13
        $objWriter->startElement('a:p');
186 13
        $objWriter->startElement('a:pPr');
187 13
        $objWriter->writeAttribute('rtl', 0);
188
189 13
        $objWriter->startElement('a:defRPr');
190 13
        $objWriter->endElement();
191 13
        $objWriter->endElement();
192
193 13
        $objWriter->startElement('a:endParaRPr');
194 13
        $objWriter->writeAttribute('lang', 'en-US');
195 13
        $objWriter->endElement();
196
197 13
        $objWriter->endElement();
198 13
        $objWriter->endElement();
199
200 13
        $objWriter->endElement();
201 13
    }
202
203
    /**
204
     * Write Chart Plot Area.
205
     *
206
     * @param XMLWriter $objWriter XML Writer
207
     * @param \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $pSheet
208
     * @param PlotArea $plotArea
209
     * @param Title $xAxisLabel
210
     * @param Title $yAxisLabel
211
     * @param Axis $xAxis
212
     * @param Axis $yAxis
213
     * @param null|GridLines $majorGridlines
214
     * @param null|GridLines $minorGridlines
215
     *
216
     * @throws WriterException
217
     */
218 13
    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)
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

218
    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)

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...
219
    {
220 13
        if ($plotArea === null) {
221
            return;
222
        }
223
224 13
        $id1 = $id2 = 0;
225 13
        $this->seriesIndex = 0;
226 13
        $objWriter->startElement('c:plotArea');
227
228 13
        $layout = $plotArea->getLayout();
229
230 13
        $this->writeLayout($objWriter, $layout);
231
232 13
        $chartTypes = self::getChartType($plotArea);
233 13
        $catIsMultiLevelSeries = $valIsMultiLevelSeries = false;
234 13
        $plotGroupingType = '';
235 13
        foreach ($chartTypes as $chartType) {
236 13
            $objWriter->startElement('c:' . $chartType);
237
238 13
            $groupCount = $plotArea->getPlotGroupCount();
239 13
            for ($i = 0; $i < $groupCount; ++$i) {
240 13
                $plotGroup = $plotArea->getPlotGroupByIndex($i);
241 13
                $groupType = $plotGroup->getPlotType();
242 13
                if ($groupType == $chartType) {
243 13
                    $plotStyle = $plotGroup->getPlotStyle();
244 13
                    if ($groupType === DataSeries::TYPE_RADARCHART) {
245 2
                        $objWriter->startElement('c:radarStyle');
246 2
                        $objWriter->writeAttribute('val', $plotStyle);
247 2
                        $objWriter->endElement();
248 12
                    } elseif ($groupType === DataSeries::TYPE_SCATTERCHART) {
249 2
                        $objWriter->startElement('c:scatterStyle');
250 2
                        $objWriter->writeAttribute('val', $plotStyle);
251 2
                        $objWriter->endElement();
252
                    }
253
254 13
                    $this->writePlotGroup($plotGroup, $chartType, $objWriter, $catIsMultiLevelSeries, $valIsMultiLevelSeries, $plotGroupingType);
255
                }
256
            }
257
258 13
            $this->writeDataLabels($objWriter, $layout);
259
260 13
            if ($chartType === DataSeries::TYPE_LINECHART) {
261
                //    Line only, Line3D can't be smoothed
262 3
                $objWriter->startElement('c:smooth');
263 3
                $objWriter->writeAttribute('val', (int) $plotGroup->getSmoothLine());
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $plotGroup does not seem to be defined for all execution paths leading up to this point.
Loading history...
264 3
                $objWriter->endElement();
265 12
            } elseif (($chartType === DataSeries::TYPE_BARCHART) || ($chartType === DataSeries::TYPE_BARCHART_3D)) {
266 7
                $objWriter->startElement('c:gapWidth');
267 7
                $objWriter->writeAttribute('val', 150);
268 7
                $objWriter->endElement();
269
270 7
                if ($plotGroupingType == 'percentStacked' || $plotGroupingType == 'stacked') {
271 2
                    $objWriter->startElement('c:overlap');
272 2
                    $objWriter->writeAttribute('val', 100);
273 7
                    $objWriter->endElement();
274
                }
275 8
            } elseif ($chartType === DataSeries::TYPE_BUBBLECHART) {
276 1
                $objWriter->startElement('c:bubbleScale');
277 1
                $objWriter->writeAttribute('val', 25);
278 1
                $objWriter->endElement();
279
280 1
                $objWriter->startElement('c:showNegBubbles');
281 1
                $objWriter->writeAttribute('val', 0);
282 1
                $objWriter->endElement();
283 8
            } elseif ($chartType === DataSeries::TYPE_STOCKCHART) {
284 2
                $objWriter->startElement('c:hiLowLines');
285 2
                $objWriter->endElement();
286
287 2
                $objWriter->startElement('c:upDownBars');
288
289 2
                $objWriter->startElement('c:gapWidth');
290 2
                $objWriter->writeAttribute('val', 300);
291 2
                $objWriter->endElement();
292
293 2
                $objWriter->startElement('c:upBars');
294 2
                $objWriter->endElement();
295
296 2
                $objWriter->startElement('c:downBars');
297 2
                $objWriter->endElement();
298
299 2
                $objWriter->endElement();
300
            }
301
302
            //    Generate 2 unique numbers to use for axId values
303 13
            $id1 = '75091328';
304 13
            $id2 = '75089408';
305
306 13
            if (($chartType !== DataSeries::TYPE_PIECHART) && ($chartType !== DataSeries::TYPE_PIECHART_3D) && ($chartType !== DataSeries::TYPE_DONUTCHART)) {
307 12
                $objWriter->startElement('c:axId');
308 12
                $objWriter->writeAttribute('val', $id1);
309 12
                $objWriter->endElement();
310 12
                $objWriter->startElement('c:axId');
311 12
                $objWriter->writeAttribute('val', $id2);
312 12
                $objWriter->endElement();
313
            } else {
314 2
                $objWriter->startElement('c:firstSliceAng');
315 2
                $objWriter->writeAttribute('val', 0);
316 2
                $objWriter->endElement();
317
318 2
                if ($chartType === DataSeries::TYPE_DONUTCHART) {
319 2
                    $objWriter->startElement('c:holeSize');
320 2
                    $objWriter->writeAttribute('val', 50);
321 2
                    $objWriter->endElement();
322
                }
323
            }
324
325 13
            $objWriter->endElement();
326
        }
327
328 13
        if (($chartType !== DataSeries::TYPE_PIECHART) && ($chartType !== DataSeries::TYPE_PIECHART_3D) && ($chartType !== DataSeries::TYPE_DONUTCHART)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $chartType seems to be defined by a foreach iteration on line 235. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
329 12
            if ($chartType === DataSeries::TYPE_BUBBLECHART) {
330 1
                $this->writeValueAxis($objWriter, $xAxisLabel, $chartType, $id1, $id2, $catIsMultiLevelSeries, $xAxis, $majorGridlines, $minorGridlines);
3 ignored issues
show
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

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

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

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

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

911
                $objWriter->writeAttribute('blurRad', /** @scrutinizer ignore-type */ $xAxis->getShadowProperty('blur'));
Loading history...
912
            }
913
            if ($xAxis->getShadowProperty('distance') !== null) {
914
                $objWriter->writeAttribute('dist', $xAxis->getShadowProperty('distance'));
915
            }
916
            if ($xAxis->getShadowProperty('direction') !== null) {
917
                $objWriter->writeAttribute('dir', $xAxis->getShadowProperty('direction'));
918
            }
919
            if ($xAxis->getShadowProperty('algn') !== null) {
920
                $objWriter->writeAttribute('algn', $xAxis->getShadowProperty('algn'));
921
            }
922
            if ($xAxis->getShadowProperty(['size', 'sx']) !== null) {
923
                $objWriter->writeAttribute('sx', $xAxis->getShadowProperty(['size', 'sx']));
924
            }
925
            if ($xAxis->getShadowProperty(['size', 'sy']) !== null) {
926
                $objWriter->writeAttribute('sy', $xAxis->getShadowProperty(['size', 'sy']));
927
            }
928
            if ($xAxis->getShadowProperty(['size', 'kx']) !== null) {
929
                $objWriter->writeAttribute('kx', $xAxis->getShadowProperty(['size', 'kx']));
930
            }
931
            if ($xAxis->getShadowProperty('rotWithShape') !== null) {
932
                $objWriter->writeAttribute('rotWithShape', $xAxis->getShadowProperty('rotWithShape'));
933
            }
934
935
            $objWriter->startElement("a:{$xAxis->getShadowProperty(['color', 'type'])}");
936
            $objWriter->writeAttribute('val', $xAxis->getShadowProperty(['color', 'value']));
937
            $objWriter->startElement('a:alpha');
938
            $objWriter->writeAttribute('val', $xAxis->getShadowProperty(['color', 'alpha']));
939
            $objWriter->endElement();
940
            $objWriter->endElement();
941
942
            $objWriter->endElement();
943
        }
944
945 12
        if ($xAxis->getSoftEdgesSize() !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getSoftEdgesSize() !== null can never be false.
Loading history...
946
            $objWriter->startElement('a:softEdge');
947
            $objWriter->writeAttribute('rad', $xAxis->getSoftEdgesSize());
948
            $objWriter->endElement();
949
        }
950
951 12
        $objWriter->endElement(); //effectList
952 12
        $objWriter->endElement(); //end spPr
953
954 12
        if ($id1 > 0) {
955 12
            $objWriter->startElement('c:crossAx');
956 12
            $objWriter->writeAttribute('val', $id2);
957 12
            $objWriter->endElement();
958
959 12
            if ($xAxis->getAxisOptionsProperty('horizontal_crosses_value') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...rosses_value') !== null can never be false.
Loading history...
960
                $objWriter->startElement('c:crossesAt');
961
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses_value'));
962
                $objWriter->endElement();
963
            } else {
964 12
                $objWriter->startElement('c:crosses');
965 12
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('horizontal_crosses'));
966 12
                $objWriter->endElement();
967
            }
968
969 12
            $objWriter->startElement('c:crossBetween');
970 12
            $objWriter->writeAttribute('val', 'midCat');
971 12
            $objWriter->endElement();
972
973 12
            if ($xAxis->getAxisOptionsProperty('major_unit') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...('major_unit') !== null can never be false.
Loading history...
974
                $objWriter->startElement('c:majorUnit');
975
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('major_unit'));
976
                $objWriter->endElement();
977
            }
978
979 12
            if ($xAxis->getAxisOptionsProperty('minor_unit') !== null) {
0 ignored issues
show
introduced by
The condition $xAxis->getAxisOptionsPr...('minor_unit') !== null can never be false.
Loading history...
980
                $objWriter->startElement('c:minorUnit');
981
                $objWriter->writeAttribute('val', $xAxis->getAxisOptionsProperty('minor_unit'));
982
                $objWriter->endElement();
983
            }
984
        }
985
986 12
        if ($isMultiLevelSeries) {
987 1
            if ($groupType !== DataSeries::TYPE_BUBBLECHART) {
988
                $objWriter->startElement('c:noMultiLvlLbl');
989
                $objWriter->writeAttribute('val', 0);
990
                $objWriter->endElement();
991
            }
992
        }
993
994 12
        $objWriter->endElement();
995 12
    }
996
997
    /**
998
     * Get the data series type(s) for a chart plot series.
999
     *
1000
     * @param PlotArea $plotArea
1001
     *
1002
     * @throws WriterException
1003
     *
1004
     * @return array|string
1005
     */
1006 13
    private static function getChartType($plotArea)
1007
    {
1008 13
        $groupCount = $plotArea->getPlotGroupCount();
1009
1010 13
        if ($groupCount == 1) {
0 ignored issues
show
introduced by
The condition $groupCount == 1 can never be true.
Loading history...
1011 12
            $chartType = [$plotArea->getPlotGroupByIndex(0)->getPlotType()];
1012
        } else {
1013 2
            $chartTypes = [];
1014 2
            for ($i = 0; $i < $groupCount; ++$i) {
1015 2
                $chartTypes[] = $plotArea->getPlotGroupByIndex($i)->getPlotType();
1016
            }
1017 2
            $chartType = array_unique($chartTypes);
1018 2
            if (count($chartTypes) == 0) {
1019
                throw new WriterException('Chart is not yet implemented');
1020
            }
1021
        }
1022
1023 13
        return $chartType;
1024
    }
1025
1026
    /**
1027
     * Write Plot Group (series of related plots).
1028
     *
1029
     * @param DataSeries $plotGroup
1030
     * @param string $groupType Type of plot for dataseries
1031
     * @param XMLWriter $objWriter XML Writer
1032
     * @param bool &$catIsMultiLevelSeries Is category a multi-series category
1033
     * @param bool &$valIsMultiLevelSeries Is value set a multi-series set
1034
     * @param string &$plotGroupingType Type of grouping for multi-series values
1035
     *
1036
     * @throws WriterException
1037
     */
1038 13
    private function writePlotGroup($plotGroup, $groupType, $objWriter, &$catIsMultiLevelSeries, &$valIsMultiLevelSeries, &$plotGroupingType)
1039
    {
1040 13
        if ($plotGroup === null) {
1041
            return;
1042
        }
1043
1044 13
        if (($groupType == DataSeries::TYPE_BARCHART) || ($groupType == DataSeries::TYPE_BARCHART_3D)) {
1045 7
            $objWriter->startElement('c:barDir');
1046 7
            $objWriter->writeAttribute('val', $plotGroup->getPlotDirection());
1047 7
            $objWriter->endElement();
1048
        }
1049
1050 13
        if ($plotGroup->getPlotGrouping() !== null) {
0 ignored issues
show
introduced by
The condition $plotGroup->getPlotGrouping() !== null can never be false.
Loading history...
1051 9
            $plotGroupingType = $plotGroup->getPlotGrouping();
1052 9
            $objWriter->startElement('c:grouping');
1053 9
            $objWriter->writeAttribute('val', $plotGroupingType);
1054 9
            $objWriter->endElement();
1055
        }
1056
1057
        //    Get these details before the loop, because we can use the count to check for varyColors
1058 13
        $plotSeriesOrder = $plotGroup->getPlotOrder();
1059 13
        $plotSeriesCount = count($plotSeriesOrder);
0 ignored issues
show
Bug introduced by
$plotSeriesOrder of type string is incompatible with the type Countable|array expected by parameter $var of count(). ( Ignorable by Annotation )

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

1059
        $plotSeriesCount = count(/** @scrutinizer ignore-type */ $plotSeriesOrder);
Loading history...
1060
1061 13
        if (($groupType !== DataSeries::TYPE_RADARCHART) && ($groupType !== DataSeries::TYPE_STOCKCHART)) {
1062 11
            if ($groupType !== DataSeries::TYPE_LINECHART) {
1063 10
                if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART) || ($plotSeriesCount > 1)) {
1064 9
                    $objWriter->startElement('c:varyColors');
1065 9
                    $objWriter->writeAttribute('val', 1);
1066 9
                    $objWriter->endElement();
1067
                } else {
1068 2
                    $objWriter->startElement('c:varyColors');
1069 2
                    $objWriter->writeAttribute('val', 0);
1070 2
                    $objWriter->endElement();
1071
                }
1072
            }
1073
        }
1074
1075 13
        foreach ($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) {
0 ignored issues
show
Bug introduced by
The expression $plotSeriesOrder of type string is not traversable.
Loading history...
1076 13
            $objWriter->startElement('c:ser');
1077
1078 13
            $plotLabel = $plotGroup->getPlotLabelByIndex($plotSeriesIdx);
1079 13
            if ($plotLabel) {
1080 13
                $fillColor = $plotLabel->getFillColor();
1081 13
                if ($fillColor !== null) {
1082
                    $objWriter->startElement('c:spPr');
1083
                    $objWriter->startElement('a:solidFill');
1084
                    $objWriter->startElement('a:srgbClr');
1085
                    $objWriter->writeAttribute('val', $fillColor);
1086
                    $objWriter->endElement();
1087
                    $objWriter->endElement();
1088
                    $objWriter->endElement();
1089
                }
1090
            }
1091
1092 13
            $objWriter->startElement('c:idx');
1093 13
            $objWriter->writeAttribute('val', $this->seriesIndex + $plotSeriesIdx);
1094 13
            $objWriter->endElement();
1095
1096 13
            $objWriter->startElement('c:order');
1097 13
            $objWriter->writeAttribute('val', $this->seriesIndex + $plotSeriesRef);
1098 13
            $objWriter->endElement();
1099
1100 13
            if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART)) {
1101 2
                $objWriter->startElement('c:dPt');
1102 2
                $objWriter->startElement('c:idx');
1103 2
                $objWriter->writeAttribute('val', 3);
1104 2
                $objWriter->endElement();
1105
1106 2
                $objWriter->startElement('c:bubble3D');
1107 2
                $objWriter->writeAttribute('val', 0);
1108 2
                $objWriter->endElement();
1109
1110 2
                $objWriter->startElement('c:spPr');
1111 2
                $objWriter->startElement('a:solidFill');
1112 2
                $objWriter->startElement('a:srgbClr');
1113 2
                $objWriter->writeAttribute('val', 'FF9900');
1114 2
                $objWriter->endElement();
1115 2
                $objWriter->endElement();
1116 2
                $objWriter->endElement();
1117 2
                $objWriter->endElement();
1118
            }
1119
1120
            //    Labels
1121 13
            $plotSeriesLabel = $plotGroup->getPlotLabelByIndex($plotSeriesRef);
1122 13
            if ($plotSeriesLabel && ($plotSeriesLabel->getPointCount() > 0)) {
1123 13
                $objWriter->startElement('c:tx');
1124 13
                $objWriter->startElement('c:strRef');
1125 13
                $this->writePlotSeriesLabel($plotSeriesLabel, $objWriter);
1126 13
                $objWriter->endElement();
1127 13
                $objWriter->endElement();
1128
            }
1129
1130
            //    Values
1131 13
            $plotSeriesValues = $plotGroup->getPlotValuesByIndex($plotSeriesRef);
1132
1133
            //    Formatting for the points
1134 13
            if (($groupType == DataSeries::TYPE_LINECHART) || ($groupType == DataSeries::TYPE_STOCKCHART)) {
1135 4
                $plotLineWidth = 12700;
1136 4
                if ($plotSeriesValues) {
1137 4
                    $plotLineWidth = $plotSeriesValues->getLineWidth();
1138
                }
1139
1140 4
                $objWriter->startElement('c:spPr');
1141 4
                $objWriter->startElement('a:ln');
1142 4
                $objWriter->writeAttribute('w', $plotLineWidth);
1143 4
                if ($groupType == DataSeries::TYPE_STOCKCHART) {
1144 2
                    $objWriter->startElement('a:noFill');
1145 2
                    $objWriter->endElement();
1146
                }
1147 4
                $objWriter->endElement();
1148 4
                $objWriter->endElement();
1149
            }
1150
1151 13
            if ($plotSeriesValues) {
1152 13
                $plotSeriesMarker = $plotSeriesValues->getPointMarker();
1153 13
                if ($plotSeriesMarker) {
1154 1
                    $objWriter->startElement('c:marker');
1155 1
                    $objWriter->startElement('c:symbol');
1156 1
                    $objWriter->writeAttribute('val', $plotSeriesMarker);
1157 1
                    $objWriter->endElement();
1158
1159 1
                    if ($plotSeriesMarker !== 'none') {
1160 1
                        $objWriter->startElement('c:size');
1161 1
                        $objWriter->writeAttribute('val', 3);
1162 1
                        $objWriter->endElement();
1163
                    }
1164
1165 1
                    $objWriter->endElement();
1166
                }
1167
            }
1168
1169 13
            if (($groupType === DataSeries::TYPE_BARCHART) || ($groupType === DataSeries::TYPE_BARCHART_3D) || ($groupType === DataSeries::TYPE_BUBBLECHART)) {
1170 7
                $objWriter->startElement('c:invertIfNegative');
1171 7
                $objWriter->writeAttribute('val', 0);
1172 7
                $objWriter->endElement();
1173
            }
1174
1175
            //    Category Labels
1176 13
            $plotSeriesCategory = $plotGroup->getPlotCategoryByIndex($plotSeriesRef);
1177 13
            if ($plotSeriesCategory && ($plotSeriesCategory->getPointCount() > 0)) {
1178 13
                $catIsMultiLevelSeries = $catIsMultiLevelSeries || $plotSeriesCategory->isMultiLevelSeries();
1179
1180 13
                if (($groupType == DataSeries::TYPE_PIECHART) || ($groupType == DataSeries::TYPE_PIECHART_3D) || ($groupType == DataSeries::TYPE_DONUTCHART)) {
1181 2
                    if ($plotGroup->getPlotStyle() !== null) {
1182 1
                        $plotStyle = $plotGroup->getPlotStyle();
1183 1
                        if ($plotStyle) {
1184 1
                            $objWriter->startElement('c:explosion');
1185 1
                            $objWriter->writeAttribute('val', 25);
1186 1
                            $objWriter->endElement();
1187
                        }
1188
                    }
1189
                }
1190
1191 13
                if (($groupType === DataSeries::TYPE_BUBBLECHART) || ($groupType === DataSeries::TYPE_SCATTERCHART)) {
1192 2
                    $objWriter->startElement('c:xVal');
1193
                } else {
1194 12
                    $objWriter->startElement('c:cat');
1195
                }
1196
1197 13
                $this->writePlotSeriesValues($plotSeriesCategory, $objWriter, $groupType, 'str');
1198 13
                $objWriter->endElement();
1199
            }
1200
1201
            //    Values
1202 13
            if ($plotSeriesValues) {
1203 13
                $valIsMultiLevelSeries = $valIsMultiLevelSeries || $plotSeriesValues->isMultiLevelSeries();
1204
1205 13
                if (($groupType === DataSeries::TYPE_BUBBLECHART) || ($groupType === DataSeries::TYPE_SCATTERCHART)) {
1206 2
                    $objWriter->startElement('c:yVal');
1207
                } else {
1208 12
                    $objWriter->startElement('c:val');
1209
                }
1210
1211 13
                $this->writePlotSeriesValues($plotSeriesValues, $objWriter, $groupType, 'num');
1212 13
                $objWriter->endElement();
1213
            }
1214
1215 13
            if ($groupType === DataSeries::TYPE_BUBBLECHART) {
1216 1
                $this->writeBubbles($plotSeriesValues, $objWriter);
1217
            }
1218
1219 13
            $objWriter->endElement();
1220
        }
1221
1222 13
        $this->seriesIndex += $plotSeriesIdx + 1;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $plotSeriesIdx seems to be defined by a foreach iteration on line 1075. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
1223 13
    }
1224
1225
    /**
1226
     * Write Plot Series Label.
1227
     *
1228
     * @param DataSeriesValues $plotSeriesLabel
1229
     * @param XMLWriter $objWriter XML Writer
1230
     */
1231 13
    private function writePlotSeriesLabel($plotSeriesLabel, $objWriter)
1232
    {
1233 13
        if ($plotSeriesLabel === null) {
1234
            return;
1235
        }
1236
1237 13
        $objWriter->startElement('c:f');
1238 13
        $objWriter->writeRawData($plotSeriesLabel->getDataSource());
1239 13
        $objWriter->endElement();
1240
1241 13
        $objWriter->startElement('c:strCache');
1242 13
        $objWriter->startElement('c:ptCount');
1243 13
        $objWriter->writeAttribute('val', $plotSeriesLabel->getPointCount());
1244 13
        $objWriter->endElement();
1245
1246 13
        foreach ($plotSeriesLabel->getDataValues() as $plotLabelKey => $plotLabelValue) {
1247 13
            $objWriter->startElement('c:pt');
1248 13
            $objWriter->writeAttribute('idx', $plotLabelKey);
1249
1250 13
            $objWriter->startElement('c:v');
1251 13
            $objWriter->writeRawData($plotLabelValue);
1252 13
            $objWriter->endElement();
1253 13
            $objWriter->endElement();
1254
        }
1255 13
        $objWriter->endElement();
1256 13
    }
1257
1258
    /**
1259
     * Write Plot Series Values.
1260
     *
1261
     * @param DataSeriesValues $plotSeriesValues
1262
     * @param XMLWriter $objWriter XML Writer
1263
     * @param string $groupType Type of plot for dataseries
1264
     * @param string $dataType Datatype of series values
1265
     */
1266 13
    private function writePlotSeriesValues($plotSeriesValues, XMLWriter $objWriter, $groupType, $dataType = 'str')
1267
    {
1268 13
        if ($plotSeriesValues === null) {
1269
            return;
1270
        }
1271
1272 13
        if ($plotSeriesValues->isMultiLevelSeries()) {
1273 2
            $levelCount = $plotSeriesValues->multiLevelCount();
1274
1275 2
            $objWriter->startElement('c:multiLvlStrRef');
1276
1277 2
            $objWriter->startElement('c:f');
1278 2
            $objWriter->writeRawData($plotSeriesValues->getDataSource());
1279 2
            $objWriter->endElement();
1280
1281 2
            $objWriter->startElement('c:multiLvlStrCache');
1282
1283 2
            $objWriter->startElement('c:ptCount');
1284 2
            $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1285 2
            $objWriter->endElement();
1286
1287 2
            for ($level = 0; $level < $levelCount; ++$level) {
1288 2
                $objWriter->startElement('c:lvl');
1289
1290 2
                foreach ($plotSeriesValues->getDataValues() as $plotSeriesKey => $plotSeriesValue) {
1291 2
                    if (isset($plotSeriesValue[$level])) {
1292 2
                        $objWriter->startElement('c:pt');
1293 2
                        $objWriter->writeAttribute('idx', $plotSeriesKey);
1294
1295 2
                        $objWriter->startElement('c:v');
1296 2
                        $objWriter->writeRawData($plotSeriesValue[$level]);
1297 2
                        $objWriter->endElement();
1298 2
                        $objWriter->endElement();
1299
                    }
1300
                }
1301
1302 2
                $objWriter->endElement();
1303
            }
1304
1305 2
            $objWriter->endElement();
1306
1307 2
            $objWriter->endElement();
1308
        } else {
1309 13
            $objWriter->startElement('c:' . $dataType . 'Ref');
1310
1311 13
            $objWriter->startElement('c:f');
1312 13
            $objWriter->writeRawData($plotSeriesValues->getDataSource());
1313 13
            $objWriter->endElement();
1314
1315 13
            $objWriter->startElement('c:' . $dataType . 'Cache');
1316
1317 13
            if (($groupType != DataSeries::TYPE_PIECHART) && ($groupType != DataSeries::TYPE_PIECHART_3D) && ($groupType != DataSeries::TYPE_DONUTCHART)) {
1318 12
                if (($plotSeriesValues->getFormatCode() !== null) && ($plotSeriesValues->getFormatCode() !== '')) {
1319 1
                    $objWriter->startElement('c:formatCode');
1320 1
                    $objWriter->writeRawData($plotSeriesValues->getFormatCode());
1321 1
                    $objWriter->endElement();
1322
                }
1323
            }
1324
1325 13
            $objWriter->startElement('c:ptCount');
1326 13
            $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1327 13
            $objWriter->endElement();
1328
1329 13
            $dataValues = $plotSeriesValues->getDataValues();
1330 13
            if (!empty($dataValues)) {
1331 13
                if (is_array($dataValues)) {
0 ignored issues
show
introduced by
The condition is_array($dataValues) can never be false.
Loading history...
1332 13
                    foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) {
1333 13
                        $objWriter->startElement('c:pt');
1334 13
                        $objWriter->writeAttribute('idx', $plotSeriesKey);
1335
1336 13
                        $objWriter->startElement('c:v');
1337 13
                        $objWriter->writeRawData($plotSeriesValue);
1338 13
                        $objWriter->endElement();
1339 13
                        $objWriter->endElement();
1340
                    }
1341
                }
1342
            }
1343
1344 13
            $objWriter->endElement();
1345
1346 13
            $objWriter->endElement();
1347
        }
1348 13
    }
1349
1350
    /**
1351
     * Write Bubble Chart Details.
1352
     *
1353
     * @param DataSeriesValues $plotSeriesValues
1354
     * @param XMLWriter $objWriter XML Writer
1355
     */
1356 1
    private function writeBubbles($plotSeriesValues, $objWriter)
1357
    {
1358 1
        if ($plotSeriesValues === null) {
1359
            return;
1360
        }
1361
1362 1
        $objWriter->startElement('c:bubbleSize');
1363 1
        $objWriter->startElement('c:numLit');
1364
1365 1
        $objWriter->startElement('c:formatCode');
1366 1
        $objWriter->writeRawData('General');
1367 1
        $objWriter->endElement();
1368
1369 1
        $objWriter->startElement('c:ptCount');
1370 1
        $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount());
1371 1
        $objWriter->endElement();
1372
1373 1
        $dataValues = $plotSeriesValues->getDataValues();
1374 1
        if (!empty($dataValues)) {
1375 1
            if (is_array($dataValues)) {
0 ignored issues
show
introduced by
The condition is_array($dataValues) can never be false.
Loading history...
1376 1
                foreach ($dataValues as $plotSeriesKey => $plotSeriesValue) {
1377 1
                    $objWriter->startElement('c:pt');
1378 1
                    $objWriter->writeAttribute('idx', $plotSeriesKey);
1379 1
                    $objWriter->startElement('c:v');
1380 1
                    $objWriter->writeRawData(1);
1381 1
                    $objWriter->endElement();
1382 1
                    $objWriter->endElement();
1383
                }
1384
            }
1385
        }
1386
1387 1
        $objWriter->endElement();
1388 1
        $objWriter->endElement();
1389
1390 1
        $objWriter->startElement('c:bubble3D');
1391 1
        $objWriter->writeAttribute('val', 0);
1392 1
        $objWriter->endElement();
1393 1
    }
1394
1395
    /**
1396
     * Write Layout.
1397
     *
1398
     * @param XMLWriter $objWriter XML Writer
1399
     * @param Layout $layout
1400
     */
1401 13
    private function writeLayout(XMLWriter $objWriter, Layout $layout = null)
1402
    {
1403 13
        $objWriter->startElement('c:layout');
1404
1405 13
        if ($layout !== null) {
1406 3
            $objWriter->startElement('c:manualLayout');
1407
1408 3
            $layoutTarget = $layout->getLayoutTarget();
1409 3
            if ($layoutTarget !== null) {
0 ignored issues
show
introduced by
The condition $layoutTarget !== null can never be false.
Loading history...
1410 1
                $objWriter->startElement('c:layoutTarget');
1411 1
                $objWriter->writeAttribute('val', $layoutTarget);
1412 1
                $objWriter->endElement();
1413
            }
1414
1415 3
            $xMode = $layout->getXMode();
1416 3
            if ($xMode !== null) {
0 ignored issues
show
introduced by
The condition $xMode !== null can never be false.
Loading history...
1417 1
                $objWriter->startElement('c:xMode');
1418 1
                $objWriter->writeAttribute('val', $xMode);
1419 1
                $objWriter->endElement();
1420
            }
1421
1422 3
            $yMode = $layout->getYMode();
1423 3
            if ($yMode !== null) {
0 ignored issues
show
introduced by
The condition $yMode !== null can never be false.
Loading history...
1424 1
                $objWriter->startElement('c:yMode');
1425 1
                $objWriter->writeAttribute('val', $yMode);
1426 1
                $objWriter->endElement();
1427
            }
1428
1429 3
            $x = $layout->getXPosition();
1430 3
            if ($x !== null) {
0 ignored issues
show
introduced by
The condition $x !== null can never be false.
Loading history...
1431 1
                $objWriter->startElement('c:x');
1432 1
                $objWriter->writeAttribute('val', $x);
1433 1
                $objWriter->endElement();
1434
            }
1435
1436 3
            $y = $layout->getYPosition();
1437 3
            if ($y !== null) {
0 ignored issues
show
introduced by
The condition $y !== null can never be false.
Loading history...
1438 1
                $objWriter->startElement('c:y');
1439 1
                $objWriter->writeAttribute('val', $y);
1440 1
                $objWriter->endElement();
1441
            }
1442
1443 3
            $w = $layout->getWidth();
1444 3
            if ($w !== null) {
0 ignored issues
show
introduced by
The condition $w !== null can never be false.
Loading history...
1445 1
                $objWriter->startElement('c:w');
1446 1
                $objWriter->writeAttribute('val', $w);
1447 1
                $objWriter->endElement();
1448
            }
1449
1450 3
            $h = $layout->getHeight();
1451 3
            if ($h !== null) {
0 ignored issues
show
introduced by
The condition $h !== null can never be false.
Loading history...
1452 1
                $objWriter->startElement('c:h');
1453 1
                $objWriter->writeAttribute('val', $h);
1454 1
                $objWriter->endElement();
1455
            }
1456
1457 3
            $objWriter->endElement();
1458
        }
1459
1460 13
        $objWriter->endElement();
1461 13
    }
1462
1463
    /**
1464
     * Write Alternate Content block.
1465
     *
1466
     * @param XMLWriter $objWriter XML Writer
1467
     */
1468 13
    private function writeAlternateContent($objWriter)
1469
    {
1470 13
        $objWriter->startElement('mc:AlternateContent');
1471 13
        $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
1472
1473 13
        $objWriter->startElement('mc:Choice');
1474 13
        $objWriter->writeAttribute('xmlns:c14', 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart');
1475 13
        $objWriter->writeAttribute('Requires', 'c14');
1476
1477 13
        $objWriter->startElement('c14:style');
1478 13
        $objWriter->writeAttribute('val', '102');
1479 13
        $objWriter->endElement();
1480 13
        $objWriter->endElement();
1481
1482 13
        $objWriter->startElement('mc:Fallback');
1483 13
        $objWriter->startElement('c:style');
1484 13
        $objWriter->writeAttribute('val', '2');
1485 13
        $objWriter->endElement();
1486 13
        $objWriter->endElement();
1487
1488 13
        $objWriter->endElement();
1489 13
    }
1490
1491
    /**
1492
     * Write Printer Settings.
1493
     *
1494
     * @param XMLWriter $objWriter XML Writer
1495
     */
1496 13
    private function writePrintSettings($objWriter)
1497
    {
1498 13
        $objWriter->startElement('c:printSettings');
1499
1500 13
        $objWriter->startElement('c:headerFooter');
1501 13
        $objWriter->endElement();
1502
1503 13
        $objWriter->startElement('c:pageMargins');
1504 13
        $objWriter->writeAttribute('footer', 0.3);
1505 13
        $objWriter->writeAttribute('header', 0.3);
1506 13
        $objWriter->writeAttribute('r', 0.7);
1507 13
        $objWriter->writeAttribute('l', 0.7);
1508 13
        $objWriter->writeAttribute('t', 0.75);
1509 13
        $objWriter->writeAttribute('b', 0.75);
1510 13
        $objWriter->endElement();
1511
1512 13
        $objWriter->startElement('c:pageSetup');
1513 13
        $objWriter->writeAttribute('orientation', 'portrait');
1514 13
        $objWriter->endElement();
1515
1516 13
        $objWriter->endElement();
1517 13
    }
1518
}
1519