Completed
Push — develop ( 5764b5...f5141e )
by Franck
11:46 queued 11:36
created

PptCharts::writeTitle()   C

Complexity

Conditions 8
Paths 4

Size

Total Lines 100
Code Lines 53

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 50
CRAP Score 8.0786

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 100
ccs 50
cts 56
cp 0.8929
rs 5.2676
cc 8
eloc 53
nc 4
nop 2
crap 8.0786

How to fix   Long Method   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
3
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
4
5
use PhpOffice\Common\Drawing as CommonDrawing;
6
use PhpOffice\Common\XMLWriter;
7
use PhpOffice\PhpPresentation\PhpPresentation;
8
use PhpOffice\PhpPresentation\Shape\Chart;
9
use PhpOffice\PhpPresentation\Shape\Chart\Gridlines;
10
use PhpOffice\PhpPresentation\Shape\Chart\Legend;
11
use PhpOffice\PhpPresentation\Shape\Chart\PlotArea;
12
use PhpOffice\PhpPresentation\Shape\Chart\Title;
13
use PhpOffice\PhpPresentation\Shape\Chart\Type\Area;
14
use PhpOffice\PhpPresentation\Shape\Chart\Type\Bar;
15
use PhpOffice\PhpPresentation\Shape\Chart\Type\Bar3D;
16
use PhpOffice\PhpPresentation\Shape\Chart\Type\Line;
17
use PhpOffice\PhpPresentation\Shape\Chart\Type\Pie;
18
use PhpOffice\PhpPresentation\Shape\Chart\Type\Pie3D;
19
use PhpOffice\PhpPresentation\Shape\Chart\Type\Scatter;
20
use PhpOffice\PhpPresentation\Style\Border;
21
use PhpOffice\PhpPresentation\Style\Fill;
22
23
class PptCharts extends AbstractDecoratorWriter
24
{
25
    /**
26
     * @return \PhpOffice\Common\Adapter\Zip\ZipInterface
27
     * @throws \Exception
28
     */
29 95
    public function render()
30
    {
31 95
        for ($i = 0; $i < $this->getDrawingHashTable()->count(); ++$i) {
32 33
            $shape = $this->getDrawingHashTable()->getByIndex($i);
33 33
            if ($shape instanceof Chart) {
34 25
                $this->getZip()->addFromString('ppt/charts/' . $shape->getIndexedFilename(), $this->writeChart($shape));
35
36
                // Chart relations?
37 24
                if ($shape->hasIncludedSpreadsheet()) {
38
                    $this->getZip()->addFromString('ppt/charts/_rels/' . $shape->getIndexedFilename() . '.rels', $this->writeChartRelationships($shape));
39
                    $pFilename = 'PHPExcel';
40
                    $this->getZip()->addFromString('ppt/embeddings/' . $shape->getIndexedFilename() . '.xlsx', $this->writeSpreadsheet($this->getPresentation(), $shape, $pFilename . '.xlsx'));
41
                }
42 24
            }
43 32
        }
44 94
        return $this->getZip();
45
    }
46
47
48
    /**
49
     * Write chart to XML format
50
     *
51
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
52
     * @return string                    XML Output
53
     * @throws \Exception
54
     */
55 25
    public function writeChart(Chart $chart)
56
    {
57
        // Create XML writer
58 25
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
59
60
        // XML header
61 25
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
62
63
        // c:chartSpace
64 25
        $objWriter->startElement('c:chartSpace');
65 25
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
66 25
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
67 25
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
68
69
        // c:date1904
70 25
        $objWriter->startElement('c:date1904');
71 25
        $objWriter->writeAttribute('val', '1');
72 25
        $objWriter->endElement();
73
74
        // c:lang
75 25
        $objWriter->startElement('c:lang');
76 25
        $objWriter->writeAttribute('val', 'en-US');
77 25
        $objWriter->endElement();
78
79
        // c:chart
80 25
        $objWriter->startElement('c:chart');
81
82
        // Title?
83 25
        if ($chart->getTitle()->isVisible()) {
84
            // Write title
85 25
            $this->writeTitle($objWriter, $chart->getTitle());
86 25
        }
87
88
        // c:autoTitleDeleted
89 25
        $objWriter->startElement('c:autoTitleDeleted');
90 25
        $objWriter->writeAttribute('val', $chart->getTitle()->isVisible() ? '0' : '1');
91 25
        $objWriter->endElement();
92
93
        // c:view3D
94 25
        $objWriter->startElement('c:view3D');
95
96
        // c:rotX
97 25
        $objWriter->startElement('c:rotX');
98 25
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationX());
99 25
        $objWriter->endElement();
100
101
        // c:hPercent
102 25
        $objWriter->startElement('c:hPercent');
103 25
        $objWriter->writeAttribute('val', $chart->getView3D()->getHeightPercent());
104 25
        $objWriter->endElement();
105
106
        // c:rotY
107 25
        $objWriter->startElement('c:rotY');
108 25
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationY());
109 25
        $objWriter->endElement();
110
111
        // c:depthPercent
112 25
        $objWriter->startElement('c:depthPercent');
113 25
        $objWriter->writeAttribute('val', $chart->getView3D()->getDepthPercent());
114 25
        $objWriter->endElement();
115
116
        // c:rAngAx
117 25
        $objWriter->startElement('c:rAngAx');
118 25
        $objWriter->writeAttribute('val', $chart->getView3D()->hasRightAngleAxes() ? '1' : '0');
119 25
        $objWriter->endElement();
120
121
        // c:perspective
122 25
        $objWriter->startElement('c:perspective');
123 25
        $objWriter->writeAttribute('val', $chart->getView3D()->getPerspective());
124 25
        $objWriter->endElement();
125
126 25
        $objWriter->endElement();
127
128
        // Write plot area
129 25
        $this->writePlotArea($objWriter, $chart->getPlotArea(), $chart);
130
131
        // Legend?
132 24
        if ($chart->getLegend()->isVisible()) {
133
            // Write legend
134 24
            $this->writeLegend($objWriter, $chart->getLegend());
135 24
        }
136
137
        // c:plotVisOnly
138 24
        $objWriter->startElement('c:plotVisOnly');
139 24
        $objWriter->writeAttribute('val', '1');
140 24
        $objWriter->endElement();
141
142 24
        $objWriter->endElement();
143
144
        // c:spPr
145 24
        $objWriter->startElement('c:spPr');
146
147
        // Fill
148 24
        $this->writeFill($objWriter, $chart->getFill());
149
150
        // Border
151 24
        if ($chart->getBorder()->getLineStyle() != Border::LINE_NONE) {
152
            $this->writeBorder($objWriter, $chart->getBorder(), '');
153
        }
154
155
        // Shadow
156 24
        if ($chart->getShadow()->isVisible()) {
157
            // a:effectLst
158
            $objWriter->startElement('a:effectLst');
159
160
            // a:outerShdw
161
            $objWriter->startElement('a:outerShdw');
162
            $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($chart->getShadow()->getBlurRadius()));
163
            $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($chart->getShadow()->getDistance()));
164
            $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($chart->getShadow()->getDirection()));
165
            $objWriter->writeAttribute('algn', $chart->getShadow()->getAlignment());
166
            $objWriter->writeAttribute('rotWithShape', '0');
167
168
            // a:srgbClr
169
            $objWriter->startElement('a:srgbClr');
170
            $objWriter->writeAttribute('val', $chart->getShadow()->getColor()->getRGB());
171
172
            // a:alpha
173
            $objWriter->startElement('a:alpha');
174
            $objWriter->writeAttribute('val', $chart->getShadow()->getAlpha() * 1000);
175
            $objWriter->endElement();
176
177
            $objWriter->endElement();
178
179
            $objWriter->endElement();
180
181
            $objWriter->endElement();
182
        }
183
184 24
        $objWriter->endElement();
185
186
        // External data?
187 24
        if ($chart->hasIncludedSpreadsheet()) {
188
            // c:externalData
189
            $objWriter->startElement('c:externalData');
190
            $objWriter->writeAttribute('r:id', 'rId1');
191
192
            // c:autoUpdate
193
            $objWriter->startElement('c:autoUpdate');
194
            $objWriter->writeAttribute('val', '0');
195
            $objWriter->endElement();
196
197
            $objWriter->endElement();
198
        }
199
200 24
        $objWriter->endElement();
201
202
        // Return
203 24
        return $objWriter->getData();
204
    }
205
206
    /**
207
     * Write chart to XML format
208
     *
209
     * @param  PhpPresentation             $presentation
210
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
211
     * @param  string                    $tempName
212
     * @return string                    String output
213
     * @throws \Exception
214
     */
215
    public function writeSpreadsheet(PhpPresentation $presentation, $chart, $tempName)
216
    {
217
        // Need output?
218
        if (!$chart->hasIncludedSpreadsheet()) {
219
            throw new \Exception('No spreadsheet output is required for the given chart.');
220
        }
221
222
        // Verify PHPExcel
223
        if (!class_exists('PHPExcel')) {
224
            throw new \Exception('PHPExcel has not been loaded. Include PHPExcel.php in your script, e.g. require_once \'PHPExcel.php\'.');
225
        }
226
227
        // Create new spreadsheet
228
        $workbook = new \PHPExcel();
229
230
        // Set properties
231
        $title = $chart->getTitle()->getText();
232
        if (strlen($title) == 0) {
233
            $title = 'Chart';
234
        }
235
        $workbook->getProperties()->setCreator($presentation->getProperties()->getCreator())->setLastModifiedBy($presentation->getProperties()->getLastModifiedBy())->setTitle($title);
0 ignored issues
show
Deprecated Code introduced by
The method PhpOffice\PhpPresentatio...tation::getProperties() has been deprecated with message: for getDocumentProperties

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
236
237
        // Add chart data
238
        $sheet = $workbook->setActiveSheetIndex(0);
239
        $sheet->setTitle('Sheet1');
240
241
        // Write series
242
        $seriesIndex = 0;
243
        foreach ($chart->getPlotArea()->getType()->getSeries() as $series) {
244
            // Title
245
            $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, 1, $series->getTitle());
246
247
            // X-axis
248
            $axisXData = array_keys($series->getValues());
249
            $numAxisXData = count($axisXData);
250
            for ($i = 0; $i < $numAxisXData; $i++) {
251
                $sheet->setCellValueByColumnAndRow(0, $i + 2, $axisXData[$i]);
252
            }
253
254
            // Y-axis
255
            $axisYData = array_values($series->getValues());
256
            $numAxisYData = count($axisYData);
257
            for ($i = 0; $i < $numAxisYData; $i++) {
258
                $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, $i + 2, $axisYData[$i]);
259
            }
