Completed
Pull Request — develop (#435)
by
unknown
11:46
created

AbstractSlide::writeShapeTriangle()   C

Complexity

Conditions 7
Paths 5

Size

Total Lines 88
Code Lines 63

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 88
ccs 0
cts 64
cp 0
rs 6.5184
cc 7
eloc 63
nc 5
nop 3
crap 56

How to fix   Long Method   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
/**
3
 * 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
use PhpOffice\Common\Drawing as CommonDrawing;
19
use PhpOffice\Common\Text;
20
use PhpOffice\Common\XMLWriter;
21
use PhpOffice\PhpPresentation\Shape\AbstractGraphic;
22
use PhpOffice\PhpPresentation\Shape\Chart as ShapeChart;
23
use PhpOffice\PhpPresentation\Shape\Comment;
24
use PhpOffice\PhpPresentation\Shape\Drawing\Gd as ShapeDrawingGd;
25
use PhpOffice\PhpPresentation\Shape\Drawing\File as ShapeDrawingFile;
26
use PhpOffice\PhpPresentation\Shape\Group;
27
use PhpOffice\PhpPresentation\Shape\Line;
28
use PhpOffice\PhpPresentation\Shape\Rectangle;
29
use PhpOffice\PhpPresentation\Shape\RoundRectangle;
30
use PhpOffice\PhpPresentation\Shape\Triangle;
31
use PhpOffice\PhpPresentation\Shape\ArrowPointer;
32
use PhpOffice\PhpPresentation\Shape\Ellipse;
33
use PhpOffice\PhpPresentation\Shape\Media;
34
use PhpOffice\PhpPresentation\Shape\Placeholder;
35
use PhpOffice\PhpPresentation\Shape\RichText;
36
use PhpOffice\PhpPresentation\Shape\RichText\BreakElement;
37
use PhpOffice\PhpPresentation\Shape\RichText\Run;
38
use PhpOffice\PhpPresentation\Shape\RichText\TextElement;
39
use PhpOffice\PhpPresentation\Shape\Table as ShapeTable;
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
abstract class AbstractSlide extends AbstractDecoratorWriter
0 ignored issues
show
Complexity introduced by
The class AbstractSlide has a coupling between objects value of 37. Consider to reduce the number of dependencies under 35.
Loading history...
49
{
50
    /**
51
     * @param AbstractSlideAlias $pSlideMaster
52
     * @param $objWriter
53
     * @param $relId
54
     * @throws \Exception
55
     */
56 114
    protected function writeDrawingRelations(AbstractSlideAlias $pSlideMaster, $objWriter, $relId)
57
    {
58 114
        if ($pSlideMaster->getShapeCollection()->count() > 0) {
59
            // Loop trough images and write relationships
60 2
            $iterator = $pSlideMaster->getShapeCollection()->getIterator();
61 2
            while ($iterator->valid()) {
62 2
                if ($iterator->current() instanceof ShapeDrawingFile || $iterator->current() instanceof ShapeDrawingGd) {
63
                    // Write relationship for image drawing
64 1
                    $this->writeRelationship(
65 1
                        $objWriter,
66 1
                        $relId,
67 1
                        'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
68 1
                        '../media/' . str_replace(' ', '_', $iterator->current()->getIndexedFilename())
69 1
                    );
70 1
                    $iterator->current()->relationId = 'rId' . $relId;
71 1
                    ++$relId;
72 2
                } elseif ($iterator->current() instanceof ShapeChart) {
73
                    // Write relationship for chart drawing
74
                    $this->writeRelationship(
75
                        $objWriter,
76
                        $relId,
77
                        'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',
78
                        '../charts/' . $iterator->current()->getIndexedFilename()
79
                    );
80
                    $iterator->current()->relationId = 'rId' . $relId;
81
                    ++$relId;
82 1
                } elseif ($iterator->current() instanceof Group) {
83
                    $iterator2 = $iterator->current()->getShapeCollection()->getIterator();
84
                    while ($iterator2->valid()) {
85
                        if ($iterator2->current() instanceof ShapeDrawingFile ||
86
                            $iterator2->current() instanceof ShapeDrawingGd
87
                        ) {
88
                            // Write relationship for image drawing
89
                            $this->writeRelationship(
90
                                $objWriter,
91
                                $relId,
92
                                'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
93
                                '../media/' . str_replace(' ', '_', $iterator2->current()->getIndexedFilename())
94
                            );
95
                            $iterator2->current()->relationId = 'rId' . $relId;
96
                            ++$relId;
97
                        } elseif ($iterator2->current() instanceof ShapeChart) {
98
                            // Write relationship for chart drawing
99
                            $this->writeRelationship(
100
                                $objWriter,
101
                                $relId,
102
                                'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',
103
                                '../charts/' . $iterator2->current()->getIndexedFilename()
104
                            );
105
                            $iterator2->current()->relationId = 'rId' . $relId;
106
                            ++$relId;
107
                        }
108
                        $iterator2->next();
109
                    }
110
                }
111 2
                $iterator->next();
112 2
            }
113 2
        }
114 114
    }
115
    /**
116
     * @param XMLWriter $objWriter
117
     * @param \ArrayObject|\PhpOffice\PhpPresentation\AbstractShape[] $shapes
118
     * @param int $shapeId
119
     * @throws \Exception
120
     */
121 113
    protected function writeShapeCollection(XMLWriter $objWriter, $shapes = array(), &$shapeId = 0)
122
    {
123 113
        if (count($shapes) == 0) {
124 113
            return;
125
        }
126 86
        foreach ($shapes as $shape) {
127
            // Increment $shapeId
128 86
            ++$shapeId;
129
            // Check type
130 86
            if ($shape instanceof RichText) {
131 26
                $this->writeShapeText($objWriter, $shape, $shapeId);
132 26
            }
133 61
            elseif ($shape instanceof Ellipse) {
134
                $this->writeShapeEllipse($objWriter, $shape, $shapeId);
135
            }
136 61
            elseif ($shape instanceof ShapeTable) {
137 11
                $this->writeShapeTable($objWriter, $shape, $shapeId);
138 61
            } elseif ($shape instanceof Line) {
139 1
                $this->writeShapeLine($objWriter, $shape, $shapeId);
140 51
            } elseif ($shape instanceof ShapeChart) {
141 34
                $this->writeShapeChart($objWriter, $shape, $shapeId);
142 50
            } elseif ($shape instanceof AbstractGraphic) {
143 10
                $this->writeShapePic($objWriter, $shape, $shapeId);
144 17
            } elseif ($shape instanceof Group) {
145 1
                $this->writeShapeGroup($objWriter, $shape, $shapeId);
146 1
            }
147 8
            elseif ($shape instanceof RoundRectangle) {
148
                $this->writeShapeRoundRect($objWriter, $shape, $shapeId);
149
            }
150 8
            elseif ($shape instanceof Triangle) {
151
                $this->writeShapeTriangle($objWriter, $shape, $shapeId);
0 ignored issues
show
Bug introduced by
The method writeShapeTriangle() 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...
152
            }
153 8
            elseif ($shape instanceof Rectangle) {
154
                $this->writeShapeRectangle($objWriter, $shape, $shapeId);
155
            }
156 8
            elseif ($shape instanceof ArrowPointer) {
157
                $this->writeShapeArrowPointer($objWriter, $shape, $shapeId);
158
            }
159 8
            elseif ($shape instanceof Comment) {
160 8
            } else {
161
                throw new \Exception("Unknown Shape type: {get_class($shape)}");
162
            }
163 86
        }
164 86
    }
165
166
    /**
167
     * Writing a Ellipse shape to help develop more dynamic and useful slides with php presentation.
168
     *
169
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
170
     * @param  \PhpOffice\PhpPresentation\Shape\Ellipse $shape
171
     * @param  int $shapeId
172
     * @throws \Exception
173
     */
174
    protected function writeShapeEllipse(XMLWriter $objWriter, Ellipse $shape, $shapeId)
175
    {
176
        //p:sp
177
        $objWriter->startElement('p:sp');
178
        //p:nvSpPr
179
        $objWriter->startElement('p:nvSpPr');
180
        //p:cNvPr
181
        $objWriter->startElement('p:cNvPr');
182
        $objWriter->writeAttribute('id',$shapeId);
183
        $objWriter->writeAttribute('name','Ellipse 4');
184
        $objWriter->endElement();
185
        //p:cNvSpPr
186
        $objWriter->startElement('p:cNvSpPr');
187
        $objWriter->endElement();
188
        //p:nvPr
189
        $objWriter->startElement('p:nvPr');
190
        $objWriter->endElement();
191
        $objWriter->endElement();
192
        //p:spPr
193
        $objWriter->startElement('p:spPr');
194
        // a:xfrm
195
        $objWriter->startElement('a:xfrm');
196
197
        $objWriter->writeAttribute('rot',CommonDrawing::pixelsToEmu($shape->getRotation()));
198
199
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
200
            // a:off
201
            $objWriter->startElement('a:off');
202
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
203
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
204
            $objWriter->endElement();
205
            // a:ext
206
            $objWriter->startElement('a:ext');
207
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
208
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
209
            $objWriter->endElement();
210
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
211
            // a:off
212
            $objWriter->startElement('a:off');
213
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
214
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
215
            $objWriter->endElement();
216
            // a:ext
217
            $objWriter->startElement('a:ext');
218
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
219
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
220
            $objWriter->endElement();
221
        } elseif ($shape->getHeight() < 0) {
222
            $objWriter->writeAttribute('flipV', 1);
223
            // a:off
224
            $objWriter->startElement('a:off');
225
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
226
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
227
            $objWriter->endElement();
228
            // a:ext
229
            $objWriter->startElement('a:ext');
230
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
231
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
232
            $objWriter->endElement();
233
        } elseif ($shape->getWidth() < 0) {
234
            $objWriter->writeAttribute('flipV', 1);
235
            // a:off
236
            $objWriter->startElement('a:off');
237
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
238
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
239
            $objWriter->endElement();
240
            // a:ext
241
            $objWriter->startElement('a:ext');
242
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
243
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
244
            $objWriter->endElement();
245
        }
246
247
        $objWriter->endElement();
248
        //a:prstGeom
249
        $objWriter->startElement('a:prstGeom');
250
        $objWriter->writeAttribute('prst', 'ellipse');
251
252
        // a:prstGeom/a:avLst
253
        $objWriter->writeElement('a:avLst');
254
        $objWriter->endElement();
255
        $this->writeSolidFill($objWriter, $shape->getFill());
256
        $this->writeBorder($objWriter, $shape->getBorder(), '');
257
        $objWriter->endElement();
258
        $objWriter->endElement();
259
260
    }
