Completed
Pull Request — develop (#435)
by
unknown
07:04
created

AbstractSlide::writeShapeCollection()   C

Complexity

Conditions 14
Paths 14

Size

Total Lines 40
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 24
CRAP Score 14.5719

Importance

Changes 0
Metric Value
dl 0
loc 40
ccs 24
cts 28
cp 0.8571
rs 5.0864
c 0
b 0
f 0
cc 14
eloc 28
nc 14
nop 3
crap 14.5719

How to fix   Complexity   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
/**
3
 * This file is part of PHPPresentation - A pure PHP library for reading and writing
4
 * presentations documents.
5
 *
6
 * PHPPresentation is free software distributed under the terms of the GNU Lesser
7
 * General Public License version 3 as published by the Free Software Foundation.
8
 *
9
 * For the full copyright and license information, please read the LICENSE
10
 * file that was distributed with this source code. For the full list of
11
 * contributors, visit https://github.com/PHPOffice/PHPPresentation/contributors.
12
 *
13
 * @link        https://github.com/PHPOffice/PHPPresentation
14
 * @copyright   2009-2015 PHPPresentation contributors
15
 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
16
 */
17
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
18
19
use PhpOffice\Common\Drawing as CommonDrawing;
20
use PhpOffice\Common\Text;
21
use PhpOffice\Common\XMLWriter;
22
use PhpOffice\PhpPresentation\Shape\AbstractGraphic;
23
use PhpOffice\PhpPresentation\Shape\ArrowPointer;
24
use PhpOffice\PhpPresentation\Shape\Chart as ShapeChart;
25
use PhpOffice\PhpPresentation\Shape\Comment;
26
use PhpOffice\PhpPresentation\Shape\Drawing\Gd as ShapeDrawingGd;
27
use PhpOffice\PhpPresentation\Shape\Drawing\File as ShapeDrawingFile;
28
use PhpOffice\PhpPresentation\Shape\Group;
29
use PhpOffice\PhpPresentation\Shape\Line;
30
use PhpOffice\PhpPresentation\Shape\Media;
31
use PhpOffice\PhpPresentation\Shape\Placeholder;
32
use PhpOffice\PhpPresentation\Shape\Rectangle;
33
use PhpOffice\PhpPresentation\Shape\RichText;
34
use PhpOffice\PhpPresentation\Shape\RichText\BreakElement;
35
use PhpOffice\PhpPresentation\Shape\RichText\Run;
36
use PhpOffice\PhpPresentation\Shape\RichText\TextElement;
37
use PhpOffice\PhpPresentation\Shape\RoundRectangle;
38
use PhpOffice\PhpPresentation\Shape\Table as ShapeTable;
39
use PhpOffice\PhpPresentation\Shape\Triangle;
40
use PhpOffice\PhpPresentation\Slide;
41
use PhpOffice\PhpPresentation\Slide\Note;
42
use PhpOffice\PhpPresentation\Style\Alignment;
43
use PhpOffice\PhpPresentation\Style\Bullet;
44
use PhpOffice\PhpPresentation\Style\Border;
45
use PhpOffice\PhpPresentation\Style\Color;
46
use PhpOffice\PhpPresentation\Style\Shadow;
47
use PhpOffice\PhpPresentation\Slide\AbstractSlide as AbstractSlideAlias;
48
use PhpOffice\PhpPresentation\Style\Fill;
49
50
abstract class AbstractSlide extends AbstractDecoratorWriter
0 ignored issues
show
Complexity introduced by
The class AbstractSlide has a coupling between objects value of 36. Consider to reduce the number of dependencies under 35.
Loading history...
51
{
52
    /**
53
     * @param AbstractSlideAlias $pSlideMaster
54
     * @param $objWriter
55
     * @param $relId
56
     * @throws \Exception
57
     */
58 109
    protected function writeDrawingRelations(AbstractSlideAlias $pSlideMaster, $objWriter, $relId)
59
    {
60 109
        if ($pSlideMaster->getShapeCollection()->count() > 0) {
61
            // Loop trough images and write relationships
62 2
            $iterator = $pSlideMaster->getShapeCollection()->getIterator();
63 2
            while ($iterator->valid()) {
64 2
                if ($iterator->current() instanceof ShapeDrawingFile || $iterator->current() instanceof ShapeDrawingGd) {
65
                    // Write relationship for image drawing
66 1
                    $this->writeRelationship(
67 1
                        $objWriter,
68 1
                        $relId,
69 1
                        'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
70 1
                        '../media/' . str_replace(' ', '_', $iterator->current()->getIndexedFilename())
71
                    );
72 1
                    $iterator->current()->relationId = 'rId' . $relId;
73 1
                    ++$relId;
74 1
                } elseif ($iterator->current() instanceof ShapeChart) {
75
                    // Write relationship for chart drawing
76
                    $this->writeRelationship(
77
                        $objWriter,
78
                        $relId,
79
                        'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',
80
                        '../charts/' . $iterator->current()->getIndexedFilename()
81
                    );
82
                    $iterator->current()->relationId = 'rId' . $relId;
83
                    ++$relId;
84 1
                } elseif ($iterator->current() instanceof Group) {
85
                    $iterator2 = $iterator->current()->getShapeCollection()->getIterator();
86
                    while ($iterator2->valid()) {
87
                        if ($iterator2->current() instanceof ShapeDrawingFile ||
88
                            $iterator2->current() instanceof ShapeDrawingGd
89
                        ) {
90
                            // Write relationship for image drawing
91
                            $this->writeRelationship(
92
                                $objWriter,
93
                                $relId,
94
                                'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
95
                                '../media/' . str_replace(' ', '_', $iterator2->current()->getIndexedFilename())
96
                            );
97
                            $iterator2->current()->relationId = 'rId' . $relId;
98
                            ++$relId;
99
                        } elseif ($iterator2->current() instanceof ShapeChart) {
100
                            // Write relationship for chart drawing
101
                            $this->writeRelationship(
102
                                $objWriter,
103
                                $relId,
104
                                'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',
105
                                '../charts/' . $iterator2->current()->getIndexedFilename()
106
                            );
107
                            $iterator2->current()->relationId = 'rId' . $relId;
108
                            ++$relId;
109
                        }
110
                        $iterator2->next();
111
                    }
112
                }
113 2
                $iterator->next();
114
            }
115
        }
116
117 109
        return $relId;
118
    }
119
120
    /**
121
     * @param XMLWriter $objWriter
122
     * @param \ArrayObject|\PhpOffice\PhpPresentation\AbstractShape[] $shapes
123
     * @param int $shapeId
124
     * @throws \Exception
125
     */
126 108
    protected function writeShapeCollection(XMLWriter $objWriter, $shapes = array(), &$shapeId = 0)
127
    {
128 108
        if (count($shapes) == 0) {
129 108
            return;
130
        }
131 81
        foreach ($shapes as $shape) {
132
            // Increment $shapeId
133 81
            ++$shapeId;
134
            // Check type
135 81
            if ($shape instanceof RichText) {
136 26
                $this->writeShapeText($objWriter, $shape, $shapeId);
137 56
            } elseif ($shape instanceof ShapeTable) {
138 11
                $this->writeShapeTable($objWriter, $shape, $shapeId);
139 46
            } elseif ($shape instanceof Line) {
140 1
                $this->writeShapeLine($objWriter, $shape, $shapeId);
141 45
            } elseif ($shape instanceof ShapeChart) {
142 29
                $this->writeShapeChart($objWriter, $shape, $shapeId);
143 17
            } elseif ($shape instanceof AbstractGraphic) {
144 10
                $this->writeShapePic($objWriter, $shape, $shapeId);
145 8
            } elseif ($shape instanceof Group) {
146 1
                $this->writeShapeGroup($objWriter, $shape, $shapeId);
147
            }
148 8
            elseif ($shape instanceof RoundRectangle) {
149
                $this->writeShapeRoundRect($objWriter, $shape, $shapeId);
150
            }
151 8
            elseif ($shape instanceof Triangle) {
152
                $this->writeShapeTriangle($objWriter, $shape, $shapeId);
153
            }
154 8
            elseif ($shape instanceof Rectangle) {
155
                $this->writeShapeRectangle($objWriter, $shape, $shapeId);
156
            }
157 8
            elseif ($shape instanceof ArrowPointer) {
158
                $this->writeShapeArrowPointer($objWriter, $shape, $shapeId);
159
            }
160 8
            elseif ($shape instanceof Comment) {
161
            } else {
162 81
                throw new \Exception("Unknown Shape type: {get_class($shape)}");
163
            }
164
        }
165 81
    }
166
167
168
    /**
169
     * Writing a Triangle shape to help develop more dynamic and useful slides with php presentation.
170
     *
171
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
172
     * @param  \PhpOffice\PhpPresentation\Shape\Triangle $shape
173
     * @param  int $shapeId
174
     * @throws \Exception
175
     */
176
    protected function writeShapeTriangle(XMLWriter $objWriter, Triangle $shape, $shapeId)
177
    {
178
        //p:sp
179
        $objWriter->startElement('p:sp');
180
        //p:nvSpPr
181
        $objWriter->startElement('p:nvSpPr');
182
        //p:cNvPr
183
        $objWriter->startElement('p:cNvPr');
184
        $objWriter->writeAttribute('id',$shapeId);
185
        $objWriter->writeAttribute('name','Triangle');
186
        $objWriter->endElement();
187
        //p:cNvSpPr
188
        $objWriter->startElement('p:cNvSpPr');
189
        $objWriter->endElement();
190
        //p:nvPr
191
        $objWriter->startElement('p:nvPr');
192
        $objWriter->endElement();
193
        $objWriter->endElement();
194
        //p:spPr
195
        $objWriter->startElement('p:spPr');
196
        // a:xfrm
197
        $objWriter->startElement('a:xfrm');
198
199
        $objWriter->writeAttribute('rot',CommonDrawing::pixelsToEmu($shape->getRotation()));
200
201
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
202
            // a:off
203
            $objWriter->startElement('a:off');
204
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
205
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
206
            $objWriter->endElement();
207
            // a:ext
208
            $objWriter->startElement('a:ext');
209
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
210
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
211
            $objWriter->endElement();
212
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
213
            // a:off
214
            $objWriter->startElement('a:off');
215
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
216
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
217
            $objWriter->endElement();
218
            // a:ext
219
            $objWriter->startElement('a:ext');
220
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
221
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
222
            $objWriter->endElement();
223
        } elseif ($shape->getHeight() < 0) {
224
            $objWriter->writeAttribute('flipV', 1);
225
            // a:off
226
            $objWriter->startElement('a:off');
227
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
228
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
229
            $objWriter->endElement();
230
            // a:ext
231
            $objWriter->startElement('a:ext');
232
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
233
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
234
            $objWriter->endElement();
235
        } elseif ($shape->getWidth() < 0) {
236
            $objWriter->writeAttribute('flipV', 1);
237
            // a:off
238
            $objWriter->startElement('a:off');
239
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
240
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
241
            $objWriter->endElement();
242
            // a:ext
243
            $objWriter->startElement('a:ext');
244
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
245
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
246
            $objWriter->endElement();
247
        }
248
249
        $objWriter->endElement();
250
        //a:prstGeom
251
        $objWriter->startElement('a:prstGeom');
252
        $objWriter->writeAttribute('prst', 'triangle');
253
254
        // a:prstGeom/a:avLst
255
        $objWriter->writeElement('a:avLst');
256
        $objWriter->endElement();
257
        $this->writeSolidFill($objWriter, $shape->getFill());
258
        $this->writeBorder($objWriter, $shape->getBorder(), '');
259
        $objWriter->endElement();
260
        $objWriter->endElement();
261
262
    }
263
264
    /**
265
     * Writing a Rectangle shape to help develop more dynamic and useful slides with php presentation.
266
     *
267
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
268
     * @param  \PhpOffice\PhpPresentation\Shape\Rectangle $shape
269
     * @param  int $shapeId
270
     * @throws \Exception
271
     */
272
    protected function writeShapeRectangle(XMLWriter $objWriter, Rectangle $shape, $shapeId)
273
    {
274
        //p:sp
275
        $objWriter->startElement('p:sp');
276
        //p:nvSpPr
277
        $objWriter->startElement('p:nvSpPr');
278
        //p:cNvPr
279
        $objWriter->startElement('p:cNvPr');
280
        $objWriter->writeAttribute('id',$shapeId);
281
        $objWriter->writeAttribute('name','Rectangle');
282
        $objWriter->endElement();
283
        //p:cNvSpPr
284
        $objWriter->startElement('p:cNvSpPr');
285
        $objWriter->endElement();
286
        //p:nvPr
287
        $objWriter->startElement('p:nvPr');
288
        $objWriter->endElement();
289
        $objWriter->endElement();
290
        //p:spPr
291
        $objWriter->startElement('p:spPr');
292
        // a:xfrm
293
        $objWriter->startElement('a:xfrm');
294
295
        $objWriter->writeAttribute('rot',CommonDrawing::pixelsToEmu($shape->getRotation()));
296
297
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
298
            // a:off
299
            $objWriter->startElement('a:off');
300
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
301
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
302
            $objWriter->endElement();
303
            // a:ext
304
            $objWriter->startElement('a:ext');
305
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
306
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
307
            $objWriter->endElement();
308
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
309
            // a:off
310
            $objWriter->startElement('a:off');
311
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
312
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
313
            $objWriter->endElement();
314
            // a:ext
315
            $objWriter->startElement('a:ext');
316
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
317
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
318
            $objWriter->endElement();
319
        } elseif ($shape->getHeight() < 0) {
320
            $objWriter->writeAttribute('flipV', 1);
321
            // a:off
322
            $objWriter->startElement('a:off');
323
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
324
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
325
            $objWriter->endElement();
326
            // a:ext
327
            $objWriter->startElement('a:ext');
328
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
329
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
330
            $objWriter->endElement();
331
        } elseif ($shape->getWidth() < 0) {
332
            $objWriter->writeAttribute('flipV', 1);
333
            // a:off
334
            $objWriter->startElement('a:off');
335
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
336
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
337
            $objWriter->endElement();
338
            // a:ext
339
            $objWriter->startElement('a:ext');
340
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
341
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
342
            $objWriter->endElement();
343
        }
344
345
        $objWriter->endElement();
346
        //a:prstGeom
347
        $objWriter->startElement('a:prstGeom');
348
        $objWriter->writeAttribute('prst', 'rect');
349
350
        // a:prstGeom/a:avLst
351
        $objWriter->writeElement('a:avLst');
352
        $objWriter->endElement();
353
        $this->writeSolidFill($objWriter, $shape->getFill());
354
        $this->writeBorder($objWriter, $shape->getBorder(), '');
355
        $objWriter->endElement();
356
        $objWriter->endElement();
357
358
    }
