Completed
Pull Request — develop (#437)
by
unknown
06:03
created

PptCharts::writeMultipleValuesOrReference()   B

Complexity

Conditions 7
Paths 12

Size

Total Lines 52
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 9.6738

Importance

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

How to fix   Long Method   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
3
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
4
5
use PhpOffice\Common\Drawing as CommonDrawing;
6
use PhpOffice\Common\XMLWriter;
7
use PhpOffice\PhpPresentation\PhpPresentation;
8
use PhpOffice\PhpPresentation\Shape\Chart;
9
use PhpOffice\PhpPresentation\Shape\Chart\Gridlines;
10
use PhpOffice\PhpPresentation\Shape\Chart\Legend;
11
use PhpOffice\PhpPresentation\Shape\Chart\PlotArea;
12
use PhpOffice\PhpPresentation\Shape\Chart\Title;
13
use PhpOffice\PhpPresentation\Shape\Chart\Type\Area;
14
use PhpOffice\PhpPresentation\Shape\Chart\Type\Bar;
15
use PhpOffice\PhpPresentation\Shape\Chart\Type\Bar3D;
16
use PhpOffice\PhpPresentation\Shape\Chart\Type\Doughnut;
17
use PhpOffice\PhpPresentation\Shape\Chart\Type\Line;
18
use PhpOffice\PhpPresentation\Shape\Chart\Type\Pie;
19
use PhpOffice\PhpPresentation\Shape\Chart\Type\Pie3D;
20
use PhpOffice\PhpPresentation\Shape\Chart\Type\Scatter;
21
use PhpOffice\PhpPresentation\Style\Border;
22
use PhpOffice\PhpPresentation\Style\Fill;
23
24
class PptCharts extends AbstractDecoratorWriter
25
{
26
    /**
27
     * @return \PhpOffice\Common\Adapter\Zip\ZipInterface
28
     * @throws \Exception
29
     */
30 115
    public function render()
31
    {
32 115
        for ($i = 0; $i < $this->getDrawingHashTable()->count(); ++$i) {
33 45
            $shape = $this->getDrawingHashTable()->getByIndex($i);
34 45
            if ($shape instanceof Chart) {
35 36
                $this->getZip()->addFromString('ppt/charts/' . $shape->getIndexedFilename(), $this->writeChart($shape));
36
37 35
                if ($shape->hasIncludedSpreadsheet()) {
38
                    $this->getZip()->addFromString('ppt/charts/_rels/' . $shape->getIndexedFilename() . '.rels', $this->writeChartRelationships($shape));
39
                    $pFilename = tempnam(sys_get_temp_dir(), 'PHPExcel');
40
                    $this->getZip()->addFromString('ppt/embeddings/' . $shape->getIndexedFilename() . '.xlsx', $this->writeSpreadsheet($this->getPresentation(), $shape, $pFilename . '.xlsx'));
41
                    
42
                    // remove temp file
43
                    if (@unlink($pFilename) === false) {
44
                        throw new \Exception('The file ' . $pFilename . ' could not removed.');
45
                    }
46
                }
47
            }
48
        }
49 114
        return $this->getZip();
50
    }
51
    
52
    public function testTypeDoughnut(){
53
        
54
    }
55
56
57
    /**
58
     * Write chart to XML format
59
     *
60
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
61
     * @return string                    XML Output
62
     * @throws \Exception
63
     */
64 36
    public function writeChart(Chart $chart)
65
    {
66
        // Create XML writer
67 36
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
68
69
        // XML header
70 36
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
71
72
        // c:chartSpace
73 36
        $objWriter->startElement('c:chartSpace');
74 36
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
75 36
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
76 36
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
77
78
        // c:date1904
79 36
        $objWriter->startElement('c:date1904');
80 36
        $objWriter->writeAttribute('val', '1');
81 36
        $objWriter->endElement();
82
83
        // c:lang
84 36
        $objWriter->startElement('c:lang');
85 36
        $objWriter->writeAttribute('val', 'en-US');
86 36
        $objWriter->endElement();
87
88
        // c:chart
89 36
        $objWriter->startElement('c:chart');
90
91
        // Title?
92 36
        if ($chart->getTitle()->isVisible()) {
93
            // Write title
94 35
            $this->writeTitle($objWriter, $chart->getTitle());
95
        }
96
97
        // c:autoTitleDeleted
98 36
        $objWriter->startElement('c:autoTitleDeleted');
99 36
        $objWriter->writeAttribute('val', $chart->getTitle()->isVisible() ? '0' : '1');
100 36
        $objWriter->endElement();
101
102
        // c:view3D
103 36
        $objWriter->startElement('c:view3D');
104
105
        // c:rotX
106 36
        $objWriter->startElement('c:rotX');
107 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationX());
108 36
        $objWriter->endElement();
109
110
        // c:hPercent
111 36
        $hPercent = $chart->getView3D()->getHeightPercent();
112 36
        $objWriter->writeElementIf($hPercent != null, 'c:hPercent', 'val', $hPercent . '%');
113
114
        // c:rotY
115 36
        $objWriter->startElement('c:rotY');
116 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationY());
117 36
        $objWriter->endElement();
118
119
        // c:depthPercent
120 36
        $objWriter->startElement('c:depthPercent');
121 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getDepthPercent());
122 36
        $objWriter->endElement();
123
124
        // c:rAngAx
125 36
        $objWriter->startElement('c:rAngAx');
126 36
        $objWriter->writeAttribute('val', $chart->getView3D()->hasRightAngleAxes() ? '1' : '0');
127 36
        $objWriter->endElement();
128
129
        // c:perspective
130 36
        $objWriter->startElement('c:perspective');
131 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getPerspective());
132 36
        $objWriter->endElement();
133
134 36
        $objWriter->endElement();
135
136
        // Write plot area
137 36
        $this->writePlotArea($objWriter, $chart->getPlotArea(), $chart);
138
139
        // Legend?
140 35
        if ($chart->getLegend()->isVisible()) {
141
            // Write legend
142 35
            $this->writeLegend($objWriter, $chart->getLegend());
143
        }
144
145
        // c:plotVisOnly
146 35
        $objWriter->startElement('c:plotVisOnly');
147 35
        $objWriter->writeAttribute('val', '1');
148 35
        $objWriter->endElement();
149
150 35
        $objWriter->endElement();
151
152
        // c:spPr
153 35
        $objWriter->startElement('c:spPr');
154
155
        // Fill
156 35
        $this->writeFill($objWriter, $chart->getFill());
157
158
        // Border
159 35
        if ($chart->getBorder()->getLineStyle() != Border::LINE_NONE) {
160 1
            $this->writeBorder($objWriter, $chart->getBorder(), '');
161
        }
162
163
        // Shadow
164 35
        if ($chart->getShadow()->isVisible()) {
165
            // a:effectLst
166 1
            $objWriter->startElement('a:effectLst');
167
168
            // a:outerShdw
169 1
            $objWriter->startElement('a:outerShdw');
170 1
            $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($chart->getShadow()->getBlurRadius()));
171 1
            $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($chart->getShadow()->getDistance()));
172 1
            $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($chart->getShadow()->getDirection()));
173 1
            $objWriter->writeAttribute('algn', $chart->getShadow()->getAlignment());
174 1
            $objWriter->writeAttribute('rotWithShape', '0');
175
176 1
            $this->writeColor($objWriter, $chart->getShadow()->getColor(), $chart->getShadow()->getAlpha());
177
178 1
            $objWriter->endElement();
179
180 1
            $objWriter->endElement();
181
        }
182
183 35
        $objWriter->endElement();
184
185
        // External data?
186 35
        if ($chart->hasIncludedSpreadsheet()) {
187
            // c:externalData
188
            $objWriter->startElement('c:externalData');
189
            $objWriter->writeAttribute('r:id', 'rId1');
190
191
            // c:autoUpdate
192
            $objWriter->startElement('c:autoUpdate');
193
            $objWriter->writeAttribute('val', '0');
194
            $objWriter->endElement();
195
196
            $objWriter->endElement();
197
        }
198
199 35
        $objWriter->endElement();
200
201
        // Return
202 35
        return $objWriter->getData();
203
    }
204
205
    /**
206
     * Write chart to XML format
207
     *
208
     * @param  PhpPresentation $presentation
209
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
210
     * @param  string $tempName
211
     * @return string                    String output
212
     * @throws \Exception
213
     */
214
    public function writeSpreadsheet(PhpPresentation $presentation, $chart, $tempName)
215
    {
216
        // Need output?
217
        if (!$chart->hasIncludedSpreadsheet()) {
218
            throw new \Exception('No spreadsheet output is required for the given chart.');
219
        }
220
221
        // Verify PHPExcel
222
        if (!class_exists('PHPExcel')) {
223
            throw new \Exception('PHPExcel has not been loaded. Include PHPExcel.php in your script, e.g. require_once \'PHPExcel.php\'.');
224
        }
225
226
        // Create new spreadsheet
227
        $workbook = new \PHPExcel();
228
229
        // Set properties
230
        $title = $chart->getTitle()->getText();
231
        if (strlen($title) == 0) {
232
            $title = 'Chart';
233
        }
234
        $workbook->getProperties()->setCreator($presentation->getDocumentProperties()->getCreator())->setLastModifiedBy($presentation->getDocumentProperties()->getLastModifiedBy())->setTitle($title);
235
236
        // Add chart data
237
        $sheet = $workbook->setActiveSheetIndex(0);
238
        $sheet->setTitle('Sheet1');
239
240
        // Write series
241
        $seriesIndex = 0;
242
        foreach ($chart->getPlotArea()->getType()->getSeries() as $series) {
243
            // Title
244
            $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, 1, $series->getTitle());
245
246
            // X-axis
247
            $axisXData = array_keys($series->getValues());
248
            $numAxisXData = count($axisXData);
249
            for ($i = 0; $i < $numAxisXData; $i++) {
250
                $sheet->setCellValueByColumnAndRow(0, $i + 2, $axisXData[$i]);
251
            }
252
253
            // Y-axis
254
            $axisYData = array_values($series->getValues());
255
            $numAxisYData = count($axisYData);
256
            for ($i = 0; $i < $numAxisYData; $i++) {
257
                $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, $i + 2, $axisYData[$i]);
258
            }