261
262
    /**
263
     * Writing a Rectangle shape to help develop more dynamic and useful slides with php presentation.
264
     *
265
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
266
     * @param  \PhpOffice\PhpPresentation\Shape\Rectangle $shape
267
     * @param  int $shapeId
268
     * @throws \Exception
269
     */
270
    protected function writeShapeRectangle(XMLWriter $objWriter, Rectangle $shape, $shapeId)
271
    {
272
        //p:sp
273
        $objWriter->startElement('p:sp');
274
        //p:nvSpPr
275
        $objWriter->startElement('p:nvSpPr');
276
        //p:cNvPr
277
        $objWriter->startElement('p:cNvPr');
278
        $objWriter->writeAttribute('id',$shapeId);
279
        $objWriter->writeAttribute('name','Rectangle');
280
        $objWriter->endElement();
281
        //p:cNvSpPr
282
        $objWriter->startElement('p:cNvSpPr');
283
        $objWriter->endElement();
284
        //p:nvPr
285
        $objWriter->startElement('p:nvPr');
286
        $objWriter->endElement();
287
        $objWriter->endElement();
288
        //p:spPr
289
        $objWriter->startElement('p:spPr');
290
        // a:xfrm
291
        $objWriter->startElement('a:xfrm');
292
293
        $objWriter->writeAttribute('rot',CommonDrawing::pixelsToEmu($shape->getRotation()));
294
295
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
296
            // a:off
297
            $objWriter->startElement('a:off');
298
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
299
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
300
            $objWriter->endElement();
301
            // a:ext
302
            $objWriter->startElement('a:ext');
303
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
304
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
305
            $objWriter->endElement();
306
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
307
            // a:off
308
            $objWriter->startElement('a:off');
309
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
310
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
311
            $objWriter->endElement();
312
            // a:ext
313
            $objWriter->startElement('a:ext');
314
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
315
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
316
            $objWriter->endElement();
317
        } elseif ($shape->getHeight() < 0) {
318
            $objWriter->writeAttribute('flipV', 1);
319
            // a:off
320
            $objWriter->startElement('a:off');
321
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
322
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
323
            $objWriter->endElement();
324
            // a:ext
325
            $objWriter->startElement('a:ext');
326
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
327
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
328
            $objWriter->endElement();
329
        } elseif ($shape->getWidth() < 0) {
330
            $objWriter->writeAttribute('flipV', 1);
331
            // a:off
332
            $objWriter->startElement('a:off');
333
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
334
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
335
            $objWriter->endElement();
336
            // a:ext
337
            $objWriter->startElement('a:ext');
338
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
339
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
340
            $objWriter->endElement();
341
        }