359
360
    /**
361
     * Writing an arrow pointer shape to help develop more dynamic and useful slides with php presentation.
362
     *
363
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
364
     * @param  \PhpOffice\PhpPresentation\Shape\ArrowPointer $shape
365
     * @param  int $shapeId
366
     * @throws \Exception
367
     */
368
    protected function writeShapeArrowPointer(XMLWriter $objWriter, ArrowPointer $shape, $shapeId)
369
    {
370
        // p:sp
371
        $objWriter->startElement('p:cxnSp');
372
        // p:nvSpPr
373
        $objWriter->startElement('p:nvCxnSpPr');
374
        // p:cNvPr
375
        $objWriter->startElement('p:cNvPr');
376
        $objWriter->writeAttribute('id', $shapeId);
377
        $objWriter->writeAttribute('name', 'Arrow Pointer');
378
        $objWriter->endElement();
379
        // p:cNvCxnSpPr
380
        $objWriter->writeElement('p:cNvCxnSpPr', null);
381
        // p:nvPr
382
        $objWriter->startElement('p:nvPr');
383
        if ($shape->isPlaceholder()) {
384
            $objWriter->startElement('p:ph');
385
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
386
            $objWriter->endElement();
387
        }
388
        $objWriter->endElement();
389
        $objWriter->endElement();
390
        // p:spPr
391
        $objWriter->startElement('p:spPr');
392
        // a:xfrm
393
        $objWriter->startElement('a:xfrm');
394
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
395
            // a:off
396
            $objWriter->startElement('a:off');
397
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
398
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
399
            $objWriter->endElement();
400
            // a:ext
401
            $objWriter->startElement('a:ext');
402
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
403
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
404
            $objWriter->endElement();
405
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
406
            // a:off
407
            $objWriter->startElement('a:off');
408
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
409
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
410
            $objWriter->endElement();
411
            // a:ext
412
            $objWriter->startElement('a:ext');
413
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
414
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
415
            $objWriter->endElement();
416
        } elseif ($shape->getHeight() < 0) {
417
            $objWriter->writeAttribute('flipV', 1);
418
            // a:off
419
            $objWriter->startElement('a:off');
420
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
421
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
422
            $objWriter->endElement();
423
            // a:ext
424
            $objWriter->startElement('a:ext');
425
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
426
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
427
            $objWriter->endElement();
428
        } elseif ($shape->getWidth() < 0) {
429
            $objWriter->writeAttribute('flipV', 1);
430
            // a:off
431
            $objWriter->startElement('a:off');
432
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
433
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
434
            $objWriter->endElement();
435
            // a:ext
436
            $objWriter->startElement('a:ext');
437
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
438
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
439
            $objWriter->endElement();
440
        }
441
        $objWriter->endElement();
442
        // a:prstGeom
443
        $objWriter->startElement('a:prstGeom');
444
        $objWriter->writeAttribute('prst', 'straightConnector1');
445
446
        // a:prstGeom/a:avLst
447
        $objWriter->writeElement('a:avLst');
448
        $objWriter->endElement();
449
450
        $this->writeArrowTailEnd($objWriter, $shape->getBorder(), '');
0 ignored issues
show
Bug introduced by
The method writeArrowTailEnd() does not seem to exist on object<PhpOffice\PhpPres...oint2007\AbstractSlide>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
451
452
        $objWriter->endElement();
453
454
        $objWriter->endElement();
455
456
    }
457
458
459
    /**
460
     * Writing a round rectangle shape to help develop more dynamic and useful slides with php presentation.
461
     *
462
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
463
     * @param  \PhpOffice\PhpPresentation\Shape\RoundRectangle $shape
464
     * @param  int $shapeId
465
     * @throws \Exception
466
     */
467
    protected function writeShapeRoundRect(XMLWriter $objWriter, RoundRectangle $shape, $shapeId)
468
    {
469
        //p:sp
470
        $objWriter->startElement('p:sp');
471
        //p:nvSpPr
472
        $objWriter->startElement('p:nvSpPr');
473
        //p:cNvPr
474
        $objWriter->startElement('p:cNvPr');
475
        $objWriter->writeAttribute('id',$shapeId);
476
        $objWriter->writeAttribute('name','Round Rectangle');
477
        $objWriter->endElement();
478
        //p:cNvSpPr
479
        $objWriter->startElement('p:cNvSpPr');
480
        $objWriter->endElement();
481
        //p:nvPr
482
        $objWriter->startElement('p:nvPr');
483
        $objWriter->endElement();
484
        $objWriter->endElement();
485
        //p:spPr
486
        $objWriter->startElement('p:spPr');
487
        // a:xfrm
488
        $objWriter->startElement('a:xfrm');
489
490
//        $objWriter->writeAttribute('rot',CommonDrawing::pixelsToEmu($shape->getRotation()));
491
492
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
493
494
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
495
            // a:off
496
            $objWriter->startElement('a:off');
497
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
498
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
499
            $objWriter->endElement();
500
            // a:ext
501
            $objWriter->startElement('a:ext');
502
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
503
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
504
            $objWriter->endElement();
505
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
506
            // a:off
507
            $objWriter->startElement('a:off');
508
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
509
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
510
            $objWriter->endElement();
511
            // a:ext
512
            $objWriter->startElement('a:ext');
513
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
514
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
515
            $objWriter->endElement();
516
        } elseif ($shape->getHeight() < 0) {
517
            $objWriter->writeAttribute('flipV', 1);
518
            // a:off
519
            $objWriter->startElement('a:off');
520
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
521
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
522
            $objWriter->endElement();
523
            // a:ext
524
            $objWriter->startElement('a:ext');
525
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
526
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
527
            $objWriter->endElement();
528
        } elseif ($shape->getWidth() < 0) {
529
            $objWriter->writeAttribute('flipV', 1);
530
            // a:off
531
            $objWriter->startElement('a:off');
532
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
533
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
534
            $objWriter->endElement();
535
            // a:ext
536
            $objWriter->startElement('a:ext');
537
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
538
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
539
            $objWriter->endElement();
540
        }
541
542
        $objWriter->endElement();
543
        //a:prstGeom
544
        $objWriter->startElement('a:prstGeom');
545
        $objWriter->writeAttribute('prst', 'roundRect');
546
547
        // a:prstGeom/a:avLst
548
        $objWriter->writeElement('a:avLst');
549
        $objWriter->endElement();
550
        $this->writeSolidFill($objWriter, $shape->getFill());
551
        $this->writeBorder($objWriter, $shape->getBorder(), '');
552
        $objWriter->endElement();
553
        $objWriter->endElement();
554
555
556
    }
557
558
    /**
559
     * Write txt
560
     *
561
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
562
     * @param  \PhpOffice\PhpPresentation\Shape\RichText $shape
563
     * @param  int $shapeId
564
     * @throws \Exception
565
     */
566 26
    protected function writeShapeText(XMLWriter $objWriter, RichText $shape, $shapeId)