260
261
            ++$seriesIndex;
262
        }
263
264
        // Save to string
265
        $writer = \PHPExcel_IOFactory::createWriter($workbook, 'Excel2007');
266
        $writer->save($tempName);
267
268
        // Load file in memory
269
        $returnValue = file_get_contents($tempName);
270
        if (@unlink($tempName) === false) {
271
            throw new \Exception('The file '.$tempName.' could not removed.');
272
        }
273
274
        return $returnValue;
275
    }
276
277
    /**
278
     * Write element with value attribute
279
     *
280
     * @param \PhpOffice\Common\XMLWriter $objWriter   XML Writer
281
     * @param string                         $elementName
282
     * @param string                         $value
283
     */
284 23
    protected function writeElementWithValAttribute($objWriter, $elementName, $value)
285
    {
286 23
        $objWriter->startElement($elementName);
287 23
        $objWriter->writeAttribute('val', $value);
288 23
        $objWriter->endElement();
289 23
    }
290
291
    /**
292
     * Write single value or reference
293
     *
294
     * @param \PhpOffice\Common\XMLWriter $objWriter   XML Writer
295
     * @param boolean                        $isReference
296
     * @param mixed                          $value
297
     * @param string                         $reference
298
     */
299 23
    protected function writeSingleValueOrReference($objWriter, $isReference, $value, $reference)
300
    {
301 23
        if (!$isReference) {
302
            // Value
303 23
            $objWriter->writeElement('c:v', $value);
304 23
        } else {
305
            // Reference and cache
306
            $objWriter->startElement('c:strRef');
307
            $objWriter->writeElement('c:f', $reference);
308
            $objWriter->startElement('c:strCache');
309
            $objWriter->startElement('c:ptCount');
310
            $objWriter->writeAttribute('val', '1');
311
            $objWriter->endElement();
312
313
            $objWriter->startElement('c:pt');
314
            $objWriter->writeAttribute('idx', '0');
315
            $objWriter->writeElement('c:v', $value);
316
            $objWriter->endElement();
317
            $objWriter->endElement();
318
            $objWriter->endElement();
319
        }
320 23
    }
321
322
    /**
323
     * Write series value or reference
324
     *
325
     * @param \PhpOffice\Common\XMLWriter $objWriter   XML Writer
326
     * @param boolean                        $isReference
327
     * @param mixed                          $values
328
     * @param string                         $reference
329
     */
330 23
    protected function writeMultipleValuesOrReference($objWriter, $isReference, $values, $reference)
331
    {
332
        // c:strLit / c:numLit
333
        // c:strRef / c:numRef
334 23
        $referenceType = ($isReference ? 'Ref' : 'Lit');
335 23
        if (is_int($values[0]) || is_float($values[0])) {
336 23
            $dataType = 'num';
337 23
        } else {
338 23
            $dataType = 'str';
339
        }
340 23
        $objWriter->startElement('c:' . $dataType . $referenceType);
341
342 23
        $numValues = count($values);
343 23
        if (!$isReference) {
344
            // Value
345
346
            // c:ptCount
347 23
            $objWriter->startElement('c:ptCount');
348 23
            $objWriter->writeAttribute('val', count($values));
349 23
            $objWriter->endElement();
350
351
            // Add points
352 23
            for ($i = 0; $i < $numValues; $i++) {
353
                // c:pt
354 23
                $objWriter->startElement('c:pt');
355 23
                $objWriter->writeAttribute('idx', $i);
356 23
                $objWriter->writeElement('c:v', $values[$i]);
357 23
                $objWriter->endElement();
358 23
            }
359 23
        } else {
360
            // Reference
361
            $objWriter->writeElement('c:f', $reference);
362
            $objWriter->startElement('c:' . $dataType . 'Cache');
363
364
            // c:ptCount
365
            $objWriter->startElement('c:ptCount');
366
            $objWriter->writeAttribute('val', count($values));
367
            $objWriter->endElement();
368
369
            // Add points
370
            for ($i = 0; $i < $numValues; $i++) {
371
                // c:pt
372
                $objWriter->startElement('c:pt');
373
                $objWriter->writeAttribute('idx', $i);
374
                $objWriter->writeElement('c:v', $values[$i]);
375
                $objWriter->endElement();
376
            }
377
378
            $objWriter->endElement();
379
        }
380
381 23
        $objWriter->endElement();
382 23
    }
383
384
    /**
385
     * Write Title
386
     *
387
     * @param  \PhpOffice\Common\XMLWriter  $objWriter XML Writer
388
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Title $subject
389
     * @throws \Exception
390
     */
391 25
    protected function writeTitle(XMLWriter $objWriter, Title $subject)
392
    {
393
        // c:title
394 25
        $objWriter->startElement('c:title');
395
396
        // c:tx
397 25
        $objWriter->startElement('c:tx');
398
399
        // c:rich
400 25
        $objWriter->startElement('c:rich');
401
402
        // a:bodyPr
403 25
        $objWriter->writeElement('a:bodyPr', null);
404
405
        // a:lstStyle
406 25
        $objWriter->writeElement('a:lstStyle', null);
407
408
        // a:p
409 25
        $objWriter->startElement('a:p');
410
411
        // a:pPr
412 25
        $objWriter->startElement('a:pPr');
413 25
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
414 25
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
415 25
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
416 25
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
417 25
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
418 25
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
419
420
        // a:defRPr
421 25
        $objWriter->writeElement('a:defRPr', null);
422
423 25
        $objWriter->endElement();
424
425
        // a:r
426 25
        $objWriter->startElement('a:r');
427
428
        // a:rPr
429 25
        $objWriter->startElement('a:rPr');
430 25
        $objWriter->writeAttribute('lang', 'en-US');
431 25
        $objWriter->writeAttribute('dirty', '0');
432
433 25
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
434 25
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
435 25
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
436 25
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
437 25
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
438
439 25
        if ($subject->getFont()->isSuperScript() || $subject->getFont()->isSubScript()) {
440
            if ($subject->getFont()->isSuperScript()) {
441
                $objWriter->writeAttribute('baseline', '30000');
442
            } elseif ($subject->getFont()->isSubScript()) {
443
                $objWriter->writeAttribute('baseline', '-25000');
444
            }
445
        }
446
447
        // Font - a:solidFill
448 25
        $objWriter->startElement('a:solidFill');
449
450
        // a:srgbClr
451 25
        $objWriter->startElement('a:srgbClr');
452 25
        $objWriter->writeAttribute('val', $subject->getFont()->getColor()->getRGB());
453 25
        $objWriter->endElement();
454
455 25
        $objWriter->endElement();
456
457
        // Font - a:latin
458 25
        $objWriter->startElement('a:latin');
459 25
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
460 25
        $objWriter->endElement();
461
462 25
        $objWriter->endElement();
463
464
        // a:t
465 25
        $objWriter->writeElement('a:t', $subject->getText());
466
467 25
        $objWriter->endElement();
468
469
        // a:endParaRPr
470 25
        $objWriter->startElement('a:endParaRPr');
471 25
        $objWriter->writeAttribute('lang', 'en-US');
472 25
        $objWriter->writeAttribute('dirty', '0');
473 25
        $objWriter->endElement();
474
475 25
        $objWriter->endElement();
476
477 25
        $objWriter->endElement();
478
479 25
        $objWriter->endElement();
480
481
        // Write layout
482 25
        $this->writeLayout($objWriter, $subject);
483
484
        // c:overlay
485 25
        $objWriter->startElement('c:overlay');
486 25
        $objWriter->writeAttribute('val', '0');
487 25
        $objWriter->endElement();
488
489 25
        $objWriter->endElement();
490 25
    }
491
492
    /**
493
     * Write Plot Area
494
     *
495
     * @param  \PhpOffice\Common\XMLWriter     $objWriter XML Writer
496
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\PlotArea $subject
497
     * @param  \PhpOffice\PhpPresentation\Shape\Chart          $chart
498
     * @throws \Exception
499
     */
500 25
    protected function writePlotArea(XMLWriter $objWriter, PlotArea $subject, Chart $chart)