342
343
        $objWriter->endElement();
344
        //a:prstGeom
345
        $objWriter->startElement('a:prstGeom');
346
        $objWriter->writeAttribute('prst', 'rect');
347
348
        // a:prstGeom/a:avLst
349
        $objWriter->writeElement('a:avLst');
350
        $objWriter->endElement();
351
        $this->writeSolidFill($objWriter, $shape->getFill());
352
        $this->writeBorder($objWriter, $shape->getBorder(), '');
353
        $objWriter->endElement();
354
        $objWriter->endElement();
355
356
    }
357
358
    /**
359
     * Writing an arrow pointer shape to help develop more dynamic and useful slides with php presentation.
360
     *
361
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
362
     * @param  \PhpOffice\PhpPresentation\Shape\ArrowPointer $shape
363
     * @param  int $shapeId
364
     * @throws \Exception
365
     */
366
    protected function writeShapeArrowPointer(XMLWriter $objWriter, ArrowPointer $shape, $shapeId)
367
    {
368
        // p:sp
369
        $objWriter->startElement('p:cxnSp');
370
        // p:nvSpPr
371
        $objWriter->startElement('p:nvCxnSpPr');
372
        // p:cNvPr
373
        $objWriter->startElement('p:cNvPr');
374
        $objWriter->writeAttribute('id', $shapeId);
375
        $objWriter->writeAttribute('name', 'Arrow Pointer');
376
        $objWriter->endElement();
377
        // p:cNvCxnSpPr
378
        $objWriter->writeElement('p:cNvCxnSpPr', null);
379
        // p:nvPr
380
        $objWriter->startElement('p:nvPr');
381
        if ($shape->isPlaceholder()) {
382
            $objWriter->startElement('p:ph');
383
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
384
            $objWriter->endElement();
385
        }
386
        $objWriter->endElement();
387
        $objWriter->endElement();
388
        // p:spPr
389
        $objWriter->startElement('p:spPr');
390
        // a:xfrm
391
        $objWriter->startElement('a:xfrm');
392
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
393
            // a:off
394
            $objWriter->startElement('a:off');
395
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
396
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
397
            $objWriter->endElement();
398
            // a:ext
399
            $objWriter->startElement('a:ext');
400
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
401
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
402
            $objWriter->endElement();
403
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
404
            // a:off
405
            $objWriter->startElement('a:off');
406
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
407
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
408
            $objWriter->endElement();
409
            // a:ext
410
            $objWriter->startElement('a:ext');
411
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
412
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
413
            $objWriter->endElement();
414
        } elseif ($shape->getHeight() < 0) {
415
            $objWriter->writeAttribute('flipV', 1);
416
            // a:off
417
            $objWriter->startElement('a:off');
418
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
419
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
420
            $objWriter->endElement();
421
            // a:ext
422
            $objWriter->startElement('a:ext');
423
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
424
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
425
            $objWriter->endElement();
426
        } elseif ($shape->getWidth() < 0) {
427
            $objWriter->writeAttribute('flipV', 1);
428
            // a:off
429
            $objWriter->startElement('a:off');
430
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
431
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
432
            $objWriter->endElement();
433
            // a:ext
434
            $objWriter->startElement('a:ext');
435
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
436
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
437
            $objWriter->endElement();
438
        }