259
260
            ++$seriesIndex;
261
        }
262
263
        // Save to string
264
        $writer = \PHPExcel_IOFactory::createWriter($workbook, 'Excel2007');
265
        $writer->save($tempName);
266
267
        // Load file in memory
268
        $returnValue = file_get_contents($tempName);
269
        if (@unlink($tempName) === false) {
270
            throw new \Exception('The file ' . $tempName . ' could not removed.');
271
        }
272
273
        return $returnValue;
274
    }
275
276
    /**
277
     * Write element with value attribute
278
     *
279
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
280
     * @param string $elementName
281
     * @param string $value
282
     */
283 31
    protected function writeElementWithValAttribute($objWriter, $elementName, $value)
284
    {
285 31
        $objWriter->startElement($elementName);
286 31
        $objWriter->writeAttribute('val', $value);
287 31
        $objWriter->endElement();
288 31
    }
289
290
    /**
291
     * Write single value or reference
292
     *
293
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
294
     * @param boolean $isReference
295
     * @param mixed $value
296
     * @param string $reference
297
     */
298 31
    protected function writeSingleValueOrReference($objWriter, $isReference, $value, $reference)
299
    {
300 31
        if (!$isReference) {
301
            // Value
302 31
            $objWriter->writeElement('c:v', $value);
303 31
            return;
304
        }
305
306
        // Reference and cache
307
        $objWriter->startElement('c:strRef');
308
        $objWriter->writeElement('c:f', $reference);
309
        $objWriter->startElement('c:strCache');
310
        $objWriter->startElement('c:ptCount');
311
        $objWriter->writeAttribute('val', '1');
312
        $objWriter->endElement();
313
314
        $objWriter->startElement('c:pt');
315
        $objWriter->writeAttribute('idx', '0');
316
        $objWriter->writeElement('c:v', $value);
317
        $objWriter->endElement();
318
        $objWriter->endElement();
319
        $objWriter->endElement();
320
    }
321
322
    /**
323
     * Write series value or reference
324
     *
325
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
326
     * @param boolean $isReference
327
     * @param mixed $values
328
     * @param string $reference
329
     */
330 31
    protected function writeMultipleValuesOrReference($objWriter, $isReference, $values, $reference)
331
    {
332
        // c:strLit / c:numLit
333
        // c:strRef / c:numRef
334 31
        $referenceType = ($isReference ? 'Ref' : 'Lit');
335 31
        $dataType = 'str';
336 31
        if (is_int($values[0]) || is_float($values[0])) {
337 31
            $dataType = 'num';
338
        }
339 31
        $objWriter->startElement('c:' . $dataType . $referenceType);
340
341 31
        $numValues = count($values);
342 31
        if (!$isReference) {
343
            // Value
344
345
            // c:ptCount
346 31
            $objWriter->startElement('c:ptCount');
347 31
            $objWriter->writeAttribute('val', count($values));
348 31
            $objWriter->endElement();
349
350
            // Add points
351 31
            for ($i = 0; $i < $numValues; $i++) {
352
                // c:pt
353 31
                $objWriter->startElement('c:pt');
354 31
                $objWriter->writeAttribute('idx', $i);
355 31
                $objWriter->writeElement('c:v', $values[$i]);
356 31
                $objWriter->endElement();
357
            }
358
        } else {
359
            // Reference
360
            $objWriter->writeElement('c:f', $reference);
361
            $objWriter->startElement('c:' . $dataType . 'Cache');
362
363
            // c:ptCount
364
            $objWriter->startElement('c:ptCount');
365
            $objWriter->writeAttribute('val', count($values));
366
            $objWriter->endElement();
367
368
            // Add points
369
            for ($i = 0; $i < $numValues; $i++) {
370
                // c:pt
371
                $objWriter->startElement('c:pt');
372
                $objWriter->writeAttribute('idx', $i);
373
                $objWriter->writeElement('c:v', $values[$i]);
374
                $objWriter->endElement();
375
            }
376
377
            $objWriter->endElement();
378
        }
379
380 31
        $objWriter->endElement();
381 31
    }
382
383
    /**
384
     * Write Title
385
     *
386
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
387
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Title $subject
388
     * @throws \Exception
389
     */
390 35
    protected function writeTitle(XMLWriter $objWriter, Title $subject)
391
    {
392
        // c:title
393 35
        $objWriter->startElement('c:title');
394
395
        // c:tx
396 35
        $objWriter->startElement('c:tx');
397
398
        // c:rich
399 35
        $objWriter->startElement('c:rich');
400
401
        // a:bodyPr
402 35
        $objWriter->writeElement('a:bodyPr', null);
403
404
        // a:lstStyle
405 35
        $objWriter->writeElement('a:lstStyle', null);
406
407
        // a:p
408 35
        $objWriter->startElement('a:p');
409
410
        // a:pPr
411 35
        $objWriter->startElement('a:pPr');
412 35
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
413 35
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
414 35
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
415 35
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
416 35
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
417 35
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
418
419
        // a:defRPr
420 35
        $objWriter->writeElement('a:defRPr', null);
421
422 35
        $objWriter->endElement();
423
424
        // a:r
425 35
        $objWriter->startElement('a:r');
426
427
        // a:rPr
428 35
        $objWriter->startElement('a:rPr');
429 35
        $objWriter->writeAttribute('lang', 'en-US');
430 35
        $objWriter->writeAttribute('dirty', '0');
431
432 35
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
433 35
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
434 35
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
435 35
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
436 35
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
437 35
        $objWriter->writeAttributeIf($subject->getFont()->isSuperScript(), 'baseline', '30000');
438 35
        $objWriter->writeAttributeIf($subject->getFont()->isSubScript(), 'baseline', '-25000');
439
440
        // Font - a:solidFill
441 35
        $objWriter->startElement('a:solidFill');
442
443 35
        $this->writeColor($objWriter, $subject->getFont()->getColor());
444
445 35
        $objWriter->endElement();
446
447
        // Font - a:latin
448 35
        $objWriter->startElement('a:latin');
449 35
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
450 35
        $objWriter->endElement();
451
452 35
        $objWriter->endElement();
453
454
        // a:t
455 35
        $objWriter->writeElement('a:t', $subject->getText());
456
457 35
        $objWriter->endElement();
458
459
        // a:endParaRPr
460 35
        $objWriter->startElement('a:endParaRPr');
461 35
        $objWriter->writeAttribute('lang', 'en-US');
462 35
        $objWriter->writeAttribute('dirty', '0');
463 35
        $objWriter->endElement();
464
465 35
        $objWriter->endElement();
466
467 35
        $objWriter->endElement();
468
469 35
        $objWriter->endElement();
470
471
        // Write layout
472 35
        $this->writeLayout($objWriter, $subject);
473
474
        // c:overlay
475 35
        $objWriter->startElement('c:overlay');
476 35
        $objWriter->writeAttribute('val', '0');
477 35
        $objWriter->endElement();
478
479 35
        $objWriter->endElement();
480 35
    }
481
482
    /**
483
     * Write Plot Area
484
     *
485
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
486
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\PlotArea $subject
487
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
488
     * @throws \Exception
489
     */
490 36
    protected function writePlotArea(XMLWriter $objWriter, PlotArea $subject, Chart $chart)
