Completed
Pull Request — develop (#442)
by
unknown
09:33
created

PptCharts::writeTypeBar3D()   D

Complexity

Conditions 15
Paths 25

Size

Total Lines 193
Code Lines 96

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 94
CRAP Score 15.0066

Importance

Changes 0
Metric Value
dl 0
loc 193
ccs 94
cts 97
cp 0.9691
rs 4.9121
c 0
b 0
f 0
cc 15
eloc 96
nc 25
nop 3
crap 15.0066

How to fix   Long Method    Complexity   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
3
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
4
5
use PhpOffice\Common\Drawing as CommonDrawing;
6
use PhpOffice\Common\XMLWriter;
7
use PhpOffice\PhpPresentation\PhpPresentation;
8
use PhpOffice\PhpPresentation\Shape\Chart;
9
use PhpOffice\PhpPresentation\Shape\Chart\Gridlines;
10
use PhpOffice\PhpPresentation\Shape\Chart\Legend;
11
use PhpOffice\PhpPresentation\Shape\Chart\PlotArea;
12
use PhpOffice\PhpPresentation\Shape\Chart\Title;
13
use PhpOffice\PhpPresentation\Shape\Chart\Type\Area;
14
use PhpOffice\PhpPresentation\Shape\Chart\Type\Bar;
15
use PhpOffice\PhpPresentation\Shape\Chart\Type\Bar3D;
16
use PhpOffice\PhpPresentation\Shape\Chart\Type\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
53
    /**
54
     * Write chart to XML format
55
     *
56
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
57
     * @return string                    XML Output
58
     * @throws \Exception
59
     */
60 36
    public function writeChart(Chart $chart)
61
    {
62
        // Create XML writer
63 36
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
64
65
        // XML header
66 36
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
67
68
        // c:chartSpace
69 36
        $objWriter->startElement('c:chartSpace');
70 36
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
71 36
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
72 36
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
73
74
        // c:date1904
75 36
        $objWriter->startElement('c:date1904');
76 36
        $objWriter->writeAttribute('val', '1');
77 36
        $objWriter->endElement();
78
79
        // c:lang
80 36
        $objWriter->startElement('c:lang');
81 36
        $objWriter->writeAttribute('val', 'en-US');
82 36
        $objWriter->endElement();
83
84
        // c:chart
85 36
        $objWriter->startElement('c:chart');
86
87
        // Title?
88 36
        if ($chart->getTitle()->isVisible()) {
89
            // Write title
90 35
            $this->writeTitle($objWriter, $chart->getTitle());
91
        }
92
93
        // c:autoTitleDeleted
94 36
        $objWriter->startElement('c:autoTitleDeleted');
95 36
        $objWriter->writeAttribute('val', $chart->getTitle()->isVisible() ? '0' : '1');
96 36
        $objWriter->endElement();
97
98
        // c:view3D
99 36
        $objWriter->startElement('c:view3D');
100
101
        // c:rotX
102 36
        $objWriter->startElement('c:rotX');
103 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationX());
104 36
        $objWriter->endElement();
105
106
        // c:hPercent
107 36
        $hPercent = $chart->getView3D()->getHeightPercent();
108 36
        $objWriter->writeElementIf($hPercent != null, 'c:hPercent', 'val', $hPercent);
109
110
        // c:rotY
111 36
        $objWriter->startElement('c:rotY');
112 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationY());
113 36
        $objWriter->endElement();
114
115
        // c:depthPercent
116 36
        $objWriter->startElement('c:depthPercent');
117 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getDepthPercent());
118 36
        $objWriter->endElement();
119
120
        // c:rAngAx
121 36
        $objWriter->startElement('c:rAngAx');
122 36
        $objWriter->writeAttribute('val', $chart->getView3D()->hasRightAngleAxes() ? '1' : '0');
123 36
        $objWriter->endElement();
124
125
        // c:perspective
126 36
        $objWriter->startElement('c:perspective');
127 36
        $objWriter->writeAttribute('val', $chart->getView3D()->getPerspective());
128 36
        $objWriter->endElement();
129
130 36
        $objWriter->endElement();
131
132
        // Write plot area
133 36
        $this->writePlotArea($objWriter, $chart->getPlotArea(), $chart);
134
135
        // Legend?
136 35
        if ($chart->getLegend()->isVisible()) {
137
            // Write legend
138 35
            $this->writeLegend($objWriter, $chart->getLegend());
139
        }
140
141
        // c:plotVisOnly
142 35
        $objWriter->startElement('c:plotVisOnly');
143 35
        $objWriter->writeAttribute('val', '1');
144 35
        $objWriter->endElement();
145
146 35
        $objWriter->endElement();
147
148
        // c:spPr
149 35
        $objWriter->startElement('c:spPr');
150
151
        // Fill
152 35
        $this->writeFill($objWriter, $chart->getFill());
153
154
        // Border
155 35
        if ($chart->getBorder()->getLineStyle() != Border::LINE_NONE) {
156 1
            $this->writeBorder($objWriter, $chart->getBorder(), '');
157
        }
158
159
        // Shadow
160 35
        if ($chart->getShadow()->isVisible()) {
161
            // a:effectLst
162 1
            $objWriter->startElement('a:effectLst');
163
164
            // a:outerShdw
165 1
            $objWriter->startElement('a:outerShdw');
166 1
            $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($chart->getShadow()->getBlurRadius()));
167 1
            $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($chart->getShadow()->getDistance()));
168 1
            $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($chart->getShadow()->getDirection()));
169 1
            $objWriter->writeAttribute('algn', $chart->getShadow()->getAlignment());
170 1
            $objWriter->writeAttribute('rotWithShape', '0');
171
172 1
            $this->writeColor($objWriter, $chart->getShadow()->getColor(), $chart->getShadow()->getAlpha());
173
174 1
            $objWriter->endElement();
175
176 1
            $objWriter->endElement();
177
        }
178
179 35
        $objWriter->endElement();
180
181
        // External data?
182 35
        if ($chart->hasIncludedSpreadsheet()) {
183
            // c:externalData
184
            $objWriter->startElement('c:externalData');
185
            $objWriter->writeAttribute('r:id', 'rId1');
186
187
            // c:autoUpdate
188
            $objWriter->startElement('c:autoUpdate');
189
            $objWriter->writeAttribute('val', '0');
190
            $objWriter->endElement();
191
192
            $objWriter->endElement();
193
        }
194
195 35
        $objWriter->endElement();
196
197
        // Return
198 35
        return $objWriter->getData();
199
    }
200
201
    /**
202
     * Write chart to XML format
203
     *
204
     * @param  PhpPresentation $presentation
205
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
206
     * @param  string $tempName
207
     * @return string                    String output
208
     * @throws \Exception
209
     */
210
    public function writeSpreadsheet(PhpPresentation $presentation, $chart, $tempName)
211
    {
212
        // Need output?
213
        if (!$chart->hasIncludedSpreadsheet()) {
214
            throw new \Exception('No spreadsheet output is required for the given chart.');
215
        }
216
217
        // Verify PHPExcel
218
        if (!class_exists('PHPExcel')) {
219
            throw new \Exception('PHPExcel has not been loaded. Include PHPExcel.php in your script, e.g. require_once \'PHPExcel.php\'.');
220
        }
221
222
        // Create new spreadsheet
223
        $workbook = new \PHPExcel();
224
225
        // Set properties
226
        $title = $chart->getTitle()->getText();
227
        if (strlen($title) == 0) {
228
            $title = 'Chart';
229
        }
230
        $workbook->getProperties()->setCreator($presentation->getDocumentProperties()->getCreator())->setLastModifiedBy($presentation->getDocumentProperties()->getLastModifiedBy())->setTitle($title);
231
232
        // Add chart data
233
        $sheet = $workbook->setActiveSheetIndex(0);
234
        $sheet->setTitle('Sheet1');
235
236
        // Write series
237
        $seriesIndex = 0;
238
        foreach ($chart->getPlotArea()->getType()->getSeries() as $series) {
239
            // Title
240
            $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, 1, $series->getTitle());
241
242
            // X-axis
243
            $axisXData = array_keys($series->getValues());
244
            $numAxisXData = count($axisXData);
245
            for ($i = 0; $i < $numAxisXData; $i++) {
246
                $sheet->setCellValueByColumnAndRow(0, $i + 2, $axisXData[$i]);
247
            }
248
249
            // Y-axis
250
            $axisYData = array_values($series->getValues());
251
            $numAxisYData = count($axisYData);
252
            for ($i = 0; $i < $numAxisYData; $i++) {
253
                $sheet->setCellValueByColumnAndRow(1 + $seriesIndex, $i + 2, $axisYData[$i]);
254
            }
255
256
            ++$seriesIndex;
257
        }
258
259
        // Save to string
260
        $writer = \PHPExcel_IOFactory::createWriter($workbook, 'Excel2007');
261
        $writer->save($tempName);
262
263
        // Load file in memory
264
        $returnValue = file_get_contents($tempName);
265
        if (@unlink($tempName) === false) {
266
            throw new \Exception('The file ' . $tempName . ' could not removed.');
267
        }
268
269
        return $returnValue;
270
    }
271
272
    /**
273
     * Write element with value attribute
274
     *
275
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
276
     * @param string $elementName
277
     * @param string $value
278
     */
279 31
    protected function writeElementWithValAttribute($objWriter, $elementName, $value)
280
    {
281 31
        $objWriter->startElement($elementName);
282 31
        $objWriter->writeAttribute('val', $value);
283 31
        $objWriter->endElement();
284 31
    }
285
286
    /**
287
     * Write single value or reference
288
     *
289
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
290
     * @param boolean $isReference
291
     * @param mixed $value
292
     * @param string $reference
293
     */
294 31
    protected function writeSingleValueOrReference($objWriter, $isReference, $value, $reference)