439
        $objWriter->endElement();
440
        // a:prstGeom
441
        $objWriter->startElement('a:prstGeom');
442
        $objWriter->writeAttribute('prst', 'straightConnector1');
443
444
        // a:prstGeom/a:avLst
445
        $objWriter->writeElement('a:avLst');
446
        $objWriter->endElement();
447
448
        $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...
449
450
        $objWriter->endElement();
451
452
        $objWriter->endElement();
453
454
    }
455
456
457
    /**
458
     * Writing a round rectangle shape to help develop more dynamic and useful slides with php presentation.
459
     *
460
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
461
     * @param  \PhpOffice\PhpPresentation\Shape\RoundRectangle $shape
462
     * @param  int $shapeId
463
     * @throws \Exception
464
     */
465
    protected function writeShapeRoundRect(XMLWriter $objWriter, RoundRectangle $shape, $shapeId)
466
    {
467
        //p:sp
468
        $objWriter->startElement('p:sp');
469
        //p:nvSpPr
470
        $objWriter->startElement('p:nvSpPr');
471
        //p:cNvPr
472
        $objWriter->startElement('p:cNvPr');
473
        $objWriter->writeAttribute('id',$shapeId);
474
        $objWriter->writeAttribute('name','Round Rectangle');
475
        $objWriter->endElement();
476
        //p:cNvSpPr
477
        $objWriter->startElement('p:cNvSpPr');
478
        $objWriter->endElement();
479
        //p:nvPr
480
        $objWriter->startElement('p:nvPr');
481
        $objWriter->endElement();
482
        $objWriter->endElement();
483
        //p:spPr
484
        $objWriter->startElement('p:spPr');
485
        // a:xfrm
486
        $objWriter->startElement('a:xfrm');
487
488
//        $objWriter->writeAttribute('rot',CommonDrawing::pixelsToEmu($shape->getRotation()));
489
490
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
491
492
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
493
            // a:off
494
            $objWriter->startElement('a:off');
495
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
496
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
497
            $objWriter->endElement();
498
            // a:ext
499
            $objWriter->startElement('a:ext');
500
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
501
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
502
            $objWriter->endElement();
503
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
504
            // a:off
505
            $objWriter->startElement('a:off');
506
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
507
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
508
            $objWriter->endElement();
509
            // a:ext
510
            $objWriter->startElement('a:ext');
511
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
512
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
513
            $objWriter->endElement();
514
        } elseif ($shape->getHeight() < 0) {
515
            $objWriter->writeAttribute('flipV', 1);
516
            // a:off
517
            $objWriter->startElement('a:off');
518
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
519
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
520
            $objWriter->endElement();
521
            // a:ext
522
            $objWriter->startElement('a:ext');
523
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
524
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
525
            $objWriter->endElement();
526
        } elseif ($shape->getWidth() < 0) {
527
            $objWriter->writeAttribute('flipV', 1);
528
            // a:off
529
            $objWriter->startElement('a:off');
530
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
531
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
532
            $objWriter->endElement();
533
            // a:ext
534
            $objWriter->startElement('a:ext');
535
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
536
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
537
            $objWriter->endElement();
538
        }