491
    {
492
        // c:plotArea
493 36
        $objWriter->startElement('c:plotArea');
494
495
        // Write layout
496 36
        $this->writeLayout($objWriter, $subject);
497
498
        // Write chart
499 36
        $chartType = $subject->getType();
500 36
        if ($chartType instanceof Area) {
501 1
            $this->writeTypeArea($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
502 35
        } elseif ($chartType instanceof Bar) {
503 3
            $this->writeTypeBar($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
504 32
        } elseif ($chartType instanceof Bar3D) {
505 4
            $this->writeTypeBar3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
506 28
        } elseif ($chartType instanceof Doughnut) {
507 1
            $this->writeTypeDoughnut($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
508 27
        } elseif ($chartType instanceof Pie) {
509 2
            $this->writeTypePie($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
510 25
        } elseif ($chartType instanceof Pie3D) {
511 4
            $this->writeTypePie3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
512 21
        } elseif ($chartType instanceof Line) {
513 15
            $this->writeTypeLine($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
514 6
        } elseif ($chartType instanceof Scatter) {
515 5
            $this->writeTypeScatter($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
516
        } else {
517 1
            throw new \Exception('The chart type provided could not be rendered.');
518
        }
519
520
        // Write X axis?
521 35
        if ($chartType->hasAxisX()) {
522 28
            $this->writeAxis($objWriter, $subject->getAxisX(), Chart\Axis::AXIS_X, $chartType);
523
        }
524
525
        // Write Y axis?
526 35
        if ($chartType->hasAxisY()) {
527 28
            $this->writeAxis($objWriter, $subject->getAxisY(), Chart\Axis::AXIS_Y, $chartType);
528
        }
529
530 35
        $objWriter->endElement();
531 35
    }
532
533
    /**
534
     * Write Legend
535
     *
536
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
537
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Legend $subject
538
     * @throws \Exception
539
     */
540 35
    protected function writeLegend(XMLWriter $objWriter, Legend $subject)
541
    {
542
        // c:legend
543 35
        $objWriter->startElement('c:legend');
544
545
        // c:legendPos
546 35
        $objWriter->startElement('c:legendPos');
547 35
        $objWriter->writeAttribute('val', $subject->getPosition());
548 35
        $objWriter->endElement();
549
550
        // Write layout
551 35
        $this->writeLayout($objWriter, $subject);
552
553
        // c:overlay
554 35
        $objWriter->startElement('c:overlay');
555 35
        $objWriter->writeAttribute('val', '0');
556 35
        $objWriter->endElement();
557
558
        // c:spPr
559 35
        $objWriter->startElement('c:spPr');
560
561
        // Fill
562 35
        $this->writeFill($objWriter, $subject->getFill());
563
564
        // Border
565 35
        if ($subject->getBorder()->getLineStyle() != Border::LINE_NONE) {
566 35
            $this->writeBorder($objWriter, $subject->getBorder(), '');
567
        }
568
569 35
        $objWriter->endElement();
570
571
        // c:txPr
572 35
        $objWriter->startElement('c:txPr');
573
574
        // a:bodyPr
575 35
        $objWriter->writeElement('a:bodyPr', null);
576
577
        // a:lstStyle
578 35
        $objWriter->writeElement('a:lstStyle', null);
579
580
        // a:p
581 35
        $objWriter->startElement('a:p');
582
583
        // a:pPr
584 35
        $objWriter->startElement('a:pPr');
585 35
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
586 35
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
587 35
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
588 35
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
589 35
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
590 35
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
591
592
        // a:defRPr
593 35
        $objWriter->startElement('a:defRPr');
594
595 35
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
596 35
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
597 35
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
598 35
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
599 35
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
600 35
        $objWriter->writeAttributeIf($subject->getFont()->isSuperScript(), 'baseline', '30000');
601 35
        $objWriter->writeAttributeIf($subject->getFont()->isSubScript(), 'baseline', '-25000');
602
603
        // Font - a:solidFill
604 35
        $objWriter->startElement('a:solidFill');
605
606 35
        $this->writeColor($objWriter, $subject->getFont()->getColor());
607
608 35
        $objWriter->endElement();
609
610
        // Font - a:latin
611 35
        $objWriter->startElement('a:latin');
612 35
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
613 35
        $objWriter->endElement();
614
615 35
        $objWriter->endElement();
616
617 35
        $objWriter->endElement();
618
619
        // a:endParaRPr
620 35
        $objWriter->startElement('a:endParaRPr');
621 35
        $objWriter->writeAttribute('lang', 'en-US');
622 35
        $objWriter->writeAttribute('dirty', '0');
623 35
        $objWriter->endElement();
624
625 35
        $objWriter->endElement();
626
627 35
        $objWriter->endElement();
628
629 35
        $objWriter->endElement();
630 35
    }
631
632
    /**
633
     * Write Layout
634
     *
635
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
636
     * @param  mixed $subject
637
     * @throws \Exception
638
     */
639 36
    protected function writeLayout(XMLWriter $objWriter, $subject)
640
    {
641
        // c:layout
642 36
        $objWriter->startElement('c:layout');
643
644
        // c:manualLayout
645 36
        $objWriter->startElement('c:manualLayout');
646
        // c:xMode
647 36
        $objWriter->startElement('c:xMode');
648 36
        $objWriter->writeAttribute('val', 'edge');
649 36
        $objWriter->endElement();
650
651
        // c:yMode
652 36
        $objWriter->startElement('c:yMode');
653 36
        $objWriter->writeAttribute('val', 'edge');
654 36
        $objWriter->endElement();
655
656 36
        if ($subject->getOffsetX() != 0) {
657
            // c:x
658 35
            $objWriter->startElement('c:x');
659 35
            $objWriter->writeAttribute('val', $subject->getOffsetX());
660 35
            $objWriter->endElement();
661
        }
662
663 36
        if ($subject->getOffsetY() != 0) {
664
            // c:y
665 35
            $objWriter->startElement('c:y');
666 35
            $objWriter->writeAttribute('val', $subject->getOffsetY());
667 35
            $objWriter->endElement();
668
        }
669
670 36
        if ($subject->getWidth() != 0) {
671
            // c:w
672
            $objWriter->startElement('c:w');
673
            $objWriter->writeAttribute('val', $subject->getWidth());
674
            $objWriter->endElement();
675
        }
676
677 36
        if ($subject->getHeight() != 0) {
678
            // c:h
679
            $objWriter->startElement('c:h');
680
            $objWriter->writeAttribute('val', $subject->getHeight());
681
            $objWriter->endElement();
682
        }
683
684 36
        $objWriter->endElement();
685 36
        $objWriter->endElement();
686 36
    }
687
688
    /**
689
     * Write Type Area
690
     *
691
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
692
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Area $subject
693
     * @param  boolean $includeSheet
694
     * @throws \Exception
695
     */
696 1
    protected function writeTypeArea(XMLWriter $objWriter, Area $subject, $includeSheet = false)
697
    {
698
        // c:lineChart
699 1
        $objWriter->startElement('c:areaChart');
700
701
        // c:grouping
702 1
        $objWriter->startElement('c:grouping');
703 1
        $objWriter->writeAttribute('val', 'standard');
704 1
        $objWriter->endElement();
705
706
        // Write series
707 1
        $seriesIndex = 0;
708 1
        foreach ($subject->getSeries() as $series) {
709
            // c:ser
710 1
            $objWriter->startElement('c:ser');
711
712
            // c:ser > c:idx
713 1
            $objWriter->startElement('c:idx');
714 1
            $objWriter->writeAttribute('val', $seriesIndex);
715 1
            $objWriter->endElement();
716
717
            // c:ser > c:order
718 1
            $objWriter->startElement('c:order');
719 1
            $objWriter->writeAttribute('val', $seriesIndex);
720 1
            $objWriter->endElement();
721
722
            // c:ser > c:tx
723 1
            $objWriter->startElement('c:tx');
724 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
725 1
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
726 1
            $objWriter->endElement();
727
728
            // c:ser > c:dLbls
729
            // @link : https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.areachartseries.aspx
730 1
            $objWriter->startElement('c:dLbls');
731
732
            // c:ser > c:dLbls > c:showVal
733 1
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
734
735
            // c:ser > c:dLbls > c:showCatName
736 1
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
737
738
            // c:ser > c:dLbls > c:showSerName
739 1
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
740
741
            // c:ser > c:dLbls > c:showPercent
742 1
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
743
744
            // c:ser > ##c:dLbls
745 1
            $objWriter->endElement();
746
747 1
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
748
                // c:spPr
749
                $objWriter->startElement('c:spPr');
750
                // Write fill
751
                $this->writeFill($objWriter, $series->getFill());
752
                // ## c:spPr
753
                $objWriter->endElement();
754
            }
755
756
            // Write X axis data
757 1
            $axisXData = array_keys($series->getValues());
758
759
            // c:cat
760 1
            $objWriter->startElement('c:cat');
761 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
762 1
            $objWriter->endElement();
763
764
            // Write Y axis data
765 1
            $axisYData = array_values($series->getValues());
766
767
            // c:val
768 1
            $objWriter->startElement('c:val');
769 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
770 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
771 1
            $objWriter->endElement();
772
773 1
            $objWriter->endElement();
774
775 1
            ++$seriesIndex;
776
        }
777
778
        // c:axId
779 1
        $objWriter->startElement('c:axId');
780 1
        $objWriter->writeAttribute('val', '52743552');
781 1
        $objWriter->endElement();
782
783
        // c:axId
784 1
        $objWriter->startElement('c:axId');
785 1
        $objWriter->writeAttribute('val', '52749440');
786 1
        $objWriter->endElement();
787
788 1
        $objWriter->endElement();
789 1
    }
790
791
    /**
792
     * Write Type Bar
793
     *
794
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
795
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar $subject
796
     * @param  boolean $includeSheet
797
     * @throws \Exception
798
     */
799 3
    protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, $includeSheet = false)
800
    {
801
        // c:bar3DChart
802 3
        $objWriter->startElement('c:barChart');
803
804
        // c:barDir
805 3
        $objWriter->startElement('c:barDir');
806 3
        $objWriter->writeAttribute('val', $subject->getBarDirection());
807 3
        $objWriter->endElement();
808
809
        // c:grouping
810 3
        $objWriter->startElement('c:grouping');
811 3
        $objWriter->writeAttribute('val', $subject->getBarGrouping());
812 3
        $objWriter->endElement();
813
814
        // Write series
815 3
        $seriesIndex = 0;
816 3
        foreach ($subject->getSeries() as $series) {
817
            // c:ser
818 3
            $objWriter->startElement('c:ser');
819
820
            // c:idx
821 3
            $objWriter->startElement('c:idx');
822 3
            $objWriter->writeAttribute('val', $seriesIndex);
823 3
            $objWriter->endElement();
824
825
            // c:order
826 3
            $objWriter->startElement('c:order');
827 3
            $objWriter->writeAttribute('val', $seriesIndex);
828 3
            $objWriter->endElement();
829
830
            // c:tx
831 3
            $objWriter->startElement('c:tx');
832 3
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
833 3
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
834 3
            $objWriter->endElement();
835
836
            // Fills for points?
837 3
            $dataPointFills = $series->getDataPointFills();
838 3
            foreach ($dataPointFills as $key => $value) {
839
                // c:dPt
840 1
                $objWriter->startElement('c:dPt');
841
842
                // c:idx
843 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
844
845 1
                if ($value->getFillType() != Fill::FILL_NONE) {
846
                    // c:spPr
847 1
                    $objWriter->startElement('c:spPr');
848
                    // Write fill
849 1
                    $this->writeFill($objWriter, $value);
850
                    // ## c:spPr
851 1
                    $objWriter->endElement();
852
                }
853
854
                // ## c:dPt
855 1
                $objWriter->endElement();
856
            }
857
858
            // c:dLbls
859 3
            $objWriter->startElement('c:dLbls');
860
861 3
            if ($series->hasDlblNumFormat()) {
862
                //c:numFmt
863
                $objWriter->startElement('c:numFmt');
864
                $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
865
                $objWriter->writeAttribute('sourceLinked', '0');
866
                $objWriter->endElement();
867
            }
868
869
            // c:txPr
870 3
            $objWriter->startElement('c:txPr');
871
872
            // a:bodyPr
873 3
            $objWriter->writeElement('a:bodyPr', null);
874
875
            // a:lstStyle
876 3
            $objWriter->writeElement('a:lstStyle', null);
877
878
            // a:p
879 3
            $objWriter->startElement('a:p');
880
881
            // a:pPr
882 3
            $objWriter->startElement('a:pPr');
883
884
            // a:defRPr
885 3
            $objWriter->startElement('a:defRPr');
886
887 3
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
888 3
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
889 3
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
890 3
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
891 3
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
892 3
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
893 3
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
894
895
            // Font - a:solidFill
896 3
            $objWriter->startElement('a:solidFill');
897
898 3
            $this->writeColor($objWriter, $series->getFont()->getColor());
899
900 3
            $objWriter->endElement();
901
902
            // Font - a:latin
903 3
            $objWriter->startElement('a:latin');
904 3
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
905 3
            $objWriter->endElement();
906
907 3
            $objWriter->endElement();
908
909 3
            $objWriter->endElement();
910
911
            // a:endParaRPr
912 3
            $objWriter->startElement('a:endParaRPr');
913 3
            $objWriter->writeAttribute('lang', 'en-US');
914 3
            $objWriter->writeAttribute('dirty', '0');
915 3
            $objWriter->endElement();
916
917 3
            $objWriter->endElement();
918
919 3
            $objWriter->endElement();
920
921
            // c:dLblPos
922 3
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
923
924
            // c:showVal
925 3
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
926
927
            // c:showCatName
928 3
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
929
930
            // c:showSerName
931 3
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
932
933
            // c:showPercent
934 3
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
935
936
            // c:showLeaderLines
937 3
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
938
939
            // c:separator
940 3
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
941
942 3
            $objWriter->endElement();
943
944
            // c:spPr
945 3
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
946
                // c:spPr
947
                $objWriter->startElement('c:spPr');
948
                // Write fill
949
                $this->writeFill($objWriter, $series->getFill());
950
                // ## c:spPr
951
                $objWriter->endElement();
952
            }
953
954
            // Write X axis data
955 3
            $axisXData = array_keys($series->getValues());
956
957
            // c:cat
958 3
            $objWriter->startElement('c:cat');
959 3
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
960 3
            $objWriter->endElement();
961
962
            // Write Y axis data
963 3
            $axisYData = array_values($series->getValues());
964
965
            // c:val
966 3
            $objWriter->startElement('c:val');
967 3
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
968 3
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
969 3
            $objWriter->endElement();
970
971 3
            $objWriter->endElement();
972
973 3
            ++$seriesIndex;
974
        }
975
976
        // c:overlap
977 3
        $objWriter->startElement('c:overlap');
978 3
        if ($subject->getBarGrouping() == Bar::GROUPING_CLUSTERED) {
979 3
            $objWriter->writeAttribute('val', '0');
980
        } elseif ($subject->getBarGrouping() == Bar::GROUPING_STACKED || $subject->getBarGrouping() == Bar::GROUPING_PERCENTSTACKED) {
981
            $objWriter->writeAttribute('val', '100');
982
        }
983 3
        $objWriter->endElement();
984
985
        // c:gapWidth
986 3
        $objWriter->startElement('c:gapWidth');
987 3
        $objWriter->writeAttribute('val', $subject->getGapWidthPercent());
988 3
        $objWriter->endElement();
989
990
        // c:shape
991 3
        $objWriter->startElement('c:shape');
992 3
        $objWriter->writeAttribute('val', 'box');
993 3
        $objWriter->endElement();
994
995
        // c:axId
996 3
        $objWriter->startElement('c:axId');
997 3
        $objWriter->writeAttribute('val', '52743552');
998 3
        $objWriter->endElement();
999
1000
        // c:axId
1001 3
        $objWriter->startElement('c:axId');
1002 3
        $objWriter->writeAttribute('val', '52749440');
1003 3
        $objWriter->endElement();
1004
1005
        // c:axId
1006 3
        $objWriter->startElement('c:axId');
1007 3
        $objWriter->writeAttribute('val', '0');
1008 3
        $objWriter->endElement();
1009
1010 3
        $objWriter->endElement();
1011 3
    }
1012
1013
    /**
1014
     * Write Type Bar3D
1015
     *
1016
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1017
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar3D $subject
1018
     * @param  boolean $includeSheet
1019
     * @throws \Exception
1020
     */
1021 4
    protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, $includeSheet = false)
1022
    {
1023
        // c:bar3DChart
1024 4
        $objWriter->startElement('c:bar3DChart');
1025
1026
        // c:barDir
1027 4
        $objWriter->startElement('c:barDir');
1028 4
        $objWriter->writeAttribute('val', $subject->getBarDirection());
1029 4
        $objWriter->endElement();
1030
1031
        // c:grouping
1032 4
        $objWriter->startElement('c:grouping');
1033 4
        $objWriter->writeAttribute('val', $subject->getBarGrouping());
1034 4
        $objWriter->endElement();
1035
1036
        // Write series
1037 4
        $seriesIndex = 0;
1038 4
        foreach ($subject->getSeries() as $series) {
1039
            // c:ser
1040 4
            $objWriter->startElement('c:ser');
1041
1042
            // c:idx
1043 4
            $objWriter->startElement('c:idx');
1044 4
            $objWriter->writeAttribute('val', $seriesIndex);
1045 4
            $objWriter->endElement();
1046
1047
            // c:order
1048 4
            $objWriter->startElement('c:order');
1049 4
            $objWriter->writeAttribute('val', $seriesIndex);
1050 4
            $objWriter->endElement();
1051
1052
            // c:tx
1053 4
            $objWriter->startElement('c:tx');
1054 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1055 4
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1056 4
            $objWriter->endElement();
1057
1058
            // Fills for points?
1059 4
            $dataPointFills = $series->getDataPointFills();
1060 4
            foreach ($dataPointFills as $key => $value) {
1061
                // c:dPt
1062 1
                $objWriter->startElement('c:dPt');
1063
1064
                // c:idx
1065 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1066
1067 1
                if ($value->getFillType() != Fill::FILL_NONE) {
1068
                    // c:spPr
1069 1
                    $objWriter->startElement('c:spPr');
1070
                    // Write fill
1071 1
                    $this->writeFill($objWriter, $value);
1072
                    // ## c:spPr
1073 1
                    $objWriter->endElement();
1074
                }
1075
1076
                // ## c:dPt
1077 1
                $objWriter->endElement();
1078
            }
1079
1080
            // c:dLbls
1081 4
            $objWriter->startElement('c:dLbls');
1082
1083
            // c:txPr
1084 4
            $objWriter->startElement('c:txPr');
1085
1086
            // a:bodyPr
1087 4
            $objWriter->writeElement('a:bodyPr', null);
1088
1089
            // a:lstStyle
1090 4
            $objWriter->writeElement('a:lstStyle', null);
1091
1092
            // a:p
1093 4
            $objWriter->startElement('a:p');
1094
1095
            // a:pPr
1096 4
            $objWriter->startElement('a:pPr');
1097
1098
            // a:defRPr
1099 4
            $objWriter->startElement('a:defRPr');
1100
1101 4
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1102 4
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1103 4
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1104 4
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1105 4
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1106 4
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1107 4
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1108
1109
            // Font - a:solidFill
1110 4
            $objWriter->startElement('a:solidFill');
1111
1112 4
            $this->writeColor($objWriter, $series->getFont()->getColor());
1113
1114 4
            $objWriter->endElement();
1115
1116
            // Font - a:latin
1117 4
            $objWriter->startElement('a:latin');
1118 4
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1119 4
            $objWriter->endElement();
1120
1121 4
            $objWriter->endElement();
1122
1123 4
            $objWriter->endElement();
1124
1125
            // a:endParaRPr
1126 4
            $objWriter->startElement('a:endParaRPr');
1127 4
            $objWriter->writeAttribute('lang', 'en-US');
1128 4
            $objWriter->writeAttribute('dirty', '0');
1129 4
            $objWriter->endElement();
1130
1131 4
            $objWriter->endElement();
1132
1133 4
            $objWriter->endElement();
1134
1135
            // c:showVal
1136 4
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1137
1138
            // c:showCatName
1139 4
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1140
1141
            // c:showSerName
1142 4
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1143
1144
            // c:showPercent
1145 4
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1146
1147
            // c:showLeaderLines
1148 4
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1149
1150
            // c:separator
1151 4
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1152
1153 4
            $objWriter->endElement();
1154
1155
            // c:spPr
1156 4
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
1157
                // c:spPr
1158
                $objWriter->startElement('c:spPr');
1159
                // Write fill
1160
                $this->writeFill($objWriter, $series->getFill());
1161
                // ## c:spPr
1162
                $objWriter->endElement();
1163
            }
1164
1165
            // Write X axis data
1166 4
            $axisXData = array_keys($series->getValues());
1167
1168
            // c:cat
1169 4
            $objWriter->startElement('c:cat');
1170 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1171 4
            $objWriter->endElement();
1172
1173
            // Write Y axis data
1174 4
            $axisYData = array_values($series->getValues());
1175
1176
            // c:val
1177 4
            $objWriter->startElement('c:val');
1178 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1179 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1180 4
            $objWriter->endElement();
1181
1182 4
            $objWriter->endElement();
1183
1184 4
            ++$seriesIndex;
1185
        }
1186
1187
        // c:gapWidth
1188 4
        $objWriter->startElement('c:gapWidth');
1189 4
        $objWriter->writeAttribute('val', $subject->getGapWidthPercent());
1190 4
        $objWriter->endElement();
1191
1192
        // c:shape
1193 4
        $objWriter->startElement('c:shape');
1194 4
        $objWriter->writeAttribute('val', 'box');
1195 4
        $objWriter->endElement();
1196
1197
        // c:axId
1198 4
        $objWriter->startElement('c:axId');
1199 4
        $objWriter->writeAttribute('val', '52743552');
1200 4
        $objWriter->endElement();
1201
1202
        // c:axId
1203 4
        $objWriter->startElement('c:axId');
1204 4
        $objWriter->writeAttribute('val', '52749440');
1205 4
        $objWriter->endElement();
1206
1207
        // c:axId
1208 4
        $objWriter->startElement('c:axId');
1209 4
        $objWriter->writeAttribute('val', '0');
1210 4
        $objWriter->endElement();
1211
1212 4
        $objWriter->endElement();
1213 4
    }
1214
1215
    /**
1216
     * Write Type Pie
1217
     *
1218
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1219
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Doughnut $subject
1220
     * @param  boolean $includeSheet
1221
     * @throws \Exception
1222
     */
1223 1
    protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, $includeSheet = false)
