Completed
Pull Request — develop (#216)
by Franck
07:08
created

PptCharts::writeMultipleValuesOrReference()   B

Complexity

Conditions 7
Paths 12

Size

Total Lines 52
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 7

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 52
ccs 18
cts 18
cp 1
rs 7.2396
cc 7
eloc 29
nc 12
nop 4
crap 7

How to fix   Long Method   

Long Method

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

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

Commonly applied refactorings include:

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