539
540
        $objWriter->endElement();
541
        //a:prstGeom
542
        $objWriter->startElement('a:prstGeom');
543
        $objWriter->writeAttribute('prst', 'roundRect');
544
545
        // a:prstGeom/a:avLst
546
        $objWriter->writeElement('a:avLst');
547
        $objWriter->endElement();
548
        $this->writeSolidFill($objWriter, $shape->getFill());
549
        $this->writeBorder($objWriter, $shape->getBorder(), '');
550
        $objWriter->endElement();
551
        $objWriter->endElement();
552
553
554
    }
555
556
557
    /**
558
     * Write txt
559
     *
560
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
561
     * @param  \PhpOffice\PhpPresentation\Shape\RichText $shape
562
     * @param  int $shapeId
563
     * @throws \Exception
564
     */
565 26
    protected function writeShapeText(XMLWriter $objWriter, RichText $shape, $shapeId)
566
    {
567
        // p:sp
568 26
        $objWriter->startElement('p:sp');
569
        // p:sp\p:nvSpPr
570 26
        $objWriter->startElement('p:nvSpPr');
571
        // p:sp\p:nvSpPr\p:cNvPr
572 26
        $objWriter->startElement('p:cNvPr');
573 26
        $objWriter->writeAttribute('id', $shapeId);
574 26
        if ($shape->isPlaceholder()) {
575 1
            $objWriter->writeAttribute('name', 'Placeholder for ' . $shape->getPlaceholder()->getType());
576 1
        } else {
577 26
            $objWriter->writeAttribute('name', '');
578
        }
579
        // Hyperlink
580 26
        if ($shape->hasHyperlink()) {
581 1
            $this->writeHyperlink($objWriter, $shape);
582 1
        }
583
        // > p:sp\p:nvSpPr
584 26
        $objWriter->endElement();
585
        // p:sp\p:cNvSpPr
586 26
        $objWriter->startElement('p:cNvSpPr');
587 26
        $objWriter->writeAttribute('txBox', '1');
588 26
        $objWriter->endElement();
589
        // p:sp\p:cNvSpPr\p:nvPr
590 26
        if ($shape->isPlaceholder()) {
591 1
            $objWriter->startElement('p:nvPr');
592 1
            $objWriter->startElement('p:ph');
593 1
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
594 1
            if (!is_null($shape->getPlaceholder()->getIdx())) {
595
                $objWriter->writeAttribute('idx', $shape->getPlaceholder()->getIdx());
596
            }
597 1
            $objWriter->endElement();
598 1
            $objWriter->endElement();
599 1
        } else {
600 26
            $objWriter->writeElement('p:nvPr', null);
601
        }
602
        // > p:sp\p:cNvSpPr
603 26
        $objWriter->endElement();
604
        // p:sp\p:spPr
605 26
        $objWriter->startElement('p:spPr');
606
        // p:sp\p:spPr\a:xfrm
607 26
        $objWriter->startElement('a:xfrm');
608 26
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
609
        // p:sp\p:spPr\a:xfrm\a:off
610 26
        $objWriter->startElement('a:off');
611 26
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
612 26
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
613 26
        $objWriter->endElement();
614
        // p:sp\p:spPr\a:xfrm\a:ext
615 26
        $objWriter->startElement('a:ext');
616 26
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
617 26
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
618 26
        $objWriter->endElement();
619
        // > p:sp\p:spPr\a:xfrm
620 26
        $objWriter->endElement();
621
        // p:sp\p:spPr\a:prstGeom
622 26
        $objWriter->startElement('a:prstGeom');
623 26
        $objWriter->writeAttribute('prst', 'rect');
624
        // p:sp\p:spPr\a:prstGeom\a:avLst
625 26
        $objWriter->writeElement('a:avLst');
626 26
        $objWriter->endElement();
627 26
        $this->writeFill($objWriter, $shape->getFill());
628 26
        $this->writeBorder($objWriter, $shape->getBorder(), '');
629 26
        $this->writeShadow($objWriter, $shape->getShadow());
630
        // > p:sp\p:spPr
631 26
        $objWriter->endElement();
632
        // p:txBody
633 26
        $objWriter->startElement('p:txBody');
634
        // a:bodyPr
635
        //@link :http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.bodyproperties%28v=office.14%29.aspx
636 26
        $objWriter->startElement('a:bodyPr');
637 26
        if (!$shape->isPlaceholder()) {
638 26
            $verticalAlign = $shape->getActiveParagraph()->getAlignment()->getVertical();
639 26
            if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) {
640 3
                $objWriter->writeAttribute('anchor', $verticalAlign);
641 3
            }
642 26
            if ($shape->getWrap() != RichText::WRAP_SQUARE) {
643
                $objWriter->writeAttribute('wrap', $shape->getWrap());
644
            }
645 26
            $objWriter->writeAttribute('rtlCol', '0');
646 26
            if ($shape->getHorizontalOverflow() != RichText::OVERFLOW_OVERFLOW) {
647
                $objWriter->writeAttribute('horzOverflow', $shape->getHorizontalOverflow());
648
            }
649 26
            if ($shape->getVerticalOverflow() != RichText::OVERFLOW_OVERFLOW) {
650
                $objWriter->writeAttribute('vertOverflow', $shape->getVerticalOverflow());
651
            }
652 26
            if ($shape->isUpright()) {
653 1
                $objWriter->writeAttribute('upright', '1');
654 1
            }
655 26
            if ($shape->isVertical()) {
656 1
                $objWriter->writeAttribute('vert', 'vert');
657 1
            }
658 26
            $objWriter->writeAttribute('bIns', CommonDrawing::pixelsToEmu($shape->getInsetBottom()));
659 26
            $objWriter->writeAttribute('lIns', CommonDrawing::pixelsToEmu($shape->getInsetLeft()));
660 26
            $objWriter->writeAttribute('rIns', CommonDrawing::pixelsToEmu($shape->getInsetRight()));
661 26
            $objWriter->writeAttribute('tIns', CommonDrawing::pixelsToEmu($shape->getInsetTop()));
662 26
            if ($shape->getColumns() <> 1) {
663
                $objWriter->writeAttribute('numCol', $shape->getColumns());
664
            }
665
            // a:spAutoFit
666 26
            $objWriter->startElement('a:' . $shape->getAutoFit());
667 26
            if ($shape->getAutoFit() == RichText::AUTOFIT_NORMAL) {
668 1
                if (!is_null($shape->getFontScale())) {
669 1
                    $objWriter->writeAttribute('fontScale', (int)($shape->getFontScale() * 1000));
670 1
                }
671 1
                if (!is_null($shape->getLineSpaceReduction())) {
672 1
                    $objWriter->writeAttribute('lnSpcReduction', (int)($shape->getLineSpaceReduction() * 1000));
673 1
                }
674 1
            }
675 26
            $objWriter->endElement();
676 26
        }