1224
    {
1225
        // c:pieChart
1226 1
        $objWriter->startElement('c:doughnutChart');
1227
1228
        // c:varyColors
1229 1
        $objWriter->startElement('c:varyColors');
1230 1
        $objWriter->writeAttribute('val', '1');
1231 1
        $objWriter->endElement();
1232
1233
        // Write series
1234 1
        $seriesIndex = 0;
1235 1
        foreach ($subject->getSeries() as $series) {
1236
            // c:ser
1237 1
            $objWriter->startElement('c:ser');
1238
1239
            // c:idx
1240 1
            $objWriter->startElement('c:idx');
1241 1
            $objWriter->writeAttribute('val', $seriesIndex);
1242 1
            $objWriter->endElement();
1243
1244
            // c:order
1245 1
            $objWriter->startElement('c:order');
1246 1
            $objWriter->writeAttribute('val', $seriesIndex);
1247 1
            $objWriter->endElement();
1248
1249
            // c:tx
1250 1
            $objWriter->startElement('c:tx');
1251 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1252 1
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1253 1
            $objWriter->endElement();
1254
1255
            // Fills for points?
1256 1
            $dataPointFills = $series->getDataPointFills();
1257 1
            foreach ($dataPointFills as $key => $value) {
1258
                // c:dPt
1259 1
                $objWriter->startElement('c:dPt');
1260 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1261
                // c:dPt/c:spPr
1262 1
                $objWriter->startElement('c:spPr');
1263 1
                $this->writeFill($objWriter, $value);
1264
                // c:dPt/##c:spPr
1265 1
                $objWriter->endElement();
1266
                // ##c:dPt
1267 1
                $objWriter->endElement();
1268
            }
1269
1270
            // Write X axis data
1271 1
            $axisXData = array_keys($series->getValues());
1272
1273
            // c:cat
1274 1
            $objWriter->startElement('c:cat');
1275 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1276 1
            $objWriter->endElement();
1277
1278
            // Write Y axis data
1279 1
            $axisYData = array_values($series->getValues());
1280
1281
            // c:val
1282 1
            $objWriter->startElement('c:val');
1283 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1284 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1285 1
            $objWriter->endElement();
1286
1287 1
            $objWriter->endElement();
1288
1289 1
            ++$seriesIndex;
1290
        }
1291
1292
        // c:dLbls
1293 1
        $objWriter->startElement('c:dLbls');
1294
1295 1
        $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0');
0 ignored issues
show
Bug introduced by
The variable $series seems to be defined by a foreach iteration on line 1235. Are you sure the iterator is never empty, otherwise this variable is not defined?

It seems like you are relying on a variable being defined by an iteration:

foreach ($a as $b) {
}

// $b is defined here only if $a has elements, for example if $a is array()
// then $b would not be defined here. To avoid that, we recommend to set a
// default value for $b.


// Better
$b = 0; // or whatever default makes sense in your context
foreach ($a as $b) {
}

// $b is now guaranteed to be defined here.
Loading history...
1296 1
        $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1297 1
        $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1298 1
        $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1299 1
        $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1300 1
        $this->writeElementWithValAttribute($objWriter, 'c:showBubbleSize', '0');
1301 1
        $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1302
1303 1
        if ($series->hasDlblNumFormat()) {
1304
            //c:numFmt
1305
            $objWriter->startElement('c:numFmt');
1306
            $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
1307
            $objWriter->writeAttribute('sourceLinked', '0');
1308
            $objWriter->endElement();
1309
        }
1310
1311
        // c:dLbls\c:txPr
1312 1
        $objWriter->startElement('c:txPr');
1313 1
        $objWriter->writeElement('a:bodyPr', null);
1314 1
        $objWriter->writeElement('a:lstStyle', null);
1315
1316
        // c:dLbls\c:txPr\a:p
1317 1
        $objWriter->startElement('a:p');
1318
1319
        // c:dLbls\c:txPr\a:p\a:pPr
1320 1
        $objWriter->startElement('a:pPr');
1321
1322
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr
1323 1
        $objWriter->startElement('a:defRPr');
1324 1
        $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1325 1
        $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1326 1
        $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1327 1
        $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1328 1
        $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1329 1
        $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1330 1
        $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1331
1332
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:solidFill
1333 1
        $objWriter->startElement('a:solidFill');
1334 1
        $this->writeColor($objWriter, $series->getFont()->getColor());
1335 1
        $objWriter->endElement();
1336
1337
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:latin
1338 1
        $objWriter->startElement('a:latin');
1339 1
        $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1340 1
        $objWriter->endElement();
1341
1342
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\
1343 1
        $objWriter->endElement();
1344
        // c:dLbls\c:txPr\a:p\a:pPr\
1345 1
        $objWriter->endElement();
1346
1347
        // c:dLbls\c:txPr\a:p\a:endParaRPr
1348 1
        $objWriter->startElement('a:endParaRPr');
1349 1
        $objWriter->writeAttribute('lang', 'en-US');
1350 1
        $objWriter->writeAttribute('dirty', '0');
1351 1
        $objWriter->endElement();
1352
1353
        // c:dLbls\c:txPr\a:p\
1354 1
        $objWriter->endElement();
1355
        // c:dLbls\c:txPr\
1356 1
        $objWriter->endElement();
1357
1358 1
        $separator = $series->getSeparator();
1359 1
        if (!empty($separator) && $separator != PHP_EOL) {
1360
            // c:dLbls\c:separator
1361 1
            $objWriter->writeElement('c:separator', $separator);
1362
        }
1363
1364
        // c:dLbls\
1365 1
        $objWriter->endElement();
1366
1367 1
        $this->writeElementWithValAttribute($objWriter, 'c:firstSliceAng', '0');
1368 1
        $this->writeElementWithValAttribute($objWriter, 'c:holeSize', $subject->getHoleSize());
1369
1370 1
        $objWriter->endElement();
1371 1
    }