567
    {
568
        // p:sp
569 26
        $objWriter->startElement('p:sp');
570
        // p:sp\p:nvSpPr
571 26
        $objWriter->startElement('p:nvSpPr');
572
        // p:sp\p:nvSpPr\p:cNvPr
573 26
        $objWriter->startElement('p:cNvPr');
574 26
        $objWriter->writeAttribute('id', $shapeId);
575 26
        if ($shape->isPlaceholder()) {
576 1
            $objWriter->writeAttribute('name', 'Placeholder for ' . $shape->getPlaceholder()->getType());
577
        } else {
578 26
            $objWriter->writeAttribute('name', '');
579
        }
580
        // Hyperlink
581 26
        if ($shape->hasHyperlink()) {
582 1
            $this->writeHyperlink($objWriter, $shape);
583
        }
584
        // > p:sp\p:nvSpPr
585 26
        $objWriter->endElement();
586
        // p:sp\p:cNvSpPr
587 26
        $objWriter->startElement('p:cNvSpPr');
588 26
        $objWriter->writeAttribute('txBox', '1');
589 26
        $objWriter->endElement();
590
        // p:sp\p:cNvSpPr\p:nvPr
591 26
        if ($shape->isPlaceholder()) {
592 1
            $objWriter->startElement('p:nvPr');
593 1
            $objWriter->startElement('p:ph');
594 1
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
595 1
            if (!is_null($shape->getPlaceholder()->getIdx())) {
596
                $objWriter->writeAttribute('idx', $shape->getPlaceholder()->getIdx());
597
            }
598 1
            $objWriter->endElement();
599 1
            $objWriter->endElement();
600
        } else {
601 26
            $objWriter->writeElement('p:nvPr', null);
602
        }
603
        // > p:sp\p:cNvSpPr
604 26
        $objWriter->endElement();
605
        // p:sp\p:spPr
606 26
        $objWriter->startElement('p:spPr');
607
608 26
        if (!$shape->isPlaceholder()) {
609
            // p:sp\p:spPr\a:xfrm
610 26
            $objWriter->startElement('a:xfrm');
611 26
            $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
612
            // p:sp\p:spPr\a:xfrm\a:off
613 26
            $objWriter->startElement('a:off');
614 26
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
615 26
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
616 26
            $objWriter->endElement();
617
            // p:sp\p:spPr\a:xfrm\a:ext
618 26
            $objWriter->startElement('a:ext');
619 26
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
620 26
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
621 26
            $objWriter->endElement();
622
            // > p:sp\p:spPr\a:xfrm
623 26
            $objWriter->endElement();
624
            // p:sp\p:spPr\a:prstGeom
625 26
            $objWriter->startElement('a:prstGeom');
626 26
            $objWriter->writeAttribute('prst', 'rect');
627
628
            // p:sp\p:spPr\a:prstGeom\a:avLst
629 26
            $objWriter->writeElement('a:avLst');
630
631 26
            $objWriter->endElement();
632
        }
633 26
        $this->writeFill($objWriter, $shape->getFill());
634 26
        $this->writeBorder($objWriter, $shape->getBorder(), '');
635 26
        $this->writeShadow($objWriter, $shape->getShadow());
636
637
        // > p:sp\p:spPr
638 26
        $objWriter->endElement();
639
        // p:txBody
640 26
        $objWriter->startElement('p:txBody');
641
        // a:bodyPr
642
        //@link :http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.bodyproperties%28v=office.14%29.aspx
643 26
        $objWriter->startElement('a:bodyPr');
644 26
        if (!$shape->isPlaceholder()) {
645 26
            $verticalAlign = $shape->getActiveParagraph()->getAlignment()->getVertical();
646 26
            if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) {
647 3
                $objWriter->writeAttribute('anchor', $verticalAlign);
648
            }
649 26
            if ($shape->getWrap() != RichText::WRAP_SQUARE) {
650
                $objWriter->writeAttribute('wrap', $shape->getWrap());
651
            }
652 26
            $objWriter->writeAttribute('rtlCol', '0');
653 26
            if ($shape->getHorizontalOverflow() != RichText::OVERFLOW_OVERFLOW) {
654
                $objWriter->writeAttribute('horzOverflow', $shape->getHorizontalOverflow());
655
            }
656 26
            if ($shape->getVerticalOverflow() != RichText::OVERFLOW_OVERFLOW) {
657
                $objWriter->writeAttribute('vertOverflow', $shape->getVerticalOverflow());
658
            }
659 26
            if ($shape->isUpright()) {
660 1
                $objWriter->writeAttribute('upright', '1');
661
            }
662 26
            if ($shape->isVertical()) {
663 1
                $objWriter->writeAttribute('vert', 'vert');
664
            }
665 26
            $objWriter->writeAttribute('bIns', CommonDrawing::pixelsToEmu($shape->getInsetBottom()));
666 26
            $objWriter->writeAttribute('lIns', CommonDrawing::pixelsToEmu($shape->getInsetLeft()));
667 26
            $objWriter->writeAttribute('rIns', CommonDrawing::pixelsToEmu($shape->getInsetRight()));
668 26
            $objWriter->writeAttribute('tIns', CommonDrawing::pixelsToEmu($shape->getInsetTop()));
669 26
            if ($shape->getColumns() <> 1) {
670
                $objWriter->writeAttribute('numCol', $shape->getColumns());
671
            }
672
            // a:spAutoFit
673 26
            $objWriter->startElement('a:' . $shape->getAutoFit());
674 26
            if ($shape->getAutoFit() == RichText::AUTOFIT_NORMAL) {
675 1
                if (!is_null($shape->getFontScale())) {
676 1
                    $objWriter->writeAttribute('fontScale', (int)($shape->getFontScale() * 1000));
677
                }
678 1
                if (!is_null($shape->getLineSpaceReduction())) {
679 1
                    $objWriter->writeAttribute('lnSpcReduction', (int)($shape->getLineSpaceReduction() * 1000));
680
                }
681
            }
682 26
            $objWriter->endElement();
683
        }
684 26
        $objWriter->endElement();
685
        // a:lstStyle
686 26
        $objWriter->writeElement('a:lstStyle', null);
687 26
        if ($shape->isPlaceholder() &&
688 1
            ($shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ||
689 26
                $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_DATETIME)
690
        ) {
691 1
            $objWriter->startElement('a:p');
692 1
            $objWriter->startElement('a:fld');
693 1
            $objWriter->writeAttribute('id', $this->getGUID());
694 1
            $objWriter->writeAttribute('type', (
695 1
            $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ? 'slidenum' : 'datetime'));
696 1
            $objWriter->writeElement('a:t', (
697 1
            $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ? '<nr.>' : '03-04-05'));
698 1
            $objWriter->endElement();
699 1
            $objWriter->endElement();
700
        } else {
701
            // Write paragraphs
702 26
            $this->writeParagraphs($objWriter, $shape->getParagraphs());
703
        }
704 26
        $objWriter->endElement();
705 26
        $objWriter->endElement();
706 26
    }
707
708
    /**
709
     * Write table
710
     *
711
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
712
     * @param  \PhpOffice\PhpPresentation\Shape\Table $shape
713
     * @param  int $shapeId
714
     * @throws \Exception
715
     */
716 11
    protected function writeShapeTable(XMLWriter $objWriter, ShapeTable $shape, $shapeId)