501
    {
502
        // c:plotArea
503 25
        $objWriter->startElement('c:plotArea');
504
505
        // Write layout
506 25
        $this->writeLayout($objWriter, $subject);
507
508
        // Write chart
509 25
        $chartType = $subject->getType();
510 25
        if ($chartType instanceof Area) {
511 1
            $this->writeTypeArea($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
512 25
        } elseif ($chartType instanceof Bar) {
513 2
            $this->writeTypeBar($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
514 24
        } elseif ($chartType instanceof Bar3D) {
515 4
            $this->writeTypeBar3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
516 22
        } elseif ($chartType instanceof Pie) {
517 1
            $this->writeTypePie($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
518 18
        } elseif ($chartType instanceof Pie3D) {
519 4
            $this->writeTypePie3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
520 17
        } elseif ($chartType instanceof Line) {
521 7
            $this->writeTypeLine($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
522 13
        } elseif ($chartType instanceof Scatter) {
523 5
            $this->writeTypeScatter($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
524 5
        } else {
525 1
            throw new \Exception('The chart type provided could not be rendered.');
526
        }
527
528
        // Write X axis?
529 24
        if ($chartType->hasAxisX()) {
530 19
            $this->writeAxis($objWriter, $subject->getAxisX(), Chart\Axis::AXIS_X);
531 19
        }
532
533
        // Write Y axis?
534 24
        if ($chartType->hasAxisY()) {
535 19
            $this->writeAxis($objWriter, $subject->getAxisY(), Chart\Axis::AXIS_Y);
536 19
        }
537
538 24
        $objWriter->endElement();
539 24
    }
540
541
    /**
542
     * Write Legend
543
     *
544
     * @param  \PhpOffice\Common\XMLWriter   $objWriter XML Writer
545
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Legend $subject
546
     * @throws \Exception
547
     */
548 24
    protected function writeLegend(XMLWriter $objWriter, Legend $subject)
549
    {
550
        // c:legend
551 24
        $objWriter->startElement('c:legend');
552
553
        // c:legendPos
554 24
        $objWriter->startElement('c:legendPos');
555 24
        $objWriter->writeAttribute('val', $subject->getPosition());
556 24
        $objWriter->endElement();
557
558
        // Write layout
559 24
        $this->writeLayout($objWriter, $subject);
560
561
        // c:overlay
562 24
        $objWriter->startElement('c:overlay');
563 24
        $objWriter->writeAttribute('val', '0');
564 24
        $objWriter->endElement();
565
566
        // c:spPr
567 24
        $objWriter->startElement('c:spPr');
568
569
        // Fill
570 24
        $this->writeFill($objWriter, $subject->getFill());
571
572
        // Border
573 24
        if ($subject->getBorder()->getLineStyle() != Border::LINE_NONE) {
574 24
            $this->writeBorder($objWriter, $subject->getBorder(), '');
575 24
        }
576
577 24
        $objWriter->endElement();
578
579
        // c:txPr
580 24
        $objWriter->startElement('c:txPr');
581
582
        // a:bodyPr
583 24
        $objWriter->writeElement('a:bodyPr', null);
584
585
        // a:lstStyle
586 24
        $objWriter->writeElement('a:lstStyle', null);
587
588
        // a:p
589 24
        $objWriter->startElement('a:p');
590
591
        // a:pPr
592 24
        $objWriter->startElement('a:pPr');
593 24
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
594 24
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
595 24
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
596 24
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
597 24
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
598 24
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
599
600
        // a:defRPr
601 24
        $objWriter->startElement('a:defRPr');
602
603 24
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
604 24
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
605 24
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
606 24
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
607 24
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
608
609 24
        if ($subject->getFont()->isSuperScript() || $subject->getFont()->isSubScript()) {
610
            if ($subject->getFont()->isSuperScript()) {
611
                $objWriter->writeAttribute('baseline', '30000');
612
            } elseif ($subject->getFont()->isSubScript()) {
613
                $objWriter->writeAttribute('baseline', '-25000');
614
            }
615
        }
616
617
        // Font - a:solidFill
618 24
        $objWriter->startElement('a:solidFill');
619
620
        // a:srgbClr
621 24
        $objWriter->startElement('a:srgbClr');
622 24
        $objWriter->writeAttribute('val', $subject->getFont()->getColor()->getRGB());
623 24
        $objWriter->endElement();
624
625 24
        $objWriter->endElement();
626
627
        // Font - a:latin
628 24
        $objWriter->startElement('a:latin');
629 24
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
630 24
        $objWriter->endElement();
631
632 24
        $objWriter->endElement();
633
634 24
        $objWriter->endElement();
635
636
        // a:endParaRPr
637 24
        $objWriter->startElement('a:endParaRPr');
638 24
        $objWriter->writeAttribute('lang', 'en-US');
639 24
        $objWriter->writeAttribute('dirty', '0');
640 24
        $objWriter->endElement();
641
642 24
        $objWriter->endElement();
643
644 24
        $objWriter->endElement();
645
646 24
        $objWriter->endElement();
647 24
    }
648
649
    /**
650
     * Write Layout
651
     *
652
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
653
     * @param  mixed                          $subject
654
     * @throws \Exception
655
     */
656 25
    protected function writeLayout(XMLWriter $objWriter, $subject)
657
    {
658
        // c:layout
659 25
        $objWriter->startElement('c:layout');
660
661
        // c:manualLayout
662 25
        $objWriter->startElement('c:manualLayout');
663
        // c:xMode
664 25
        $objWriter->startElement('c:xMode');
665 25
        $objWriter->writeAttribute('val', 'edge');
666 25
        $objWriter->endElement();
667
668
        // c:yMode
669 25
        $objWriter->startElement('c:yMode');
670 25
        $objWriter->writeAttribute('val', 'edge');
671 25
        $objWriter->endElement();
672
673 25
        if ($subject->getOffsetX() != 0) {
674
            // c:x
675 25
            $objWriter->startElement('c:x');
676 25
            $objWriter->writeAttribute('val', $subject->getOffsetX());
677 25
            $objWriter->endElement();
678 25
        }
679
680 25
        if ($subject->getOffsetY() != 0) {
681
            // c:y
682 25
            $objWriter->startElement('c:y');
683 25
            $objWriter->writeAttribute('val', $subject->getOffsetY());
684 25
            $objWriter->endElement();
685 25
        }
686
687 25
        if ($subject->getWidth() != 0) {
688
            // c:w
689
            $objWriter->startElement('c:w');
690
            $objWriter->writeAttribute('val', $subject->getWidth());
691
            $objWriter->endElement();
692
        }
693
694 25
        if ($subject->getHeight() != 0) {
695
            // c:h
696
            $objWriter->startElement('c:h');
697
            $objWriter->writeAttribute('val', $subject->getHeight());
698
            $objWriter->endElement();
699
        }
700
701 25
        $objWriter->endElement();
702 25
        $objWriter->endElement();
703 25
    }
704
705
    /**
706
     * Write Type Area
707
     *
708
     * @param  \PhpOffice\Common\XMLWriter      $objWriter    XML Writer
709
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Area $subject
710
     * @param  boolean                             $includeSheet
711
     * @throws \Exception
712
     */
713 1
    protected function writeTypeArea(XMLWriter $objWriter, Area $subject, $includeSheet = false)
714
    {
715
        // c:lineChart
716 1
        $objWriter->startElement('c:areaChart');
717
718
        // c:grouping
719 1
        $objWriter->startElement('c:grouping');
720 1
        $objWriter->writeAttribute('val', 'standard');
721 1
        $objWriter->endElement();
722
723
        // Write series
724 1
        $seriesIndex = 0;
725 1
        foreach ($subject->getSeries() as $series) {
726
            // c:ser
727 1
            $objWriter->startElement('c:ser');
728
729
            // c:ser > c:idx
730 1
            $objWriter->startElement('c:idx');
731 1
            $objWriter->writeAttribute('val', $seriesIndex);
732 1
            $objWriter->endElement();
733
734
            // c:ser > c:order
735 1
            $objWriter->startElement('c:order');
736 1
            $objWriter->writeAttribute('val', $seriesIndex);
737 1
            $objWriter->endElement();
738
739
            // c:ser > c:tx
740 1
            $objWriter->startElement('c:tx');
741 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
742 1
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
743 1
            $objWriter->endElement();
744
745
            // c:ser > c:dLbls
746 1
            $objWriter->startElement('c:dLbls');
747
748
            // c:ser > c:dLbls > c:txPr
749 1
            $objWriter->startElement('c:txPr');
750
751
            // c:ser > c:dLbls > c:txPr > a:bodyPr
752 1
            $objWriter->writeElement('a:bodyPr', null);
753
754
            // c:ser > c:dLbls > c:txPr > a:lstStyle
755 1
            $objWriter->writeElement('a:lstStyle', null);
756
757
            // c:ser > c:dLbls > c:txPr > a:p
758 1
            $objWriter->startElement('a:p');
759
760
            // c:ser > c:dLbls > c:txPr > a:p > a:pPr
761 1
            $objWriter->startElement('a:pPr');
762
763
            // c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr
764 1
            $objWriter->startElement('a:defRPr');
765
766 1
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
767 1
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
768 1
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
769 1
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
770 1
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
771
772 1
            if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
773
                if ($series->getFont()->isSuperScript()) {
774
                    $objWriter->writeAttribute('baseline', '30000');
775
                } elseif ($series->getFont()->isSubScript()) {
776
                    $objWriter->writeAttribute('baseline', '-25000');
777
                }
778
            }
779
780
            // c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr > a:solidFill
781 1
            $objWriter->startElement('a:solidFill');
782
783
            // c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr > a:solidFill > a:srgbClr
784 1
            $objWriter->startElement('a:srgbClr');
785 1
            $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
786 1
            $objWriter->endElement();
787
788
            // c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr > ## a:solidFill
789 1
            $objWriter->endElement();
790
791
            // c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr > a:latin
792 1
            $objWriter->startElement('a:latin');
793 1
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
794 1
            $objWriter->endElement();
795
796
            // c:ser > c:dLbls > c:txPr > a:p > a:pPr > ##a:defRPr
797 1
            $objWriter->endElement();
798
799
            // c:ser > c:dLbls > c:txPr > a:p > ##a:pPr
800 1
            $objWriter->endElement();
801
802
            // c:ser > c:dLbls > c:txPr > a:p > a:endParaRPr
803 1
            $objWriter->startElement('a:endParaRPr');
804 1
            $objWriter->writeAttribute('lang', 'en-US');
805 1
            $objWriter->writeAttribute('dirty', '0');
806 1
            $objWriter->endElement();
807
808
            // c:ser > c:dLbls > c:txPr > ##a:p
809 1
            $objWriter->endElement();
810
811
            // c:ser > c:dLbls > ##c:txPr
812 1
            $objWriter->endElement();
813
814
            // c:ser > c:dLbls > c:dLblPos
815 1
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
816
817
            // c:ser > c:dLbls > c:showVal
818 1
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
819
820
            // c:ser > c:dLbls > c:showCatName
821 1
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
822
823
            // c:ser > c:dLbls > c:showSerName
824 1
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
825
826
            // c:ser > c:dLbls > c:showPercent
827 1
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
828
829
            // c:ser > c:dLbls > c:showLeaderLines
830 1
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
831
832
            // c:ser > ##c:dLbls
833 1
            $objWriter->endElement();
834
835 1
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
836
                // c:spPr
837
                $objWriter->startElement('c:spPr');
838
                // Write fill
839
                $this->writeFill($objWriter, $series->getFill());
840
                // ## c:spPr
841
                $objWriter->endElement();
842
            }
843
844
            // Write X axis data
845 1
            $axisXData = array_keys($series->getValues());
846
847
            // c:cat
848 1
            $objWriter->startElement('c:cat');
849 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
850 1
            $objWriter->endElement();
851
852
            // Write Y axis data
853 1
            $axisYData = array_values($series->getValues());
854
855
            // c:val
856 1
            $objWriter->startElement('c:val');
857 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
858 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
859 1
            $objWriter->endElement();
860
861 1
            $objWriter->endElement();
862
863 1
            ++$seriesIndex;
864 1
        }
865
866
        // c:marker
867 1
        $objWriter->startElement('c:marker');
868 1
        $objWriter->writeAttribute('val', '1');
869 1
        $objWriter->endElement();
870
871
        // c:smooth
872 1
        $objWriter->startElement('c:smooth');
873 1
        $objWriter->writeAttribute('val', '0');
874 1
        $objWriter->endElement();
875
876
        // c:axId
877 1
        $objWriter->startElement('c:axId');
878 1
        $objWriter->writeAttribute('val', '52743552');
879 1
        $objWriter->endElement();
880
881
        // c:axId
882 1
        $objWriter->startElement('c:axId');
883 1
        $objWriter->writeAttribute('val', '52749440');
884 1
        $objWriter->endElement();
885
886 1
        $objWriter->endElement();
887 1
    }
888
889
    /**
890
     * Write Type Bar
891
     *
892
     * @param  \PhpOffice\Common\XMLWriter       $objWriter    XML Writer
893
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar $subject
894
     * @param  boolean                              $includeSheet
895
     * @throws \Exception
896
     */
897 2
    protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, $includeSheet = false)
898
    {
899
        // c:bar3DChart
900 2
        $objWriter->startElement('c:barChart');
901
902
        // c:barDir
903 2
        $objWriter->startElement('c:barDir');
904 2
        $objWriter->writeAttribute('val', $subject->getBarDirection());
905 2
        $objWriter->endElement();
906
907
        // c:grouping
908 2
        $objWriter->startElement('c:grouping');
909 2
        $objWriter->writeAttribute('val', $subject->getBarGrouping());
910 2
        $objWriter->endElement();
911
912
        // Write series
913 2
        $seriesIndex = 0;
914 2
        foreach ($subject->getSeries() as $series) {
915
            // c:ser
916 2
            $objWriter->startElement('c:ser');
917
918
            // c:idx
919 2
            $objWriter->startElement('c:idx');
920 2
            $objWriter->writeAttribute('val', $seriesIndex);
921 2
            $objWriter->endElement();
922
923
            // c:order
924 2
            $objWriter->startElement('c:order');
925 2
            $objWriter->writeAttribute('val', $seriesIndex);
926 2
            $objWriter->endElement();
927
928
            // c:tx
929 2
            $objWriter->startElement('c:tx');
930 2
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
931 2
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
932 2
            $objWriter->endElement();
933
934
            // Fills for points?
935 2
            $dataPointFills = $series->getDataPointFills();
936 2
            foreach ($dataPointFills as $key => $value) {
937
                // c:dPt
938 1
                $objWriter->startElement('c:dPt');
939
940
                // c:idx
941 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
942
943 1
                if ($value->getFillType() != Fill::FILL_NONE) {
944
                    // c:spPr
945 1
                    $objWriter->startElement('c:spPr');
946
                    // Write fill
947 1
                    $this->writeFill($objWriter, $value);
948
                    // ## c:spPr
949 1
                    $objWriter->endElement();
950 1
                }
951
952
                // ## c:dPt
953 1
                $objWriter->endElement();
954 2
            }
955
956
            // c:dLbls
957 2
            $objWriter->startElement('c:dLbls');
958
959 2
            if ($series->hasDlblNumFormat()) {
960
                //c:numFmt
961
                $objWriter->startElement('c:numFmt');
962
                $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
963
                $objWriter->writeAttribute('sourceLinked', '0');
964
                $objWriter->endElement();
965
            }
966
967
            // c:txPr
968 2
            $objWriter->startElement('c:txPr');
969
970
            // a:bodyPr
971 2
            $objWriter->writeElement('a:bodyPr', null);
972
973
            // a:lstStyle
974 2
            $objWriter->writeElement('a:lstStyle', null);
975
976
            // a:p
977 2
            $objWriter->startElement('a:p');
978
979
            // a:pPr
980 2
            $objWriter->startElement('a:pPr');
981
982
            // a:defRPr
983 2
            $objWriter->startElement('a:defRPr');
984
985 2
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
986 2
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
987 2
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
988 2
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
989 2
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
990
991 2
            if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
992
                if ($series->getFont()->isSuperScript()) {
993
                    $objWriter->writeAttribute('baseline', '30000');
994
                } elseif ($series->getFont()->isSubScript()) {
995
                    $objWriter->writeAttribute('baseline', '-25000');
996
                }
997
            }
998
999
            // Font - a:solidFill
1000 2
            $objWriter->startElement('a:solidFill');
1001
1002
            // a:srgbClr
1003 2
            $objWriter->startElement('a:srgbClr');
1004 2
            $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1005 2
            $objWriter->endElement();
1006
1007 2
            $objWriter->endElement();
1008
1009
            // Font - a:latin
1010 2
            $objWriter->startElement('a:latin');
1011 2
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1012 2
            $objWriter->endElement();
1013
1014 2
            $objWriter->endElement();
1015
1016 2
            $objWriter->endElement();
1017
1018
            // a:endParaRPr
1019 2
            $objWriter->startElement('a:endParaRPr');
1020 2
            $objWriter->writeAttribute('lang', 'en-US');
1021 2
            $objWriter->writeAttribute('dirty', '0');
1022 2
            $objWriter->endElement();
1023
1024 2
            $objWriter->endElement();
1025
1026 2
            $objWriter->endElement();
1027
1028
            // c:showVal
1029 2
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1030
1031
            // c:showCatName
1032 2
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1033
1034
            // c:showSerName
1035 2
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1036
1037
            // c:showPercent
1038 2
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1039
1040
            // c:showLeaderLines
1041 2
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1042
1043 2
            $objWriter->endElement();
1044
1045
            // c:spPr
1046 2
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
1047
                // c:spPr
1048
                $objWriter->startElement('c:spPr');
1049
                // Write fill
1050
                $this->writeFill($objWriter, $series->getFill());
1051
                // ## c:spPr
1052
                $objWriter->endElement();
1053
            }
1054
1055
            // Write X axis data
1056 2
            $axisXData = array_keys($series->getValues());
1057
1058
            // c:cat
1059 2
            $objWriter->startElement('c:cat');
1060 2
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1061 2
            $objWriter->endElement();
1062
1063
            // Write Y axis data
1064 2
            $axisYData = array_values($series->getValues());
1065
1066
            // c:val
1067 2
            $objWriter->startElement('c:val');
1068 2
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1069 2
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1070 2
            $objWriter->endElement();
1071
1072 2
            $objWriter->endElement();
1073
1074 2
            ++$seriesIndex;
1075 2
        }
1076
1077
        // c:overlap
1078 2
        $objWriter->startElement('c:overlap');
1079 2
        if ($subject->getBarGrouping() == Bar::GROUPING_CLUSTERED) {
1080 2
            $objWriter->writeAttribute('val', '0');
1081 2
        } elseif ($subject->getBarGrouping() == Bar::GROUPING_STACKED || $subject->getBarGrouping() == Bar::GROUPING_PERCENTSTACKED) {
1082
            $objWriter->writeAttribute('val', '100');
1083
        }
1084 2
        $objWriter->endElement();
1085
1086
        // c:gapWidth
1087 2
        $objWriter->startElement('c:gapWidth');
1088 2
        $objWriter->writeAttribute('val', '75');
1089 2
        $objWriter->endElement();
1090
1091
        // c:shape
1092 2
        $objWriter->startElement('c:shape');
1093 2
        $objWriter->writeAttribute('val', 'box');
1094 2
        $objWriter->endElement();
1095
1096
        // c:axId
1097 2
        $objWriter->startElement('c:axId');
1098 2
        $objWriter->writeAttribute('val', '52743552');
1099 2
        $objWriter->endElement();
1100
1101
        // c:axId
1102 2
        $objWriter->startElement('c:axId');
1103 2
        $objWriter->writeAttribute('val', '52749440');
1104 2
        $objWriter->endElement();
1105
1106
        // c:axId
1107 2
        $objWriter->startElement('c:axId');
1108 2
        $objWriter->writeAttribute('val', '0');
1109 2
        $objWriter->endElement();
1110
1111 2
        $objWriter->endElement();
1112 2
    }