295
    {
296 31
        if (!$isReference) {
297
            // Value
298 31
            $objWriter->writeElement('c:v', $value);
299 31
            return;
300
        }
301
302
        // Reference and cache
303
        $objWriter->startElement('c:strRef');
304
        $objWriter->writeElement('c:f', $reference);
305
        $objWriter->startElement('c:strCache');
306
        $objWriter->startElement('c:ptCount');
307
        $objWriter->writeAttribute('val', '1');
308
        $objWriter->endElement();
309
310
        $objWriter->startElement('c:pt');
311
        $objWriter->writeAttribute('idx', '0');
312
        $objWriter->writeElement('c:v', $value);
313
        $objWriter->endElement();
314
        $objWriter->endElement();
315
        $objWriter->endElement();
316
    }
317
318
    /**
319
     * Write series value or reference
320
     *
321
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
322
     * @param boolean $isReference
323
     * @param mixed $values
324
     * @param string $reference
325
     */
326 31
    protected function writeMultipleValuesOrReference($objWriter, $isReference, $values, $reference)
327
    {
328
        // c:strLit / c:numLit
329
        // c:strRef / c:numRef
330 31
        $referenceType = ($isReference ? 'Ref' : 'Lit');
331 31
        $dataType = 'str';
332 31
        if (is_int($values[0]) || is_float($values[0])) {
333 31
            $dataType = 'num';
334
        }
335 31
        $objWriter->startElement('c:' . $dataType . $referenceType);
336
337 31
        $numValues = count($values);
338 31
        if (!$isReference) {
339
            // Value
340
341
            // c:ptCount
342 31
            $objWriter->startElement('c:ptCount');
343 31
            $objWriter->writeAttribute('val', count($values));
344 31
            $objWriter->endElement();
345
346
            // Add points
347 31
            for ($i = 0; $i < $numValues; $i++) {
348
                // c:pt
349 31
                $objWriter->startElement('c:pt');
350 31
                $objWriter->writeAttribute('idx', $i);
351 31
                $objWriter->writeElement('c:v', $values[$i]);
352 31
                $objWriter->endElement();
353
            }
354
        } else {
355
            // Reference
356
            $objWriter->writeElement('c:f', $reference);
357
            $objWriter->startElement('c:' . $dataType . 'Cache');
358
359
            // c:ptCount
360
            $objWriter->startElement('c:ptCount');
361
            $objWriter->writeAttribute('val', count($values));
362
            $objWriter->endElement();
363
364
            // Add points
365
            for ($i = 0; $i < $numValues; $i++) {
366
                // c:pt
367
                $objWriter->startElement('c:pt');
368
                $objWriter->writeAttribute('idx', $i);
369
                $objWriter->writeElement('c:v', $values[$i]);
370
                $objWriter->endElement();
371
            }
372
373
            $objWriter->endElement();
374
        }
375
376 31
        $objWriter->endElement();
377 31
    }
378
379
    /**
380
     * Write Title
381
     *
382
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
383
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Title $subject
384
     * @throws \Exception
385
     */
386 35
    protected function writeTitle(XMLWriter $objWriter, Title $subject)
387
    {
388
        // c:title
389 35
        $objWriter->startElement('c:title');
390
391
        // c:tx
392 35
        $objWriter->startElement('c:tx');
393
394
        // c:rich
395 35
        $objWriter->startElement('c:rich');
396
397
        // a:bodyPr
398 35
        $objWriter->writeElement('a:bodyPr', null);
399
400
        // a:lstStyle
401 35
        $objWriter->writeElement('a:lstStyle', null);
402
403
        // a:p
404 35
        $objWriter->startElement('a:p');
405
406
        // a:pPr
407 35
        $objWriter->startElement('a:pPr');
408 35
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
409 35
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
410 35
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
411 35
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
412 35
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
413 35
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
414
415
        // a:defRPr
416 35
        $objWriter->writeElement('a:defRPr', null);
417
418 35
        $objWriter->endElement();
419
420
        // a:r
421 35
        $objWriter->startElement('a:r');
422
423
        // a:rPr
424 35
        $objWriter->startElement('a:rPr');
425 35
        $objWriter->writeAttribute('lang', 'en-US');
426 35
        $objWriter->writeAttribute('dirty', '0');
427
428 35
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
429 35
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
430 35
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
431 35
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
432 35
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
433 35
        $objWriter->writeAttributeIf($subject->getFont()->isSuperScript(), 'baseline', '30000');
434 35
        $objWriter->writeAttributeIf($subject->getFont()->isSubScript(), 'baseline', '-25000');
435
436
        // Font - a:solidFill
437 35
        $objWriter->startElement('a:solidFill');
438
439 35
        $this->writeColor($objWriter, $subject->getFont()->getColor());
440
441 35
        $objWriter->endElement();
442
443
        // Font - a:latin
444 35
        $objWriter->startElement('a:latin');
445 35
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
446 35
        $objWriter->endElement();
447
448 35
        $objWriter->endElement();
449
450
        // a:t
451 35
        $objWriter->writeElement('a:t', $subject->getText());
452
453 35
        $objWriter->endElement();
454
455
        // a:endParaRPr
456 35
        $objWriter->startElement('a:endParaRPr');
457 35
        $objWriter->writeAttribute('lang', 'en-US');
458 35
        $objWriter->writeAttribute('dirty', '0');
459 35
        $objWriter->endElement();
460
461 35
        $objWriter->endElement();
462
463 35
        $objWriter->endElement();
464
465 35
        $objWriter->endElement();
466
467
        // Write layout
468 35
        $this->writeLayout($objWriter, $subject);
469
470
        // c:overlay
471 35
        $objWriter->startElement('c:overlay');
472 35
        $objWriter->writeAttribute('val', '0');
473 35
        $objWriter->endElement();
474
475 35
        $objWriter->endElement();
476 35
    }
477
478
    /**
479
     * Write Plot Area
480
     *
481
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
482
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\PlotArea $subject
483
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
484
     * @throws \Exception
485
     */
486 36
    protected function writePlotArea(XMLWriter $objWriter, PlotArea $subject, Chart $chart)