717
    {
718
        // p:graphicFrame
719 11
        $objWriter->startElement('p:graphicFrame');
720
        // p:graphicFrame/p:nvGraphicFramePr
721 11
        $objWriter->startElement('p:nvGraphicFramePr');
722
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvPr
723 11
        $objWriter->startElement('p:cNvPr');
724 11
        $objWriter->writeAttribute('id', $shapeId);
725 11
        $objWriter->writeAttribute('name', $shape->getName());
726 11
        $objWriter->writeAttribute('descr', $shape->getDescription());
727 11
        $objWriter->endElement();
728
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvGraphicFramePr
729 11
        $objWriter->startElement('p:cNvGraphicFramePr');
730
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvGraphicFramePr/a:graphicFrameLocks
731 11
        $objWriter->startElement('a:graphicFrameLocks');
732 11
        $objWriter->writeAttribute('noGrp', '1');
733 11
        $objWriter->endElement();
734
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvGraphicFramePr/
735 11
        $objWriter->endElement();
736
        // p:graphicFrame/p:nvGraphicFramePr/p:nvPr
737 11
        $objWriter->startElement('p:nvPr');
738 11
        if ($shape->isPlaceholder()) {
739
            $objWriter->startElement('p:ph');
740
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
741
            $objWriter->endElement();
742
        }
743 11
        $objWriter->endElement();
744
        // p:graphicFrame/p:nvGraphicFramePr/
745 11
        $objWriter->endElement();
746
        // p:graphicFrame/p:xfrm
747 11
        $objWriter->startElement('p:xfrm');
748
        // p:graphicFrame/p:xfrm/a:off
749 11
        $objWriter->startElement('a:off');
750 11
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
751 11
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
752 11
        $objWriter->endElement();
753
        // p:graphicFrame/p:xfrm/a:ext
754 11
        $objWriter->startElement('a:ext');
755 11
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
756 11
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
757 11
        $objWriter->endElement();
758
        // p:graphicFrame/p:xfrm/
759 11
        $objWriter->endElement();
760
        // p:graphicFrame/a:graphic
761 11
        $objWriter->startElement('a:graphic');
762
        // p:graphicFrame/a:graphic/a:graphicData
763 11
        $objWriter->startElement('a:graphicData');
764 11
        $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/table');
765
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl
766 11
        $objWriter->startElement('a:tbl');
767
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblPr
768 11
        $objWriter->startElement('a:tblPr');
769 11
        $objWriter->writeAttribute('firstRow', '1');
770 11
        $objWriter->writeAttribute('bandRow', '1');
771 11
        $objWriter->endElement();
772
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblGrid
773 11
        $objWriter->startElement('a:tblGrid');
774
        // Write cell widths
775 11
        $countCells = count($shape->getRow(0)->getCells());
776 11
        for ($cell = 0; $cell < $countCells; $cell++) {
777
            //  p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblGrid/a:gridCol
778 11
            $objWriter->startElement('a:gridCol');
779
            // Calculate column width
780 11
            $width = $shape->getRow(0)->getCell($cell)->getWidth();
781 11
            if ($width == 0) {
782 11
                $colCount = count($shape->getRow(0)->getCells());
783 11
                $totalWidth = $shape->getWidth();
784 11
                $width = $totalWidth / $colCount;
785
            }
786 11
            $objWriter->writeAttribute('w', CommonDrawing::pixelsToEmu($width));
787 11
            $objWriter->endElement();
788
        }
789
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblGrid/
790 11
        $objWriter->endElement();
791
        // Colspan / rowspan containers
792 11
        $colSpan = array();
793 11
        $rowSpan = array();
794
        // Default border style
795 11
        $defaultBorder = new Border();
796
        // Write rows
797 11
        $countRows = count($shape->getRows());
798 11
        for ($row = 0; $row < $countRows; $row++) {
799
            // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tr
800 11
            $objWriter->startElement('a:tr');
801 11
            $objWriter->writeAttribute('h', CommonDrawing::pixelsToEmu($shape->getRow($row)->getHeight()));
802
            // Write cells
803 11
            $countCells = count($shape->getRow($row)->getCells());
804 11
            for ($cell = 0; $cell < $countCells; $cell++) {
805
                // Current cell
806 11
                $currentCell = $shape->getRow($row)->getCell($cell);
807
                // Next cell right
808 11
                $nextCellRight = $shape->getRow($row)->getCell($cell + 1, true);
809
                // Next cell below
810 11
                $nextRowBelow = $shape->getRow($row + 1, true);
811 11
                $nextCellBelow = null;
812 11
                if ($nextRowBelow != null) {
813 3
                    $nextCellBelow = $nextRowBelow->getCell($cell, true);
814
                }
815
                // a:tc
816 11
                $objWriter->startElement('a:tc');
817
                // Colspan
818 11
                if ($currentCell->getColSpan() > 1) {
819 2
                    $objWriter->writeAttribute('gridSpan', $currentCell->getColSpan());
820 2
                    $colSpan[$row] = $currentCell->getColSpan() - 1;
821 11
                } elseif (isset($colSpan[$row]) && $colSpan[$row] > 0) {
822 2
                    $colSpan[$row]--;
823 2
                    $objWriter->writeAttribute('hMerge', '1');
824
                }
825
                // Rowspan
826 11
                if ($currentCell->getRowSpan() > 1) {
827 1
                    $objWriter->writeAttribute('rowSpan', $currentCell->getRowSpan());
828 1
                    $rowSpan[$cell] = $currentCell->getRowSpan() - 1;
829 11
                } elseif (isset($rowSpan[$cell]) && $rowSpan[$cell] > 0) {
830 1
                    $rowSpan[$cell]--;
831 1
                    $objWriter->writeAttribute('vMerge', '1');
832
                }
833
                // a:txBody
834 11
                $objWriter->startElement('a:txBody');
835
                // a:txBody/a:bodyPr
836 11
                $objWriter->startElement('a:bodyPr');
837 11
                $objWriter->writeAttribute('wrap', 'square');
838 11
                $objWriter->writeAttribute('rtlCol', '0');
839
                // a:txBody/a:bodyPr/a:spAutoFit
840 11
                $objWriter->writeElement('a:spAutoFit', null);
841
                // a:txBody/a:bodyPr/
842 11
                $objWriter->endElement();
843
                // a:lstStyle
844 11
                $objWriter->writeElement('a:lstStyle', null);
845
                // Write paragraphs
846 11
                $this->writeParagraphs($objWriter, $currentCell->getParagraphs());
847 11
                $objWriter->endElement();
848
                // a:tcPr
849 11
                $objWriter->startElement('a:tcPr');
850 11
                $firstParagraph = $currentCell->getParagraph(0);
851 11
                $firstParagraphAlignment = $firstParagraph->getAlignment();
852
853
                // Text Direction
854 11
                $textDirection = $firstParagraphAlignment->getTextDirection();
855 11
                if ($textDirection != Alignment::TEXT_DIRECTION_HORIZONTAL) {
856 1
                    $objWriter->writeAttribute('vert', $textDirection);
857
                }
858
                // Alignment (horizontal)
859 11
                $verticalAlign = $firstParagraphAlignment->getVertical();
860 11
                if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) {
861 1
                    $objWriter->writeAttribute('anchor', $verticalAlign);
862
                }
863
864
                // Margins
865 11
                $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($firstParagraphAlignment->getMarginLeft()));
866 11
                $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($firstParagraphAlignment->getMarginRight()));
867 11
                $objWriter->writeAttribute('marT', CommonDrawing::pixelsToEmu($firstParagraphAlignment->getMarginTop()));
868 11
                $objWriter->writeAttribute('marB', CommonDrawing::pixelsToEmu($firstParagraphAlignment->getMarginBottom()));
869
870
                // Determine borders
871 11
                $borderLeft = $currentCell->getBorders()->getLeft();
872 11
                $borderRight = $currentCell->getBorders()->getRight();
873 11
                $borderTop = $currentCell->getBorders()->getTop();
874 11
                $borderBottom = $currentCell->getBorders()->getBottom();
875 11
                $borderDiagonalDown = $currentCell->getBorders()->getDiagonalDown();
876 11
                $borderDiagonalUp = $currentCell->getBorders()->getDiagonalUp();
877
                // Fix PowerPoint implementation
878 11
                if (!is_null($nextCellRight)
879 11
                    && $nextCellRight->getBorders()->getRight()->getHashCode() != $defaultBorder->getHashCode()
880
                ) {
881 1
                    $borderRight = $nextCellRight->getBorders()->getLeft();
882
                }
883 11
                if (!is_null($nextCellBelow)
884 11
                    && $nextCellBelow->getBorders()->getBottom()->getHashCode() != $defaultBorder->getHashCode()
885
                ) {
886 1
                    $borderBottom = $nextCellBelow->getBorders()->getTop();
887
                }
888
                // Write borders
889 11
                $this->writeBorder($objWriter, $borderLeft, 'L');
890 11
                $this->writeBorder($objWriter, $borderRight, 'R');
891 11
                $this->writeBorder($objWriter, $borderTop, 'T');
892 11
                $this->writeBorder($objWriter, $borderBottom, 'B');
893 11
                $this->writeBorder($objWriter, $borderDiagonalDown, 'TlToBr');
894 11
                $this->writeBorder($objWriter, $borderDiagonalUp, 'BlToTr');
895
                // Fill
896 11
                $this->writeFill($objWriter, $currentCell->getFill());
897 11
                $objWriter->endElement();
898 11
                $objWriter->endElement();
899
            }
900 11
            $objWriter->endElement();
901
        }
902 11
        $objWriter->endElement();
903 11
        $objWriter->endElement();
904 11
        $objWriter->endElement();
905 11
        $objWriter->endElement();
906 11
    }
907
908
    /**
909
     * Write paragraphs
910
     *
911
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
912
     * @param  \PhpOffice\PhpPresentation\Shape\RichText\Paragraph[] $paragraphs
913
     * @param  bool $bIsPlaceholder
914
     * @throws \Exception
915
     */
916 37
    protected function writeParagraphs(XMLWriter $objWriter, $paragraphs, $bIsPlaceholder = false)
917
    {
918
        // Loop trough paragraphs
919 37
        foreach ($paragraphs as $paragraph) {
920
            // a:p
921 37
            $objWriter->startElement('a:p');
922
923
            // a:pPr
924 37
            if (!$bIsPlaceholder) {
925 37
                $objWriter->startElement('a:pPr');
926 37
                $objWriter->writeAttribute('algn', $paragraph->getAlignment()->getHorizontal());
927 37
                $objWriter->writeAttribute('fontAlgn', $paragraph->getAlignment()->getVertical());
928 37
                $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getMarginLeft()));
929 37
                $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getMarginRight()));
930 37
                $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getIndent()));
931 37
                $objWriter->writeAttribute('lvl', $paragraph->getAlignment()->getLevel());
932
933 37
                $objWriter->startElement('a:lnSpc');
934 37
                $objWriter->startElement('a:spcPct');
935 37
                $objWriter->writeAttribute('val', $paragraph->getLineSpacing() . "%");
936 37
                $objWriter->endElement();
937 37
                $objWriter->endElement();
938
939
                // Bullet type specified?
940 37
                if ($paragraph->getBulletStyle()->getBulletType() != Bullet::TYPE_NONE) {
941
                    // Color
942
                    // a:buClr must be before a:buFont (else PowerPoint crashes at launch)
943 2
                    if ($paragraph->getBulletStyle()->getBulletColor() instanceof Color) {
944 2
                        $objWriter->startElement('a:buClr');
945 2
                        $this->writeColor($objWriter, $paragraph->getBulletStyle()->getBulletColor());
946 2
                        $objWriter->endElement();
947
                    }
948
949
                    // a:buFont
950 2
                    $objWriter->startElement('a:buFont');
951 2
                    $objWriter->writeAttribute('typeface', $paragraph->getBulletStyle()->getBulletFont());
952 2
                    $objWriter->endElement();
953
954 2
                    if ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_BULLET) {
955
                        // a:buChar
956 1
                        $objWriter->startElement('a:buChar');
957 1
                        $objWriter->writeAttribute('char', $paragraph->getBulletStyle()->getBulletChar());
958 1
                        $objWriter->endElement();
959 1
                    } elseif ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_NUMERIC) {
960
                        // a:buAutoNum
961 1
                        $objWriter->startElement('a:buAutoNum');
962 1
                        $objWriter->writeAttribute('type', $paragraph->getBulletStyle()->getBulletNumericStyle());
963 1
                        if ($paragraph->getBulletStyle()->getBulletNumericStartAt() != 1) {
964 1
                            $objWriter->writeAttribute('startAt', $paragraph->getBulletStyle()->getBulletNumericStartAt());
965
                        }
966 1
                        $objWriter->endElement();
967
                    }
968
                }
969
970 37
                $objWriter->endElement();
971
            }
972
973
            // Loop trough rich text elements
974 37
            $elements = $paragraph->getRichTextElements();
975 37
            foreach ($elements as $element) {
976 32
                if ($element instanceof BreakElement) {
977
                    // a:br
978 1
                    $objWriter->writeElement('a:br', null);
979 31
                } elseif ($element instanceof Run || $element instanceof TextElement) {
980
                    // a:r
981 31
                    $objWriter->startElement('a:r');
982
983
                    // a:rPr
984 31
                    if ($element instanceof Run && !$bIsPlaceholder) {
985
                        // a:rPr
986 31
                        $objWriter->startElement('a:rPr');
987
988
                        // Lang
989 31
                        $objWriter->writeAttribute('lang', ($element->getLanguage() ? $element->getLanguage() : 'en-US'));
990
991 31
                        $objWriter->writeAttributeIf($element->getFont()->isBold(), 'b', '1');
992 31
                        $objWriter->writeAttributeIf($element->getFont()->isItalic(), 'i', '1');
993 31
                        $objWriter->writeAttributeIf($element->getFont()->isStrikethrough(), 'strike', 'sngStrike');
994
995
                        // Size
996 31
                        $objWriter->writeAttribute('sz', ($element->getFont()->getSize() * 100));
997
998
                        // Character spacing
999 31
                        $objWriter->writeAttribute('spc', $element->getFont()->getCharacterSpacing());
1000
1001
                        // Underline
1002 31
                        $objWriter->writeAttribute('u', $element->getFont()->getUnderline());
1003
1004
                        // Superscript / subscript
1005 31
                        $objWriter->writeAttributeIf($element->getFont()->isSuperScript(), 'baseline', '30000');
1006 31
                        $objWriter->writeAttributeIf($element->getFont()->isSubScript(), 'baseline', '-25000');
1007
1008
                        // Color - a:solidFill
1009 31
                        $objWriter->startElement('a:solidFill');
1010 31
                        $this->writeColor($objWriter, $element->getFont()->getColor());
1011 31
                        $objWriter->endElement();
1012
1013
                        // Font - a:latin
1014 31
                        $objWriter->startElement('a:latin');
1015 31
                        $objWriter->writeAttribute('typeface', $element->getFont()->getName());
1016 31
                        $objWriter->endElement();
1017
1018
                        // a:hlinkClick
1019 31
                        $this->writeHyperlink($objWriter, $element);
1020
1021 31
                        $objWriter->endElement();
1022
                    }
1023
1024
                    // t
1025 31
                    $objWriter->startElement('a:t');
1026 31
                    $objWriter->writeCData(Text::controlCharacterPHP2OOXML($element->getText()));
1027 31
                    $objWriter->endElement();
1028
1029 32
                    $objWriter->endElement();
1030
                }
1031
            }
