Completed
Pull Request — develop (#186)
by
unknown
07:55
created

PptCharts::writeTypeBar()   F

Complexity

Conditions 23
Paths 579

Size

Total Lines 216
Code Lines 111

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 99
CRAP Score 23

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 216
ccs 99
cts 99
cp 1
rs 2.3845
cc 23
eloc 111
nc 579
nop 3
crap 23

How to fix   Long Method    Complexity   

Long Method

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

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

Commonly applied refactorings include:

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