1372
1373
    /**
1374
     * Write Type Pie
1375
     *
1376
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1377
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie $subject
1378
     * @param  boolean $includeSheet
1379
     * @throws \Exception
1380
     */
1381 2
    protected function writeTypePie(XMLWriter $objWriter, Pie $subject, $includeSheet = false)
1382
    {
1383
        // c:pieChart
1384 2
        $objWriter->startElement('c:pieChart');
1385
1386
        // c:varyColors
1387 2
        $objWriter->startElement('c:varyColors');
1388 2
        $objWriter->writeAttribute('val', '1');
1389 2
        $objWriter->endElement();
1390
1391
        // Write series
1392 2
        $seriesIndex = 0;
1393 2
        foreach ($subject->getSeries() as $series) {
1394
            // c:ser
1395 2
            $objWriter->startElement('c:ser');
1396
1397
            // c:idx
1398 2
            $objWriter->startElement('c:idx');
1399 2
            $objWriter->writeAttribute('val', $seriesIndex);
1400 2
            $objWriter->endElement();
1401
1402
            // c:order
1403 2
            $objWriter->startElement('c:order');
1404 2
            $objWriter->writeAttribute('val', $seriesIndex);
1405 2
            $objWriter->endElement();
1406
1407
            // c:tx
1408 2
            $objWriter->startElement('c:tx');
1409 2
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1410 2
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1411 2
            $objWriter->endElement();
1412
1413
            // Fills for points?
1414 2
            $dataPointFills = $series->getDataPointFills();
1415 2
            foreach ($dataPointFills as $key => $value) {
1416
                // c:dPt
1417 1
                $objWriter->startElement('c:dPt');
1418 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1419
                // c:dPt/c:spPr
1420 1
                $objWriter->startElement('c:spPr');
1421 1
                $this->writeFill($objWriter, $value);
1422
                // c:dPt/##c:spPr
1423 1
                $objWriter->endElement();
1424
                // ##c:dPt
1425 1
                $objWriter->endElement();
1426
            }
1427
1428
            // c:dLbls
1429 2
            $objWriter->startElement('c:dLbls');
1430
1431 2
            if ($series->hasDlblNumFormat()) {
1432
                //c:numFmt
1433
                $objWriter->startElement('c:numFmt');
1434
                $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
1435
                $objWriter->writeAttribute('sourceLinked', '0');
1436
                $objWriter->endElement();
1437
            }
1438
1439
            // c:txPr
1440 2
            $objWriter->startElement('c:txPr');
1441
1442
            // a:bodyPr
1443 2
            $objWriter->writeElement('a:bodyPr', null);
1444
1445
            // a:lstStyle
1446 2
            $objWriter->writeElement('a:lstStyle', null);
1447
1448
            // a:p
1449 2
            $objWriter->startElement('a:p');
1450
1451
            // a:pPr
1452 2
            $objWriter->startElement('a:pPr');
1453
1454
            // a:defRPr
1455 2
            $objWriter->startElement('a:defRPr');
1456
1457 2
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1458 2
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1459 2
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1460 2
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1461 2
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1462 2
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1463 2
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1464
1465
            // Font - a:solidFill
1466 2
            $objWriter->startElement('a:solidFill');
1467
1468 2
            $this->writeColor($objWriter, $series->getFont()->getColor());
1469
1470 2
            $objWriter->endElement();
1471
1472
            // Font - a:latin
1473 2
            $objWriter->startElement('a:latin');
1474 2
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1475 2
            $objWriter->endElement();
1476
1477 2
            $objWriter->endElement();
1478
1479 2
            $objWriter->endElement();
1480
1481
            // a:endParaRPr
1482 2
            $objWriter->startElement('a:endParaRPr');
1483 2
            $objWriter->writeAttribute('lang', 'en-US');
1484 2
            $objWriter->writeAttribute('dirty', '0');
1485 2
            $objWriter->endElement();
1486
1487 2
            $objWriter->endElement();
1488
1489 2
            $objWriter->endElement();
1490
1491
            // c:dLblPos
1492 2
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
1493
1494
            // c:showLegendKey
1495 2
            $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0');
1496
1497
            // c:showVal
1498 2
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1499
1500
            // c:showCatName
1501 2
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1502
1503
            // c:showSerName
1504 2
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1505
1506
            // c:showPercent
1507 2
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1508
1509
            // c:showLeaderLines
1510 2
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1511
1512
            // c:separator
1513 2
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1514
1515 2
            $objWriter->endElement();
1516
1517
            // Write X axis data
1518 2
            $axisXData = array_keys($series->getValues());
1519
1520
            // c:cat
1521 2
            $objWriter->startElement('c:cat');
1522 2
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1523 2
            $objWriter->endElement();
1524
1525
            // Write Y axis data
1526 2
            $axisYData = array_values($series->getValues());
1527
1528
            // c:val
1529 2
            $objWriter->startElement('c:val');
1530 2
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1531 2
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1532 2
            $objWriter->endElement();
1533
1534 2
            $objWriter->endElement();
1535
1536 2
            ++$seriesIndex;
1537
        }
1538
1539 2
        $objWriter->endElement();
1540 2
    }