1032
1033 37
            $objWriter->endElement();
1034
        }
1035 37
    }
1036
1037
    /**
1038
     * Write Line Shape
1039
     *
1040
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1041
     * @param \PhpOffice\PhpPresentation\Shape\Line $shape
1042
     * @param  int $shapeId
1043
     */
1044 1
    protected function writeShapeLine(XMLWriter $objWriter, Line $shape, $shapeId)
1045
    {
1046
        // p:sp
1047 1
        $objWriter->startElement('p:cxnSp');
1048
        // p:nvSpPr
1049 1
        $objWriter->startElement('p:nvCxnSpPr');
1050
        // p:cNvPr
1051 1
        $objWriter->startElement('p:cNvPr');
1052 1
        $objWriter->writeAttribute('id', $shapeId);
1053 1
        $objWriter->writeAttribute('name', '');
1054 1
        $objWriter->endElement();
1055
        // p:cNvCxnSpPr
1056 1
        $objWriter->writeElement('p:cNvCxnSpPr', null);
1057
        // p:nvPr
1058 1
        $objWriter->startElement('p:nvPr');
1059 1
        if ($shape->isPlaceholder()) {
1060
            $objWriter->startElement('p:ph');
1061
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
1062
            $objWriter->endElement();
1063
        }
1064 1
        $objWriter->endElement();
1065 1
        $objWriter->endElement();
1066
        // p:spPr
1067 1
        $objWriter->startElement('p:spPr');
1068
        // a:xfrm
1069 1
        $objWriter->startElement('a:xfrm');
1070 1
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
1071
            // a:off
1072 1
            $objWriter->startElement('a:off');
1073 1
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1074 1
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1075 1
            $objWriter->endElement();
1076
            // a:ext
1077 1
            $objWriter->startElement('a:ext');
1078 1
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1079 1
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1080 1
            $objWriter->endElement();
1081 1
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
1082
            // a:off
1083 1
            $objWriter->startElement('a:off');
1084 1
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
1085 1
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
1086 1
            $objWriter->endElement();
1087
            // a:ext
1088 1
            $objWriter->startElement('a:ext');
1089 1
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
1090 1
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
1091 1
            $objWriter->endElement();
1092 1
        } elseif ($shape->getHeight() < 0) {
1093 1
            $objWriter->writeAttribute('flipV', 1);
1094
            // a:off
1095 1
            $objWriter->startElement('a:off');
1096 1
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1097 1
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
1098 1
            $objWriter->endElement();
1099
            // a:ext
1100 1
            $objWriter->startElement('a:ext');
1101 1
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1102 1
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
1103 1
            $objWriter->endElement();
1104 1
        } elseif ($shape->getWidth() < 0) {
1105 1
            $objWriter->writeAttribute('flipV', 1);
1106
            // a:off
1107 1
            $objWriter->startElement('a:off');
1108 1
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
1109 1
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1110 1
            $objWriter->endElement();
1111
            // a:ext
1112 1
            $objWriter->startElement('a:ext');
1113 1
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
1114 1
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1115 1
            $objWriter->endElement();
1116
        }
1117 1
        $objWriter->endElement();
1118
        // a:prstGeom
1119 1
        $objWriter->startElement('a:prstGeom');
1120 1
        $objWriter->writeAttribute('prst', 'line');
1121
1122
        // a:prstGeom/a:avLst
1123 1
        $objWriter->writeElement('a:avLst');
1124
1125 1
        $objWriter->endElement();
1126 1
        $this->writeBorder($objWriter, $shape->getBorder(), '');
1127 1
        $objWriter->endElement();
1128
1129 1
        $objWriter->endElement();
1130 1
    }
1131
1132
    /**
1133
     * Write Shadow
1134
     * @param XMLWriter $objWriter
1135
     * @param Shadow $oShadow
1136
     */
1137 27
    protected function writeShadow(XMLWriter $objWriter, $oShadow)
1138
    {
1139 27
        if (!($oShadow instanceof Shadow)) {
1140
            return;
1141
        }
1142
1143 27
        if (!$oShadow->isVisible()) {
1144 25
            return;
1145
        }
1146
1147
        // a:effectLst
1148 3
        $objWriter->startElement('a:effectLst');
1149
1150
        // a:outerShdw
1151 3
        $objWriter->startElement('a:outerShdw');
1152 3
        $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($oShadow->getBlurRadius()));
1153 3
        $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($oShadow->getDistance()));
1154 3
        $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($oShadow->getDirection()));
1155 3
        $objWriter->writeAttribute('algn', $oShadow->getAlignment());
1156 3
        $objWriter->writeAttribute('rotWithShape', '0');
1157
1158 3
        $this->writeColor($objWriter, $oShadow->getColor(), $oShadow->getAlpha());
1159
1160 3
        $objWriter->endElement();
1161
1162 3
        $objWriter->endElement();
1163 3
    }
1164
1165
    /**
1166
     * Write hyperlink
1167
     *
1168
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
1169
     * @param \PhpOffice\PhpPresentation\AbstractShape|\PhpOffice\PhpPresentation\Shape\RichText\TextElement $shape
1170
     */
1171 33
    protected function writeHyperlink(XMLWriter $objWriter, $shape)
1172
    {
1173 33
        if (!$shape->hasHyperlink()) {
1174 28
            return;
1175
        }
1176
        // a:hlinkClick
1177 6
        $objWriter->startElement('a:hlinkClick');
1178 6
        $objWriter->writeAttribute('r:id', $shape->getHyperlink()->relationId);
1179 6
        $objWriter->writeAttribute('tooltip', $shape->getHyperlink()->getTooltip());
1180 6
        if ($shape->getHyperlink()->isInternal()) {
1181 1
            $objWriter->writeAttribute('action', $shape->getHyperlink()->getUrl());
1182
        }
1183 6
        $objWriter->endElement();
1184 6
    }
1185
1186
    /**
1187
     * Write Note Slide
1188
     * @param Note $pNote
1189
     * @throws \Exception
1190
     * @return  string
1191
     */
1192 2
    protected function writeNote(Note $pNote)
1193
    {
1194
        // Create XML writer
1195 2
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
1196
1197
        // XML header
1198 2
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
1199
1200
        // p:notes
1201 2
        $objWriter->startElement('p:notes');
1202 2
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
1203 2
        $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
1204 2
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
1205
1206
        // p:notes/p:cSld
1207 2
        $objWriter->startElement('p:cSld');
1208
1209
        // p:notes/p:cSld/p:spTree
1210 2
        $objWriter->startElement('p:spTree');
1211
1212
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr
1213 2
        $objWriter->startElement('p:nvGrpSpPr');
1214
1215
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:cNvPr
1216 2
        $objWriter->startElement('p:cNvPr');
1217 2
        $objWriter->writeAttribute('id', '1');
1218 2
        $objWriter->writeAttribute('name', '');
1219 2
        $objWriter->endElement();
1220
1221
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:cNvGrpSpPr
1222 2
        $objWriter->writeElement('p:cNvGrpSpPr', null);
1223
1224
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:nvPr
1225 2
        $objWriter->writeElement('p:nvPr', null);
1226
1227
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr
1228 2
        $objWriter->endElement();
1229
1230
        // p:notes/p:cSld/p:spTree/p:grpSpPr
1231 2
        $objWriter->startElement('p:grpSpPr');
1232
1233
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm
1234 2
        $objWriter->startElement('a:xfrm');
1235
1236
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:off
1237 2
        $objWriter->startElement('a:off');
1238 2
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
1239 2
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
1240 2
        $objWriter->endElement(); // a:off
1241
1242
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:ext
1243 2
        $objWriter->startElement('a:ext');
1244 2
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
1245 2
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
1246 2
        $objWriter->endElement(); // a:ext
1247
1248
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:chOff
1249 2
        $objWriter->startElement('a:chOff');
1250 2
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
1251 2
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
1252 2
        $objWriter->endElement(); // a:chOff
1253
1254
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:chExt
1255 2
        $objWriter->startElement('a:chExt');
1256 2
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
1257 2
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
1258 2
        $objWriter->endElement(); // a:chExt
1259
1260
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm
1261 2
        $objWriter->endElement();
1262
1263
        // p:notes/p:cSld/p:spTree/p:grpSpPr
1264 2
        $objWriter->endElement();
1265
1266
        // p:notes/p:cSld/p:spTree/p:sp[1]
1267 2
        $objWriter->startElement('p:sp');
1268
1269
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr
1270 2
        $objWriter->startElement('p:nvSpPr');
1271
1272
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvPr
1273 2
        $objWriter->startElement('p:cNvPr');
1274 2
        $objWriter->writeAttribute('id', '2');
1275 2
        $objWriter->writeAttribute('name', 'Slide Image Placeholder 1');
1276 2
        $objWriter->endElement();
1277
1278
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr
1279 2
        $objWriter->startElement('p:cNvSpPr');
1280
1281
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr/a:spLocks
1282 2
        $objWriter->startElement('a:spLocks');
1283 2
        $objWriter->writeAttribute('noGrp', '1');
1284 2
        $objWriter->writeAttribute('noRot', '1');
1285 2
        $objWriter->writeAttribute('noChangeAspect', '1');
1286 2
        $objWriter->endElement();
1287
1288
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr
1289 2
        $objWriter->endElement();
1290
1291
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr
1292 2
        $objWriter->startElement('p:nvPr');
1293
1294
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr/p:ph
1295 2
        $objWriter->startElement('p:ph');
1296 2
        $objWriter->writeAttribute('type', 'sldImg');
1297 2
        $objWriter->endElement();
1298
1299
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr
1300 2
        $objWriter->endElement();
1301
1302
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr
1303 2
        $objWriter->endElement();
1304
1305
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr
1306 2
        $objWriter->startElement('p:spPr');
1307
1308
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm
1309 2
        $objWriter->startElement('a:xfrm');
1310
1311
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:off
1312 2
        $objWriter->startElement('a:off');
1313 2
        $objWriter->writeAttribute('x', 0);
1314 2
        $objWriter->writeAttribute('y', 0);
1315 2
        $objWriter->endElement();
1316
1317
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:ext
1318 2
        $objWriter->startElement('a:ext');
1319 2
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(round($pNote->getExtentX() / 2)));
1320 2
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(round($pNote->getExtentY() / 2)));
1321 2
        $objWriter->endElement();