1113
1114
    /**
1115
     * Write Type Bar3D
1116
     *
1117
     * @param  \PhpOffice\Common\XMLWriter       $objWriter    XML Writer
1118
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar3D $subject
1119
     * @param  boolean                              $includeSheet
1120
     * @throws \Exception
1121
     */
1122 4
    protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, $includeSheet = false)
1123
    {
1124
        // c:bar3DChart
1125 4
        $objWriter->startElement('c:bar3DChart');
1126
1127
        // c:barDir
1128 4
        $objWriter->startElement('c:barDir');
1129 4
        $objWriter->writeAttribute('val', $subject->getBarDirection());
1130 4
        $objWriter->endElement();
1131
1132
        // c:grouping
1133 4
        $objWriter->startElement('c:grouping');
1134 4
        $objWriter->writeAttribute('val', $subject->getBarGrouping());
1135 4
        $objWriter->endElement();
1136
1137
        // Write series
1138 4
        $seriesIndex = 0;
1139 4
        foreach ($subject->getSeries() as $series) {
1140
            // c:ser
1141 4
            $objWriter->startElement('c:ser');
1142
1143
            // c:idx
1144 4
            $objWriter->startElement('c:idx');
1145 4
            $objWriter->writeAttribute('val', $seriesIndex);
1146 4
            $objWriter->endElement();
1147
1148
            // c:order
1149 4
            $objWriter->startElement('c:order');
1150 4
            $objWriter->writeAttribute('val', $seriesIndex);
1151 4
            $objWriter->endElement();
1152
1153
            // c:tx
1154 4
            $objWriter->startElement('c:tx');
1155 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1156 4
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1157 4
            $objWriter->endElement();
1158
1159
            // Fills for points?
1160 4
            $dataPointFills = $series->getDataPointFills();
1161 4
            foreach ($dataPointFills as $key => $value) {
1162
                // c:dPt
1163 1
                $objWriter->startElement('c:dPt');
1164
1165
                // c:idx
1166 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1167
1168 1
                if ($value->getFillType() != Fill::FILL_NONE) {
1169
                    // c:spPr
1170 1
                    $objWriter->startElement('c:spPr');
1171
                    // Write fill
1172 1
                    $this->writeFill($objWriter, $value);
1173
                    // ## c:spPr
1174 1
                    $objWriter->endElement();
1175 1
                }
1176
1177
                // ## c:dPt
1178 1
                $objWriter->endElement();
1179 4
            }
1180
1181
            // c:dLbls
1182 4
            $objWriter->startElement('c:dLbls');
1183
1184
            // c:txPr
1185 4
            $objWriter->startElement('c:txPr');
1186
1187
            // a:bodyPr
1188 4
            $objWriter->writeElement('a:bodyPr', null);
1189
1190
            // a:lstStyle
1191 4
            $objWriter->writeElement('a:lstStyle', null);
1192
1193
            // a:p
1194 4
            $objWriter->startElement('a:p');
1195
1196
            // a:pPr
1197 4
            $objWriter->startElement('a:pPr');
1198
1199
            // a:defRPr
1200 4
            $objWriter->startElement('a:defRPr');
1201
1202 4
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1203 4
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1204 4
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1205 4
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1206 4
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1207
1208 4
            if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
1209 2
                if ($series->getFont()->isSuperScript()) {
1210 1
                    $objWriter->writeAttribute('baseline', '30000');
1211 2
                } elseif ($series->getFont()->isSubScript()) {
1212 1
                    $objWriter->writeAttribute('baseline', '-25000');
1213 1
                }
1214 2
            }
1215
1216
            // Font - a:solidFill
1217 4
            $objWriter->startElement('a:solidFill');
1218
1219
            // a:srgbClr
1220 4
            $objWriter->startElement('a:srgbClr');
1221 4
            $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1222 4
            $objWriter->endElement();
1223
1224 4
            $objWriter->endElement();
1225
1226
            // Font - a:latin
1227 4
            $objWriter->startElement('a:latin');
1228 4
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1229 4
            $objWriter->endElement();
1230
1231 4
            $objWriter->endElement();
1232
1233 4
            $objWriter->endElement();
1234
1235
            // a:endParaRPr
1236 4
            $objWriter->startElement('a:endParaRPr');
1237 4
            $objWriter->writeAttribute('lang', 'en-US');
1238 4
            $objWriter->writeAttribute('dirty', '0');
1239 4
            $objWriter->endElement();
1240
1241 4
            $objWriter->endElement();
1242
1243 4
            $objWriter->endElement();
1244
1245
            // c:showVal
1246 4
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1247
1248
            // c:showCatName
1249 4
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1250
1251
            // c:showSerName
1252 4
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1253
1254
            // c:showPercent
1255 4
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1256
1257
            // c:showLeaderLines
1258 4
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1259
1260 4
            $objWriter->endElement();
1261
1262
            // c:spPr
1263 4
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
1264
                // c:spPr
1265
                $objWriter->startElement('c:spPr');
1266
                // Write fill
1267
                $this->writeFill($objWriter, $series->getFill());
1268
                // ## c:spPr
1269
                $objWriter->endElement();
1270
            }
