Completed
Pull Request — develop (#591)
by
unknown
06:44
created

PptCharts::writeLayout()   B

Complexity

Conditions 5
Paths 16

Size

Total Lines 48

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 5.246

Importance

Changes 0
Metric Value
dl 0
loc 48
ccs 22
cts 28
cp 0.7856
rs 8.8234
c 0
b 0
f 0
cc 5
nc 16
nop 2
crap 5.246
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 113
    public function render()
31
    {
32 113
        for ($i = 0; $i < $this->getDrawingHashTable()->count(); ++$i) {
33 44
            $shape = $this->getDrawingHashTable()->getByIndex($i);
34 44
            if ($shape instanceof Chart) {
35 35
                $this->getZip()->addFromString('ppt/charts/' . $shape->getIndexedFilename(), $this->writeChart($shape));
36
37 34
                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 112
        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 35
    public function writeChart(Chart $chart)
61
    {
62
        // Create XML writer
63 35
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
64
65
        // XML header
66 35
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
67
68
        // c:chartSpace
69 35
        $objWriter->startElement('c:chartSpace');
70 35
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
71 35
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
72 35
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
73
74
        // c:date1904
75 35
        $objWriter->startElement('c:date1904');
76 35
        $objWriter->writeAttribute('val', '1');
77 35
        $objWriter->endElement();
78
79
        // c:lang
80 35
        $objWriter->startElement('c:lang');
81 35
        $objWriter->writeAttribute('val', 'en-US');
82 35
        $objWriter->endElement();
83
84
        // c:chart
85 35
        $objWriter->startElement('c:chart');
86
87
        // Title?
88 35
        if ($chart->getTitle()->isVisible()) {
89
            // Write title
90 34
            $this->writeTitle($objWriter, $chart->getTitle());
91
        }
92
93
        // c:autoTitleDeleted
94 35
        $objWriter->startElement('c:autoTitleDeleted');
95 35
        $objWriter->writeAttribute('val', $chart->getTitle()->isVisible() ? '0' : '1');
96 35
        $objWriter->endElement();
97
98
        // c:view3D
99 35
        $objWriter->startElement('c:view3D');
100
101
        // c:rotX
102 35
        $objWriter->startElement('c:rotX');
103 35
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationX());
104 35
        $objWriter->endElement();
105
106
        // c:hPercent
107 35
        $hPercent = $chart->getView3D()->getHeightPercent();
108 35
        $objWriter->writeElementIf($hPercent != null, 'c:hPercent', 'val', $hPercent);
109
110
        // c:rotY
111 35
        $objWriter->startElement('c:rotY');
112 35
        $objWriter->writeAttribute('val', $chart->getView3D()->getRotationY());
113 35
        $objWriter->endElement();
114
115
        // c:depthPercent
116 35
        $objWriter->startElement('c:depthPercent');
117 35
        $objWriter->writeAttribute('val', $chart->getView3D()->getDepthPercent());
118 35
        $objWriter->endElement();
119
120
        // c:rAngAx
121 35
        $objWriter->startElement('c:rAngAx');
122 35
        $objWriter->writeAttribute('val', $chart->getView3D()->hasRightAngleAxes() ? '1' : '0');
123 35
        $objWriter->endElement();
124
125
        // c:perspective
126 35
        $objWriter->startElement('c:perspective');
127 35
        $objWriter->writeAttribute('val', $chart->getView3D()->getPerspective());
128 35
        $objWriter->endElement();
129
130 35
        $objWriter->endElement();
131
132
        // Write plot area
133 35
        $this->writePlotArea($objWriter, $chart->getPlotArea(), $chart);
134
135
        // Legend?
136 34
        if ($chart->getLegend()->isVisible()) {
137
            // Write legend
138 34
            $this->writeLegend($objWriter, $chart->getLegend());
139
        }
140
141
        // c:plotVisOnly
142 34
        $objWriter->startElement('c:plotVisOnly');
143 34
        $objWriter->writeAttribute('val', '1');
144 34
        $objWriter->endElement();
145
146 34
        $objWriter->endElement();
147
148
        // c:spPr
149 34
        $objWriter->startElement('c:spPr');
150
151
        // Fill
152 34
        $this->writeFill($objWriter, $chart->getFill());
153
154
        // Border
155 34
        if ($chart->getBorder()->getLineStyle() != Border::LINE_NONE) {
156
            $this->writeBorder($objWriter, $chart->getBorder(), '');
157
        }
158
159
        // Shadow
160 34
        if ($chart->getShadow()->isVisible()) {
161
            // a:effectLst
162
            $objWriter->startElement('a:effectLst');
163
164
            // a:outerShdw
165
            $objWriter->startElement('a:outerShdw');
166
            $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($chart->getShadow()->getBlurRadius()));
167
            $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($chart->getShadow()->getDistance()));
168
            $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($chart->getShadow()->getDirection()));
169
            $objWriter->writeAttribute('algn', $chart->getShadow()->getAlignment());
170
            $objWriter->writeAttribute('rotWithShape', '0');
171
172
            $this->writeColor($objWriter, $chart->getShadow()->getColor(), $chart->getShadow()->getAlpha());
173
174
            $objWriter->endElement();
175
176
            $objWriter->endElement();
177
        }
178
179 34
        $objWriter->endElement();
180
181
        // External data?
182 34
        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 34
        $objWriter->endElement();
196
197
        // Return
198 34
        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 30
    protected function writeElementWithValAttribute($objWriter, $elementName, $value)
280
    {
281 30
        $objWriter->startElement($elementName);
282 30
        $objWriter->writeAttribute('val', $value);
283 30
        $objWriter->endElement();
284 30
    }
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 30
    protected function writeSingleValueOrReference($objWriter, $isReference, $value, $reference)
295
    {
296 30
        if (!$isReference) {
297
            // Value
298 30
            $objWriter->writeElement('c:v', $value);
299 30
            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 30
    protected function writeMultipleValuesOrReference($objWriter, $isReference, $values, $reference)
327
    {
328
        // c:strLit / c:numLit
329
        // c:strRef / c:numRef
330 30
        $referenceType = ($isReference ? 'Ref' : 'Lit');
331 30
        $dataType = 'str';
332 30
        if (is_int($values[0]) || is_float($values[0])) {
333 30
            $dataType = 'num';
334
        }
335 30
        $objWriter->startElement('c:' . $dataType . $referenceType);
336
337 30
        $numValues = count($values);
338 30
        if (!$isReference) {
339
            // Value
340
341
            // c:ptCount
342 30
            $objWriter->startElement('c:ptCount');
343 30
            $objWriter->writeAttribute('val', count($values));
344 30
            $objWriter->endElement();
345
346
            // Add points
347 30
            for ($i = 0; $i < $numValues; $i++) {
348
                // c:pt
349 30
                $objWriter->startElement('c:pt');
350 30
                $objWriter->writeAttribute('idx', $i);
351 30
                $objWriter->writeElement('c:v', $values[$i]);
352 30
                $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 30
        $objWriter->endElement();
377 30
    }
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 34
    protected function writeTitle(XMLWriter $objWriter, Title $subject)
387
    {
388
        // c:title
389 34
        $objWriter->startElement('c:title');
390
391
        // c:tx
392 34
        $objWriter->startElement('c:tx');
393
394
        // c:rich
395 34
        $objWriter->startElement('c:rich');
396
397
        // a:bodyPr
398 34
        $objWriter->writeElement('a:bodyPr', null);
399
400
        // a:lstStyle
401 34
        $objWriter->writeElement('a:lstStyle', null);
402
403
        // a:p
404 34
        $objWriter->startElement('a:p');
405
406
        // a:pPr
407 34
        $objWriter->startElement('a:pPr');
408 34
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
409 34
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
410 34
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
411 34
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
412 34
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
413 34
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
414
415
        // a:defRPr
416 34
        $objWriter->writeElement('a:defRPr', null);
417
418 34
        $objWriter->endElement();
419
420
        // a:r
421 34
        $objWriter->startElement('a:r');
422
423
        // a:rPr
424 34
        $objWriter->startElement('a:rPr');
425 34
        $objWriter->writeAttribute('lang', 'en-US');
426 34
        $objWriter->writeAttribute('dirty', '0');
427 34
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
428 34
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
429 34
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
430 34
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
431 34
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
432 34
        $objWriter->writeAttributeIf($subject->getFont()->isSuperScript(), 'baseline', '300000');
433 34
        $objWriter->writeAttributeIf($subject->getFont()->isSubScript(), 'baseline', '-250000');
434
435
        // Font - a:solidFill
436 34
        $objWriter->startElement('a:solidFill');
437
438 34
        $this->writeColor($objWriter, $subject->getFont()->getColor());
439
440 34
        $objWriter->endElement();
441
442
        // Font - a:latin
443 34
        $objWriter->startElement('a:latin');
444 34
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
445 34
        $objWriter->endElement();
446
447 34
        $objWriter->endElement();
448
449
        // a:t
450 34
        $objWriter->writeElement('a:t', $subject->getText());
451
452 34
        $objWriter->endElement();
453
454
        // a:endParaRPr
455 34
        $objWriter->startElement('a:endParaRPr');
456 34
        $objWriter->writeAttribute('lang', 'en-US');
457 34
        $objWriter->writeAttribute('dirty', '0');
458 34
        $objWriter->endElement();
459
460 34
        $objWriter->endElement();
461
462 34
        $objWriter->endElement();
463
464 34
        $objWriter->endElement();
465
466
        // Write layout
467 34
        $this->writeLayout($objWriter, $subject);
468
469
        // c:overlay
470 34
        $objWriter->startElement('c:overlay');
471 34
        $objWriter->writeAttribute('val', '0');
472 34
        $objWriter->endElement();
473
474 34
        $objWriter->endElement();
475 34
    }
476
477
    /**
478
     * Write Plot Area
479
     *
480
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
481
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\PlotArea $subject
482
     * @param  \PhpOffice\PhpPresentation\Shape\Chart $chart
483
     * @throws \Exception
484
     */
485 35
    protected function writePlotArea(XMLWriter $objWriter, PlotArea $subject, Chart $chart)
486
    {
487
        // c:plotArea
488 35
        $objWriter->startElement('c:plotArea');
489
490
        // Write layout
491 35
        $this->writeLayout($objWriter, $subject);
492
493
        // Write chart
494 35
        $chartType = $subject->getType();
495 35
        if ($chartType instanceof Area) {
496 1
            $this->writeTypeArea($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
497 34
        } elseif ($chartType instanceof Bar) {
498 3
            $this->writeTypeBar($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
499 31
        } elseif ($chartType instanceof Bar3D) {
500 4
            $this->writeTypeBar3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
501 27
        } elseif ($chartType instanceof Doughnut) {
502 1
            $this->writeTypeDoughnut($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
503 26
        } elseif ($chartType instanceof Pie) {
504 1
            $this->writeTypePie($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
505 25
        } elseif ($chartType instanceof Pie3D) {
506 4
            $this->writeTypePie3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
507 21
        } elseif ($chartType instanceof Line) {
508 14
            $this->writeTypeLine($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
509 7
        } elseif ($chartType instanceof Scatter) {
510 6
            $this->writeTypeScatter($objWriter, $chartType, $chart->hasIncludedSpreadsheet());
511
        } else {
512 1
            throw new \Exception('The chart type provided could not be rendered.');
513
        }
514
515
        // Write X axis?
516 34
        if ($chartType->hasAxisX()) {
517 28
            $this->writeAxis($objWriter, $subject->getAxisX(), Chart\Axis::AXIS_X, $chartType);
518
        }
519
520
        // Write Y axis?
521 34
        if ($chartType->hasAxisY()) {
522 28
            $this->writeAxis($objWriter, $subject->getAxisY(), Chart\Axis::AXIS_Y, $chartType);
523
        }
524
525 34
        $objWriter->endElement();
526 34
    }
527
528
    /**
529
     * Write Legend
530
     *
531
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
532
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Legend $subject
533
     * @throws \Exception
534
     */
535 34
    protected function writeLegend(XMLWriter $objWriter, Legend $subject)
536
    {
537
        // c:legend
538 34
        $objWriter->startElement('c:legend');
539
540
        // c:legendPos
541 34
        $objWriter->startElement('c:legendPos');
542 34
        $objWriter->writeAttribute('val', $subject->getPosition());
543 34
        $objWriter->endElement();
544
545
        // Write layout
546 34
        $this->writeLayout($objWriter, $subject);
547
548
        // c:overlay
549 34
        $objWriter->startElement('c:overlay');
550 34
        $objWriter->writeAttribute('val', '0');
551 34
        $objWriter->endElement();
552
553
        // c:spPr
554 34
        $objWriter->startElement('c:spPr');
555
556
        // Fill
557 34
        $this->writeFill($objWriter, $subject->getFill());
558
559
        // Border
560 34
        if ($subject->getBorder()->getLineStyle() != Border::LINE_NONE) {
561 34
            $this->writeBorder($objWriter, $subject->getBorder(), '');
562
        }
563
564 34
        $objWriter->endElement();
565
566
        // c:txPr
567 34
        $objWriter->startElement('c:txPr');
568
569
        // a:bodyPr
570 34
        $objWriter->writeElement('a:bodyPr', null);
571
572
        // a:lstStyle
573 34
        $objWriter->writeElement('a:lstStyle', null);
574
575
        // a:p
576 34
        $objWriter->startElement('a:p');
577
578
        // a:pPr
579 34
        $objWriter->startElement('a:pPr');
580 34
        $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
581 34
        $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
582 34
        $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
583 34
        $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
584 34
        $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
585 34
        $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
586
587
        // a:defRPr
588 34
        $objWriter->startElement('a:defRPr');
589
590 34
        $objWriter->writeAttribute('b', ($subject->getFont()->isBold() ? 'true' : 'false'));
591 34
        $objWriter->writeAttribute('i', ($subject->getFont()->isItalic() ? 'true' : 'false'));
592 34
        $objWriter->writeAttribute('strike', ($subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
593 34
        $objWriter->writeAttribute('sz', ($subject->getFont()->getSize() * 100));
594 34
        $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
595 34
        $objWriter->writeAttributeIf($subject->getFont()->isSuperScript(), 'baseline', '300000');
596 34
        $objWriter->writeAttributeIf($subject->getFont()->isSubScript(), 'baseline', '-250000');
597
598
        // Font - a:solidFill
599 34
        $objWriter->startElement('a:solidFill');
600
601 34
        $this->writeColor($objWriter, $subject->getFont()->getColor());
602
603 34
        $objWriter->endElement();
604
605
        // Font - a:latin
606 34
        $objWriter->startElement('a:latin');
607 34
        $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
608 34
        $objWriter->endElement();
609
610 34
        $objWriter->endElement();
611
612 34
        $objWriter->endElement();
613
614
        // a:endParaRPr
615 34
        $objWriter->startElement('a:endParaRPr');
616 34
        $objWriter->writeAttribute('lang', 'en-US');
617 34
        $objWriter->writeAttribute('dirty', '0');
618 34
        $objWriter->endElement();
619
620 34
        $objWriter->endElement();
621
622 34
        $objWriter->endElement();
623
624 34
        $objWriter->endElement();
625 34
    }
626
627
    /**
628
     * Write Layout
629
     *
630
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
631
     * @param  mixed $subject
632
     * @throws \Exception
633
     */
634 35
    protected function writeLayout(XMLWriter $objWriter, $subject)
635
    {
636
        // c:layout
637 35
        $objWriter->startElement('c:layout');
638
639
        // c:manualLayout
640 35
        $objWriter->startElement('c:manualLayout');
641
        // c:xMode
642 35
        $objWriter->startElement('c:xMode');
643 35
        $objWriter->writeAttribute('val', 'edge');
644 35
        $objWriter->endElement();
645
646
        // c:yMode
647 35
        $objWriter->startElement('c:yMode');
648 35
        $objWriter->writeAttribute('val', 'edge');
649 35
        $objWriter->endElement();
650
651 35
        if ($subject->getOffsetX() != 0) {
652
            // c:x
653 34
            $objWriter->startElement('c:x');
654 34
            $objWriter->writeAttribute('val', $subject->getOffsetX());
655 34
            $objWriter->endElement();
656
        }
657
658 35
        if ($subject->getOffsetY() != 0) {
659
            // c:y
660 34
            $objWriter->startElement('c:y');
661 34
            $objWriter->writeAttribute('val', $subject->getOffsetY());
662 34
            $objWriter->endElement();
663
        }
664
665 35
        if ($subject->getWidth() != 0) {
666
            // c:w
667
            $objWriter->startElement('c:w');
668
            $objWriter->writeAttribute('val', $subject->getWidth());
669
            $objWriter->endElement();
670
        }
671
672 35
        if ($subject->getHeight() != 0) {
673
            // c:h
674
            $objWriter->startElement('c:h');
675
            $objWriter->writeAttribute('val', $subject->getHeight());
676
            $objWriter->endElement();
677
        }
678
679 35
        $objWriter->endElement();
680 35
        $objWriter->endElement();
681 35
    }
682
683
    /**
684
     * Write Type Area
685
     *
686
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
687
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Area $subject
688
     * @param  boolean $includeSheet
689
     * @throws \Exception
690
     */
691 1
    protected function writeTypeArea(XMLWriter $objWriter, Area $subject, $includeSheet = false)
692
    {
693
        // c:lineChart
694 1
        $objWriter->startElement('c:areaChart');
695
696
        // c:grouping
697 1
        $objWriter->startElement('c:grouping');
698 1
        $objWriter->writeAttribute('val', 'standard');
699 1
        $objWriter->endElement();
700
701
        // Write series
702 1
        $seriesIndex = 0;
703 1
        foreach ($subject->getSeries() as $series) {
704
            // c:ser
705 1
            $objWriter->startElement('c:ser');
706
707
            // c:ser > c:idx
708 1
            $objWriter->startElement('c:idx');
709 1
            $objWriter->writeAttribute('val', $seriesIndex);
710 1
            $objWriter->endElement();
711
712
            // c:ser > c:order
713 1
            $objWriter->startElement('c:order');
714 1
            $objWriter->writeAttribute('val', $seriesIndex);
715 1
            $objWriter->endElement();
716
717
            // c:ser > c:tx
718 1
            $objWriter->startElement('c:tx');
719 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
720 1
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
721 1
            $objWriter->endElement();
722
723
            // c:ser > c:dLbls
724
            // @link : https://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.charts.areachartseries.aspx
725 1
            $objWriter->startElement('c:dLbls');
726
727
            // c:ser > c:dLbls > c:showVal
728 1
            $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
729
730
            // c:ser > c:dLbls > c:showCatName
731 1
            $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
732
733
            // c:ser > c:dLbls > c:showSerName
734 1
            $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
735
736
            // c:ser > c:dLbls > c:showPercent
737 1
            $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
738
739
            // c:ser > ##c:dLbls
740 1
            $objWriter->endElement();
741
742 1
            if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
743
                // c:spPr
744
                $objWriter->startElement('c:spPr');
745
                // Write fill
746
                $this->writeFill($objWriter, $series->getFill());
747
                // ## c:spPr
748
                $objWriter->endElement();
749
            }
750
751
            // Write X axis data
752 1
            $axisXData = array_keys($series->getValues());
753
754
            // c:cat
755 1
            $objWriter->startElement('c:cat');
756 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
757 1
            $objWriter->endElement();
758
759
            // Write Y axis data
760 1
            $axisYData = array_values($series->getValues());
761
762
            // c:val
763 1
            $objWriter->startElement('c:val');
764 1
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '');
765 1
            $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
766 1
            $objWriter->endElement();
767
768 1
            $objWriter->endElement();
769
770 1
            ++$seriesIndex;
771
        }
772
773
        // c:axId
774 1
        $objWriter->startElement('c:axId');
775 1
        $objWriter->writeAttribute('val', '52743552');
776 1
        $objWriter->endElement();
777
778
        // c:axId
779 1
        $objWriter->startElement('c:axId');
780 1
        $objWriter->writeAttribute('val', '52749440');
781 1
        $objWriter->endElement();
782
783 1
        $objWriter->endElement();
784 1
    }
785
786
    /**
787
     * Write Type Bar
788
     *
789
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
790
     * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar $subject
791
     * @param  boolean $includeSheet
792
     * @throws \Exception
793
     */
794 3
    protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, $includeSheet = false)
795
    {
796
        // c:barChart
797 3
        $objWriter->startElement('c:barChart');
798
799
        // c:barDir
800 3
        $objWriter->startElement('c:barDir');
801 3
        $objWriter->writeAttribute('val', $subject->getBarDirection());
802 3
        $objWriter->endElement();
803
804
        // c:grouping
805 3
        $objWriter->startElement('c:grouping');
806 3
        $objWriter->writeAttribute('val', $subject->getBarGrouping());
807 3
        $objWriter->endElement();
808
809
        // Write series
810 3
        $seriesIndex = 0;
811 3
        foreach ($subject->getSeries() as $series) {
812
            // c:ser
813 3
            $objWriter->startElement('c:ser');
814
815
            // c:idx
816 3
            $objWriter->startElement('c:idx');
817 3
            $objWriter->writeAttribute('val', $seriesIndex);
818 3
            $objWriter->endElement();
819
820
            // c:order
821 3
            $objWriter->startElement('c:order');
822 3
            $objWriter->writeAttribute('val', $seriesIndex);
823 3
            $objWriter->endElement();
824
825
            // c:tx
826 3
            $objWriter->startElement('c:tx');
827 3
            $coords = ($includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '');
828 3
            $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
829 3
            $objWriter->endElement();
830
831
            // Fills for points?
832 3
            $dataPointFills = $series->getDataPointFills();
833 3
            foreach ($dataPointFills as $key => $value) {
834
                // c:dPt
835 1
                $objWriter->startElement('c:dPt');
836
837
                // c:idx
838 1
                $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
839
840 1
                if ($value->getFillType() != Fill::FILL_NONE) {
841
                    // c:spPr
842 1
                    $objWriter->startElement('c:spPr');
843
                    // Write fill
844 1
                    $this->writeFill($objWriter, $value);
845
                    // ## c:spPr
846 1
                    $objWriter->endElement();
847
                }
848
849
                // ## c:dPt
850 1
                $objWriter->endElement();
851
            }
852
853
            // c:dLbls
854 3
            $objWriter->startElement('c:dLbls');
855
856 3
            if ($series->hasDlblNumFormat()) {
857
                //c:numFmt
858
                $objWriter->startElement('c:numFmt');
859
                $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
860
                $objWriter->writeAttribute('sourceLinked', '0');
861
                $objWriter->endElement();
862
            }
863 3
            if($series->getLabelColor() != "noFill"){
864
                $objWriter->startElement('c:spPr');
865
                $objWriter->startElement('a:solidFill');
866
                $this->writeColor($objWriter, $series->getLabelColor());
0 ignored issues
show
Documentation introduced by
$series->getLabelColor() is of type string, but the function expects a object<PhpOffice\PhpPresentation\Style\Color>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

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