677 26
        $objWriter->endElement();
678
        // a:lstStyle
679 26
        $objWriter->writeElement('a:lstStyle', null);
680 26
        if ($shape->isPlaceholder() &&
681 1
            ($shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ||
682
                $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_DATETIME)
683 26
        ) {
684 1
            $objWriter->startElement('a:p');
685
            // Paragraph Style
686 1
            $paragraphs = $shape->getParagraphs();
687 1
            if (!empty($paragraphs)) {
688 1
                $paragraph = &$paragraphs[0];
689 1
                $this->writeParagraphStyles($objWriter, $paragraph, true);
690 1
            }
691 1
            $objWriter->startElement('a:fld');
692 1
            $objWriter->writeAttribute('id', $this->getGUID());
693 1
            $objWriter->writeAttribute('type', (
694 1
            $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ? 'slidenum' : 'datetime'));
695 1
            if (isset($paragraph)) {
696 1
                $elements = $paragraph->getRichTextElements();
697 1
                if (!empty($elements)) {
698 1
                    $element = &$elements[0];
699 1
                    $this->writeRunStyles($objWriter, $element);
0 ignored issues
show
Compatibility introduced by
$element of type object<PhpOffice\PhpPres...t\TextElementInterface> is not a sub-type of object<PhpOffice\PhpPres...ion\Shape\RichText\Run>. It seems like you assume a concrete implementation of the interface PhpOffice\PhpPresentatio...xt\TextElementInterface to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

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