487
    {
488
        // c:plotArea
489 36
        $objWriter->startElement('c:plotArea');
490
491
        // Write layout
492 36
        $this->writeLayout($objWriter, $subject);
493
494
        // Write chart
495 36
        $chartType = $subject->getType();
496 36
        if ($chartType instanceof Area) {
497 1
            $this->writeTypeArea($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
498 35
        } elseif ($chartType instanceof Bar) {
499 3
            $this->writeTypeBar($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
500 32
        } elseif ($chartType instanceof Bar3D) {
501 4
            $this->writeTypeBar3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
502 28
        } elseif ($chartType instanceof Doughnut) {
503 1
            $this->writeTypeDoughnut($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
504 27
        } elseif ($chartType instanceof Pie) {
505 2
            $this->writeTypePie($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
506 25
        } elseif ($chartType instanceof Pie3D) {
507 4
            $this->writeTypePie3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
508 21
        } elseif ($chartType instanceof Line) {
509 15
            $this->writeTypeLine($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
510 6
        } elseif ($chartType instanceof Scatter) {
511 5
            $this->writeTypeScatter($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
512
        } else {
513 1
            throw new \Exception('The chart type provided could not be rendered.');
514
        }
515
516
        // Write X axis?
517 35
        if ($chartType->hasAxisX()) {
518 28
            $this->writeAxis($objWriter, $subject->getAxisX(), Chart\Axis::AXIS_X, $chartType);
519
        }
520
521
        // Write Y axis?
522 35
        if ($chartType->hasAxisY()) {
523 28
            $this->writeAxis($objWriter, $subject->getAxisY(), Chart\Axis::AXIS_Y, $chartType);
524
        }
525
526 35
        $objWriter->endElement();
527 35
    }
528
529
    /**
530
     * Write Legend
531
     *
532
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
533
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Legend $subject
534
     * @throws \Exception
535
     */
536 35
    protected function writeLegend(XMLWriter $objWriter, Legend $subject)
537
    {
538
        // c:legend
539 35
        $objWriter->startElement('c:legend');
540
541
        // c:legendPos
542 35
        $objWriter->startElement('c:legendPos');
543 35
        $objWriter->writeAttribute('val', $subject->getPosition());
544 35
        $objWriter->endElement();
545
546
        // Write layout
547 35
        $this->writeLayout($objWriter, $subject);
548
549
        // c:overlay
550 35
        $objWriter->startElement('c:overlay');
551 35
        $objWriter->writeAttribute('val', '0');
552 35
        $objWriter->endElement();
553
554
        // c:spPr
555 35
        $objWriter->startElement('c:spPr');
556
557
        // Fill
558 35
        $this->writeFill($objWriter, $subject->getFill());
559
560
        // Border
561 35
        if ($subject->getBorder()->getLineStyle() != Border::LINE_NONE) {
562 35
            $this->writeBorder($objWriter, $subject->getBorder(), '');
563
        }
564
565 35
        $objWriter->endElement();
566
567
        // c:txPr
568 35
        $objWriter->startElement('c:txPr');
569
570
        // a:bodyPr
571 35
        $objWriter->writeElement('a:bodyPr', null);
572
573
        // a:lstStyle
574 35
        $objWriter->writeElement('a:lstStyle', null);
575
576
        // a:p
577 35
        $objWriter->startElement('a:p');
578
579
        // a:pPr
580 35
        $objWriter->startElement('a:pPr');
581 35
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
582 35
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
583 35
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
584 35
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
585 35
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
586 35
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
587
588
        // a:defRPr
589 35
        $objWriter->startElement('a:defRPr');
590
591 35
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
592 35
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
593 35
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
594 35
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
595 35
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
596 35
        $objWriter->writeAttributeIf($subject->getFont()->isSuperScript(), 'baseline', '30000');
597 35
        $objWriter->writeAttributeIf($subject->getFont()->isSubScript(), 'baseline', '-25000');
598
599
        // Font - a:solidFill
600 35
        $objWriter->startElement('a:solidFill');
601
602 35
        $this->writeColor($objWriter, $subject->getFont()->getColor());
603
604 35
        $objWriter->endElement();
605
606
        // Font - a:latin
607 35
        $objWriter->startElement('a:latin');
608 35
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
609 35
        $objWriter->endElement();
610
611 35
        $objWriter->endElement();
612
613 35
        $objWriter->endElement();
614
615
        // a:endParaRPr
616 35
        $objWriter->startElement('a:endParaRPr');
617 35
        $objWriter->writeAttribute('lang', 'en-US');
618 35
        $objWriter->writeAttribute('dirty', '0');
619 35
        $objWriter->endElement();
620
621 35
        $objWriter->endElement();
622
623 35
        $objWriter->endElement();
624
625 35
        $objWriter->endElement();
626 35
    }
627
628
    /**
629
     * Write Layout
630
     *
631
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
632
     * @param  mixed $subject
633
     * @throws \Exception
634
     */
635 36
    protected function writeLayout(XMLWriter $objWriter, $subject)
636
    {
637
        // c:layout
638 36
        $objWriter->startElement('c:layout');
639
640
        // c:manualLayout
641 36
        $objWriter->startElement('c:manualLayout');
642
        // c:xMode
643 36
        $objWriter->startElement('c:xMode');
644 36
        $objWriter->writeAttribute('val', 'edge');
645 36
        $objWriter->endElement();
646
647
        // c:yMode
648 36
        $objWriter->startElement('c:yMode');
649 36
        $objWriter->writeAttribute('val', 'edge');
650 36
        $objWriter->endElement();
651
652 36
        if ($subject->getOffsetX() != 0) {
653
            // c:x
654 35
            $objWriter->startElement('c:x');
655 35
            $objWriter->writeAttribute('val', $subject->getOffsetX());
656 35
            $objWriter->endElement();
657
        }
658
659 36
        if ($subject->getOffsetY() != 0) {
660
            // c:y
661 35
            $objWriter->startElement('c:y');
662 35
            $objWriter->writeAttribute('val', $subject->getOffsetY());
663 35
            $objWriter->endElement();
664
        }
665
666 36
        if ($subject->getWidth() != 0) {
667
            // c:w
668
            $objWriter->startElement('c:w');
669
            $objWriter->writeAttribute('val', $subject->getWidth());
670
            $objWriter->endElement();
671
        }
672
673 36
        if ($subject->getHeight() != 0) {
674
            // c:h
675
            $objWriter->startElement('c:h');
676
            $objWriter->writeAttribute('val', $subject->getHeight());
677
            $objWriter->endElement();
678
        }
679
680 36
        $objWriter->endElement();
681 36
        $objWriter->endElement();
682 36
    }
683
684
    /**
685
     * Write Type Area
686
     *
687
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
688
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Area $subject
689
     * @param  boolean $includeSheet
690
     * @throws \Exception
691
     */
692 1
    protected function writeTypeArea(XMLWriter $objWriter, Area $subject, $includeSheet = false)
693
    {
694
        // c:lineChart
695 1
        $objWriter->startElement('c:areaChart');
696
697
        // c:grouping
698 1
        $objWriter->startElement('c:grouping');
699 1
        $objWriter->writeAttribute('val', 'standard');
700 1
        $objWriter->endElement();
701
702
        // Write series
703 1
        $seriesIndex = 0;
704 1
        foreach ($subject->getSeries() as $series) {
705
            // c:ser
706 1
            $objWriter->startElement('c:ser');
707
708
            // c:ser > c:idx
709 1
            $objWriter->startElement('c:idx');
710 1
            $objWriter->writeAttribute('val', $seriesIndex);
711 1
            $objWriter->endElement();
712
713
            // c:ser > c:order
714 1
            $objWriter->startElement('c:order');
715 1
            $objWriter->writeAttribute('val', $seriesIndex);
716 1
            $objWriter->endElement();
717
718
            // c:ser > c:tx
719 1
            $objWriter->startElement('c:tx');
720 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
721 1
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
722 1
            $objWriter->endElement();
723
724
            // c:ser > c:dLbls
725
            // @link : https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.areachartseries.aspx
726 1
            $objWriter->startElement('c:dLbls');
727
728
            // c:ser > c:dLbls > c:showVal
729 1
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
730
731
            // c:ser > c:dLbls > c:showCatName
732 1
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
733
734
            // c:ser > c:dLbls > c:showSerName
735 1
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
736
737
            // c:ser > c:dLbls > c:showPercent
738 1
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
739
740
            // c:ser > ##c:dLbls
741 1
            $objWriter->endElement();
742
743 1
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
744
                // c:spPr
745
                $objWriter->startElement('c:spPr');
746
                // Write fill
747
                $this->writeFill($objWriter, $series->getFill());
748
                // ## c:spPr
749
                $objWriter->endElement();
750
            }
751
752
            // Write X axis data
753 1
            $axisXData = array_keys($series->getValues());
754
755
            // c:cat
756 1
            $objWriter->startElement('c:cat');
757 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
758 1
            $objWriter->endElement();
759
760
            // Write Y axis data
761 1
            $axisYData = array_values($series->getValues());
762
763
            // c:val
764 1
            $objWriter->startElement('c:val');
765 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
766 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
767 1
            $objWriter->endElement();
768
769 1
            $objWriter->endElement();
770
771 1
            ++$seriesIndex;
772
        }
773
774
        // c:axId
775 1
        $objWriter->startElement('c:axId');
776 1
        $objWriter->writeAttribute('val', '52743552');
777 1
        $objWriter->endElement();
778
779
        // c:axId
780 1
        $objWriter->startElement('c:axId');
781 1
        $objWriter->writeAttribute('val', '52749440');
782 1
        $objWriter->endElement();
783
784 1
        $objWriter->endElement();
785 1
    }
786
787
    /**
788
     * Write Type Bar
789
     *
790
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
791
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar $subject
792
     * @param  boolean $includeSheet
793
     * @throws \Exception
794
     */
795 3
    protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, $includeSheet = false, $showAxisCategories = false)
0 ignored issues
show
Unused Code introduced by
The parameter $showAxisCategories is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
796
    {
797
        // c:bar3DChart
798 3
        $objWriter->startElement('c:barChart');
799
800
        // c:barDir
801 3
        $objWriter->startElement('c:barDir');
802 3
        $objWriter->writeAttribute('val', $subject->getBarDirection());
803 3
        $objWriter->endElement();
804
805
        // c:grouping
806 3
        $objWriter->startElement('c:grouping');
807 3
        $objWriter->writeAttribute('val', $subject->getBarGrouping());
808 3
        $objWriter->endElement();
809
810
        // Write series
811 3
        $seriesIndex = 0;
812 3
        foreach ($subject->getSeries() as $series) {
813
            // c:ser
814 3
            $objWriter->startElement('c:ser');
815
816
            // c:idx
817 3
            $objWriter->startElement('c:idx');
818 3
            $objWriter->writeAttribute('val', $seriesIndex);
819 3
            $objWriter->endElement();
820
821
            // c:order
822 3
            $objWriter->startElement('c:order');
823 3
            $objWriter->writeAttribute('val', $seriesIndex);
824 3
            $objWriter->endElement();
825
826
            // c:tx
827 3
            $objWriter->startElement('c:tx');
828 3
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
829 3
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
830 3
            $objWriter->endElement();
831
832
            // Fills for points?
833 3
            $dataPointFills = $series->getDataPointFills();
834 3
            foreach ($dataPointFills as $key => $value) {
835
                // c:dPt
836 1
                $objWriter->startElement('c:dPt');
837
838
                // c:idx
839 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
840
841 1
                if ($value->getFillType() != Fill::FILL_NONE) {
842
                    // c:spPr
843 1
                    $objWriter->startElement('c:spPr');
844
                    // Write fill
845 1
                    $this->writeFill($objWriter, $value);
846
                    // ## c:spPr
847 1
                    $objWriter->endElement();
848
                }
849
850
                // ## c:dPt
851 1
                $objWriter->endElement();
852
            }
853
854
            // c:dLbls
855 3
            $objWriter->startElement('c:dLbls');
856
857 3
            if ($series->hasDlblNumFormat()) {
858
                //c:numFmt
859
                $objWriter->startElement('c:numFmt');
860
                $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
861
                $objWriter->writeAttribute('sourceLinked', '0');
862
                $objWriter->endElement();
863
            }
864
865
            // c:txPr
866 3
            $objWriter->startElement('c:txPr');
867
868
            // a:bodyPr
869 3
            $objWriter->writeElement('a:bodyPr', null);
870
871
            // a:lstStyle
872 3
            $objWriter->writeElement('a:lstStyle', null);
873
874
            // a:p
875 3
            $objWriter->startElement('a:p');
876
877
            // a:pPr
878 3
            $objWriter->startElement('a:pPr');
879
880
            // a:defRPr
881 3
            $objWriter->startElement('a:defRPr');
882
883 3
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
884 3
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
885 3
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
886 3
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
887 3
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
888 3
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
889 3
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
890
891
            // Font - a:solidFill
892 3
            $objWriter->startElement('a:solidFill');
893
894 3
            $this->writeColor($objWriter, $series->getFont()->getColor());
895
896 3
            $objWriter->endElement();
897
898
            // Font - a:latin
899 3
            $objWriter->startElement('a:latin');
900 3
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
901 3
            $objWriter->endElement();
902
903 3
            $objWriter->endElement();
904
905 3
            $objWriter->endElement();
906
907
            // a:endParaRPr
908 3
            $objWriter->startElement('a:endParaRPr');
909 3
            $objWriter->writeAttribute('lang', 'en-US');
910 3
            $objWriter->writeAttribute('dirty', '0');
911 3
            $objWriter->endElement();
912
913 3
            $objWriter->endElement();
914
915 3
            $objWriter->endElement();
916
917
            // c:dLblPos
918 3
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
919
920
            // c:showVal
921 3
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
922
923
            // c:showCatName
924 3
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
925
926
            // c:showSerName
927 3
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
928
929
            // c:showPercent
930 3
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
931
932
            // c:showLeaderLines
933 3
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
934
935
            // c:separator
936 3
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
937
938 3
            $objWriter->endElement();
939
940
            // c:spPr
941 3
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
942
                // c:spPr
943
                $objWriter->startElement('c:spPr');
944
                // Write fill
945
                $this->writeFill($objWriter, $series->getFill());
946
                // ## c:spPr
947
                $objWriter->endElement();
948
            }
949
950
            // Write X axis data
951 3
            $axisXData = array_keys($series->getValues());
952
953
            // c:cat
954 3
            if($subject->hasShowCategories()) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after IF keyword; 0 found
Loading history...
955 3
                $objWriter->startElement('c:cat');
956 3
                $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
957 3
                $objWriter->endElement();
958
            }
959
960
            // Write Y axis data
961 3
            $axisYData = array_values($series->getValues());
962
963
            // c:val
964 3
            $objWriter->startElement('c:val');
965 3
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
966 3
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
967 3
            $objWriter->endElement();
968
969 3
            $objWriter->endElement();
970
971 3
            ++$seriesIndex;
972
        }
973
974
        // c:overlap
975 3
        $objWriter->startElement('c:overlap');
976 3
        if ($subject->getBarGrouping() == Bar::GROUPING_CLUSTERED) {
977 3
            $objWriter->writeAttribute('val', '0');
978
        } elseif ($subject->getBarGrouping() == Bar::GROUPING_STACKED || $subject->getBarGrouping() == Bar::GROUPING_PERCENTSTACKED) {
979
            $objWriter->writeAttribute('val', '100');
980
        }
981 3
        $objWriter->endElement();
982
983
        // c:gapWidth
984 3
        $objWriter->startElement('c:gapWidth');
985 3
        $objWriter->writeAttribute('val', $subject->getGapWidthPercent());
986 3
        $objWriter->endElement();
987
988
        // c:shape
989 3
        $objWriter->startElement('c:shape');
990 3
        $objWriter->writeAttribute('val', 'box');
991 3
        $objWriter->endElement();
992
993
        // c:axId
994 3
        $objWriter->startElement('c:axId');
995 3
        $objWriter->writeAttribute('val', '52743552');
996 3
        $objWriter->endElement();
997
998
        // c:axId
999 3
        $objWriter->startElement('c:axId');
1000 3
        $objWriter->writeAttribute('val', '52749440');
1001 3
        $objWriter->endElement();
1002
1003
        // c:axId
1004 3
        $objWriter->startElement('c:axId');
1005 3
        $objWriter->writeAttribute('val', '0');
1006 3
        $objWriter->endElement();
1007
1008 3
        $objWriter->endElement();
1009 3
    }
1010
1011
    /**
1012
     * Write Type Bar3D
1013
     *
1014
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1015
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar3D $subject
1016
     * @param  boolean $includeSheet
1017
     * @throws \Exception
1018
     */
1019 4
    protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, $includeSheet = false)
1020
    {
1021
        // c:bar3DChart
1022 4
        $objWriter->startElement('c:bar3DChart');
1023
1024
        // c:barDir
1025 4
        $objWriter->startElement('c:barDir');
1026 4
        $objWriter->writeAttribute('val', $subject->getBarDirection());
1027 4
        $objWriter->endElement();
1028
1029
        // c:grouping
1030 4
        $objWriter->startElement('c:grouping');
1031 4
        $objWriter->writeAttribute('val', $subject->getBarGrouping());
1032 4
        $objWriter->endElement();
1033
1034
        // Write series
1035 4
        $seriesIndex = 0;
1036 4
        foreach ($subject->getSeries() as $series) {
1037
            // c:ser
1038 4
            $objWriter->startElement('c:ser');
1039
1040
            // c:idx
1041 4
            $objWriter->startElement('c:idx');
1042 4
            $objWriter->writeAttribute('val', $seriesIndex);
1043 4
            $objWriter->endElement();
1044
1045
            // c:order
1046 4
            $objWriter->startElement('c:order');
1047 4
            $objWriter->writeAttribute('val', $seriesIndex);
1048 4
            $objWriter->endElement();
1049
1050
            // c:tx
1051 4
            $objWriter->startElement('c:tx');
1052 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1053 4
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1054 4
            $objWriter->endElement();
1055
1056
            // Fills for points?
1057 4
            $dataPointFills = $series->getDataPointFills();
1058 4
            foreach ($dataPointFills as $key => $value) {
1059
                // c:dPt
1060 1
                $objWriter->startElement('c:dPt');
1061
1062
                // c:idx
1063 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1064
1065 1
                if ($value->getFillType() != Fill::FILL_NONE) {
1066
                    // c:spPr
1067 1
                    $objWriter->startElement('c:spPr');
1068
                    // Write fill
1069 1
                    $this->writeFill($objWriter, $value);
1070
                    // ## c:spPr
1071 1
                    $objWriter->endElement();
1072
                }
1073
1074
                // ## c:dPt
1075 1
                $objWriter->endElement();
1076
            }
1077
1078
            // c:dLbls
1079 4
            $objWriter->startElement('c:dLbls');
1080
1081
            // c:txPr
1082 4
            $objWriter->startElement('c:txPr');
1083
1084
            // a:bodyPr
1085 4
            $objWriter->writeElement('a:bodyPr', null);
1086
1087
            // a:lstStyle
1088 4
            $objWriter->writeElement('a:lstStyle', null);
1089
1090
            // a:p
1091 4
            $objWriter->startElement('a:p');
1092
1093
            // a:pPr
1094 4
            $objWriter->startElement('a:pPr');
1095
1096
            // a:defRPr
1097 4
            $objWriter->startElement('a:defRPr');
1098
1099 4
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1100 4
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1101 4
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1102 4
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1103 4
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1104 4
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1105 4
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1106
1107
            // Font - a:solidFill
1108 4
            $objWriter->startElement('a:solidFill');
1109
1110 4
            $this->writeColor($objWriter, $series->getFont()->getColor());
1111
1112 4
            $objWriter->endElement();
1113
1114
            // Font - a:latin
1115 4
            $objWriter->startElement('a:latin');
1116 4
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1117 4
            $objWriter->endElement();
1118
1119 4
            $objWriter->endElement();
1120
1121 4
            $objWriter->endElement();
1122
1123
            // a:endParaRPr
1124 4
            $objWriter->startElement('a:endParaRPr');
1125 4
            $objWriter->writeAttribute('lang', 'en-US');
1126 4
            $objWriter->writeAttribute('dirty', '0');
1127 4
            $objWriter->endElement();
1128
1129 4
            $objWriter->endElement();
1130
1131 4
            $objWriter->endElement();
1132
1133
            // c:showVal
1134 4
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1135
1136
            // c:showCatName
1137 4
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1138
1139
            // c:showSerName
1140 4
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1141
1142
            // c:showPercent
1143 4
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1144
1145
            // c:showLeaderLines
1146 4
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1147
1148
            // c:separator
1149 4
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1150
1151 4
            $objWriter->endElement();
1152
1153
            // c:spPr
1154 4
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
1155
                // c:spPr
1156
                $objWriter->startElement('c:spPr');
1157
                // Write fill
1158
                $this->writeFill($objWriter, $series->getFill());
1159
                // ## c:spPr
1160
                $objWriter->endElement();
1161
            }
1162
1163
            // Write X axis data
1164 4
            $axisXData = array_keys($series->getValues());
1165
1166
            // c:cat
1167 4
            $objWriter->startElement('c:cat');
1168 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1169 4
            $objWriter->endElement();
1170
1171
            // Write Y axis data
1172 4
            $axisYData = array_values($series->getValues());
1173
1174
            // c:val
1175 4
            $objWriter->startElement('c:val');
1176 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1177 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1178 4
            $objWriter->endElement();
1179
1180 4
            $objWriter->endElement();
1181
1182 4
            ++$seriesIndex;
1183
        }
1184
1185
        // c:gapWidth
1186 4
        $objWriter->startElement('c:gapWidth');
1187 4
        $objWriter->writeAttribute('val', $subject->getGapWidthPercent());
1188 4
        $objWriter->endElement();
1189
1190
        // c:shape
1191 4
        $objWriter->startElement('c:shape');
1192 4
        $objWriter->writeAttribute('val', 'box');
1193 4
        $objWriter->endElement();
1194
1195
        // c:axId
1196 4
        $objWriter->startElement('c:axId');
1197 4
        $objWriter->writeAttribute('val', '52743552');
1198 4
        $objWriter->endElement();
1199
1200
        // c:axId
1201 4
        $objWriter->startElement('c:axId');
1202 4
        $objWriter->writeAttribute('val', '52749440');
1203 4
        $objWriter->endElement();
1204
1205
        // c:axId
1206 4
        $objWriter->startElement('c:axId');
1207 4
        $objWriter->writeAttribute('val', '0');
1208 4
        $objWriter->endElement();
1209
1210 4
        $objWriter->endElement();
1211 4
    }