1541
1542
    /**
1543
     * Write Type Pie3D
1544
     *
1545
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1546
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie3D $subject
1547
     * @param  boolean $includeSheet
1548
     * @throws \Exception
1549
     */
1550 4
    protected function writeTypePie3D(XMLWriter $objWriter, Pie3D $subject, $includeSheet = false)
1551
    {
1552
        // c:pie3DChart
1553 4
        $objWriter->startElement('c:pie3DChart');
1554
1555
        // c:varyColors
1556 4
        $objWriter->startElement('c:varyColors');
1557 4
        $objWriter->writeAttribute('val', '1');
1558 4
        $objWriter->endElement();
1559
1560
        // Write series
1561 4
        $seriesIndex = 0;
1562 4
        foreach ($subject->getSeries() as $series) {
1563
            // c:ser
1564 4
            $objWriter->startElement('c:ser');
1565
1566
            // c:idx
1567 4
            $objWriter->startElement('c:idx');
1568 4
            $objWriter->writeAttribute('val', $seriesIndex);
1569 4
            $objWriter->endElement();
1570
1571
            // c:order
1572 4
            $objWriter->startElement('c:order');
1573 4
            $objWriter->writeAttribute('val', $seriesIndex);
1574 4
            $objWriter->endElement();
1575
1576
            // c:tx
1577 4
            $objWriter->startElement('c:tx');
1578 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1579 4
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1580 4
            $objWriter->endElement();
1581
1582
            // c:explosion
1583 4
            $objWriter->startElement('c:explosion');
1584 4
            $objWriter->writeAttribute('val', $subject->getExplosion());
1585 4
            $objWriter->endElement();
1586
1587
            // Fills for points?
1588 4
            $dataPointFills = $series->getDataPointFills();
1589 4
            foreach ($dataPointFills as $key => $value) {
1590
                // c:dPt
1591 1
                $objWriter->startElement('c:dPt');
1592 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1593
                // c:dPt/c:spPr
1594 1
                $objWriter->startElement('c:spPr');
1595 1
                $this->writeFill($objWriter, $value);
1596
                // c:dPt/##c:spPr
1597 1
                $objWriter->endElement();
1598
                // ##c:dPt
1599 1
                $objWriter->endElement();
1600
            }
1601
1602
            // c:dLbls
1603 4
            $objWriter->startElement('c:dLbls');
1604
1605
            // c:txPr
1606 4
            $objWriter->startElement('c:txPr');
1607
1608
            // a:bodyPr
1609 4
            $objWriter->writeElement('a:bodyPr', null);
1610
1611
            // a:lstStyle
1612 4
            $objWriter->writeElement('a:lstStyle', null);
1613
1614
            // a:p
1615 4
            $objWriter->startElement('a:p');
1616
1617
            // a:pPr
1618 4
            $objWriter->startElement('a:pPr');
1619
1620
            // a:defRPr
1621 4
            $objWriter->startElement('a:defRPr');
1622
1623 4
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1624 4
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1625 4
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1626 4
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1627 4
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1628 4
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1629 4
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1630
1631
            // Font - a:solidFill
1632 4
            $objWriter->startElement('a:solidFill');
1633
1634 4
            $this->writeColor($objWriter, $series->getFont()->getColor());
1635
1636 4
            $objWriter->endElement();
1637
1638
            // Font - a:latin
1639 4
            $objWriter->startElement('a:latin');
1640 4
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1641 4
            $objWriter->endElement();
1642
1643 4
            $objWriter->endElement();
1644
1645 4
            $objWriter->endElement();
1646
1647
            // a:endParaRPr
1648 4
            $objWriter->startElement('a:endParaRPr');
1649 4
            $objWriter->writeAttribute('lang', 'en-US');
1650 4
            $objWriter->writeAttribute('dirty', '0');
1651 4
            $objWriter->endElement();
1652
1653 4
            $objWriter->endElement();
1654
1655 4
            $objWriter->endElement();
1656
1657
            // c:dLblPos
1658 4
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
1659
1660
            // c:showVal
1661 4
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1662
1663
            // c:showCatName
1664 4
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1665
1666
            // c:showSerName
1667 4
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1668
1669
            // c:showPercent
1670 4
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1671
1672
            // c:showLeaderLines
1673 4
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1674
1675
            // c:separator
1676 4
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1677
1678 4
            $objWriter->endElement();
1679
1680
            // Write X axis data
1681 4
            $axisXData = array_keys($series->getValues());
1682
1683
            // c:cat
1684 4
            $objWriter->startElement('c:cat');
1685 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1686 4
            $objWriter->endElement();
1687
1688
            // Write Y axis data
1689 4
            $axisYData = array_values($series->getValues());
1690
1691
            // c:val
1692 4
            $objWriter->startElement('c:val');
1693 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1694 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1695 4
            $objWriter->endElement();
1696
1697 4
            $objWriter->endElement();
1698
1699 4
            ++$seriesIndex;
1700
        }
1701
1702 4
        $objWriter->endElement();
1703 4
    }
1704
1705
    /**
1706
     * Write Type Line
1707
     *
1708
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1709
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Line $subject
1710
     * @param  boolean $includeSheet
1711
     * @throws \Exception
1712
     */
1713 15
    protected function writeTypeLine(XMLWriter $objWriter, Line $subject, $includeSheet = false)
1714
    {
1715
        // c:lineChart
1716 15
        $objWriter->startElement('c:lineChart');
1717
1718
        // c:grouping
1719 15
        $objWriter->startElement('c:grouping');
1720 15
        $objWriter->writeAttribute('val', 'standard');
1721 15
        $objWriter->endElement();
1722
1723
        // Write series
1724 15
        $seriesIndex = 0;
1725 15
        foreach ($subject->getSeries() as $series) {
1726
            // c:ser
1727 11
            $objWriter->startElement('c:ser');
1728
1729
            // c:idx
1730 11
            $objWriter->startElement('c:idx');
1731 11
            $objWriter->writeAttribute('val', $seriesIndex);
1732 11
            $objWriter->endElement();
1733
1734
            // c:order
1735 11
            $objWriter->startElement('c:order');
1736 11
            $objWriter->writeAttribute('val', $seriesIndex);
1737 11
            $objWriter->endElement();
1738
1739
            // c:tx
1740 11
            $objWriter->startElement('c:tx');
1741 11
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1742 11
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1743 11
            $objWriter->endElement();
1744
1745
            // c:spPr
1746 11
            $objWriter->startElement('c:spPr');
1747
            // Write fill
1748 11
            $this->writeFill($objWriter, $series->getFill());
1749
            // Write outline
1750 11
            $this->writeOutline($objWriter, $series->getOutline());
1751
            // ## c:spPr
1752 11
            $objWriter->endElement();
1753
1754
            // Marker
1755 11
            $this->writeSeriesMarker($objWriter, $series->getMarker());
1756
1757
            // c:dLbls
1758 11
            $objWriter->startElement('c:dLbls');
1759
1760
            // c:txPr
1761 11
            $objWriter->startElement('c:txPr');
1762
1763
            // a:bodyPr
1764 11
            $objWriter->writeElement('a:bodyPr', null);
1765
1766
            // a:lstStyle
1767 11
            $objWriter->writeElement('a:lstStyle', null);
1768
1769
            // a:p
1770 11
            $objWriter->startElement('a:p');
1771
1772
            // a:pPr
1773 11
            $objWriter->startElement('a:pPr');
1774
1775
            // a:defRPr
1776 11
            $objWriter->startElement('a:defRPr');
1777
1778 11
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1779 11
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1780 11
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1781 11
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1782 11
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1783 11
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1784 11
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1785
1786
            // Font - a:solidFill
1787 11
            $objWriter->startElement('a:solidFill');
1788
1789 11
            $this->writeColor($objWriter, $series->getFont()->getColor());
1790
1791 11
            $objWriter->endElement();
1792
1793
            // Font - a:latin
1794 11
            $objWriter->startElement('a:latin');
1795 11
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1796 11
            $objWriter->endElement();
1797
1798 11
            $objWriter->endElement();
1799
1800 11
            $objWriter->endElement();
1801
1802
            // a:endParaRPr
1803 11
            $objWriter->startElement('a:endParaRPr');
1804 11
            $objWriter->writeAttribute('lang', 'en-US');
1805 11
            $objWriter->writeAttribute('dirty', '0');
1806 11
            $objWriter->endElement();
1807
1808 11
            $objWriter->endElement();
1809
1810 11
            $objWriter->endElement();
1811
1812
            // c:showVal
1813 11
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1814
1815
            // c:showCatName
1816 11
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1817
1818
            // c:showSerName
1819 11
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1820
1821
            // c:showPercent
1822 11
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1823
1824
            // c:showLeaderLines
1825 11
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1826
1827
            // c:separator
1828 11
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1829
1830
            // > c:dLbls
1831 11
            $objWriter->endElement();
1832
1833
            // Write X axis data
1834 11
            $axisXData = array_keys($series->getValues());
1835
1836
            // c:cat
1837 11
            $objWriter->startElement('c:cat');
1838 11
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1839 11
            $objWriter->endElement();
1840
1841
            // Write Y axis data
1842 11
            $axisYData = array_values($series->getValues());
1843
1844
            // c:val
1845 11
            $objWriter->startElement('c:val');
1846 11
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1847 11
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1848 11
            $objWriter->endElement();
1849
1850 11
            $objWriter->endElement();
1851
1852 11
            ++$seriesIndex;
1853
        }
1854
1855
        // c:marker
1856 15
        $objWriter->startElement('c:marker');
1857 15
        $objWriter->writeAttribute('val', '1');
1858 15
        $objWriter->endElement();
1859
1860
        // c:smooth
1861 15
        $objWriter->startElement('c:smooth');
1862 15
        $objWriter->writeAttribute('val', '0');
1863 15
        $objWriter->endElement();
1864
1865
        // c:axId
1866 15
        $objWriter->startElement('c:axId');
1867 15
        $objWriter->writeAttribute('val', '52743552');
1868 15
        $objWriter->endElement();
1869
1870
        // c:axId
1871 15
        $objWriter->startElement('c:axId');
1872 15
        $objWriter->writeAttribute('val', '52749440');
1873 15
        $objWriter->endElement();
1874
1875 15
        $objWriter->endElement();
1876 15
    }
