Completed
Pull Request — develop (#208)
by Franck
07:39
created

PptCharts::writeTypePie()   D

Complexity

Conditions 13
Paths 9

Size

Total Lines 151
Code Lines 73

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 74
CRAP Score 13

Importance

Changes 3
Bugs 0 Features 1
Metric Value
c 3
b 0
f 1
dl 0
loc 151
ccs 74
cts 74
cp 1
rs 4.9922
cc 13
eloc 73
nc 9
nop 3
crap 13

How to fix   Long Method    Complexity   

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