1322
1323
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm
1324 2
        $objWriter->endElement();
1325
1326
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom
1327 2
        $objWriter->startElement('a:prstGeom');
1328 2
        $objWriter->writeAttribute('prst', 'rect');
1329
1330
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom/a:avLst
1331 2
        $objWriter->writeElement('a:avLst', null);
1332
1333
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom
1334 2
        $objWriter->endElement();
1335
1336
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:noFill
1337 2
        $objWriter->writeElement('a:noFill', null);
1338
1339
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln
1340 2
        $objWriter->startElement('a:ln');
1341 2
        $objWriter->writeAttribute('w', '12700');
1342
1343
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill
1344 2
        $objWriter->startElement('a:solidFill');
1345
1346
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill/a:prstClr
1347 2
        $objWriter->startElement('a:prstClr');
1348 2
        $objWriter->writeAttribute('val', 'black');
1349 2
        $objWriter->endElement();
1350
1351
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill
1352 2
        $objWriter->endElement();
1353
1354
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln
1355 2
        $objWriter->endElement();
1356
1357
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr
1358 2
        $objWriter->endElement();
1359
1360
        // p:notes/p:cSld/p:spTree/p:sp[1]
1361 2
        $objWriter->endElement();
1362
1363
        // p:notes/p:cSld/p:spTree/p:sp[2]
1364 2
        $objWriter->startElement('p:sp');
1365
1366
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr
1367 2
        $objWriter->startElement('p:nvSpPr');
1368
1369
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvPr
1370 2
        $objWriter->startElement('p:cNvPr');
1371 2
        $objWriter->writeAttribute('id', '3');
1372 2
        $objWriter->writeAttribute('name', 'Notes Placeholder');
1373 2
        $objWriter->endElement();
1374
1375
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr
1376 2
        $objWriter->startElement('p:cNvSpPr');
1377
1378
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr/a:spLocks
1379 2
        $objWriter->startElement('a:spLocks');
1380 2
        $objWriter->writeAttribute('noGrp', '1');
1381 2
        $objWriter->endElement();
1382
1383
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr
1384 2
        $objWriter->endElement();
1385
1386
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr
1387 2
        $objWriter->startElement('p:nvPr');
1388
1389
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr/p:ph
1390 2
        $objWriter->startElement('p:ph');
1391 2
        $objWriter->writeAttribute('type', 'body');
1392 2
        $objWriter->writeAttribute('idx', '1');
1393 2
        $objWriter->endElement();
1394
1395
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr
1396 2
        $objWriter->endElement();
1397
1398
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr
1399 2
        $objWriter->endElement();
1400
1401
        // START notes print below rectangle section
1402
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr
1403 2
        $objWriter->startElement('p:spPr');
1404
1405
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm
1406 2
        $objWriter->startElement('a:xfrm');
1407
1408
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:off
1409 2
        $objWriter->startElement('a:off');
1410 2
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
1411 2
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu(round($pNote->getExtentY() / 2) + $pNote->getOffsetY()));
1412 2
        $objWriter->endElement();
1413
1414
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:ext
1415 2
        $objWriter->startElement('a:ext');
1416 2
        $objWriter->writeAttribute('cx', '5486400');
1417 2
        $objWriter->writeAttribute('cy', '3600450');
1418 2
        $objWriter->endElement();
1419
1420
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm
1421 2
        $objWriter->endElement();
1422
1423
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom
1424 2
        $objWriter->startElement('a:prstGeom');
1425 2
        $objWriter->writeAttribute('prst', 'rect');
1426
1427
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom/a:avLst
1428 2
        $objWriter->writeElement('a:avLst', null);
1429
1430
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom
1431 2
        $objWriter->endElement();
1432
1433
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr
1434 2
        $objWriter->endElement();
1435
1436
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody
1437 2
        $objWriter->startElement('p:txBody');
1438
1439
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr
1440 2
        $objWriter->writeElement('a:bodyPr', null);
1441
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody/a:lstStyle
1442 2
        $objWriter->writeElement('a:lstStyle', null);
1443
1444
        // Loop shapes
1445 2
        $shapes = $pNote->getShapeCollection();
1446 2
        foreach ($shapes as $shape) {
1447
            // Check type
1448 2
            if ($shape instanceof RichText) {
1449 2
                $paragraphs = $shape->getParagraphs();
1450 2
                $this->writeParagraphs($objWriter, $paragraphs);
1451
            }
1452
        }
1453
1454
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody
1455 2
        $objWriter->endElement();
1456
1457
        // p:notes/p:cSld/p:spTree/p:sp[2]
1458 2
        $objWriter->endElement();
1459
1460
        // p:notes/p:cSld/p:spTree
1461 2
        $objWriter->endElement();
1462
1463
        // p:notes/p:cSld
1464 2
        $objWriter->endElement();
1465
1466
        // p:notes
1467 2
        $objWriter->endElement();
1468
1469
        // Return
1470 2
        return $objWriter->getData();
1471
    }
1472
1473
    /**
1474
     * Write chart
1475
     *
1476
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
1477
     * @param \PhpOffice\PhpPresentation\Shape\Chart $shape
1478
     * @param  int $shapeId
1479
     */
1480 29
    protected function writeShapeChart(XMLWriter $objWriter, ShapeChart $shape, $shapeId)
1481
    {
1482
        // p:graphicFrame
1483 29
        $objWriter->startElement('p:graphicFrame');
1484
        // p:nvGraphicFramePr
1485 29
        $objWriter->startElement('p:nvGraphicFramePr');
1486
        // p:cNvPr
1487 29
        $objWriter->startElement('p:cNvPr');
1488 29
        $objWriter->writeAttribute('id', $shapeId);
1489 29
        $objWriter->writeAttribute('name', $shape->getName());
1490 29
        $objWriter->writeAttribute('descr', $shape->getDescription());
1491 29
        $objWriter->endElement();
1492
        // p:cNvGraphicFramePr
1493 29
        $objWriter->writeElement('p:cNvGraphicFramePr', null);
1494
        // p:nvPr
1495 29
        $objWriter->startElement('p:nvPr');
1496 29
        if ($shape->isPlaceholder()) {
1497
            $objWriter->startElement('p:ph');
1498
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
1499
            $objWriter->endElement();
1500
        }
1501 29
        $objWriter->endElement();
1502 29
        $objWriter->endElement();
1503
        // p:xfrm
1504 29
        $objWriter->startElement('p:xfrm');
1505 29
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
1506
        // a:off
1507 29
        $objWriter->startElement('a:off');
1508 29
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1509 29
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1510 29
        $objWriter->endElement();
1511
        // a:ext
1512 29
        $objWriter->startElement('a:ext');
1513 29
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1514 29
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1515 29
        $objWriter->endElement();
1516 29
        $objWriter->endElement();
1517
        // a:graphic
1518 29
        $objWriter->startElement('a:graphic');
1519
        // a:graphicData
1520 29
        $objWriter->startElement('a:graphicData');
1521 29
        $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
1522
        // c:chart
1523 29
        $objWriter->startElement('c:chart');
1524 29
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
1525 29
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
1526 29
        $objWriter->writeAttribute('r:id', $shape->relationId);
1527 29
        $objWriter->endElement();
1528 29
        $objWriter->endElement();
1529 29
        $objWriter->endElement();
1530 29
        $objWriter->endElement();
1531 29
    }
1532
1533
    /**
1534
     * Write pic
1535
     *
1536
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1537
     * @param  \PhpOffice\PhpPresentation\Shape\AbstractGraphic $shape
1538
     * @param  int $shapeId
1539
     * @throws \Exception
1540
     */
1541 10
    protected function writeShapePic(XMLWriter $objWriter, AbstractGraphic $shape, $shapeId)
1542
    {
1543
        // p:pic
1544 10
        $objWriter->startElement('p:pic');
1545
        // p:nvPicPr
1546 10
        $objWriter->startElement('p:nvPicPr');
1547
        // p:cNvPr
1548 10
        $objWriter->startElement('p:cNvPr');
1549 10
        $objWriter->writeAttribute('id', $shapeId);
1550 10
        $objWriter->writeAttribute('name', $shape->getName());
1551 10
        $objWriter->writeAttribute('descr', $shape->getDescription());
1552
        // a:hlinkClick
1553 10
        if ($shape->hasHyperlink()) {
1554 2
            $this->writeHyperlink($objWriter, $shape);
1555
        }
1556 10
        $objWriter->endElement();
1557
        // p:cNvPicPr
1558 10
        $objWriter->startElement('p:cNvPicPr');
1559
        // a:picLocks
1560 10
        $objWriter->startElement('a:picLocks');
1561 10
        $objWriter->writeAttribute('noChangeAspect', '1');
1562 10
        $objWriter->endElement();
1563 10
        $objWriter->endElement();
1564
        // p:nvPr
1565 10
        $objWriter->startElement('p:nvPr');
1566
        /**
1567
         * @link : https://github.com/stefslon/exportToPPTX/blob/master/exportToPPTX.m#L2128
1568
         */
1569 10
        if ($shape instanceof Media) {
1570
            // p:nvPr > a:videoFile
1571 1
            $objWriter->startElement('a:videoFile');
1572 1
            $objWriter->writeAttribute('r:link', $shape->relationId);
1573 1
            $objWriter->endElement();
1574
            // p:nvPr > p:extLst
1575 1
            $objWriter->startElement('p:extLst');
1576
            // p:nvPr > p:extLst > p:ext
1577 1
            $objWriter->startElement('p:ext');
1578 1
            $objWriter->writeAttribute('uri', '{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}');
1579
            // p:nvPr > p:extLst > p:ext > p14:media
1580 1
            $objWriter->startElement('p14:media');
1581 1
            $objWriter->writeAttribute('r:embed', $shape->relationId);
1582 1
            $objWriter->writeAttribute('xmlns:p14', 'http://schemas.microsoft.com/office/powerpoint/2010/main');
1583
            // p:nvPr > p:extLst > p:ext > ##p14:media
1584 1
            $objWriter->endElement();
1585
            // p:nvPr > p:extLst > ##p:ext
1586 1
            $objWriter->endElement();
1587
            // p:nvPr > ##p:extLst
1588 1
            $objWriter->endElement();
1589
        }
1590
        // ##p:nvPr
1591 10
        $objWriter->endElement();
1592 10
        $objWriter->endElement();
1593
        // p:blipFill
1594 10
        $objWriter->startElement('p:blipFill');
1595
        // a:blip
1596 10
        $objWriter->startElement('a:blip');
1597 10
        $objWriter->writeAttribute('r:embed', $shape->relationId);
1598 10
        $objWriter->endElement();
1599
        // a:stretch
1600 10
        $objWriter->startElement('a:stretch');
1601 10
        $objWriter->writeElement('a:fillRect', null);
1602 10
        $objWriter->endElement();
1603 10
        $objWriter->endElement();
1604
        // p:spPr
1605 10
        $objWriter->startElement('p:spPr');
1606
        // a:xfrm
1607 10
        $objWriter->startElement('a:xfrm');
1608 10
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
1609
        // a:off
1610 10
        $objWriter->startElement('a:off');
1611 10
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1612 10
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1613 10
        $objWriter->endElement();
1614
        // a:ext
1615 10
        $objWriter->startElement('a:ext');
1616 10
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1617 10
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1618 10
        $objWriter->endElement();
1619 10
        $objWriter->endElement();
1620
        // a:prstGeom
1621 10
        $objWriter->startElement('a:prstGeom');
1622 10
        $objWriter->writeAttribute('prst', 'rect');
1623
        // a:avLst
1624 10
        $objWriter->writeElement('a:avLst', null);
1625 10
        $objWriter->endElement();
1626 10
        if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) {
1627 1
            $this->writeBorder($objWriter, $shape->getBorder(), '');
1628
        }