1877
1878
    /**
1879
     * Write Type Scatter
1880
     *
1881
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1882
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Scatter $subject
1883
     * @param  boolean $includeSheet
1884
     * @throws \Exception
1885
     */
1886 5
    protected function writeTypeScatter(XMLWriter $objWriter, Scatter $subject, $includeSheet = false)
1887
    {
1888
        // c:scatterChart
1889 5
        $objWriter->startElement('c:scatterChart');
1890
1891
        // c:scatterStyle
1892 5
        $objWriter->startElement('c:scatterStyle');
1893 5
        $objWriter->writeAttribute('val', 'lineMarker');
1894 5
        $objWriter->endElement();
1895
1896
        // c:varyColors
1897 5
        $objWriter->startElement('c:varyColors');
1898 5
        $objWriter->writeAttribute('val', '0');
1899 5
        $objWriter->endElement();
1900
1901
        // Write series
1902 5
        $seriesIndex = 0;
1903 5
        foreach ($subject->getSeries() as $series) {
1904
            // c:ser
1905 5
            $objWriter->startElement('c:ser');
1906
1907
            // c:idx
1908 5
            $objWriter->startElement('c:idx');
1909 5
            $objWriter->writeAttribute('val', $seriesIndex);
1910 5
            $objWriter->endElement();
1911
1912
            // c:order
1913 5
            $objWriter->startElement('c:order');
1914 5
            $objWriter->writeAttribute('val', $seriesIndex);
1915 5
            $objWriter->endElement();
1916
1917
            // c:tx
1918 5
            $objWriter->startElement('c:tx');
1919 5
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1920 5
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1921 5
            $objWriter->endElement();
1922
1923
            // Marker
1924 5
            $this->writeSeriesMarker($objWriter, $series->getMarker());
1925
1926
            // c:dLbls
1927 5
            $objWriter->startElement('c:dLbls');
1928
1929
            // c:txPr
1930 5
            $objWriter->startElement('c:txPr');
1931
1932
            // a:bodyPr
1933 5
            $objWriter->writeElement('a:bodyPr', null);
1934
1935
            // a:lstStyle
1936 5
            $objWriter->writeElement('a:lstStyle', null);
1937
1938
            // a:p
1939 5
            $objWriter->startElement('a:p');
1940
1941
            // a:pPr
1942 5
            $objWriter->startElement('a:pPr');
1943
1944
            // a:defRPr
1945 5
            $objWriter->startElement('a:defRPr');
1946
1947 5
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1948 5
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1949 5
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1950 5
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1951 5
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1952 5
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1953 5
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1954
1955
            // Font - a:solidFill
1956 5
            $objWriter->startElement('a:solidFill');
1957
1958 5
            $this->writeColor($objWriter, $series->getFont()->getColor());
1959
1960 5
            $objWriter->endElement();
1961
1962
            // Font - a:latin
1963 5
            $objWriter->startElement('a:latin');
1964 5
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1965 5
            $objWriter->endElement();
1966
1967 5
            $objWriter->endElement();
1968
1969 5
            $objWriter->endElement();
1970
1971
            // a:endParaRPr
1972 5
            $objWriter->startElement('a:endParaRPr');
1973 5
            $objWriter->writeAttribute('lang', 'en-US');
1974 5
            $objWriter->writeAttribute('dirty', '0');
1975 5
            $objWriter->endElement();
1976
1977 5
            $objWriter->endElement();
1978
1979 5
            $objWriter->endElement();
1980
1981
            // c:showLegendKey
1982 5
            $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0');
1983
1984
            // c:showVal
1985 5
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1986
1987
            // c:showCatName
1988 5
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1989
1990
            // c:showSerName
1991 5
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1992
1993
            // c:showPercent
1994 5
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1995
1996
            // c:showLeaderLines
1997 5
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1998
1999
            // c:separator
2000 5
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
2001
2002 5
            $objWriter->endElement();
2003
2004
            // c:spPr
2005 5
            $objWriter->startElement('c:spPr');
2006
            // Write fill
2007 5
            $this->writeFill($objWriter, $series->getFill());
2008
            // Write outline
2009 5
            $this->writeOutline($objWriter, $series->getOutline());
2010
            // ## c:spPr
2011 5
            $objWriter->endElement();
2012
2013
            // Write X axis data
2014 5
            $axisXData = array_keys($series->getValues());
2015
2016
            // c:xVal
2017 5
            $objWriter->startElement('c:xVal');
2018 5
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
2019 5
            $objWriter->endElement();
2020
2021
            // Write Y axis data
2022 5
            $axisYData = array_values($series->getValues());
2023
2024
            // c:yVal
2025 5
            $objWriter->startElement('c:yVal');
2026 5
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
2027 5
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
2028 5
            $objWriter->endElement();
2029
2030
            // c:smooth
2031 5
            $objWriter->startElement('c:smooth');
2032 5
            $objWriter->writeAttribute('val', '0');
2033 5
            $objWriter->endElement();
2034
2035 5
            $objWriter->endElement();
2036
2037 5
            ++$seriesIndex;
2038
        }
2039
2040
        // c:axId
2041 5
        $objWriter->startElement('c:axId');
2042 5
        $objWriter->writeAttribute('val', '52743552');
2043 5
        $objWriter->endElement();
2044
2045
        // c:axId
2046 5
        $objWriter->startElement('c:axId');
2047 5
        $objWriter->writeAttribute('val', '52749440');
2048 5
        $objWriter->endElement();
2049
2050 5
        $objWriter->endElement();
2051 5
    }
2052
2053
    /**
2054
     * Write chart relationships to XML format
2055
     *
2056
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $pChart
2057
     * @return string                    XML Output
2058
     * @throws \Exception
2059
     */
2060
    public function writeChartRelationships(Chart $pChart)
2061
    {
2062
        // Create XML writer
2063
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
2064
2065
        // XML header
2066
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
2067
2068
        // Relationships
2069
        $objWriter->startElement('Relationships');
2070
        $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
2071
2072
        // Write spreadsheet relationship?
2073
        if ($pChart->hasIncludedSpreadsheet()) {
2074
            $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package', '../embeddings/' . $pChart->getIndexedFilename() . '.xlsx');
2075
        }
2076
2077
        $objWriter->endElement();
2078
2079
        // Return
2080
        return $objWriter->getData();
2081
    }
2082
2083
    /**
2084
     * @param XMLWriter $objWriter
2085
     * @param Chart\Marker $oMarker
2086
     */
2087 16
    protected function writeSeriesMarker(XMLWriter $objWriter, Chart\Marker $oMarker)
2088
    {
2089
        // c:marker
2090 16
        $objWriter->startElement('c:marker');
2091
        // c:marker > c:symbol
2092 16
        $objWriter->startElement('c:symbol');
2093 16
        $objWriter->writeAttribute('val', $oMarker->getSymbol());
2094 16
        $objWriter->endElement();
2095
2096
        // Size if different of none
2097 16
        if ($oMarker->getSymbol() != Chart\Marker::SYMBOL_NONE) {
2098 2
            $markerSize = (int)$oMarker->getSize();
2099 2
            if ($markerSize < 2) {
2100 2
                $markerSize = 2;
2101
            }
2102 2
            if ($markerSize > 72) {
2103 2
                $markerSize = 72;
2104
            }
2105
2106
            /**
2107
             * c:marker > c:size
2108
             * Size in points
2109
             * @link : https://msdn.microsoft.com/en-us/library/hh658135(v=office.12).aspx
2110
             */
2111 2
            $objWriter->startElement('c:size');
2112 2
            $objWriter->writeAttribute('val', $markerSize);
2113 2
            $objWriter->endElement();
2114
        }
2115 16
        $objWriter->endElement();
2116 16
    }
2117
2118
    /**
2119
     * @param XMLWriter $objWriter
2120
     * @param Chart\Axis $oAxis
2121
     * @param $typeAxis
2122
     * @param Chart\Type\AbstractType $typeChart
2123
     */
2124 28
    protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, $typeAxis, Chart\Type\AbstractType $typeChart)