1212
1213
    /**
1214
     * Write Type Pie
1215
     *
1216
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1217
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Doughnut $subject
1218
     * @param  boolean $includeSheet
1219
     * @throws \Exception
1220
     */
1221 1
    protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, $includeSheet = false)
1222
    {
1223
        // c:pieChart
1224 1
        $objWriter->startElement('c:doughnutChart');
1225
1226
        // c:varyColors
1227 1
        $objWriter->startElement('c:varyColors');
1228 1
        $objWriter->writeAttribute('val', '1');
1229 1
        $objWriter->endElement();
1230
1231
        // Write series
1232 1
        $seriesIndex = 0;
1233 1
        foreach ($subject->getSeries() as $series) {
1234
            // c:ser
1235 1
            $objWriter->startElement('c:ser');
1236
1237
            // c:idx
1238 1
            $objWriter->startElement('c:idx');
1239 1
            $objWriter->writeAttribute('val', $seriesIndex);
1240 1
            $objWriter->endElement();
1241
1242
            // c:order
1243 1
            $objWriter->startElement('c:order');
1244 1
            $objWriter->writeAttribute('val', $seriesIndex);
1245 1
            $objWriter->endElement();
1246
1247
            // c:tx
1248 1
            $objWriter->startElement('c:tx');
1249 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1250 1
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1251 1
            $objWriter->endElement();
1252
1253
            // Fills for points?
1254 1
            $dataPointFills = $series->getDataPointFills();
1255 1
            foreach ($dataPointFills as $key => $value) {
1256
                // c:dPt
1257 1
                $objWriter->startElement('c:dPt');
1258 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1259
                // c:dPt/c:spPr
1260 1
                $objWriter->startElement('c:spPr');
1261 1
                $this->writeFill($objWriter, $value);
1262
                // c:dPt/##c:spPr
1263 1
                $objWriter->endElement();
1264
                // ##c:dPt
1265 1
                $objWriter->endElement();
1266
            }
1267
1268
            // Write X axis data
1269 1
            $axisXData = array_keys($series->getValues());
1270
1271
            // c:cat
1272 1
            $objWriter->startElement('c:cat');
1273 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1274 1
            $objWriter->endElement();
1275
1276
            // Write Y axis data
1277 1
            $axisYData = array_values($series->getValues());
1278
1279
            // c:val
1280 1
            $objWriter->startElement('c:val');
1281 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1282 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1283 1
            $objWriter->endElement();
1284
1285 1
            $objWriter->endElement();
1286
1287 1
            ++$seriesIndex;
1288
        }
1289
1290
        // c:dLbls
1291 1
        $objWriter->startElement('c:dLbls');
1292
1293 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 1233. 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...
1294 1
        $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1295 1
        $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1296 1
        $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1297 1
        $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1298 1
        $this->writeElementWithValAttribute($objWriter, 'c:showBubbleSize', '0');
1299 1
        $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1300
1301 1
        if ($series->hasDlblNumFormat()) {
1302
            //c:numFmt
1303
            $objWriter->startElement('c:numFmt');
1304
            $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
1305
            $objWriter->writeAttribute('sourceLinked', '0');
1306
            $objWriter->endElement();
1307
        }
1308
1309
        // c:dLbls\c:txPr
1310 1
        $objWriter->startElement('c:txPr');
1311 1
        $objWriter->writeElement('a:bodyPr', null);
1312 1
        $objWriter->writeElement('a:lstStyle', null);
1313
1314
        // c:dLbls\c:txPr\a:p
1315 1
        $objWriter->startElement('a:p');
1316
1317
        // c:dLbls\c:txPr\a:p\a:pPr
1318 1
        $objWriter->startElement('a:pPr');
1319
1320
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr
1321 1
        $objWriter->startElement('a:defRPr');
1322 1
        $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1323 1
        $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1324 1
        $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1325 1
        $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1326 1
        $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1327 1
        $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1328 1
        $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1329
1330
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:solidFill
1331 1
        $objWriter->startElement('a:solidFill');
1332 1
        $this->writeColor($objWriter, $series->getFont()->getColor());
1333 1
        $objWriter->endElement();
1334
1335
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\a:latin
1336 1
        $objWriter->startElement('a:latin');
1337 1
        $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1338 1
        $objWriter->endElement();
1339
1340
        // c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\
1341 1
        $objWriter->endElement();
1342
        // c:dLbls\c:txPr\a:p\a:pPr\
1343 1
        $objWriter->endElement();
1344
1345
        // c:dLbls\c:txPr\a:p\a:endParaRPr
1346 1
        $objWriter->startElement('a:endParaRPr');
1347 1
        $objWriter->writeAttribute('lang', 'en-US');
1348 1
        $objWriter->writeAttribute('dirty', '0');
1349 1
        $objWriter->endElement();
1350
1351
        // c:dLbls\c:txPr\a:p\
1352 1
        $objWriter->endElement();
1353
        // c:dLbls\c:txPr\
1354 1
        $objWriter->endElement();
1355
1356 1
        $separator = $series->getSeparator();
1357 1
        if (!empty($separator) && $separator != PHP_EOL) {
1358
            // c:dLbls\c:separator
1359 1
            $objWriter->writeElement('c:separator', $separator);
1360
        }
1361
1362
        // c:dLbls\
1363 1
        $objWriter->endElement();
1364
1365 1
        $this->writeElementWithValAttribute($objWriter, 'c:firstSliceAng', '0');
1366 1
        $this->writeElementWithValAttribute($objWriter, 'c:holeSize', $subject->getHoleSize());
1367
1368 1
        $objWriter->endElement();
1369 1
    }