1629 10
        if ($shape->getShadow()->isVisible()) {
1630 2
            $this->writeShadow($objWriter, $shape->getShadow());
1631
        }
1632 10
        $objWriter->endElement();
1633 10
        $objWriter->endElement();
1634 10
    }
1635
1636
    /**
1637
     * Write group
1638
     *
1639
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
1640
     * @param \PhpOffice\PhpPresentation\Shape\Group $group
1641
     * @param  int $shapeId
1642
     */
1643 1
    protected function writeShapeGroup(XMLWriter $objWriter, Group $group, &$shapeId)
1644
    {
1645
        // p:grpSp
1646 1
        $objWriter->startElement('p:grpSp');
1647
        // p:nvGrpSpPr
1648 1
        $objWriter->startElement('p:nvGrpSpPr');
1649
        // p:cNvPr
1650 1
        $objWriter->startElement('p:cNvPr');
1651 1
        $objWriter->writeAttribute('name', 'Group ' . $shapeId++);
1652 1
        $objWriter->writeAttribute('id', $shapeId);
1653 1
        $objWriter->endElement(); // p:cNvPr
1654
        // NOTE: Re: $shapeId This seems to be how PowerPoint 2010 does business.
1655
        // p:cNvGrpSpPr
1656 1
        $objWriter->writeElement('p:cNvGrpSpPr', null);
1657
        // p:nvPr
1658 1
        $objWriter->writeElement('p:nvPr', null);
1659 1
        $objWriter->endElement(); // p:nvGrpSpPr
1660
        // p:grpSpPr
1661 1
        $objWriter->startElement('p:grpSpPr');
1662
        // a:xfrm
1663 1
        $objWriter->startElement('a:xfrm');
1664
        // a:off
1665 1
        $objWriter->startElement('a:off');
1666 1
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
1667 1
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
1668 1
        $objWriter->endElement(); // a:off
1669
        // a:ext
1670 1
        $objWriter->startElement('a:ext');
1671 1
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
1672 1
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
1673 1
        $objWriter->endElement(); // a:ext
1674
        // a:chOff
1675 1
        $objWriter->startElement('a:chOff');
1676 1
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
1677 1
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
1678 1
        $objWriter->endElement(); // a:chOff
1679
        // a:chExt
1680 1
        $objWriter->startElement('a:chExt');
1681 1
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
1682 1
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
1683 1
        $objWriter->endElement(); // a:chExt
1684 1
        $objWriter->endElement(); // a:xfrm
1685 1
        $objWriter->endElement(); // p:grpSpPr
1686
1687 1
        $this->writeShapeCollection($objWriter, $group->getShapeCollection(), $shapeId);
1688
1689 1
        $objWriter->endElement(); // p:grpSp
1690 1
    }
1691
1692
    /**
1693
     * @param \PhpOffice\PhpPresentation\Slide\AbstractSlide $pSlide
1694
     * @param $objWriter
1695
     */
1696 108
    protected function writeSlideBackground(AbstractSlideAlias $pSlide, XMLWriter $objWriter)
1697
    {
1698 108
        if (!($pSlide->getBackground() instanceof Slide\AbstractBackground)) {
1699 108
            return;
1700
        }
1701 108
        $oBackground = $pSlide->getBackground();
1702
        // p:bg
1703 108
        $objWriter->startElement('p:bg');
1704 108
        if ($oBackground instanceof Slide\Background\Color) {
1705
            // p:bgPr
1706 108
            $objWriter->startElement('p:bgPr');
1707
            // a:solidFill
1708 108
            $objWriter->startElement('a:solidFill');
1709
            // a:srgbClr
1710 108
            $objWriter->startElement('a:srgbClr');
1711 108
            $objWriter->writeAttribute('val', $oBackground->getColor()->getRGB());
1712 108
            $objWriter->endElement();
1713
            // > a:solidFill
1714 108
            $objWriter->endElement();
1715
1716
            // p:bgPr/a:effectLst
1717 108
            $objWriter->writeElement('a:effectLst');
1718
1719
            // > p:bgPr
1720 108
            $objWriter->endElement();
1721
        }
1722 108
        if ($oBackground instanceof Slide\Background\Image) {
1723
            // p:bgPr
1724
            $objWriter->startElement('p:bgPr');
1725
            // a:blipFill
1726
            $objWriter->startElement('a:blipFill');
1727
            // a:blip
1728
            $objWriter->startElement('a:blip');
1729
            $objWriter->writeAttribute('r:embed', $oBackground->relationId);
1730
            // > a:blipFill
1731
            $objWriter->endElement();
1732
            // a:stretch
1733
            $objWriter->startElement('a:stretch');
1734
            // a:fillRect
1735
            $objWriter->writeElement('a:fillRect');
1736
            // > a:stretch
1737
            $objWriter->endElement();
1738
            // > a:blipFill
1739
            $objWriter->endElement();
1740
            // > p:bgPr
1741
            $objWriter->endElement();
1742
        }
1743
        /**
1744
         * @link : http://www.officeopenxml.com/prSlide-background.php
1745
         */
1746 108
        if ($oBackground instanceof Slide\Background\SchemeColor) {
1747
            // p:bgRef
1748
            $objWriter->startElement('p:bgRef');
1749
            $objWriter->writeAttribute('idx', '1001');
1750
            // a:schemeClr
1751
            $objWriter->startElement('a:schemeClr');
1752
            $objWriter->writeAttribute('val', $oBackground->getSchemeColor()->getValue());
1753
            $objWriter->endElement();
1754
            // > p:bgRef
1755
            $objWriter->endElement();
1756
        }
1757
        // > p:bg
1758 108
        $objWriter->endElement();
1759 108
    }
1760
1761
1762
    /**
1763
     * Write Transition Slide
1764
     * @link http://officeopenxml.com/prSlide-transitions.php
1765
     * @param XMLWriter $objWriter
1766
     * @param Slide\Transition $transition
1767
     */
1768 108
    protected function writeSlideTransition(XMLWriter $objWriter, $transition)