1271
1272
            // Write X axis data
1273 4
            $axisXData = array_keys($series->getValues());
1274
1275
            // c:cat
1276 4
            $objWriter->startElement('c:cat');
1277 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1278 4
            $objWriter->endElement();
1279
1280
            // Write Y axis data
1281 4
            $axisYData = array_values($series->getValues());
1282
1283
            // c:val
1284 4
            $objWriter->startElement('c:val');
1285 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1286 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1287 4
            $objWriter->endElement();
1288
1289 4
            $objWriter->endElement();
1290
1291 4
            ++$seriesIndex;
1292 4
        }
1293
1294
        // c:gapWidth
1295 4
        $objWriter->startElement('c:gapWidth');
1296 4
        $objWriter->writeAttribute('val', '75');
1297 4
        $objWriter->endElement();
1298
1299
        // c:shape
1300 4
        $objWriter->startElement('c:shape');
1301 4
        $objWriter->writeAttribute('val', 'box');
1302 4
        $objWriter->endElement();
1303
1304
        // c:axId
1305 4
        $objWriter->startElement('c:axId');
1306 4
        $objWriter->writeAttribute('val', '52743552');
1307 4
        $objWriter->endElement();
1308
1309
        // c:axId
1310 4
        $objWriter->startElement('c:axId');
1311 4
        $objWriter->writeAttribute('val', '52749440');
1312 4
        $objWriter->endElement();
1313
1314
        // c:axId
1315 4
        $objWriter->startElement('c:axId');
1316 4
        $objWriter->writeAttribute('val', '0');
1317 4
        $objWriter->endElement();
1318
1319 4
        $objWriter->endElement();
1320 4
    }
1321
1322
    /**
1323
     * Write Type Pie
1324
     *
1325
     * @param  \PhpOffice\Common\XMLWriter       $objWriter    XML Writer
1326
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie $subject
1327
     * @param  boolean                              $includeSheet
1328
     * @throws \Exception
1329
     */
1330 1
    protected function writeTypePie(XMLWriter $objWriter, Pie $subject, $includeSheet = false)
1331
    {
1332
        // c:pieChart
1333 1
        $objWriter->startElement('c:pieChart');
1334
1335
        // c:varyColors
1336 1
        $objWriter->startElement('c:varyColors');
1337 1
        $objWriter->writeAttribute('val', '1');
1338 1
        $objWriter->endElement();
1339
1340
        // Write series
1341 1
        $seriesIndex = 0;
1342 1
        foreach ($subject->getSeries() as $series) {
1343
            // c:ser
1344 1
            $objWriter->startElement('c:ser');
1345
1346
            // c:idx
1347 1
            $objWriter->startElement('c:idx');
1348 1
            $objWriter->writeAttribute('val', $seriesIndex);
1349 1
            $objWriter->endElement();
1350
1351
            // c:order
1352 1
            $objWriter->startElement('c:order');
1353 1
            $objWriter->writeAttribute('val', $seriesIndex);
1354 1
            $objWriter->endElement();
1355
1356
            // c:tx
1357 1
            $objWriter->startElement('c:tx');
1358 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1359 1
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1360 1
            $objWriter->endElement();
1361
1362
            // Fills for points?
1363 1
            $dataPointFills = $series->getDataPointFills();
1364 1
            foreach ($dataPointFills as $key => $value) {
1365
                // c:dPt
1366 1
                $objWriter->startElement('c:dPt');
1367
1368
                // c:idx
1369 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1370
1371
                // c:spPr
1372 1
                $objWriter->startElement('c:spPr');
1373
1374
                // Write fill
1375 1
                $this->writeFill($objWriter, $value);
1376
1377 1
                $objWriter->endElement();
1378
1379 1
                $objWriter->endElement();
1380 1
            }
1381
1382
            // c:dLbls
1383 1
            $objWriter->startElement('c:dLbls');
1384
1385
            // c:txPr
1386 1
            $objWriter->startElement('c:txPr');
1387
1388
            // a:bodyPr
1389 1
            $objWriter->writeElement('a:bodyPr', null);
1390
1391
            // a:lstStyle
1392 1
            $objWriter->writeElement('a:lstStyle', null);
1393
1394
            // a:p
1395 1
            $objWriter->startElement('a:p');
1396
1397
            // a:pPr
1398 1
            $objWriter->startElement('a:pPr');
1399
1400
            // a:defRPr
1401 1
            $objWriter->startElement('a:defRPr');
1402
1403 1
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1404 1
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1405 1
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1406 1
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1407 1
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1408
1409 1
            if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
1410
                if ($series->getFont()->isSuperScript()) {
1411
                    $objWriter->writeAttribute('baseline', '30000');
1412
                } elseif ($series->getFont()->isSubScript()) {
1413
                    $objWriter->writeAttribute('baseline', '-25000');
1414
                }
1415
            }
1416
1417
            // Font - a:solidFill
1418 1
            $objWriter->startElement('a:solidFill');
1419
1420
            // a:srgbClr
1421 1
            $objWriter->startElement('a:srgbClr');
1422 1
            $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1423 1
            $objWriter->endElement();
1424
1425 1
            $objWriter->endElement();
1426
1427
            // Font - a:latin
1428 1
            $objWriter->startElement('a:latin');
1429 1
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1430 1
            $objWriter->endElement();
1431
1432 1
            $objWriter->endElement();
1433
1434 1
            $objWriter->endElement();
1435
1436
            // a:endParaRPr
1437 1
            $objWriter->startElement('a:endParaRPr');
1438 1
            $objWriter->writeAttribute('lang', 'en-US');
1439 1
            $objWriter->writeAttribute('dirty', '0');
1440 1
            $objWriter->endElement();
1441
1442 1
            $objWriter->endElement();
1443
1444 1
            $objWriter->endElement();
1445
1446
            // c:dLblPos
1447 1
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
1448
1449
            // c:showVal
1450 1
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1451
1452
            // c:showCatName
1453 1
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1454
1455
            // c:showSerName
1456 1
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1457
1458
            // c:showPercent
1459 1
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1460
1461
            // c:showLeaderLines
1462 1
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1463
1464 1
            $objWriter->endElement();
1465
1466
            // Write X axis data
1467 1
            $axisXData = array_keys($series->getValues());
1468
1469
            // c:cat
1470 1
            $objWriter->startElement('c:cat');
1471 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1472 1
            $objWriter->endElement();
1473
1474
            // Write Y axis data
1475 1
            $axisYData = array_values($series->getValues());
1476
1477
            // c:val
1478 1
            $objWriter->startElement('c:val');
1479 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1480 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1481 1
            $objWriter->endElement();
1482
1483 1
            $objWriter->endElement();
1484
1485 1
            ++$seriesIndex;
1486 1
        }