1370
1371
    /**
1372
     * Write Type Pie
1373
     *
1374
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1375
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie $subject
1376
     * @param  boolean $includeSheet
1377
     * @throws \Exception
1378
     */
1379 2
    protected function writeTypePie(XMLWriter $objWriter, Pie $subject, $includeSheet = false)
1380
    {
1381
        // c:pieChart
1382 2
        $objWriter->startElement('c:pieChart');
1383
1384
        // c:varyColors
1385 2
        $objWriter->startElement('c:varyColors');
1386 2
        $objWriter->writeAttribute('val', '1');
1387 2
        $objWriter->endElement();
1388
1389
        // Write series
1390 2
        $seriesIndex = 0;
1391 2
        foreach ($subject->getSeries() as $series) {
1392
            // c:ser
1393 2
            $objWriter->startElement('c:ser');
1394
1395
            // c:idx
1396 2
            $objWriter->startElement('c:idx');
1397 2
            $objWriter->writeAttribute('val', $seriesIndex);
1398 2
            $objWriter->endElement();
1399
1400
            // c:order
1401 2
            $objWriter->startElement('c:order');
1402 2
            $objWriter->writeAttribute('val', $seriesIndex);
1403 2
            $objWriter->endElement();
1404
1405
            // c:tx
1406 2
            $objWriter->startElement('c:tx');
1407 2
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1408 2
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1409 2
            $objWriter->endElement();
1410
1411
            // Fills for points?
1412 2
            $dataPointFills = $series->getDataPointFills();
1413 2
            foreach ($dataPointFills as $key => $value) {
1414
                // c:dPt
1415 1
                $objWriter->startElement('c:dPt');
1416 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1417
                // c:dPt/c:spPr
1418 1
                $objWriter->startElement('c:spPr');
1419 1
                $this->writeFill($objWriter, $value);
1420
                // c:dPt/##c:spPr
1421 1
                $objWriter->endElement();
1422
                // ##c:dPt
1423 1
                $objWriter->endElement();
1424
            }
1425
1426
            // c:dLbls
1427 2
            $objWriter->startElement('c:dLbls');
1428
1429 2
            if ($series->hasDlblNumFormat()) {
1430
                //c:numFmt
1431
                $objWriter->startElement('c:numFmt');
1432
                $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
1433
                $objWriter->writeAttribute('sourceLinked', '0');
1434
                $objWriter->endElement();
1435
            }
1436
1437
            // c:txPr
1438 2
            $objWriter->startElement('c:txPr');
1439
1440
            // a:bodyPr
1441 2
            $objWriter->writeElement('a:bodyPr', null);
1442
1443
            // a:lstStyle
1444 2
            $objWriter->writeElement('a:lstStyle', null);
1445
1446
            // a:p
1447 2
            $objWriter->startElement('a:p');
1448
1449
            // a:pPr
1450 2
            $objWriter->startElement('a:pPr');
1451
1452
            // a:defRPr
1453 2
            $objWriter->startElement('a:defRPr');
1454
1455 2
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1456 2
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1457 2
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1458 2
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1459 2
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1460 2
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1461 2
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1462
1463
            // Font - a:solidFill
1464 2
            $objWriter->startElement('a:solidFill');
1465
1466 2
            $this->writeColor($objWriter, $series->getFont()->getColor());
1467
1468 2
            $objWriter->endElement();
1469
1470
            // Font - a:latin
1471 2
            $objWriter->startElement('a:latin');
1472 2
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1473 2
            $objWriter->endElement();
1474
1475 2
            $objWriter->endElement();
1476
1477 2
            $objWriter->endElement();
1478
1479
            // a:endParaRPr
1480 2
            $objWriter->startElement('a:endParaRPr');
1481 2
            $objWriter->writeAttribute('lang', 'en-US');
1482 2
            $objWriter->writeAttribute('dirty', '0');
1483 2
            $objWriter->endElement();
1484
1485 2
            $objWriter->endElement();
1486
1487 2
            $objWriter->endElement();
1488
1489
            // c:dLblPos
1490 2
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
1491
1492
            // c:showLegendKey
1493 2
            $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0');
1494
1495
            // c:showVal
1496 2
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1497
1498
            // c:showCatName
1499 2
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1500
1501
            // c:showSerName
1502 2
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1503
1504
            // c:showPercent
1505 2
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1506
1507
            // c:showLeaderLines
1508 2
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1509
1510
            // c:separator
1511 2
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1512
1513 2
            $objWriter->endElement();
1514
1515
            // Write X axis data
1516 2
            $axisXData = array_keys($series->getValues());
1517
1518
            // c:cat
1519 2
            $objWriter->startElement('c:cat');
1520 2
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1521 2
            $objWriter->endElement();
1522
1523
            // Write Y axis data
1524 2
            $axisYData = array_values($series->getValues());
1525
1526
            // c:val
1527 2
            $objWriter->startElement('c:val');
1528 2
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1529 2
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1530 2
            $objWriter->endElement();
1531
1532 2
            $objWriter->endElement();
1533
1534 2
            ++$seriesIndex;
1535
        }
1536
1537 2
        $objWriter->endElement();
1538 2
    }