1769
    {
1770 108
        if (!$transition instanceof Slide\Transition) {
1771 108
            return;
1772
        }
1773 2
        $objWriter->startElement('p:transition');
1774 2
        if (!is_null($transition->getSpeed())) {
1775 1
            $objWriter->writeAttribute('spd', $transition->getSpeed());
1776
        }
1777 2
        $objWriter->writeAttribute('advClick', $transition->hasManualTrigger() ? '1' : '0');
1778 2
        if ($transition->hasTimeTrigger()) {
1779 2
            $objWriter->writeAttribute('advTm', $transition->getAdvanceTimeTrigger());
1780
        }
1781
1782 2
        switch ($transition->getTransitionType()) {
1783 2
            case Slide\Transition::TRANSITION_BLINDS_HORIZONTAL:
1784 1
                $objWriter->startElement('p:blinds');
1785 1
                $objWriter->writeAttribute('dir', 'horz');
1786 1
                $objWriter->endElement();
1787 1
                break;
1788 2
            case Slide\Transition::TRANSITION_BLINDS_VERTICAL:
1789 1
                $objWriter->startElement('p:blinds');
1790 1
                $objWriter->writeAttribute('dir', 'vert');
1791 1
                $objWriter->endElement();
1792 1
                break;
1793 2
            case Slide\Transition::TRANSITION_CHECKER_HORIZONTAL:
1794 1
                $objWriter->startElement('p:checker');
1795 1
                $objWriter->writeAttribute('dir', 'horz');
1796 1
                $objWriter->endElement();
1797 1
                break;
1798 2
            case Slide\Transition::TRANSITION_CHECKER_VERTICAL:
1799 1
                $objWriter->startElement('p:checker');
1800 1
                $objWriter->writeAttribute('dir', 'vert');
1801 1
                $objWriter->endElement();
1802 1
                break;
1803 2
            case Slide\Transition::TRANSITION_CIRCLE_HORIZONTAL:
1804 1
                $objWriter->startElement('p:circle');
1805 1
                $objWriter->writeAttribute('dir', 'horz');
1806 1
                $objWriter->endElement();
1807 1
                break;
1808 2
            case Slide\Transition::TRANSITION_CIRCLE_VERTICAL:
1809 1
                $objWriter->startElement('p:circle');
1810 1
                $objWriter->writeAttribute('dir', 'vert');
1811 1
                $objWriter->endElement();
1812 1
                break;
1813 2
            case Slide\Transition::TRANSITION_COMB_HORIZONTAL:
1814 1
                $objWriter->startElement('p:comb');
1815 1
                $objWriter->writeAttribute('dir', 'horz');
1816 1
                $objWriter->endElement();
1817 1
                break;
1818 2
            case Slide\Transition::TRANSITION_COMB_VERTICAL:
1819 1
                $objWriter->startElement('p:comb');
1820 1
                $objWriter->writeAttribute('dir', 'vert');
1821 1
                $objWriter->endElement();
1822 1
                break;
1823 2
            case Slide\Transition::TRANSITION_COVER_DOWN:
1824 1
                $objWriter->startElement('p:cover');
1825 1
                $objWriter->writeAttribute('dir', 'd');
1826 1
                $objWriter->endElement();
1827 1
                break;
1828 2
            case Slide\Transition::TRANSITION_COVER_LEFT:
1829 1
                $objWriter->startElement('p:cover');
1830 1
                $objWriter->writeAttribute('dir', 'l');
1831 1
                $objWriter->endElement();
1832 1
                break;
1833 2
            case Slide\Transition::TRANSITION_COVER_LEFT_DOWN:
1834 1
                $objWriter->startElement('p:cover');
1835 1
                $objWriter->writeAttribute('dir', 'ld');
1836 1
                $objWriter->endElement();
1837 1
                break;
1838 2
            case Slide\Transition::TRANSITION_COVER_LEFT_UP:
1839 1
                $objWriter->startElement('p:cover');
1840 1
                $objWriter->writeAttribute('dir', 'lu');
1841 1
                $objWriter->endElement();
1842 1
                break;
1843 2
            case Slide\Transition::TRANSITION_COVER_RIGHT:
1844 1
                $objWriter->startElement('p:cover');
1845 1
                $objWriter->writeAttribute('dir', 'r');
1846 1
                $objWriter->endElement();
1847 1
                break;
1848 2
            case Slide\Transition::TRANSITION_COVER_RIGHT_DOWN:
1849 1
                $objWriter->startElement('p:cover');
1850 1
                $objWriter->writeAttribute('dir', 'rd');
1851 1
                $objWriter->endElement();
1852 1
                break;
1853 2
            case Slide\Transition::TRANSITION_COVER_RIGHT_UP:
1854 1
                $objWriter->startElement('p:cover');
1855 1
                $objWriter->writeAttribute('dir', 'ru');
1856 1
                $objWriter->endElement();
1857 1
                break;
1858 2
            case Slide\Transition::TRANSITION_COVER_UP:
1859 1
                $objWriter->startElement('p:cover');
1860 1
                $objWriter->writeAttribute('dir', 'u');
1861 1
                $objWriter->endElement();
1862 1
                break;
1863 2
            case Slide\Transition::TRANSITION_CUT:
1864 1
                $objWriter->writeElement('p:cut');
1865 1
                break;
1866 2
            case Slide\Transition::TRANSITION_DIAMOND:
1867 1
                $objWriter->writeElement('p:diamond');
1868 1
                break;
1869 2
            case Slide\Transition::TRANSITION_DISSOLVE:
1870 1
                $objWriter->writeElement('p:dissolve');
1871 1
                break;
1872 2
            case Slide\Transition::TRANSITION_FADE:
1873 1
                $objWriter->writeElement('p:fade');
1874 1
                break;
1875 2
            case Slide\Transition::TRANSITION_NEWSFLASH:
1876 1
                $objWriter->writeElement('p:newsflash');
1877 1
                break;
1878 2
            case Slide\Transition::TRANSITION_PLUS:
1879 1
                $objWriter->writeElement('p:plus');
1880 1
                break;
1881 2
            case Slide\Transition::TRANSITION_PULL_DOWN:
1882 1
                $objWriter->startElement('p:pull');
1883 1
                $objWriter->writeAttribute('dir', 'd');
1884 1
                $objWriter->endElement();
1885 1
                break;
1886 2
            case Slide\Transition::TRANSITION_PULL_LEFT:
1887 1
                $objWriter->startElement('p:pull');
1888 1
                $objWriter->writeAttribute('dir', 'l');
1889 1
                $objWriter->endElement();
1890 1
                break;
1891 2
            case Slide\Transition::TRANSITION_PULL_RIGHT:
1892 1
                $objWriter->startElement('p:pull');
1893 1
                $objWriter->writeAttribute('dir', 'r');
1894 1
                $objWriter->endElement();
1895 1
                break;
1896 2
            case Slide\Transition::TRANSITION_PULL_UP:
1897 1
                $objWriter->startElement('p:pull');
1898 1
                $objWriter->writeAttribute('dir', 'u');
1899 1
                $objWriter->endElement();
1900 1
                break;
1901 2
            case Slide\Transition::TRANSITION_PUSH_DOWN:
1902 1
                $objWriter->startElement('p:push');
1903 1
                $objWriter->writeAttribute('dir', 'd');
1904 1
                $objWriter->endElement();
1905 1
                break;
1906 2
            case Slide\Transition::TRANSITION_PUSH_LEFT:
1907 1
                $objWriter->startElement('p:push');
1908 1
                $objWriter->writeAttribute('dir', 'l');
1909 1
                $objWriter->endElement();
1910 1
                break;
1911 2
            case Slide\Transition::TRANSITION_PUSH_RIGHT:
1912 1
                $objWriter->startElement('p:push');
1913 1
                $objWriter->writeAttribute('dir', 'r');
1914 1
                $objWriter->endElement();
1915 1
                break;
1916 2
            case Slide\Transition::TRANSITION_PUSH_UP:
1917 1
                $objWriter->startElement('p:push');
1918 1
                $objWriter->writeAttribute('dir', 'u');
1919 1
                $objWriter->endElement();
1920 1
                break;
1921 2
            case Slide\Transition::TRANSITION_RANDOM:
1922 1
                $objWriter->writeElement('p:random');
1923 1
                break;
1924 2
            case Slide\Transition::TRANSITION_RANDOMBAR_HORIZONTAL:
1925 1
                $objWriter->startElement('p:randomBar');
1926 1
                $objWriter->writeAttribute('dir', 'horz');
1927 1
                $objWriter->endElement();
1928 1
                break;
1929 2
            case Slide\Transition::TRANSITION_RANDOMBAR_VERTICAL:
1930 1
                $objWriter->startElement('p:randomBar');
1931 1
                $objWriter->writeAttribute('dir', 'vert');
1932 1
                $objWriter->endElement();
1933 1
                break;
1934 2
            case Slide\Transition::TRANSITION_SPLIT_IN_HORIZONTAL:
1935 1
                $objWriter->startElement('p:split');
1936 1
                $objWriter->writeAttribute('dir', 'in');
1937 1
                $objWriter->writeAttribute('orient', 'horz');
1938 1
                $objWriter->endElement();
1939 1
                break;
1940 2
            case Slide\Transition::TRANSITION_SPLIT_OUT_HORIZONTAL:
1941 1
                $objWriter->startElement('p:split');
1942 1
                $objWriter->writeAttribute('dir', 'out');
1943 1
                $objWriter->writeAttribute('orient', 'horz');
1944 1
                $objWriter->endElement();
1945 1
                break;
1946 2
            case Slide\Transition::TRANSITION_SPLIT_IN_VERTICAL:
1947 2
                $objWriter->startElement('p:split');
1948 2
                $objWriter->writeAttribute('dir', 'in');
1949 2
                $objWriter->writeAttribute('orient', 'vert');
1950 2
                $objWriter->endElement();
1951 2
                break;
1952 1
            case Slide\Transition::TRANSITION_SPLIT_OUT_VERTICAL:
1953 1
                $objWriter->startElement('p:split');
1954 1
                $objWriter->writeAttribute('dir', 'out');
1955 1
                $objWriter->writeAttribute('orient', 'vert');
1956 1
                $objWriter->endElement();
1957 1
                break;
1958 1
            case Slide\Transition::TRANSITION_STRIPS_LEFT_DOWN:
1959 1
                $objWriter->startElement('p:strips');
1960 1
                $objWriter->writeAttribute('dir', 'ld');
1961 1
                $objWriter->endElement();
1962 1
                break;
1963 1
            case Slide\Transition::TRANSITION_STRIPS_LEFT_UP:
1964 1
                $objWriter->startElement('p:strips');
1965 1
                $objWriter->writeAttribute('dir', 'lu');
1966 1
                $objWriter->endElement();
1967 1
                break;
1968 1
            case Slide\Transition::TRANSITION_STRIPS_RIGHT_DOWN:
1969 1
                $objWriter->startElement('p:strips');
1970 1
                $objWriter->writeAttribute('dir', 'rd');
1971 1
                $objWriter->endElement();
1972 1
                break;
1973 1
            case Slide\Transition::TRANSITION_STRIPS_RIGHT_UP:
1974 1
                $objWriter->startElement('p:strips');
1975 1
                $objWriter->writeAttribute('dir', 'ru');
1976 1
                $objWriter->endElement();
1977 1
                break;
1978 1
            case Slide\Transition::TRANSITION_WEDGE:
1979 1
                $objWriter->writeElement('p:wedge');
1980 1
                break;
1981 1
            case Slide\Transition::TRANSITION_WIPE_DOWN:
1982 1
                $objWriter->startElement('p:wipe');
1983 1
                $objWriter->writeAttribute('dir', 'd');
1984 1
                $objWriter->endElement();
1985 1
                break;
1986 1
            case Slide\Transition::TRANSITION_WIPE_LEFT:
1987 1
                $objWriter->startElement('p:wipe');
1988 1
                $objWriter->writeAttribute('dir', 'l');
1989 1
                $objWriter->endElement();
1990 1
                break;
1991 1
            case Slide\Transition::TRANSITION_WIPE_RIGHT:
1992 1
                $objWriter->startElement('p:wipe');
1993 1
                $objWriter->writeAttribute('dir', 'r');
1994 1
                $objWriter->endElement();
1995 1
                break;
1996 1
            case Slide\Transition::TRANSITION_WIPE_UP:
1997 1
                $objWriter->startElement('p:wipe');
1998 1
                $objWriter->writeAttribute('dir', 'u');
1999 1
                $objWriter->endElement();
2000 1
                break;
2001 1
            case Slide\Transition::TRANSITION_ZOOM_IN:
2002 1
                $objWriter->startElement('p:zoom');
2003 1
                $objWriter->writeAttribute('dir', 'in');
2004 1
                $objWriter->endElement();
2005 1
                break;
2006 1
            case Slide\Transition::TRANSITION_ZOOM_OUT:
2007 1
                $objWriter->startElement('p:zoom');
2008 1
                $objWriter->writeAttribute('dir', 'out');
2009 1
                $objWriter->endElement();
2010 1
                break;
2011
        }
2012
2013 2
        $objWriter->endElement();
2014 2
    }
2015
2016 1
    private function getGUID()
2017
    {
2018 1
        if (function_exists('com_create_guid')) {
2019
            return com_create_guid();
2020
        } else {
2021 1
            mt_srand((double)microtime() * 10000);//optional for php 4.2.0 and up.
2022 1
            $charid = strtoupper(md5(uniqid(rand(), true)));
2023 1
            $hyphen = chr(45);// "-"
2024 1
            $uuid = chr(123)// "{"
2025 1
                . substr($charid, 0, 8) . $hyphen
2026 1
                . substr($charid, 8, 4) . $hyphen
2027 1
                . substr($charid, 12, 4) . $hyphen
2028 1
                . substr($charid, 16, 4) . $hyphen
2029 1
                . substr($charid, 20, 12)
2030 1
                . chr(125);// "}"
2031 1
            return $uuid;
2032
        }
2033
    }
2034
}
2035