1487
1488 1
        $objWriter->endElement();
1489 1
    }
1490
1491
    /**
1492
     * Write Type Pie3D
1493
     *
1494
     * @param  \PhpOffice\Common\XMLWriter       $objWriter    XML Writer
1495
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie3D $subject
1496
     * @param  boolean                              $includeSheet
1497
     * @throws \Exception
1498
     */
1499 4
    protected function writeTypePie3D(XMLWriter $objWriter, Pie3D $subject, $includeSheet = false)
1500
    {
1501
        // c:pie3DChart
1502 4
        $objWriter->startElement('c:pie3DChart');
1503
1504
        // c:varyColors
1505 4
        $objWriter->startElement('c:varyColors');
1506 4
        $objWriter->writeAttribute('val', '1');
1507 4
        $objWriter->endElement();
1508
1509
        // Write series
1510 4
        $seriesIndex = 0;
1511 4
        foreach ($subject->getSeries() as $series) {
1512
            // c:ser
1513 4
            $objWriter->startElement('c:ser');
1514
1515
            // c:idx
1516 4
            $objWriter->startElement('c:idx');
1517 4
            $objWriter->writeAttribute('val', $seriesIndex);
1518 4
            $objWriter->endElement();
1519
1520
            // c:order
1521 4
            $objWriter->startElement('c:order');
1522 4
            $objWriter->writeAttribute('val', $seriesIndex);
1523 4
            $objWriter->endElement();
1524
1525
            // c:tx
1526 4
            $objWriter->startElement('c:tx');
1527 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1528 4
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1529 4
            $objWriter->endElement();
1530
1531
            // c:explosion
1532 4
            $objWriter->startElement('c:explosion');
1533 4
            $objWriter->writeAttribute('val', $subject->getExplosion());
1534 4
            $objWriter->endElement();
1535
1536
            // Fills for points?
1537 4
            $dataPointFills = $series->getDataPointFills();
1538 4
            foreach ($dataPointFills as $key => $value) {
1539
                // c:dPt
1540 1
                $objWriter->startElement('c:dPt');
1541
1542
                // c:idx
1543 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1544
1545
                // c:spPr
1546 1
                $objWriter->startElement('c:spPr');
1547
1548
                // Write fill
1549 1
                $this->writeFill($objWriter, $value);
1550
1551 1
                $objWriter->endElement();
1552
1553 1
                $objWriter->endElement();
1554 4
            }
1555
1556
            // c:dLbls
1557 4
            $objWriter->startElement('c:dLbls');
1558
1559
            // c:txPr
1560 4
            $objWriter->startElement('c:txPr');
1561
1562
            // a:bodyPr
1563 4
            $objWriter->writeElement('a:bodyPr', null);
1564
1565
            // a:lstStyle
1566 4
            $objWriter->writeElement('a:lstStyle', null);
1567
1568
            // a:p
1569 4
            $objWriter->startElement('a:p');
1570
1571
            // a:pPr
1572 4
            $objWriter->startElement('a:pPr');
1573
1574
            // a:defRPr
1575 4
            $objWriter->startElement('a:defRPr');
1576
1577 4
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1578 4
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1579 4
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1580 4
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1581 4
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1582
1583 4
            if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
1584 2
                if ($series->getFont()->isSuperScript()) {
1585 1
                    $objWriter->writeAttribute('baseline', '30000');
1586 2
                } elseif ($series->getFont()->isSubScript()) {
1587 1
                    $objWriter->writeAttribute('baseline', '-25000');
1588 1
                }
1589 2
            }
1590
1591
            // Font - a:solidFill
1592 4
            $objWriter->startElement('a:solidFill');
1593
1594
            // a:srgbClr
1595 4
            $objWriter->startElement('a:srgbClr');
1596 4
            $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1597 4
            $objWriter->endElement();
1598
1599 4
            $objWriter->endElement();
1600
1601
            // Font - a:latin
1602 4
            $objWriter->startElement('a:latin');
1603 4
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1604 4
            $objWriter->endElement();
1605
1606 4
            $objWriter->endElement();
1607
1608 4
            $objWriter->endElement();
1609
1610
            // a:endParaRPr
1611 4
            $objWriter->startElement('a:endParaRPr');
1612 4
            $objWriter->writeAttribute('lang', 'en-US');
1613 4
            $objWriter->writeAttribute('dirty', '0');
1614 4
            $objWriter->endElement();
1615
1616 4
            $objWriter->endElement();
1617
1618 4
            $objWriter->endElement();
1619
1620
            // c:dLblPos
1621 4
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
1622
1623
            // c:showVal
1624 4
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1625
1626
            // c:showCatName
1627 4
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1628
1629
            // c:showSerName
1630 4
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1631
1632
            // c:showPercent
1633 4
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1634
1635
            // c:showLeaderLines
1636 4
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1637
1638 4
            $objWriter->endElement();
1639
1640
            // Write X axis data
1641 4
            $axisXData = array_keys($series->getValues());
1642
1643
            // c:cat
1644 4
            $objWriter->startElement('c:cat');
1645 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1646 4
            $objWriter->endElement();
1647
1648
            // Write Y axis data
1649 4
            $axisYData = array_values($series->getValues());
1650
1651
            // c:val
1652 4
            $objWriter->startElement('c:val');
1653 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1654 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1655 4
            $objWriter->endElement();
1656
1657 4
            $objWriter->endElement();
1658
1659 4
            ++$seriesIndex;
1660 4
        }
1661
1662 4
        $objWriter->endElement();
1663 4
    }
1664
1665
    /**
1666
     * Write Type Line
1667
     *
1668
     * @param  \PhpOffice\Common\XMLWriter      $objWriter    XML Writer
1669
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Line $subject
1670
     * @param  boolean                             $includeSheet
1671
     * @throws \Exception
1672
     */
1673 7
    protected function writeTypeLine(XMLWriter $objWriter, Line $subject, $includeSheet = false)
1674
    {
1675
        // c:lineChart
1676 7
        $objWriter->startElement('c:lineChart');
1677
1678
        // c:grouping
1679 7
        $objWriter->startElement('c:grouping');
1680 7
        $objWriter->writeAttribute('val', 'standard');
1681 7
        $objWriter->endElement();
1682
1683
        // Write series
1684 7
        $seriesIndex = 0;
1685 7
        foreach ($subject->getSeries() as $series) {
1686
            // c:ser
1687 6
            $objWriter->startElement('c:ser');
1688
1689
            // c:idx
1690 6
            $objWriter->startElement('c:idx');
1691 6
            $objWriter->writeAttribute('val', $seriesIndex);
1692 6
            $objWriter->endElement();
1693
1694
            // c:order
1695 6
            $objWriter->startElement('c:order');
1696 6
            $objWriter->writeAttribute('val', $seriesIndex);
1697 6
            $objWriter->endElement();
1698
1699
            // c:tx
1700 6
            $objWriter->startElement('c:tx');
1701 6
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1702 6
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1703 6
            $objWriter->endElement();
1704
1705
            // Marker
1706 6
            $this->writeSeriesMarker($objWriter, $series->getMarker());
1707
1708
            // c:dLbls
1709 6
            $objWriter->startElement('c:dLbls');
1710
1711
            // c:txPr
1712 6
            $objWriter->startElement('c:txPr');
1713
1714
            // a:bodyPr
1715 6
            $objWriter->writeElement('a:bodyPr', null);
1716
1717
            // a:lstStyle
1718 6
            $objWriter->writeElement('a:lstStyle', null);
1719
1720
            // a:p
1721 6
            $objWriter->startElement('a:p');
1722
1723
            // a:pPr
1724 6
            $objWriter->startElement('a:pPr');
1725
1726
            // a:defRPr
1727 6
            $objWriter->startElement('a:defRPr');
1728
1729 6
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1730 6
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1731 6
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1732 6
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1733 6
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1734
1735 6
            if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
1736 2
                if ($series->getFont()->isSuperScript()) {
1737 1
                    $objWriter->writeAttribute('baseline', '30000');
1738 2
                } elseif ($series->getFont()->isSubScript()) {
1739 1
                    $objWriter->writeAttribute('baseline', '-25000');
1740 1
                }
1741 2
            }
1742
1743
            // Font - a:solidFill
1744 6
            $objWriter->startElement('a:solidFill');
1745
1746
            // a:srgbClr
1747 6
            $objWriter->startElement('a:srgbClr');
1748 6
            $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1749 6
            $objWriter->endElement();
1750
1751 6
            $objWriter->endElement();
1752
1753
            // Font - a:latin
1754 6
            $objWriter->startElement('a:latin');
1755 6
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1756 6
            $objWriter->endElement();
1757
1758 6
            $objWriter->endElement();
1759
1760 6
            $objWriter->endElement();
1761
1762
            // a:endParaRPr
1763 6
            $objWriter->startElement('a:endParaRPr');
1764 6
            $objWriter->writeAttribute('lang', 'en-US');
1765 6
            $objWriter->writeAttribute('dirty', '0');
1766 6
            $objWriter->endElement();
1767
1768 6
            $objWriter->endElement();
1769
1770 6
            $objWriter->endElement();
1771
1772
            // c:showVal
1773 6
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1774
1775
            // c:showCatName
1776 6
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1777
1778
            // c:showSerName
1779 6
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1780
1781
            // c:showPercent
1782 6
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1783
1784
            // c:showLeaderLines
1785 6
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1786
1787
            // > c:dLbls
1788 6
            $objWriter->endElement();
1789
1790
            // c:spPr
1791 6
            $objWriter->startElement('c:spPr');
1792
            // Write fill
1793 6
            $this->writeFill($objWriter, $series->getFill());
1794
            // Write outline
1795 6
            $this->writeOutline($objWriter, $series->getOutline());
1796
            // ## c:spPr
1797 6
            $objWriter->endElement();
1798
1799
            // Write X axis data
1800 6
            $axisXData = array_keys($series->getValues());
1801
1802
            // c:cat
1803 6
            $objWriter->startElement('c:cat');
1804 6
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1805 6
            $objWriter->endElement();
1806
1807
            // Write Y axis data
1808 6
            $axisYData = array_values($series->getValues());
1809
1810
            // c:val
1811 6
            $objWriter->startElement('c:val');
1812 6
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1813 6
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1814 6
            $objWriter->endElement();
1815
1816 6
            $objWriter->endElement();
1817
1818 6
            ++$seriesIndex;
1819 7
        }