1539
1540
    /**
1541
     * Write Type Pie3D
1542
     *
1543
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1544
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Pie3D $subject
1545
     * @param  boolean $includeSheet
1546
     * @throws \Exception
1547
     */
1548 4
    protected function writeTypePie3D(XMLWriter $objWriter, Pie3D $subject, $includeSheet = false)
1549
    {
1550
        // c:pie3DChart
1551 4
        $objWriter->startElement('c:pie3DChart');
1552
1553
        // c:varyColors
1554 4
        $objWriter->startElement('c:varyColors');
1555 4
        $objWriter->writeAttribute('val', '1');
1556 4
        $objWriter->endElement();
1557
1558
        // Write series
1559 4
        $seriesIndex = 0;
1560 4
        foreach ($subject->getSeries() as $series) {
1561
            // c:ser
1562 4
            $objWriter->startElement('c:ser');
1563
1564
            // c:idx
1565 4
            $objWriter->startElement('c:idx');
1566 4
            $objWriter->writeAttribute('val', $seriesIndex);
1567 4
            $objWriter->endElement();
1568
1569
            // c:order
1570 4
            $objWriter->startElement('c:order');
1571 4
            $objWriter->writeAttribute('val', $seriesIndex);
1572 4
            $objWriter->endElement();
1573
1574
            // c:tx
1575 4
            $objWriter->startElement('c:tx');
1576 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1577 4
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1578 4
            $objWriter->endElement();
1579
1580
            // c:explosion
1581 4
            $objWriter->startElement('c:explosion');
1582 4
            $objWriter->writeAttribute('val', $subject->getExplosion());
1583 4
            $objWriter->endElement();
1584
1585
            // Fills for points?
1586 4
            $dataPointFills = $series->getDataPointFills();
1587 4
            foreach ($dataPointFills as $key => $value) {
1588
                // c:dPt
1589 1
                $objWriter->startElement('c:dPt');
1590 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
1591
                // c:dPt/c:spPr
1592 1
                $objWriter->startElement('c:spPr');
1593 1
                $this->writeFill($objWriter, $value);
1594
                // c:dPt/##c:spPr
1595 1
                $objWriter->endElement();
1596
                // ##c:dPt
1597 1
                $objWriter->endElement();
1598
            }
1599
1600
            // c:dLbls
1601 4
            $objWriter->startElement('c:dLbls');
1602
1603
            // c:txPr
1604 4
            $objWriter->startElement('c:txPr');
1605
1606
            // a:bodyPr
1607 4
            $objWriter->writeElement('a:bodyPr', null);
1608
1609
            // a:lstStyle
1610 4
            $objWriter->writeElement('a:lstStyle', null);
1611
1612
            // a:p
1613 4
            $objWriter->startElement('a:p');
1614
1615
            // a:pPr
1616 4
            $objWriter->startElement('a:pPr');
1617
1618
            // a:defRPr
1619 4
            $objWriter->startElement('a:defRPr');
1620
1621 4
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1622 4
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1623 4
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1624 4
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1625 4
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1626 4
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1627 4
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1628
1629
            // Font - a:solidFill
1630 4
            $objWriter->startElement('a:solidFill');
1631
1632 4
            $this->writeColor($objWriter, $series->getFont()->getColor());
1633
1634 4
            $objWriter->endElement();
1635
1636
            // Font - a:latin
1637 4
            $objWriter->startElement('a:latin');
1638 4
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1639 4
            $objWriter->endElement();
1640
1641 4
            $objWriter->endElement();
1642
1643 4
            $objWriter->endElement();
1644
1645
            // a:endParaRPr
1646 4
            $objWriter->startElement('a:endParaRPr');
1647 4
            $objWriter->writeAttribute('lang', 'en-US');
1648 4
            $objWriter->writeAttribute('dirty', '0');
1649 4
            $objWriter->endElement();
1650
1651 4
            $objWriter->endElement();
1652
1653 4
            $objWriter->endElement();
1654
1655
            // c:dLblPos
1656 4
            $this->writeElementWithValAttribute($objWriter, 'c:dLblPos', $series->getLabelPosition());
1657
1658
            // c:showVal
1659 4
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1660
1661
            // c:showCatName
1662 4
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1663
1664
            // c:showSerName
1665 4
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1666
1667
            // c:showPercent
1668 4
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1669
1670
            // c:showLeaderLines
1671 4
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1672
1673
            // c:separator
1674 4
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1675
1676 4
            $objWriter->endElement();
1677
1678
            // Write X axis data
1679 4
            $axisXData = array_keys($series->getValues());
1680
1681
            // c:cat
1682 4
            $objWriter->startElement('c:cat');
1683 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1684 4
            $objWriter->endElement();
1685
1686
            // Write Y axis data
1687 4
            $axisYData = array_values($series->getValues());
1688
1689
            // c:val
1690 4
            $objWriter->startElement('c:val');
1691 4
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1692 4
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1693 4
            $objWriter->endElement();
1694
1695 4
            $objWriter->endElement();
1696
1697 4
            ++$seriesIndex;
1698
        }
1699
1700 4
        $objWriter->endElement();
1701 4
    }
1702
1703
    /**
1704
     * Write Type Line
1705
     *
1706
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1707
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Line $subject
1708
     * @param  boolean $includeSheet
1709
     * @throws \Exception
1710
     */
1711 15
    protected function writeTypeLine(XMLWriter $objWriter, Line $subject, $includeSheet = false)
1712
    {
1713
        // c:lineChart
1714 15
        $objWriter->startElement('c:lineChart');
1715
1716
        // c:grouping
1717 15
        $objWriter->startElement('c:grouping');
1718 15
        $objWriter->writeAttribute('val', 'standard');
1719 15
        $objWriter->endElement();
1720
1721
        // Write series
1722 15
        $seriesIndex = 0;
1723 15
        foreach ($subject->getSeries() as $series) {
1724
            // c:ser
1725 11
            $objWriter->startElement('c:ser');
1726
1727
            // c:idx
1728 11
            $objWriter->startElement('c:idx');
1729 11
            $objWriter->writeAttribute('val', $seriesIndex);
1730 11
            $objWriter->endElement();
1731
1732
            // c:order
1733 11
            $objWriter->startElement('c:order');
1734 11
            $objWriter->writeAttribute('val', $seriesIndex);
1735 11
            $objWriter->endElement();
1736
1737
            // c:tx
1738 11
            $objWriter->startElement('c:tx');
1739 11
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1740 11
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1741 11
            $objWriter->endElement();
1742
1743
            // c:spPr
1744 11
            $objWriter->startElement('c:spPr');
1745
            // Write fill
1746 11
            $this->writeFill($objWriter, $series->getFill());
1747
            // Write outline
1748 11
            $this->writeOutline($objWriter, $series->getOutline());
1749
            // ## c:spPr
1750 11
            $objWriter->endElement();
1751
1752
            // Marker
1753 11
            $this->writeSeriesMarker($objWriter, $series->getMarker());
1754
1755
            // c:dLbls
1756 11
            $objWriter->startElement('c:dLbls');
1757
1758
            // c:txPr
1759 11
            $objWriter->startElement('c:txPr');
1760
1761
            // a:bodyPr
1762 11
            $objWriter->writeElement('a:bodyPr', null);
1763
1764
            // a:lstStyle
1765 11
            $objWriter->writeElement('a:lstStyle', null);
1766
1767
            // a:p
1768 11
            $objWriter->startElement('a:p');
1769
1770
            // a:pPr
1771 11
            $objWriter->startElement('a:pPr');
1772
1773
            // a:defRPr
1774 11
            $objWriter->startElement('a:defRPr');
1775
1776 11
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1777 11
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1778 11
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1779 11
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1780 11
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1781 11
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1782 11
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1783
1784
            // Font - a:solidFill
1785 11
            $objWriter->startElement('a:solidFill');
1786
1787 11
            $this->writeColor($objWriter, $series->getFont()->getColor());
1788
1789 11
            $objWriter->endElement();
1790
1791
            // Font - a:latin
1792 11
            $objWriter->startElement('a:latin');
1793 11
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1794 11
            $objWriter->endElement();
1795
1796 11
            $objWriter->endElement();
1797
1798 11
            $objWriter->endElement();
1799
1800
            // a:endParaRPr
1801 11
            $objWriter->startElement('a:endParaRPr');
1802 11
            $objWriter->writeAttribute('lang', 'en-US');
1803 11
            $objWriter->writeAttribute('dirty', '0');
1804 11
            $objWriter->endElement();
1805
1806 11
            $objWriter->endElement();
1807
1808 11
            $objWriter->endElement();
1809
1810
            // c:showVal
1811 11
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1812
1813
            // c:showCatName
1814 11
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1815
1816
            // c:showSerName
1817 11
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1818
1819
            // c:showPercent
1820 11
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1821
1822
            // c:showLeaderLines
1823 11
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1824
1825
            // c:separator
1826 11
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1827
1828
            // > c:dLbls
1829 11
            $objWriter->endElement();
1830
1831
            // Write X axis data
1832 11
            $axisXData = array_keys($series->getValues());
1833
1834
            // c:cat
1835 11
            $objWriter->startElement('c:cat');
1836 11
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
1837 11
            $objWriter->endElement();
1838
1839
            // Write Y axis data
1840 11
            $axisYData = array_values($series->getValues());
1841
1842
            // c:val
1843 11
            $objWriter->startElement('c:val');
1844 11
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
1845 11
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
1846 11
            $objWriter->endElement();
1847
1848 11
            $objWriter->endElement();
1849
1850 11
            ++$seriesIndex;
1851
        }
1852
1853
        // c:marker
1854 15
        $objWriter->startElement('c:marker');
1855 15
        $objWriter->writeAttribute('val', '1');
1856 15
        $objWriter->endElement();
1857
1858
        // c:smooth
1859 15
        $objWriter->startElement('c:smooth');
1860 15
        $objWriter->writeAttribute('val', '0');
1861 15
        $objWriter->endElement();
1862
1863
        // c:axId
1864 15
        $objWriter->startElement('c:axId');
1865 15
        $objWriter->writeAttribute('val', '52743552');
1866 15
        $objWriter->endElement();
1867
1868
        // c:axId
1869 15
        $objWriter->startElement('c:axId');
1870 15
        $objWriter->writeAttribute('val', '52749440');
1871 15
        $objWriter->endElement();
1872
1873 15
        $objWriter->endElement();
1874 15
    }