2125
    {
2126 28
        if ($typeAxis != Chart\Axis::AXIS_X && $typeAxis != Chart\Axis::AXIS_Y) {
2127
            return;
2128
        }
2129
2130 28
        if ($typeAxis == Chart\Axis::AXIS_X) {
2131 28
            $mainElement = 'c:catAx';
2132 28
            $axIdVal = '52743552';
2133 28
            $axPosVal = 'b';
2134 28
            $crossAxVal = '52749440';
2135
        } else {
2136 28
            $mainElement = 'c:valAx';
2137 28
            $axIdVal = '52749440';
2138 28
            $axPosVal = 'l';
2139 28
            $crossAxVal = '52743552';
2140
        }
2141
2142
        // $mainElement
2143 28
        $objWriter->startElement($mainElement);
2144
2145
        // $mainElement > c:axId
2146 28
        $objWriter->startElement('c:axId');
2147 28
        $objWriter->writeAttribute('val', $axIdVal);
2148 28
        $objWriter->endElement();
2149
2150
        // $mainElement > c:scaling
2151 28
        $objWriter->startElement('c:scaling');
2152
2153
        // $mainElement > c:scaling > c:orientation
2154 28
        $objWriter->startElement('c:orientation');
2155 28
        $objWriter->writeAttribute('val', 'minMax');
2156 28
        $objWriter->endElement();
2157
2158 28
        if ($oAxis->getMaxBounds() != null) {
0 ignored issues
show
Bug Best Practice introduced by
It seems like you are loosely comparing $oAxis->getMaxBounds() of type integer|null against null; this is ambiguous if the integer can be zero. Consider using a strict comparison !== instead.
Loading history...
2159 1
            $objWriter->startElement('c:max');
2160 1
            $objWriter->writeAttribute('val', $oAxis->getMaxBounds());
2161 1
            $objWriter->endElement();
2162
        }
2163
2164 28
        if ($oAxis->getMinBounds() != null) {
0 ignored issues
show
Bug Best Practice introduced by
It seems like you are loosely comparing $oAxis->getMinBounds() of type integer|null against null; this is ambiguous if the integer can be zero. Consider using a strict comparison !== instead.
Loading history...
2165 1
            $objWriter->startElement('c:min');
2166 1
            $objWriter->writeAttribute('val', $oAxis->getMinBounds());
2167 1
            $objWriter->endElement();
2168
        }
2169
2170
        // $mainElement > ##c:scaling
2171 28
        $objWriter->endElement();
2172
2173
        // $mainElement > c:delete
2174 28
        $objWriter->startElement('c:delete');
2175 28
        $objWriter->writeAttribute('val', $oAxis->isVisible() ? '0' : '1');
2176 28
        $objWriter->endElement();
2177
2178
        // $mainElement > c:axPos
2179 28
        $objWriter->startElement('c:axPos');
2180 28
        $objWriter->writeAttribute('val', $axPosVal);
2181 28
        $objWriter->endElement();
2182
2183 28
        $oMajorGridlines = $oAxis->getMajorGridlines();
2184 28
        if ($oMajorGridlines instanceof Gridlines) {
2185 1
            $objWriter->startElement('c:majorGridlines');
2186
2187 1
            $this->writeAxisGridlines($objWriter, $oMajorGridlines);
2188
2189 1
            $objWriter->endElement();
2190
        }
2191
2192 28
        $oMinorGridlines = $oAxis->getMinorGridlines();
2193 28
        if ($oMinorGridlines instanceof Gridlines) {
2194 1
            $objWriter->startElement('c:minorGridlines');
2195
2196 1
            $this->writeAxisGridlines($objWriter, $oMinorGridlines);
2197
2198 1
            $objWriter->endElement();
2199
        }
2200
2201 28
        if ($oAxis->getTitle() != '') {
2202
            // c:title
2203 28
            $objWriter->startElement('c:title');
2204
2205
            // c:tx
2206 28
            $objWriter->startElement('c:tx');
2207
2208
            // c:rich
2209 28
            $objWriter->startElement('c:rich');
2210
2211
            // a:bodyPr
2212 28
            $objWriter->writeElement('a:bodyPr', null);
2213
2214
            // a:lstStyle
2215 28
            $objWriter->writeElement('a:lstStyle', null);
2216
2217
            // a:p
2218 28
            $objWriter->startElement('a:p');
2219
2220
            // a:pPr
2221 28
            $objWriter->startElement('a:pPr');
2222
2223
            // a:defRPr
2224 28
            $objWriter->startElement('a:defRPr');
2225
2226 28
            $objWriter->writeAttribute('b', ($oAxis->getFont()->isBold() ? 'true' : 'false'));
2227 28
            $objWriter->writeAttribute('i', ($oAxis->getFont()->isItalic() ? 'true' : 'false'));
2228 28
            $objWriter->writeAttribute('strike', ($oAxis->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
2229 28
            $objWriter->writeAttribute('sz', ($oAxis->getFont()->getSize() * 100));
2230 28
            $objWriter->writeAttribute('u', $oAxis->getFont()->getUnderline());
2231 28
            $objWriter->writeAttributeIf($oAxis->getFont()->isSuperScript(), 'baseline', '30000');
2232 28
            $objWriter->writeAttributeIf($oAxis->getFont()->isSubScript(), 'baseline', '-25000');
2233
2234
            // Font - a:solidFill
2235 28
            $objWriter->startElement('a:solidFill');
2236 28
            $this->writeColor($objWriter, $oAxis->getFont()->getColor());
2237 28
            $objWriter->endElement();
2238
2239
            // Font - a:latin
2240 28
            $objWriter->startElement('a:latin');
2241 28
            $objWriter->writeAttribute('typeface', $oAxis->getFont()->getName());
2242 28
            $objWriter->endElement();
2243
2244 28
            $objWriter->endElement();
2245
2246
            // ## a:pPr
2247 28
            $objWriter->endElement();
2248
2249
            // a:r
2250 28
            $objWriter->startElement('a:r');
2251
2252
            // a:rPr
2253 28
            $objWriter->startElement('a:rPr');
2254 28
            $objWriter->writeAttribute('lang', 'en-US');
2255 28
            $objWriter->writeAttribute('dirty', '0');
2256 28
            $objWriter->endElement();
2257
2258
            // a:t
2259 28
            $objWriter->writeElement('a:t', $oAxis->getTitle());
2260
2261
            // ## a:r
2262 28
            $objWriter->endElement();
2263
2264
            // a:endParaRPr
2265 28
            $objWriter->startElement('a:endParaRPr');
2266 28
            $objWriter->writeAttribute('lang', 'en-US');
2267 28
            $objWriter->writeAttribute('dirty', '0');
2268 28
            $objWriter->endElement();
2269
2270
            // ## a:p
2271 28
            $objWriter->endElement();
2272
2273
            // ## c:rich
2274 28
            $objWriter->endElement();
2275
2276
            // ## c:tx
2277 28
            $objWriter->endElement();
2278
2279
            // ## c:title
2280 28
            $objWriter->endElement();
2281
        }
2282
2283
        // c:numFmt
2284 28
        $objWriter->startElement('c:numFmt');
2285 28
        $objWriter->writeAttribute('formatCode', $oAxis->getFormatCode());
2286 28
        $objWriter->writeAttribute('sourceLinked', '1');
2287 28
        $objWriter->endElement();
2288
2289
        // c:majorTickMark
2290 28
        $objWriter->startElement('c:majorTickMark');
2291 28
        $objWriter->writeAttribute('val', $oAxis->getMajorTickMark());
2292 28
        $objWriter->endElement();
2293
2294
        // c:minorTickMark
2295 28
        $objWriter->startElement('c:minorTickMark');
2296 28
        $objWriter->writeAttribute('val', $oAxis->getMinorTickMark());
2297 28
        $objWriter->endElement();
2298
2299
        // c:tickLblPos
2300 28
        $objWriter->startElement('c:tickLblPos');
2301 28
        $objWriter->writeAttribute('val', 'nextTo');
2302 28
        $objWriter->endElement();
2303
2304
        // c:spPr
2305 28
        $objWriter->startElement('c:spPr');
2306
        // Outline
2307 28
        $this->writeOutline($objWriter, $oAxis->getOutline());
2308
        // ##c:spPr
2309 28
        $objWriter->endElement();
2310
2311
        // c:crossAx
2312 28
        $objWriter->startElement('c:crossAx');
2313 28
        $objWriter->writeAttribute('val', $crossAxVal);
2314 28
        $objWriter->endElement();
2315
2316
        // c:crosses
2317 28
        $objWriter->startElement('c:crosses');
2318 28
        $objWriter->writeAttribute('val', 'autoZero');
2319 28
        $objWriter->endElement();
2320
2321 28
        if ($typeAxis == Chart\Axis::AXIS_X) {
2322
            // c:lblAlgn
2323 28
            $objWriter->startElement('c:lblAlgn');
2324 28
            $objWriter->writeAttribute('val', 'ctr');
2325 28
            $objWriter->endElement();
2326
2327
            // c:lblOffset
2328 28
            $objWriter->startElement('c:lblOffset');
2329 28
            $objWriter->writeAttribute('val', '100%');
2330 28
            $objWriter->endElement();
2331
        }
2332
2333 28
        if ($typeAxis == Chart\Axis::AXIS_Y) {
2334
            // c:crossBetween
2335 28
            $objWriter->startElement('c:crossBetween');
2336
            // midCat : Position Axis On Tick Marks
2337
            // between : Between Tick Marks
2338 28
            if ($typeChart instanceof Area) {
2339 1
                $objWriter->writeAttribute('val', 'midCat');
2340
            } else {
2341 27
                $objWriter->writeAttribute('val', 'between');
2342
            }
2343 28
            $objWriter->endElement();
2344
2345
            // c:majorUnit
2346 28
            if ($oAxis->getMajorUnit() != null) {
2347 1
                $objWriter->startElement('c:majorUnit');
2348 1
                $objWriter->writeAttribute('val', $oAxis->getMajorUnit());
2349 1
                $objWriter->endElement();
2350
            }
2351
2352
            // c:minorUnit
2353 28
            if ($oAxis->getMinorUnit() != null) {
2354 1
                $objWriter->startElement('c:minorUnit');
2355 1
                $objWriter->writeAttribute('val', $oAxis->getMinorUnit());
2356 1
                $objWriter->endElement();
2357
            }
2358
        }
2359
2360 28
        $objWriter->endElement();
2361 28
    }
2362
2363
    /**
2364
     * @param XMLWriter $objWriter
2365
     * @param Gridlines $oGridlines
2366
     */
2367 1
    protected function writeAxisGridlines(XMLWriter $objWriter, Gridlines $oGridlines)
2368
    {
2369
        // c:spPr
2370 1
        $objWriter->startElement('c:spPr');
2371
2372
        // Outline
2373 1
        $this->writeOutline($objWriter, $oGridlines->getOutline());
2374
2375
        // ##c:spPr
2376 1
        $objWriter->endElement();
2377 1
    }
2378
}
2379