1820
1821
        // c:marker
1822 7
        $objWriter->startElement('c:marker');
1823 7
        $objWriter->writeAttribute('val', '1');
1824 7
        $objWriter->endElement();
1825
1826
        // c:smooth
1827 7
        $objWriter->startElement('c:smooth');
1828 7
        $objWriter->writeAttribute('val', '0');
1829 7
        $objWriter->endElement();
1830
1831
        // c:axId
1832 7
        $objWriter->startElement('c:axId');
1833 7
        $objWriter->writeAttribute('val', '52743552');
1834 7
        $objWriter->endElement();
1835
1836
        // c:axId
1837 7
        $objWriter->startElement('c:axId');
1838 7
        $objWriter->writeAttribute('val', '52749440');
1839 7
        $objWriter->endElement();
1840
1841 7
        $objWriter->endElement();
1842 7
    }
1843
1844
    /**
1845
     * Write Type Scatter
1846
     *
1847
     * @param  \PhpOffice\Common\XMLWriter         $objWriter    XML Writer
1848
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Scatter $subject
1849
     * @param  boolean                                $includeSheet
1850
     * @throws \Exception
1851
     */
1852 5
    protected function writeTypeScatter(XMLWriter $objWriter, Scatter $subject, $includeSheet = false)
1853
    {
1854
        // c:scatterChart
1855 5
        $objWriter->startElement('c:scatterChart');
1856
1857
        // c:scatterStyle
1858 5
        $objWriter->startElement('c:scatterStyle');
1859 5
        $objWriter->writeAttribute('val', 'lineMarker');
1860 5
        $objWriter->endElement();
1861
1862
        // c:varyColors
1863 5
        $objWriter->startElement('c:varyColors');
1864 5
        $objWriter->writeAttribute('val', '0');
1865 5
        $objWriter->endElement();
1866
1867
        // Write series
1868 5
        $seriesIndex = 0;
1869 5
        foreach ($subject->getSeries() as $series) {
1870
            // c:ser
1871 5
            $objWriter->startElement('c:ser');
1872
1873
            // c:idx
1874 5
            $objWriter->startElement('c:idx');
1875 5
            $objWriter->writeAttribute('val', $seriesIndex);
1876 5
            $objWriter->endElement();
1877
1878
            // c:order
1879 5
            $objWriter->startElement('c:order');
1880 5
            $objWriter->writeAttribute('val', $seriesIndex);
1881 5
            $objWriter->endElement();
1882
1883
            // c:tx
1884 5
            $objWriter->startElement('c:tx');
1885 5
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1886 5
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1887 5
            $objWriter->endElement();
1888
1889
            // Marker
1890 5
            $this->writeSeriesMarker($objWriter, $series->getMarker());
1891
1892
            // c:dLbls
1893 5
            $objWriter->startElement('c:dLbls');
1894
1895
            // c:txPr
1896 5
            $objWriter->startElement('c:txPr');
1897
1898
            // a:bodyPr
1899 5
            $objWriter->writeElement('a:bodyPr', null);
1900
1901
            // a:lstStyle
1902 5
            $objWriter->writeElement('a:lstStyle', null);
1903
1904
            // a:p
1905 5
            $objWriter->startElement('a:p');
1906
1907
            // a:pPr
1908 5
            $objWriter->startElement('a:pPr');
1909
1910
            // a:defRPr
1911 5
            $objWriter->startElement('a:defRPr');
1912
1913 5
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1914 5
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1915 5
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1916 5
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1917 5
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1918
1919 5
            if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
1920 2
                if ($series->getFont()->isSuperScript()) {
1921 1
                    $objWriter->writeAttribute('baseline', '30000');
1922 2
                } elseif ($series->getFont()->isSubScript()) {
1923 1
                    $objWriter->writeAttribute('baseline', '-25000');
1924 1
                }
1925 2
            }
1926
1927
            // Font - a:solidFill
1928 5
            $objWriter->startElement('a:solidFill');
1929
1930
            // a:srgbClr
1931 5
            $objWriter->startElement('a:srgbClr');
1932 5
            $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1933 5
            $objWriter->endElement();
1934
1935 5
            $objWriter->endElement();
1936
1937
            // Font - a:latin
1938 5
            $objWriter->startElement('a:latin');
1939 5
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1940 5
            $objWriter->endElement();
1941
1942 5
            $objWriter->endElement();
1943
1944 5
            $objWriter->endElement();
1945
1946
            // a:endParaRPr
1947 5
            $objWriter->startElement('a:endParaRPr');
1948 5
            $objWriter->writeAttribute('lang', 'en-US');
1949 5
            $objWriter->writeAttribute('dirty', '0');
1950 5
            $objWriter->endElement();
1951
1952 5
            $objWriter->endElement();
1953
1954 5
            $objWriter->endElement();
1955
1956
            // c:showLegendKey
1957 5
            $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', '0');
1958
1959
            // c:showVal
1960 5
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1961
1962
            // c:showCatName
1963 5
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1964
1965
            // c:showSerName
1966 5
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1967
1968
            // c:showPercent
1969 5
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1970
1971
            // c:showLeaderLines
1972 5
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1973
1974 5
            $objWriter->endElement();
1975
1976
            // c:spPr
1977 5
            $objWriter->startElement('c:spPr');
1978
            // Write fill
1979 5
            $this->writeFill($objWriter, $series->getFill());
1980
            // Write outline
1981 5
            $this->writeOutline($objWriter, $series->getOutline());
1982
            // ## c:spPr
1983 5
            $objWriter->endElement();
1984
1985
            // Write X axis data
1986 5
            $axisXData = array_keys($series->getValues());
1987
1988
            // c:xVal
1989 5
            $objWriter->startElement('c:xVal');
1990 5
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1991 5
            $objWriter->endElement();
1992
1993
            // Write Y axis data
1994 5
            $axisYData = array_values($series->getValues());
1995
1996
            // c:yVal
1997 5
            $objWriter->startElement('c:yVal');
1998 5
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1999 5
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
2000 5
            $objWriter->endElement();
2001
2002
            // c:smooth
2003 5
            $objWriter->startElement('c:smooth');
2004 5
            $objWriter->writeAttribute('val', '0');
2005 5
            $objWriter->endElement();
2006
2007 5
            $objWriter->endElement();
2008
2009 5
            ++$seriesIndex;
2010 5
        }
2011
2012
        // c:axId
2013 5
        $objWriter->startElement('c:axId');
2014 5
        $objWriter->writeAttribute('val', '52743552');
2015 5
        $objWriter->endElement();
2016
2017
        // c:axId
2018 5
        $objWriter->startElement('c:axId');
2019 5
        $objWriter->writeAttribute('val', '52749440');
2020 5
        $objWriter->endElement();
2021
2022 5
        $objWriter->endElement();
2023 5
    }
2024
    /**
2025
     * Write chart relationships to XML format
2026
     *
2027
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $pChart
2028
     * @return string                    XML Output
2029
     * @throws \Exception
2030
     */
2031
    public function writeChartRelationships(Chart $pChart)
2032
    {
2033
        // Create XML writer
2034
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
2035
2036
        // XML header
2037
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
2038
2039
        // Relationships
2040
        $objWriter->startElement('Relationships');
2041
        $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
2042
2043
        // Write spreadsheet relationship?
2044
        if ($pChart->hasIncludedSpreadsheet()) {
2045
            $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package', '../embeddings/' . $pChart->getIndexedFilename() . '.xlsx');
2046
        }
2047
2048
        $objWriter->endElement();
2049
2050
        // Return
2051
        return $objWriter->getData();
2052
    }
2053
2054
    /**
2055
     * @param XMLWriter $objWriter
2056
     * @param Chart\Marker $oMarker
2057
     */
2058 11
    protected function writeSeriesMarker(XMLWriter $objWriter, Chart\Marker $oMarker)