1875
1876
    /**
1877
     * Write Type Scatter
1878
     *
1879
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1880
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Scatter $subject
1881
     * @param  boolean $includeSheet
1882
     * @throws \Exception
1883
     */
1884 5
    protected function writeTypeScatter(XMLWriter $objWriter, Scatter $subject, $includeSheet = false)
1885
    {
1886
        // c:scatterChart
1887 5
        $objWriter->startElement('c:scatterChart');
1888
1889
        // c:scatterStyle
1890 5
        $objWriter->startElement('c:scatterStyle');
1891 5
        $objWriter->writeAttribute('val', 'lineMarker');
1892 5
        $objWriter->endElement();
1893
1894
        // c:varyColors
1895 5
        $objWriter->startElement('c:varyColors');
1896 5
        $objWriter->writeAttribute('val', '0');
1897 5
        $objWriter->endElement();
1898
1899
        // Write series
1900 5
        $seriesIndex = 0;
1901 5
        foreach ($subject->getSeries() as $series) {
1902
            // c:ser
1903 5
            $objWriter->startElement('c:ser');
1904
1905
            // c:idx
1906 5
            $objWriter->startElement('c:idx');
1907 5
            $objWriter->writeAttribute('val', $seriesIndex);
1908 5
            $objWriter->endElement();
1909
1910
            // c:order
1911 5
            $objWriter->startElement('c:order');
1912 5
            $objWriter->writeAttribute('val', $seriesIndex);
1913 5
            $objWriter->endElement();
1914
1915
            // c:tx
1916 5
            $objWriter->startElement('c:tx');
1917 5
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
1918 5
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
1919 5
            $objWriter->endElement();
1920
1921
            // Marker
1922 5
            $this->writeSeriesMarker($objWriter, $series->getMarker());
1923
1924
            // c:dLbls
1925 5
            $objWriter->startElement('c:dLbls');
1926
1927
            // c:txPr
1928 5
            $objWriter->startElement('c:txPr');
1929
1930
            // a:bodyPr
1931 5
            $objWriter->writeElement('a:bodyPr', null);
1932
1933
            // a:lstStyle
1934 5
            $objWriter->writeElement('a:lstStyle', null);
1935
1936
            // a:p
1937 5
            $objWriter->startElement('a:p');
1938
1939
            // a:pPr
1940 5
            $objWriter->startElement('a:pPr');
1941
1942
            // a:defRPr
1943 5
            $objWriter->startElement('a:defRPr');
1944
1945 5
            $objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
1946 5
            $objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
1947 5
            $objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
1948 5
            $objWriter->writeAttribute('sz', ($series->getFont()->getSize() * 100));
1949 5
            $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
1950 5
            $objWriter->writeAttributeIf($series->getFont()->isSuperScript(), 'baseline', '30000');
1951 5
            $objWriter->writeAttributeIf($series->getFont()->isSubScript(), 'baseline', '-25000');
1952
1953
            // Font - a:solidFill
1954 5
            $objWriter->startElement('a:solidFill');
1955
1956 5
            $this->writeColor($objWriter, $series->getFont()->getColor());
1957
1958 5
            $objWriter->endElement();
1959
1960
            // Font - a:latin
1961 5
            $objWriter->startElement('a:latin');
1962 5
            $objWriter->writeAttribute('typeface', $series->getFont()->getName());
1963 5
            $objWriter->endElement();
1964
1965 5
            $objWriter->endElement();
1966
1967 5
            $objWriter->endElement();
1968
1969
            // a:endParaRPr
1970 5
            $objWriter->startElement('a:endParaRPr');
1971 5
            $objWriter->writeAttribute('lang', 'en-US');
1972 5
            $objWriter->writeAttribute('dirty', '0');
1973 5
            $objWriter->endElement();
1974
1975 5
            $objWriter->endElement();
1976
1977 5
            $objWriter->endElement();
1978
1979
            // c:showLegendKey
1980 5
            $this->writeElementWithValAttribute($objWriter, 'c:showLegendKey', $series->hasShowLegendKey() ? '1' : '0');
1981
1982
            // c:showVal
1983 5
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
1984
1985
            // c:showCatName
1986 5
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
1987
1988
            // c:showSerName
1989 5
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
1990
1991
            // c:showPercent
1992 5
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
1993
1994
            // c:showLeaderLines
1995 5
            $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
1996
1997
            // c:separator
1998 5
            $objWriter->writeElementIf($series->hasShowSeparator(), 'c:separator', 'val', $series->getSeparator());
1999
2000 5
            $objWriter->endElement();
2001
2002
            // c:spPr
2003 5
            $objWriter->startElement('c:spPr');
2004
            // Write fill
2005 5
            $this->writeFill($objWriter, $series->getFill());
2006
            // Write outline
2007 5
            $this->writeOutline($objWriter, $series->getOutline());
2008
            // ## c:spPr
2009 5
            $objWriter->endElement();
2010
2011
            // Write X axis data
2012 5
            $axisXData = array_keys($series->getValues());
2013
2014
            // c:xVal
2015 5
            $objWriter->startElement('c:xVal');
2016 5
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
2017 5
            $objWriter->endElement();
2018
2019
            // Write Y axis data
2020 5
            $axisYData = array_values($series->getValues());
2021
2022
            // c:yVal
2023 5
            $objWriter->startElement('c:yVal');
2024 5
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
2025 5
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
2026 5
            $objWriter->endElement();
2027
2028
            // c:smooth
2029 5
            $objWriter->startElement('c:smooth');
2030 5
            $objWriter->writeAttribute('val', '0');
2031 5
            $objWriter->endElement();
2032
2033 5
            $objWriter->endElement();
2034
2035 5
            ++$seriesIndex;
2036
        }
2037
2038
        // c:axId
2039 5
        $objWriter->startElement('c:axId');
2040 5
        $objWriter->writeAttribute('val', '52743552');
2041 5
        $objWriter->endElement();
2042
2043
        // c:axId
2044 5
        $objWriter->startElement('c:axId');
2045 5
        $objWriter->writeAttribute('val', '52749440');
2046 5
        $objWriter->endElement();
2047
2048 5
        $objWriter->endElement();
2049 5
    }
2050
2051
    /**
2052
     * Write chart relationships to XML format
2053
     *
2054
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $pChart
2055
     * @return string                    XML Output
2056
     * @throws \Exception
2057
     */
2058
    public function writeChartRelationships(Chart $pChart)
2059
    {
2060
        // Create XML writer
2061
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
2062
2063
        // XML header
2064
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
2065
2066
        // Relationships
2067
        $objWriter->startElement('Relationships');
2068
        $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
2069
2070
        // Write spreadsheet relationship?
2071
        if ($pChart->hasIncludedSpreadsheet()) {
2072
            $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package', '../embeddings/' . $pChart->getIndexedFilename() . '.xlsx');
2073
        }
2074
2075
        $objWriter->endElement();
2076
2077
        // Return
2078
        return $objWriter->getData();
2079
    }
2080
2081
    /**
2082
     * @param XMLWriter $objWriter
2083
     * @param Chart\Marker $oMarker
2084
     */
2085 16
    protected function writeSeriesMarker(XMLWriter $objWriter, Chart\Marker $oMarker)
2086
    {
2087
        // c:marker
2088 16
        $objWriter->startElement('c:marker');
2089
        // c:marker > c:symbol
2090 16
        $objWriter->startElement('c:symbol');
2091 16
        $objWriter->writeAttribute('val', $oMarker->getSymbol());
2092 16
        $objWriter->endElement();
2093
2094
        // Size if different of none
2095 16
        if ($oMarker->getSymbol() != Chart\Marker::SYMBOL_NONE) {
2096 2
            $markerSize = (int)$oMarker->getSize();
2097 2
            if ($markerSize < 2) {
2098 2
                $markerSize = 2;
2099
            }
2100 2
            if ($markerSize > 72) {
2101 2
                $markerSize = 72;
2102
            }
2103
2104
            /**
2105
             * c:marker > c:size
2106
             * Size in points
2107
             * @link : https://msdn.microsoft.com/en-us/library/hh658135(v=office.12).aspx
2108
             */
2109 2
            $objWriter->startElement('c:size');
2110 2
            $objWriter->writeAttribute('val', $markerSize);
2111 2
            $objWriter->endElement();
2112
        }
2113 16
        $objWriter->endElement();
2114 16
    }
2115
2116
    /**
2117
     * @param XMLWriter $objWriter
2118
     * @param Chart\Axis $oAxis
2119
     * @param $typeAxis
2120
     * @param Chart\Type\AbstractType $typeChart
2121
     */
2122 28
    protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, $typeAxis, Chart\Type\AbstractType $typeChart)