2059
    {
2060 11
        if ($oMarker->getSymbol() != Chart\Marker::SYMBOL_NONE) {
2061 2
            $markerSize = (int)$oMarker->getSize();
2062 2
            if ($markerSize < 2) {
2063 2
                $markerSize = 2;
2064 2
            }
2065 2
            if ($markerSize > 72) {
2066 2
                $markerSize = 72;
2067 2
            }
2068
2069
            // c:marker
2070 2
            $objWriter->startElement('c:marker');
2071
2072
            // c:marker > c:symbol
2073 2
            $objWriter->startElement('c:symbol');
2074 2
            $objWriter->writeAttribute('val', $oMarker->getSymbol());
2075 2
            $objWriter->endElement();
2076
            /**
2077
             * c:marker > c:size
2078
             * Size in points
2079
             * @link : https://msdn.microsoft.com/en-us/library/hh658135(v=office.12).aspx
2080
             */
2081 2
            $objWriter->startElement('c:size');
2082 2
            $objWriter->writeAttribute('val', $markerSize);
2083 2
            $objWriter->endElement();
2084
2085 2
            $objWriter->endElement();
2086 2
        }
2087 11
    }
2088
2089
    /**
2090
     * @param XMLWriter $objWriter
2091
     * @param Chart\Axis $oAxis
2092
     * @param $typeAxis
2093
     */
2094 19
    protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, $typeAxis)
2095
    {
2096 19
        if ($typeAxis != Chart\Axis::AXIS_X && $typeAxis != Chart\Axis::AXIS_Y) {
2097
            return;
2098
        }
2099
2100
        switch ($typeAxis) {
2101 19
            case Chart\Axis::AXIS_X:
2102 19
                $mainElement = 'c:catAx';
2103 19
                $axIdVal = '52743552';
2104 19
                $axPosVal = 'b';
2105 19
                $crossAxVal = '52749440';
2106 19
                break;
2107 19
            case Chart\Axis::AXIS_Y:
2108 19
                $mainElement = 'c:valAx';
2109 19
                $axIdVal = '52749440';
2110 19
                $axPosVal = 'l';
2111 19
                $crossAxVal = '52743552';
2112 19
                break;
2113
        }
2114
2115
        // $mainElement
2116 19
        $objWriter->startElement($mainElement);
0 ignored issues
show
Bug introduced by
The variable $mainElement does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
2117
2118
        // $mainElement > c:axId
2119 19
        $objWriter->startElement('c:axId');
2120 19
        $objWriter->writeAttribute('val', $axIdVal);
0 ignored issues
show
Bug introduced by
The variable $axIdVal does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
2121 19
        $objWriter->endElement();
2122
2123
        // $mainElement > c:scaling
2124 19
        $objWriter->startElement('c:scaling');
2125
2126
        // $mainElement > c:scaling > c:orientation
2127 19
        $objWriter->startElement('c:orientation');
2128 19
        $objWriter->writeAttribute('val', 'minMax');
2129 19
        $objWriter->endElement();
2130
2131
        // $mainElement > ##c:scaling
2132 19
        $objWriter->endElement();
2133
2134
        // $mainElement > c:axPos
2135 19
        $objWriter->startElement('c:axPos');
2136 19
        $objWriter->writeAttribute('val', $axPosVal);
0 ignored issues
show
Bug introduced by
The variable $axPosVal does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
2137 19
        $objWriter->endElement();
2138
2139 19
        $oMajorGridlines = $oAxis->getMajorGridlines();
2140 19
        if ($oMajorGridlines instanceof Gridlines) {
2141 1
            $objWriter->startElement('c:majorGridlines');
2142
2143 1
            $this->writeAxisGridlines($objWriter, $oMajorGridlines);
2144
2145 1
            $objWriter->endElement();
2146 1
        }
2147
2148 19
        $oMinorGridlines = $oAxis->getMinorGridlines();
2149 19
        if ($oMinorGridlines instanceof Gridlines) {
2150 1
            $objWriter->startElement('c:minorGridlines');
2151
2152 1
            $this->writeAxisGridlines($objWriter, $oMinorGridlines);
2153
2154 1
            $objWriter->endElement();
2155 1
        }
2156
2157
        // c:numFmt
2158 19
        $objWriter->startElement('c:numFmt');
2159 19
        $objWriter->writeAttribute('formatCode', $oAxis->getFormatCode());
2160 19
        $objWriter->writeAttribute('sourceLinked', '0');
2161 19
        $objWriter->endElement();
2162
2163
        // c:majorTickMark
2164 19
        $objWriter->startElement('c:majorTickMark');
2165 19
        $objWriter->writeAttribute('val', 'none');
2166 19
        $objWriter->endElement();
2167
2168
        // c:tickLblPos
2169 19
        $objWriter->startElement('c:tickLblPos');
2170 19
        $objWriter->writeAttribute('val', 'nextTo');
2171 19
        $objWriter->endElement();
2172
2173
        // c:txPr
2174 19
        $objWriter->startElement('c:txPr');
2175
2176
        // a:bodyPr
2177 19
        $objWriter->writeElement('a:bodyPr', null);
2178
2179
        // a:lstStyle
2180 19
        $objWriter->writeElement('a:lstStyle', null);
2181
2182
        // a:p
2183 19
        $objWriter->startElement('a:p');
2184
2185
        // a:pPr
2186 19
        $objWriter->startElement('a:pPr');
2187
2188
        // a:defRPr
2189 19
        $objWriter->startElement('a:defRPr');
2190
2191 19
        $objWriter->writeAttribute('b', ($oAxis->getFont()->isBold() ? 'true' : 'false'));
2192 19
        $objWriter->writeAttribute('i', ($oAxis->getFont()->isItalic() ? 'true' : 'false'));
2193 19
        $objWriter->writeAttribute('strike', ($oAxis->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
2194 19
        $objWriter->writeAttribute('sz', ($oAxis->getFont()->getSize() * 100));
2195 19
        $objWriter->writeAttribute('u', $oAxis->getFont()->getUnderline());
2196
2197 19
        if ($oAxis->getFont()->isSuperScript() || $oAxis->getFont()->isSubScript()) {
2198
            if ($oAxis->getFont()->isSuperScript()) {
2199
                $objWriter->writeAttribute('baseline', '30000');
2200
            } elseif ($oAxis->getFont()->isSubScript()) {
2201
                $objWriter->writeAttribute('baseline', '-25000');
2202
            }
2203
        }
2204
2205
        // Font - a:solidFill
2206 19
        $objWriter->startElement('a:solidFill');
2207
2208
        // a:srgbClr
2209 19
        $objWriter->startElement('a:srgbClr');
2210 19
        $objWriter->writeAttribute('val', $oAxis->getFont()->getColor()->getRGB());
2211 19
        $objWriter->endElement();
2212
2213 19
        $objWriter->endElement();
2214
2215
        // Font - a:latin
2216 19
        $objWriter->startElement('a:latin');
2217 19
        $objWriter->writeAttribute('typeface', $oAxis->getFont()->getName());
2218 19
        $objWriter->endElement();
2219
2220 19
        $objWriter->endElement();
2221
2222
        // ## a:pPr
2223 19
        $objWriter->endElement();
2224
2225
        // a:r
2226 19
        $objWriter->startElement('a:r');
2227
2228
        // a:rPr
2229 19
        $objWriter->startElement('a:rPr');
2230 19
        $objWriter->writeAttribute('lang', 'en-US');
2231 19
        $objWriter->writeAttribute('dirty', '0');
2232 19
        $objWriter->endElement();
2233
2234
        // a:t
2235 19
        $objWriter->writeElement('a:t', $oAxis->getTitle());
2236
2237
        // ## a:r
2238 19
        $objWriter->endElement();
2239
2240
        // a:endParaRPr
2241 19
        $objWriter->startElement('a:endParaRPr');
2242 19
        $objWriter->writeAttribute('lang', 'en-US');
2243 19
        $objWriter->writeAttribute('dirty', '0');
2244 19
        $objWriter->endElement();
2245
2246
        // ## a:p
2247 19
        $objWriter->endElement();
2248
2249
        // ## c:txPr
2250 19
        $objWriter->endElement();
2251
2252
        // c:crossAx
2253 19
        $objWriter->startElement('c:crossAx');
2254 19
        $objWriter->writeAttribute('val', $crossAxVal);
0 ignored issues
show
Bug introduced by
The variable $crossAxVal does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
2255 19
        $objWriter->endElement();
2256
2257
        // c:crosses
2258 19
        $objWriter->startElement('c:crosses');
2259 19
        $objWriter->writeAttribute('val', 'autoZero');
2260 19
        $objWriter->endElement();
2261
2262 19
        if ($typeAxis == Chart\Axis::AXIS_X) {
2263
            // c:lblAlgn
2264 19
            $objWriter->startElement('c:lblAlgn');
2265 19
            $objWriter->writeAttribute('val', 'ctr');
2266 19
            $objWriter->endElement();
2267
2268
            // c:lblOffset
2269 19
            $objWriter->startElement('c:lblOffset');
2270 19
            $objWriter->writeAttribute('val', '100');
2271 19
            $objWriter->endElement();
2272 19
        }
2273
2274 19
        if ($typeAxis == Chart\Axis::AXIS_Y) {
2275
            // c:crossBetween
2276 19
            $objWriter->startElement('c:crossBetween');
2277 19
            $objWriter->writeAttribute('val', 'between');
2278 19
            $objWriter->endElement();
2279 19
        }
2280
2281 19
        $objWriter->endElement();
2282 19
    }
2283
2284
    /**
2285
     * @param XMLWriter $objWriter
2286
     * @param Gridlines $oGridlines
2287
     */
2288 1
    protected function writeAxisGridlines(XMLWriter $objWriter, Gridlines $oGridlines)
2289
    {
2290
        // c:spPr
2291 1
        $objWriter->startElement('c:spPr');
2292
2293
        // Outline
2294 1
        $this->writeOutline($objWriter, $oGridlines->getOutline());
2295
2296
        // ##c:spPr
2297 1
        $objWriter->endElement();
2298 1
    }
2299
}
2300