2123
    {
2124 28
        if ($typeAxis != Chart\Axis::AXIS_X && $typeAxis != Chart\Axis::AXIS_Y) {
2125
            return;
2126
        }
2127
2128 28
        if ($typeAxis == Chart\Axis::AXIS_X) {
2129 28
            $mainElement = 'c:catAx';
2130 28
            $axIdVal = '52743552';
2131 28
            $axPosVal = 'b';
2132 28
            $crossAxVal = '52749440';
2133
        } else {
2134 28
            $mainElement = 'c:valAx';
2135 28
            $axIdVal = '52749440';
2136 28
            $axPosVal = 'l';
2137 28
            $crossAxVal = '52743552';
2138
        }
2139
2140
        // $mainElement
2141 28
        $objWriter->startElement($mainElement);
2142
2143
        // $mainElement > c:axId
2144 28
        $objWriter->startElement('c:axId');
2145 28
        $objWriter->writeAttribute('val', $axIdVal);
2146 28
        $objWriter->endElement();
2147
2148
        // $mainElement > c:scaling
2149 28
        $objWriter->startElement('c:scaling');
2150
2151
        // $mainElement > c:scaling > c:orientation
2152 28
        $objWriter->startElement('c:orientation');
2153 28
        $objWriter->writeAttribute('val', 'minMax');
2154 28
        $objWriter->endElement();
2155
2156 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...
2157 1
            $objWriter->startElement('c:max');
2158 1
            $objWriter->writeAttribute('val', $oAxis->getMaxBounds());
2159 1
            $objWriter->endElement();
2160
        }
2161
2162 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...
2163 1
            $objWriter->startElement('c:min');
2164 1
            $objWriter->writeAttribute('val', $oAxis->getMinBounds());
2165 1
            $objWriter->endElement();
2166
        }
2167
2168
        // $mainElement > ##c:scaling
2169 28
        $objWriter->endElement();
2170
2171
        // $mainElement > c:delete
2172 28
        $objWriter->startElement('c:delete');
2173 28
        $objWriter->writeAttribute('val', $oAxis->isVisible() ? '0' : '1');
2174 28
        $objWriter->endElement();
2175
2176
        // $mainElement > c:axPos
2177 28
        $objWriter->startElement('c:axPos');
2178 28
        $objWriter->writeAttribute('val', $axPosVal);
2179 28
        $objWriter->endElement();
2180
2181 28
        $oMajorGridlines = $oAxis->getMajorGridlines();
2182 28
        if ($oMajorGridlines instanceof Gridlines) {
2183 1
            $objWriter->startElement('c:majorGridlines');
2184
2185 1
            $this->writeAxisGridlines($objWriter, $oMajorGridlines);
2186
2187 1
            $objWriter->endElement();
2188
        }
2189
2190 28
        $oMinorGridlines = $oAxis->getMinorGridlines();
2191 28
        if ($oMinorGridlines instanceof Gridlines) {
2192 1
            $objWriter->startElement('c:minorGridlines');
2193
2194 1
            $this->writeAxisGridlines($objWriter, $oMinorGridlines);
2195
2196 1
            $objWriter->endElement();
2197
        }
2198
2199 28
        if ($oAxis->getTitle() != '') {
2200
            // c:title
2201 28
            $objWriter->startElement('c:title');
2202
2203
            // c:tx
2204 28
            $objWriter->startElement('c:tx');
2205
2206
            // c:rich
2207 28
            $objWriter->startElement('c:rich');
2208
2209
            // a:bodyPr
2210 28
            $objWriter->writeElement('a:bodyPr', null);
2211
2212
            // a:lstStyle
2213 28
            $objWriter->writeElement('a:lstStyle', null);
2214
2215
            // a:p
2216 28
            $objWriter->startElement('a:p');
2217
2218
            // a:pPr
2219 28
            $objWriter->startElement('a:pPr');
2220
2221
            // a:defRPr
2222 28
            $objWriter->startElement('a:defRPr');
2223
2224 28
            $objWriter->writeAttribute('b', ($oAxis->getFont()->isBold() ? 'true' : 'false'));
2225 28
            $objWriter->writeAttribute('i', ($oAxis->getFont()->isItalic() ? 'true' : 'false'));
2226 28
            $objWriter->writeAttribute('strike', ($oAxis->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
2227 28
            $objWriter->writeAttribute('sz', ($oAxis->getFont()->getSize() * 100));
2228 28
            $objWriter->writeAttribute('u', $oAxis->getFont()->getUnderline());
2229 28
            $objWriter->writeAttributeIf($oAxis->getFont()->isSuperScript(), 'baseline', '30000');
2230 28
            $objWriter->writeAttributeIf($oAxis->getFont()->isSubScript(), 'baseline', '-25000');
2231
2232
            // Font - a:solidFill
2233 28
            $objWriter->startElement('a:solidFill');
2234 28
            $this->writeColor($objWriter, $oAxis->getFont()->getColor());
2235 28
            $objWriter->endElement();
2236
2237
            // Font - a:latin
2238 28
            $objWriter->startElement('a:latin');
2239 28
            $objWriter->writeAttribute('typeface', $oAxis->getFont()->getName());
2240 28
            $objWriter->endElement();
2241
2242 28
            $objWriter->endElement();
2243
2244
            // ## a:pPr
2245 28
            $objWriter->endElement();
2246
2247
            // a:r
2248 28
            $objWriter->startElement('a:r');
2249
2250
            // a:rPr
2251 28
            $objWriter->startElement('a:rPr');
2252 28
            $objWriter->writeAttribute('lang', 'en-US');
2253 28
            $objWriter->writeAttribute('dirty', '0');
2254 28
            $objWriter->endElement();
2255
2256
            // a:t
2257 28
            $objWriter->writeElement('a:t', $oAxis->getTitle());
2258
2259
            // ## a:r
2260 28
            $objWriter->endElement();
2261
2262
            // a:endParaRPr
2263 28
            $objWriter->startElement('a:endParaRPr');
2264 28
            $objWriter->writeAttribute('lang', 'en-US');
2265 28
            $objWriter->writeAttribute('dirty', '0');
2266 28
            $objWriter->endElement();
2267
2268
            // ## a:p
2269 28
            $objWriter->endElement();
2270
2271
            // ## c:rich
2272 28
            $objWriter->endElement();
2273
2274
            // ## c:tx
2275 28
            $objWriter->endElement();
2276
2277
            // ## c:title
2278 28
            $objWriter->endElement();
2279
        }
2280
2281
        // c:numFmt
2282 28
        $objWriter->startElement('c:numFmt');
2283 28
        $objWriter->writeAttribute('formatCode', $oAxis->getFormatCode());
2284 28
        $objWriter->writeAttribute('sourceLinked', '1');
2285 28
        $objWriter->endElement();
2286
2287
        // c:majorTickMark
2288 28
        $objWriter->startElement('c:majorTickMark');
2289 28
        $objWriter->writeAttribute('val', $oAxis->getMajorTickMark());
2290 28
        $objWriter->endElement();
2291
2292
        // c:minorTickMark
2293 28
        $objWriter->startElement('c:minorTickMark');
2294 28
        $objWriter->writeAttribute('val', $oAxis->getMinorTickMark());
2295 28
        $objWriter->endElement();
2296
2297
        // c:tickLblPos
2298 28
        $objWriter->startElement('c:tickLblPos');
2299 28
        $objWriter->writeAttribute('val', 'nextTo');
2300 28
        $objWriter->endElement();
2301
2302
        // c:spPr
2303 28
        $objWriter->startElement('c:spPr');
2304
        // Outline
2305 28
        $this->writeOutline($objWriter, $oAxis->getOutline());
2306
        // ##c:spPr
2307 28
        $objWriter->endElement();
2308
2309
        // c:crossAx
2310 28
        $objWriter->startElement('c:crossAx');
2311 28
        $objWriter->writeAttribute('val', $crossAxVal);
2312 28
        $objWriter->endElement();
2313
2314
        // c:crosses
2315 28
        $objWriter->startElement('c:crosses');
2316 28
        $objWriter->writeAttribute('val', 'autoZero');
2317 28
        $objWriter->endElement();
2318
2319 28
        if ($typeAxis == Chart\Axis::AXIS_X) {
2320
            // c:lblAlgn
2321 28
            $objWriter->startElement('c:lblAlgn');
2322 28
            $objWriter->writeAttribute('val', 'ctr');
2323 28
            $objWriter->endElement();
2324
2325
            // c:lblOffset
2326 28
            $objWriter->startElement('c:lblOffset');
2327 28
            $objWriter->writeAttribute('val', '100');
2328 28
            $objWriter->endElement();
2329
        }
2330
2331 28
        if ($typeAxis == Chart\Axis::AXIS_Y) {
2332
            // c:crossBetween
2333 28
            $objWriter->startElement('c:crossBetween');
2334
            // midCat : Position Axis On Tick Marks
2335
            // between : Between Tick Marks
2336 28
            if ($typeChart instanceof Area) {
2337 1
                $objWriter->writeAttribute('val', 'midCat');
2338
            } else {
2339 27
                $objWriter->writeAttribute('val', 'between');
2340
            }
2341 28
            $objWriter->endElement();
2342
2343
            // c:majorUnit
2344 28
            if ($oAxis->getMajorUnit() != null) {
2345 1
                $objWriter->startElement('c:majorUnit');
2346 1
                $objWriter->writeAttribute('val', $oAxis->getMajorUnit());
2347 1
                $objWriter->endElement();
2348
            }
2349
2350
            // c:minorUnit
2351 28
            if ($oAxis->getMinorUnit() != null) {
2352 1
                $objWriter->startElement('c:minorUnit');
2353 1
                $objWriter->writeAttribute('val', $oAxis->getMinorUnit());
2354 1
                $objWriter->endElement();
2355
            }
2356
        }
2357
2358 28
        $objWriter->endElement();
2359 28
    }
2360
2361
    /**
2362
     * @param XMLWriter $objWriter
2363
     * @param Gridlines $oGridlines
2364
     */
2365 1
    protected function writeAxisGridlines(XMLWriter $objWriter, Gridlines $oGridlines)
2366
    {
2367
        // c:spPr
2368 1
        $objWriter->startElement('c:spPr');
2369
2370
        // Outline
2371 1
        $this->writeOutline($objWriter, $oGridlines->getOutline());
2372
2373
        // ##c:spPr
2374 1
        $objWriter->endElement();
2375 1
    }
2376
}
2377