Completed
Push — develop ( 29c1c1...7db88c )
by Franck
09:50 queued 06:05
created

AbstractSlide::writeShapeText()   F

Complexity

Conditions 23
Paths > 20000

Size

Total Lines 139
Code Lines 95

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 552

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 139
ccs 0
cts 111
cp 0
rs 2
c 1
b 0
f 0
cc 23
eloc 95
nc 61440
nop 3
crap 552

How to fix   Long Method    Complexity   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
/**
3
 * This file is part of PHPPresentation - A pure PHP library for reading and writing
4
 * presentations documents.
5
 *
6
 * PHPPresentation is free software distributed under the terms of the GNU Lesser
7
 * General Public License version 3 as published by the Free Software Foundation.
8
 *
9
 * For the full copyright and license information, please read the LICENSE
10
 * file that was distributed with this source code. For the full list of
11
 * contributors, visit https://github.com/PHPOffice/PHPPresentation/contributors.
12
 *
13
 * @link        https://github.com/PHPOffice/PHPPresentation
14
 * @copyright   2009-2015 PHPPresentation contributors
15
 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
16
 */
17
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
18
19
use PhpOffice\Common\Drawing as CommonDrawing;
20
use PhpOffice\Common\Text;
21
use PhpOffice\Common\XMLWriter;
22
use PhpOffice\PhpPresentation\Shape\AbstractGraphic;
23
use PhpOffice\PhpPresentation\Shape\Chart as ShapeChart;
24
use PhpOffice\PhpPresentation\Shape\Comment;
25
use PhpOffice\PhpPresentation\Shape\Drawing\Gd as ShapeDrawingGd;
26
use PhpOffice\PhpPresentation\Shape\Drawing\File as ShapeDrawingFile;
27
use PhpOffice\PhpPresentation\Shape\Group;
28
use PhpOffice\PhpPresentation\Shape\Line;
29
use PhpOffice\PhpPresentation\Shape\Media;
30
use PhpOffice\PhpPresentation\Shape\Placeholder;
31
use PhpOffice\PhpPresentation\Shape\RichText;
32
use PhpOffice\PhpPresentation\Shape\RichText\BreakElement;
33
use PhpOffice\PhpPresentation\Shape\RichText\Run;
34
use PhpOffice\PhpPresentation\Shape\RichText\TextElement;
35
use PhpOffice\PhpPresentation\Shape\Table as ShapeTable;
36
use PhpOffice\PhpPresentation\Slide;
37
use PhpOffice\PhpPresentation\Slide\Note;
38
use PhpOffice\PhpPresentation\Style\Alignment;
39
use PhpOffice\PhpPresentation\Style\Bullet;
40
use PhpOffice\PhpPresentation\Style\Border;
41
use PhpOffice\PhpPresentation\Style\Shadow;
42
use PhpOffice\PhpPresentation\Slide\AbstractSlide as AbstractSlideAlias;
43
44
abstract class AbstractSlide extends AbstractDecoratorWriter
45
{
46
    /**
47
     * @param AbstractSlideAlias $pSlideMaster
48
     * @param $objWriter
49
     * @param $relId
50
     * @throws \Exception
51
     */
52 101
    protected function writeDrawingRelations(AbstractSlideAlias $pSlideMaster, $objWriter, $relId)
53
    {
54 101
        if ($pSlideMaster->getShapeCollection()->count() > 0) {
55
            // Loop trough images and write relationships
56
            $iterator = $pSlideMaster->getShapeCollection()->getIterator();
57
            while ($iterator->valid()) {
58
                if ($iterator->current() instanceof ShapeDrawingFile || $iterator->current() instanceof ShapeDrawingGd) {
59
                    // Write relationship for image drawing
60
                    $this->writeRelationship(
61
                        $objWriter,
62
                        $relId,
63
                        'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
64
                        '../media/' . str_replace(' ', '_', $iterator->current()->getIndexedFilename())
65
                    );
66
                    $iterator->current()->relationId = 'rId' . $relId;
67
                    ++$relId;
68
                } elseif ($iterator->current() instanceof ShapeChart) {
69
                    // Write relationship for chart drawing
70
                    $this->writeRelationship(
71
                        $objWriter,
72
                        $relId,
73
                        'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',
74
                        '../charts/' . $iterator->current()->getIndexedFilename()
75
                    );
76
                    $iterator->current()->relationId = 'rId' . $relId;
77
                    ++$relId;
78
                } elseif ($iterator->current() instanceof Group) {
79
                    $iterator2 = $iterator->current()->getShapeCollection()->getIterator();
80
                    while ($iterator2->valid()) {
81
                        if ($iterator2->current() instanceof ShapeDrawingFile ||
82
                            $iterator2->current() instanceof ShapeDrawingGd
83
                        ) {
84
                            // Write relationship for image drawing
85
                            $this->writeRelationship(
86
                                $objWriter,
87
                                $relId,
88
                                'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
89
                                '../media/' . str_replace(' ', '_', $iterator2->current()->getIndexedFilename())
90
                            );
91
                            $iterator2->current()->relationId = 'rId' . $relId;
92
                            ++$relId;
93
                        } elseif ($iterator2->current() instanceof ShapeChart) {
94
                            // Write relationship for chart drawing
95
                            $this->writeRelationship(
96
                                $objWriter,
97
                                $relId,
98
                                'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',
99
                                '../charts/' . $iterator2->current()->getIndexedFilename()
100
                            );
101
                            $iterator2->current()->relationId = 'rId' . $relId;
102
                            ++$relId;
103
                        }
104
                        $iterator2->next();
105
                    }
106
                }
107
                $iterator->next();
108
            }
109
        }
110 101
    }
111
112
    /**
113
     * @param XMLWriter $objWriter
114
     * @param \ArrayObject|\PhpOffice\PhpPresentation\AbstractShape[] $shapes
115
     * @param int $shapeId
116
     * @throws \Exception
117
     */
118 101
    protected function writeShapeCollection(XMLWriter $objWriter, $shapes = array(), &$shapeId = 0)
119
    {
120 101
        if (count($shapes) == 0) {
121 101
            return;
122
        }
123 74
        foreach ($shapes as $shape) {
124
            // Increment $shapeId
125 74
            ++$shapeId;
126
            // Check type
127 74
            if ($shape instanceof RichText) {
128 24
                $this->writeShapeText($objWriter, $shape, $shapeId);
129 74
            } elseif ($shape instanceof ShapeTable) {
130 10
                $this->writeShapeTable($objWriter, $shape, $shapeId);
131 50
            } elseif ($shape instanceof Line) {
132 1
                $this->writeShapeLine($objWriter, $shape, $shapeId);
133 40
            } elseif ($shape instanceof ShapeChart) {
134 26
                $this->writeShapeChart($objWriter, $shape, $shapeId);
135 39
            } elseif ($shape instanceof AbstractGraphic) {
136 6
                $this->writeShapePic($objWriter, $shape, $shapeId);
137 13
            } elseif ($shape instanceof Group) {
138 1
                $this->writeShapeGroup($objWriter, $shape, $shapeId);
139 7
            } elseif ($shape instanceof Comment) {
140 7
            } else {
141
                throw new \Exception("Unknown Shape type: {get_class($shape)}");
142
            }
143 74
        }
144 74
    }
145
146
    /**
147
     * Write txt
148
     *
149
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
150
     * @param  \PhpOffice\PhpPresentation\Shape\RichText $shape
151
     * @param  int $shapeId
152
     * @throws \Exception
153
     */
154
    protected function writeShapeText(XMLWriter $objWriter, RichText $shape, $shapeId)
155
    {
156
        // p:sp
157
        $objWriter->startElement('p:sp');
158
        // p:sp\p:nvSpPr
159
        $objWriter->startElement('p:nvSpPr');
160
        // p:sp\p:nvSpPr\p:cNvPr
161
        $objWriter->startElement('p:cNvPr');
162
        $objWriter->writeAttribute('id', $shapeId);
163
        if ($shape->isPlaceholder()) {
164
            $objWriter->writeAttribute('name', 'Placeholder for ' . $shape->getPlaceholder()->getType());
165
        } else {
166
            $objWriter->writeAttribute('name', '');
167
        }
168
        // Hyperlink
169
        if ($shape->hasHyperlink()) {
170
            $this->writeHyperlink($objWriter, $shape);
171
        }
172
        // > p:sp\p:nvSpPr
173
        $objWriter->endElement();
174
        // p:sp\p:cNvSpPr
175
        $objWriter->startElement('p:cNvSpPr');
176
        $objWriter->writeAttribute('txBox', '1');
177
        $objWriter->endElement();
178
        // p:sp\p:cNvSpPr\p:nvPr
179
        if ($shape->isPlaceholder()) {
180
            $objWriter->startElement('p:nvPr');
181
            $objWriter->startElement('p:ph');
182
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
183
            if (!is_null($shape->getPlaceholder()->getIdx())) {
184
                $objWriter->writeAttribute('idx', $shape->getPlaceholder()->getIdx());
185
            }
186
            $objWriter->endElement();
187
            $objWriter->endElement();
188
        } else {
189
            $objWriter->writeElement('p:nvPr', null);
190
        }
191
        // > p:sp\p:cNvSpPr
192
        $objWriter->endElement();
193
        // p:sp\p:spPr
194
        $objWriter->startElement('p:spPr');
195
        // p:sp\p:spPr\a:xfrm
196
        $objWriter->startElement('a:xfrm');
197
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
198
        // p:sp\p:spPr\a:xfrm\a:off
199
        $objWriter->startElement('a:off');
200
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
201
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
202
        $objWriter->endElement();
203
        // p:sp\p:spPr\a:xfrm\a:ext
204
        $objWriter->startElement('a:ext');
205
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
206
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
207
        $objWriter->endElement();
208
        // > p:sp\p:spPr\a:xfrm
209
        $objWriter->endElement();
210
        // p:sp\p:spPr\a:prstGeom
211
        $objWriter->startElement('a:prstGeom');
212
        $objWriter->writeAttribute('prst', 'rect');
213
214
        // p:sp\p:spPr\a:prstGeom\a:avLst
215
        $objWriter->writeElement('a:avLst');
216
217
        $objWriter->endElement();
218
        $this->writeFill($objWriter, $shape->getFill());
219
        if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) {
220
            $this->writeBorder($objWriter, $shape->getBorder(), '');
221
        }
222
        if ($shape->getShadow()->isVisible()) {
223
            $this->writeShadow($objWriter, $shape->getShadow());
224
        }
225
        // > p:sp\p:spPr
226
        $objWriter->endElement();
227
        // p:txBody
228
        $objWriter->startElement('p:txBody');
229
        // a:bodyPr
230
        //@link :http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.bodyproperties%28v=office.14%29.aspx
231
        $objWriter->startElement('a:bodyPr');
232
        $verticalAlign = $shape->getActiveParagraph()->getAlignment()->getVertical();
233
        if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) {
234
            $objWriter->writeAttribute('anchor', $verticalAlign);
235
        }
236
        if ($shape->getWrap() != RichText::WRAP_SQUARE) {
237
            $objWriter->writeAttribute('wrap', $shape->getWrap());
238
        }
239
        $objWriter->writeAttribute('rtlCol', '0');
240
        if ($shape->getHorizontalOverflow() != RichText::OVERFLOW_OVERFLOW) {
241
            $objWriter->writeAttribute('horzOverflow', $shape->getHorizontalOverflow());
242
        }
243
        if ($shape->getVerticalOverflow() != RichText::OVERFLOW_OVERFLOW) {
244
            $objWriter->writeAttribute('vertOverflow', $shape->getVerticalOverflow());
245
        }
246
        if ($shape->isUpright()) {
247
            $objWriter->writeAttribute('upright', '1');
248
        }
249
        if ($shape->isVertical()) {
250
            $objWriter->writeAttribute('vert', 'vert');
251
        }
252
        $objWriter->writeAttribute('bIns', CommonDrawing::pixelsToEmu($shape->getInsetBottom()));
253
        $objWriter->writeAttribute('lIns', CommonDrawing::pixelsToEmu($shape->getInsetLeft()));
254
        $objWriter->writeAttribute('rIns', CommonDrawing::pixelsToEmu($shape->getInsetRight()));
255
        $objWriter->writeAttribute('tIns', CommonDrawing::pixelsToEmu($shape->getInsetTop()));
256
        if ($shape->getColumns() <> 1) {
257
            $objWriter->writeAttribute('numCol', $shape->getColumns());
258
        }
259
        // a:spAutoFit
260
        $objWriter->startElement('a:' . $shape->getAutoFit());
261
        if ($shape->getAutoFit() == RichText::AUTOFIT_NORMAL) {
262
            if (!is_null($shape->getFontScale())) {
263
                $objWriter->writeAttribute('fontScale', (int)($shape->getFontScale() * 1000));
264
            }
265
            if (!is_null($shape->getLineSpaceReduction())) {
266
                $objWriter->writeAttribute('lnSpcReduction', (int)($shape->getLineSpaceReduction() * 1000));
267
            }
268
        }
269
        $objWriter->endElement();
270
        $objWriter->endElement();
271
        // a:lstStyle
272
        $objWriter->writeElement('a:lstStyle', null);
273
        if ($shape->isPlaceholder() &&
274
            ($shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ||
275
                $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_DATETIME)
276
        ) {
277
            $objWriter->startElement('a:p');
278
            $objWriter->startElement('a:fld');
279
            $objWriter->writeAttribute('id', $this->getGUID());
280
            $objWriter->writeAttribute('type', (
281
            $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ? 'slidenum' : 'datetime'));
282
            $objWriter->writeElement('a:t', (
283
            $shape->getPlaceholder()->getType() == Placeholder::PH_TYPE_SLIDENUM ? '<nr.>' : '03-04-05'));
284
            $objWriter->endElement();
285
            $objWriter->endElement();
286
        } else {
287
            // Write paragraphs
288
            $this->writeParagraphs($objWriter, $shape->getParagraphs());
289
        }
290
        $objWriter->endElement();
291
        $objWriter->endElement();
292
    }
293
294
    /**
295
     * Write table
296
     *
297
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
298
     * @param  \PhpOffice\PhpPresentation\Shape\Table $shape
299
     * @param  int $shapeId
300
     * @throws \Exception
301
     */
302 10
    protected function writeShapeTable(XMLWriter $objWriter, ShapeTable $shape, $shapeId)
303
    {
304
        // p:graphicFrame
305 10
        $objWriter->startElement('p:graphicFrame');
306
        // p:graphicFrame/p:nvGraphicFramePr
307 10
        $objWriter->startElement('p:nvGraphicFramePr');
308
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvPr
309 10
        $objWriter->startElement('p:cNvPr');
310 10
        $objWriter->writeAttribute('id', $shapeId);
311 10
        $objWriter->writeAttribute('name', $shape->getName());
312 10
        $objWriter->writeAttribute('descr', $shape->getDescription());
313 10
        $objWriter->endElement();
314
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvGraphicFramePr
315 10
        $objWriter->startElement('p:cNvGraphicFramePr');
316
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvGraphicFramePr/a:graphicFrameLocks
317 10
        $objWriter->startElement('a:graphicFrameLocks');
318 10
        $objWriter->writeAttribute('noGrp', '1');
319 10
        $objWriter->endElement();
320
        // p:graphicFrame/p:nvGraphicFramePr/p:cNvGraphicFramePr/
321 10
        $objWriter->endElement();
322
        // p:graphicFrame/p:nvGraphicFramePr/p:nvPr
323 10
        $objWriter->startElement('p:nvPr');
324 10
        if ($shape->isPlaceholder()) {
325
            $objWriter->startElement('p:ph');
326
            $objWriter->writeAttribute('type', $shape->getPlaceholder()->getType());
327
            $objWriter->endElement();
328
        }
329 10
        $objWriter->endElement();
330
        // p:graphicFrame/p:nvGraphicFramePr/
331 10
        $objWriter->endElement();
332
        // p:graphicFrame/p:xfrm
333 10
        $objWriter->startElement('p:xfrm');
334
        // p:graphicFrame/p:xfrm/a:off
335 10
        $objWriter->startElement('a:off');
336 10
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
337 10
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
338 10
        $objWriter->endElement();
339
        // p:graphicFrame/p:xfrm/a:ext
340 10
        $objWriter->startElement('a:ext');
341 10
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
342 10
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
343 10
        $objWriter->endElement();
344
        // p:graphicFrame/p:xfrm/
345 10
        $objWriter->endElement();
346
        // p:graphicFrame/a:graphic
347 10
        $objWriter->startElement('a:graphic');
348
        // p:graphicFrame/a:graphic/a:graphicData
349 10
        $objWriter->startElement('a:graphicData');
350 10
        $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/table');
351
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl
352 10
        $objWriter->startElement('a:tbl');
353
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblPr
354 10
        $objWriter->startElement('a:tblPr');
355 10
        $objWriter->writeAttribute('firstRow', '1');
356 10
        $objWriter->writeAttribute('bandRow', '1');
357 10
        $objWriter->endElement();
358
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblGrid
359 10
        $objWriter->startElement('a:tblGrid');
360
        // Write cell widths
361 10
        $countCells = count($shape->getRow(0)->getCells());
362 10
        for ($cell = 0; $cell < $countCells; $cell++) {
363
            //  p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblGrid/a:gridCol
364 10
            $objWriter->startElement('a:gridCol');
365
            // Calculate column width
366 10
            $width = $shape->getRow(0)->getCell($cell)->getWidth();
367 10
            if ($width == 0) {
368 10
                $colCount = count($shape->getRow(0)->getCells());
369 10
                $totalWidth = $shape->getWidth();
370 10
                $width = $totalWidth / $colCount;
371 10
            }
372 10
            $objWriter->writeAttribute('w', CommonDrawing::pixelsToEmu($width));
373 10
            $objWriter->endElement();
374 10
        }
375
        // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tblGrid/
376 10
        $objWriter->endElement();
377
        // Colspan / rowspan containers
378 10
        $colSpan = array();
379 10
        $rowSpan = array();
380
        // Default border style
381 10
        $defaultBorder = new Border();
382
        // Write rows
383 10
        $countRows = count($shape->getRows());
384 10
        for ($row = 0; $row < $countRows; $row++) {
385
            // p:graphicFrame/a:graphic/a:graphicData/a:tbl/a:tr
386 10
            $objWriter->startElement('a:tr');
387 10
            $objWriter->writeAttribute('h', CommonDrawing::pixelsToEmu($shape->getRow($row)->getHeight()));
388
            // Write cells
389 10
            $countCells = count($shape->getRow($row)->getCells());
390 10
            for ($cell = 0; $cell < $countCells; $cell++) {
391
                // Current cell
392 10
                $currentCell = $shape->getRow($row)->getCell($cell);
393
                // Next cell right
394 10
                $nextCellRight = $shape->getRow($row)->getCell($cell + 1, true);
395
                // Next cell below
396 10
                $nextRowBelow = $shape->getRow($row + 1, true);
397 10
                $nextCellBelow = null;
398 10
                if ($nextRowBelow != null) {
399 2
                    $nextCellBelow = $nextRowBelow->getCell($cell, true);
400 2
                }
401
                // a:tc
402 10
                $objWriter->startElement('a:tc');
403
                // Colspan
404 10
                if ($currentCell->getColSpan() > 1) {
405 1
                    $objWriter->writeAttribute('gridSpan', $currentCell->getColSpan());
406 1
                    $colSpan[$row] = $currentCell->getColSpan() - 1;
407 10
                } elseif (isset($colSpan[$row]) && $colSpan[$row] > 0) {
408 1
                    $colSpan[$row]--;
409 1
                    $objWriter->writeAttribute('hMerge', '1');
410 1
                }
411
                // Rowspan
412 10
                if ($currentCell->getRowSpan() > 1) {
413 1
                    $objWriter->writeAttribute('rowSpan', $currentCell->getRowSpan());
414 1
                    $rowSpan[$cell] = $currentCell->getRowSpan() - 1;
415 10
                } elseif (isset($rowSpan[$cell]) && $rowSpan[$cell] > 0) {
416 1
                    $rowSpan[$cell]--;
417 1
                    $objWriter->writeAttribute('vMerge', '1');
418 1
                }
419
                // a:txBody
420 10
                $objWriter->startElement('a:txBody');
421
                // a:txBody/a:bodyPr
422 10
                $objWriter->startElement('a:bodyPr');
423 10
                $objWriter->writeAttribute('wrap', 'square');
424 10
                $objWriter->writeAttribute('rtlCol', '0');
425
                // a:txBody/a:bodyPr/a:spAutoFit
426 10
                $objWriter->writeElement('a:spAutoFit', null);
427
                // a:txBody/a:bodyPr/
428 10
                $objWriter->endElement();
429
                // a:lstStyle
430 10
                $objWriter->writeElement('a:lstStyle', null);
431
                // Write paragraphs
432 10
                $this->writeParagraphs($objWriter, $currentCell->getParagraphs());
433 10
                $objWriter->endElement();
434
                // a:tcPr
435 10
                $objWriter->startElement('a:tcPr');
436
                // Alignment (horizontal)
437 10
                $firstParagraph = $currentCell->getParagraph(0);
438 10
                $verticalAlign = $firstParagraph->getAlignment()->getVertical();
439 10
                if ($verticalAlign != Alignment::VERTICAL_BASE && $verticalAlign != Alignment::VERTICAL_AUTO) {
440 1
                    $objWriter->writeAttribute('anchor', $verticalAlign);
441 1
                }
442
443
                // Margins
444 10
                $alignment = $firstParagraph->getAlignment();
445 10
                $objWriter->writeAttribute('marL', $alignment->getMarginLeft());
446 10
                $objWriter->writeAttribute('marR', $alignment->getMarginRight());
447 10
                $objWriter->writeAttribute('marT', $alignment->getMarginTop());
448 10
                $objWriter->writeAttribute('marB', $alignment->getMarginBottom());
449
450
                // Determine borders
451 10
                $borderLeft = $currentCell->getBorders()->getLeft();
452 10
                $borderRight = $currentCell->getBorders()->getRight();
453 10
                $borderTop = $currentCell->getBorders()->getTop();
454 10
                $borderBottom = $currentCell->getBorders()->getBottom();
455 10
                $borderDiagonalDown = $currentCell->getBorders()->getDiagonalDown();
456 10
                $borderDiagonalUp = $currentCell->getBorders()->getDiagonalUp();
457
                // Fix PowerPoint implementation
458 10
                if (!is_null($nextCellRight)
459 10
                    && $nextCellRight->getBorders()->getRight()->getHashCode() != $defaultBorder->getHashCode()
460 10
                ) {
461 1
                    $borderRight = $nextCellRight->getBorders()->getLeft();
462 1
                }
463 10
                if (!is_null($nextCellBelow)
464 10
                    && $nextCellBelow->getBorders()->getBottom()->getHashCode() != $defaultBorder->getHashCode()
465 10
                ) {
466 1
                    $borderBottom = $nextCellBelow->getBorders()->getTop();
467 1
                }
468
                // Write borders
469 10
                $this->writeBorder($objWriter, $borderLeft, 'L');
470 10
                $this->writeBorder($objWriter, $borderRight, 'R');
471 10
                $this->writeBorder($objWriter, $borderTop, 'T');
472 10
                $this->writeBorder($objWriter, $borderBottom, 'B');
473 10
                $this->writeBorder($objWriter, $borderDiagonalDown, 'TlToBr');
474 10
                $this->writeBorder($objWriter, $borderDiagonalUp, 'BlToTr');
475
                // Fill
476 10
                $this->writeFill($objWriter, $currentCell->getFill());
477 10
                $objWriter->endElement();
478 10
                $objWriter->endElement();
479 10
            }
480 10
            $objWriter->endElement();
481 10
        }
482 10
        $objWriter->endElement();
483 10
        $objWriter->endElement();
484 10
        $objWriter->endElement();
485 10
        $objWriter->endElement();
486 10
    }
487
488
    /**
489
     * Write paragraphs
490
     *
491
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
492
     * @param  \PhpOffice\PhpPresentation\Shape\RichText\Paragraph[] $paragraphs
493
     * @throws \Exception
494
     */
495
    protected function writeParagraphs(XMLWriter $objWriter, $paragraphs)
496
    {
497
        // Loop trough paragraphs
498
        foreach ($paragraphs as $paragraph) {
499
            // a:p
500
            $objWriter->startElement('a:p');
501
            // a:pPr
502
            $objWriter->startElement('a:pPr');
503
            $objWriter->writeAttribute('algn', $paragraph->getAlignment()->getHorizontal());
504
            $objWriter->writeAttribute('fontAlgn', $paragraph->getAlignment()->getVertical());
505
            $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getMarginLeft()));
506
            $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu(
507
                $paragraph->getAlignment()->getMarginRight()
508
            ));
509
            $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getIndent()));
510
            $objWriter->writeAttribute('lvl', $paragraph->getAlignment()->getLevel());
511
            // Bullet type specified?
512
            if ($paragraph->getBulletStyle()->getBulletType() != Bullet::TYPE_NONE) {
513
                // a:buFont
514
                $objWriter->startElement('a:buFont');
515
                $objWriter->writeAttribute('typeface', $paragraph->getBulletStyle()->getBulletFont());
516
                $objWriter->endElement();
517
                if ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_BULLET) {
518
                    // a:buChar
519
                    $objWriter->startElement('a:buChar');
520
                    $objWriter->writeAttribute('char', $paragraph->getBulletStyle()->getBulletChar());
521
                    $objWriter->endElement();
522
                } elseif ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_NUMERIC) {
523
                    // a:buAutoNum
524
                    $objWriter->startElement('a:buAutoNum');
525
                    $objWriter->writeAttribute('type', $paragraph->getBulletStyle()->getBulletNumericStyle());
526
                    if ($paragraph->getBulletStyle()->getBulletNumericStartAt() != 1) {
527
                        $objWriter->writeAttribute('startAt', $paragraph->getBulletStyle()->getBulletNumericStartAt());
528
                    }
529
                    $objWriter->endElement();
530
                }
531
            }
532
            $objWriter->endElement();
533
            // Loop trough rich text elements
534
            $elements = $paragraph->getRichTextElements();
535
            foreach ($elements as $element) {
536
                if ($element instanceof BreakElement) {
537
                    // a:br
538
                    $objWriter->writeElement('a:br', null);
539
                } elseif ($element instanceof Run || $element instanceof TextElement) {
540
                    // a:r
541
                    $objWriter->startElement('a:r');
542
                    // a:rPr
543
                    if ($element instanceof Run) {
544
                        // a:rPr
545
                        $objWriter->startElement('a:rPr');
546
                        // Lang
547
                        $objWriter->writeAttribute('lang', ($element->getLanguage() ?
548
                            $element->getLanguage() : 'en-US'));
549
                        // Bold
550
                        $objWriter->writeAttribute('b', ($element->getFont()->isBold() ? '1' : '0'));
551
                        // Italic
552
                        $objWriter->writeAttribute('i', ($element->getFont()->isItalic() ? '1' : '0'));
553
                        // Strikethrough
554
                        $objWriter->writeAttribute('strike', ($element->getFont()->isStrikethrough() ?
555
                            'sngStrike' : 'noStrike'));
556
                        // Size
557
                        $objWriter->writeAttribute('sz', ($element->getFont()->getSize() * 100));
558
                        // Underline
559
                        $objWriter->writeAttribute('u', $element->getFont()->getUnderline());
560
                        // Superscript / subscript
561
                        if ($element->getFont()->isSuperScript() || $element->getFont()->isSubScript()) {
562
                            if ($element->getFont()->isSuperScript()) {
563
                                $objWriter->writeAttribute('baseline', '30000');
564
                            } elseif ($element->getFont()->isSubScript()) {
565
                                $objWriter->writeAttribute('baseline', '-25000');
566
                            }
567
                        }
568
                        // Color - a:solidFill
569
                        $objWriter->startElement('a:solidFill');
570
                        // a:srgbClr
571
                        $objWriter->startElement('a:srgbClr');
572
                        $objWriter->writeAttribute('val', $element->getFont()->getColor()->getRGB());
573
                        $objWriter->endElement();
574
                        $objWriter->endElement();
575
                        // Font - a:latin
576
                        $objWriter->startElement('a:latin');
577
                        $objWriter->writeAttribute('typeface', $element->getFont()->getName());
578
                        $objWriter->endElement();
579
                        // a:hlinkClick
580
                        if ($element->hasHyperlink()) {
581
                            $this->writeHyperlink($objWriter, $element);
582
                        }
583
                        $objWriter->endElement();
584
                    }
585
                    // t
586
                    $objWriter->startElement('a:t');
587
                    $objWriter->writeCData(Text::controlCharacterPHP2OOXML($element->getText()));
588
                    $objWriter->endElement();
589
                    $objWriter->endElement();
590
                }
591
            }
592
            $objWriter->endElement();
593
        }
594
    }
595
596
    /**
597
     * Write Line Shape
598
     *
599
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
600
     * @param \PhpOffice\PhpPresentation\Shape\Line $shape
601
     * @param  int $shapeId
602
     */
603
    protected function writeShapeLine(XMLWriter $objWriter, Line $shape, $shapeId)
604
    {
605
        // p:sp
606
        $objWriter->startElement('p:cxnSp');
607
        // p:nvSpPr
608
        $objWriter->startElement('p:nvCxnSpPr');
609
        // p:cNvPr
610
        $objWriter->startElement('p:cNvPr');
611
        $objWriter->writeAttribute('id', $shapeId);
612
        $objWriter->writeAttribute('name', '');
613
        $objWriter->endElement();
614
        // p:cNvCxnSpPr
615
        $objWriter->writeElement('p:cNvCxnSpPr', null);
616
        // p:nvPr
617
        $objWriter->writeElement('p:nvPr', null);
618
        $objWriter->endElement();
619
        // p:spPr
620
        $objWriter->startElement('p:spPr');
621
        // a:xfrm
622
        $objWriter->startElement('a:xfrm');
623
        if ($shape->getWidth() >= 0 && $shape->getHeight() >= 0) {
624
            // a:off
625
            $objWriter->startElement('a:off');
626
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
627
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
628
            $objWriter->endElement();
629
            // a:ext
630
            $objWriter->startElement('a:ext');
631
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
632
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
633
            $objWriter->endElement();
634
        } elseif ($shape->getWidth() < 0 && $shape->getHeight() < 0) {
635
            // a:off
636
            $objWriter->startElement('a:off');
637
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
638
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
639
            $objWriter->endElement();
640
            // a:ext
641
            $objWriter->startElement('a:ext');
642
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
643
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
644
            $objWriter->endElement();
645
        } elseif ($shape->getHeight() < 0) {
646
            $objWriter->writeAttribute('flipV', 1);
647
            // a:off
648
            $objWriter->startElement('a:off');
649
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
650
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY() + $shape->getHeight()));
651
            $objWriter->endElement();
652
            // a:ext
653
            $objWriter->startElement('a:ext');
654
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
655
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(-$shape->getHeight()));
656
            $objWriter->endElement();
657
        } elseif ($shape->getWidth() < 0) {
658
            $objWriter->writeAttribute('flipV', 1);
659
            // a:off
660
            $objWriter->startElement('a:off');
661
            $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX() + $shape->getWidth()));
662
            $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
663
            $objWriter->endElement();
664
            // a:ext
665
            $objWriter->startElement('a:ext');
666
            $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(-$shape->getWidth()));
667
            $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
668
            $objWriter->endElement();
669
        }
670
        $objWriter->endElement();
671
        // a:prstGeom
672
        $objWriter->startElement('a:prstGeom');
673
        $objWriter->writeAttribute('prst', 'line');
674
675
        // a:prstGeom/a:avLst
676
        $objWriter->writeElement('a:avLst');
677
678
        $objWriter->endElement();
679
        if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) {
680
            $this->writeBorder($objWriter, $shape->getBorder(), '');
681
        }
682
        $objWriter->endElement();
683
        $objWriter->endElement();
684
    }
685
686
    /**
687
     * Write Shadow
688
     * @param XMLWriter $objWriter
689
     * @param Shadow $oShadow
690
     */
691 25
    protected function writeShadow(XMLWriter $objWriter, $oShadow)
692
    {
693 25
        if (!($oShadow instanceof Shadow)) {
694
            return;
695
        }
696
697 25
        if (!$oShadow->isVisible()) {
698 23
            return;
699
        }
700
701
        // a:effectLst
702 2
        $objWriter->startElement('a:effectLst');
703
704
        // a:outerShdw
705 2
        $objWriter->startElement('a:outerShdw');
706 2
        $objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($oShadow->getBlurRadius()));
707 2
        $objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($oShadow->getDistance()));
708 2
        $objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($oShadow->getDirection()));
709 2
        $objWriter->writeAttribute('algn', $oShadow->getAlignment());
710 2
        $objWriter->writeAttribute('rotWithShape', '0');
711
712 2
        $this->writeColor($objWriter, $oShadow->getColor(), $oShadow->getAlpha());
713
714 2
        $objWriter->endElement();
715
716 2
        $objWriter->endElement();
717 2
    }
718
719
    /**
720
     * Write hyperlink
721
     *
722
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
723
     * @param \PhpOffice\PhpPresentation\AbstractShape|\PhpOffice\PhpPresentation\Shape\RichText\TextElement $shape
724
     */
725
    protected function writeHyperlink(XMLWriter $objWriter, $shape)
726
    {
727
        // a:hlinkClick
728
        $objWriter->startElement('a:hlinkClick');
729
        $objWriter->writeAttribute('r:id', $shape->getHyperlink()->relationId);
730
        $objWriter->writeAttribute('tooltip', $shape->getHyperlink()->getTooltip());
731
        if ($shape->getHyperlink()->isInternal()) {
732
            $objWriter->writeAttribute('action', $shape->getHyperlink()->getUrl());
733
        }
734
        $objWriter->endElement();
735
    }
736
737
    /**
738
     * Write Note Slide
739
     * @param Note $pNote
740
     * @throws \Exception
741
     * @return  string
742
     */
743 1
    protected function writeNote(Note $pNote)
744
    {
745
        // Create XML writer
746 1
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
747
748
        // XML header
749 1
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
750
751
        // p:notes
752 1
        $objWriter->startElement('p:notes');
753 1
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
754 1
        $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
755 1
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
756
757
        // p:notes/p:cSld
758 1
        $objWriter->startElement('p:cSld');
759
760
        // p:notes/p:cSld/p:spTree
761 1
        $objWriter->startElement('p:spTree');
762
763
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr
764 1
        $objWriter->startElement('p:nvGrpSpPr');
765
766
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:cNvPr
767 1
        $objWriter->startElement('p:cNvPr');
768 1
        $objWriter->writeAttribute('id', '1');
769 1
        $objWriter->writeAttribute('name', '');
770 1
        $objWriter->endElement();
771
772
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:cNvGrpSpPr
773 1
        $objWriter->writeElement('p:cNvGrpSpPr', null);
774
775
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:nvPr
776 1
        $objWriter->writeElement('p:nvPr', null);
777
778
        // p:notes/p:cSld/p:spTree/p:nvGrpSpPr
779 1
        $objWriter->endElement();
780
781
        // p:notes/p:cSld/p:spTree/p:grpSpPr
782 1
        $objWriter->startElement('p:grpSpPr');
783
784
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm
785 1
        $objWriter->startElement('a:xfrm');
786
787
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:off
788 1
        $objWriter->startElement('a:off');
789 1
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
790 1
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
791 1
        $objWriter->endElement(); // a:off
792
793
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:ext
794 1
        $objWriter->startElement('a:ext');
795 1
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
796 1
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
797 1
        $objWriter->endElement(); // a:ext
798
799
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:chOff
800 1
        $objWriter->startElement('a:chOff');
801 1
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
802 1
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
803 1
        $objWriter->endElement(); // a:chOff
804
805
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:chExt
806 1
        $objWriter->startElement('a:chExt');
807 1
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
808 1
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
809 1
        $objWriter->endElement(); // a:chExt
810
811
        // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm
812 1
        $objWriter->endElement();
813
814
        // p:notes/p:cSld/p:spTree/p:grpSpPr
815 1
        $objWriter->endElement();
816
817
        // p:notes/p:cSld/p:spTree/p:sp[1]
818 1
        $objWriter->startElement('p:sp');
819
820
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr
821 1
        $objWriter->startElement('p:nvSpPr');
822
823
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvPr
824 1
        $objWriter->startElement('p:cNvPr');
825 1
        $objWriter->writeAttribute('id', '2');
826 1
        $objWriter->writeAttribute('name', 'Slide Image Placeholder 1');
827 1
        $objWriter->endElement();
828
829
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr
830 1
        $objWriter->startElement('p:cNvSpPr');
831
832
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr/a:spLocks
833 1
        $objWriter->startElement('a:spLocks');
834 1
        $objWriter->writeAttribute('noGrp', '1');
835 1
        $objWriter->writeAttribute('noRot', '1');
836 1
        $objWriter->writeAttribute('noChangeAspect', '1');
837 1
        $objWriter->endElement();
838
839
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr
840 1
        $objWriter->endElement();
841
842
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr
843 1
        $objWriter->startElement('p:nvPr');
844
845
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr/p:ph
846 1
        $objWriter->startElement('p:ph');
847 1
        $objWriter->writeAttribute('type', 'sldImg');
848 1
        $objWriter->endElement();
849
850
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr
851 1
        $objWriter->endElement();
852
853
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr
854 1
        $objWriter->endElement();
855
856
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr
857 1
        $objWriter->startElement('p:spPr');
858
859
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm
860 1
        $objWriter->startElement('a:xfrm');
861
862
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:off
863 1
        $objWriter->startElement('a:off');
864 1
        $objWriter->writeAttribute('x', 0);
865 1
        $objWriter->writeAttribute('y', 0);
866 1
        $objWriter->endElement();
867
868
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:ext
869 1
        $objWriter->startElement('a:ext');
870 1
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(round($pNote->getExtentX() / 2)));
871 1
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(round($pNote->getExtentY() / 2)));
872 1
        $objWriter->endElement();
873
874
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm
875 1
        $objWriter->endElement();
876
877
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom
878 1
        $objWriter->startElement('a:prstGeom');
879 1
        $objWriter->writeAttribute('prst', 'rect');
880
881
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom/a:avLst
882 1
        $objWriter->writeElement('a:avLst', null);
883
884
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom
885 1
        $objWriter->endElement();
886
887
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:noFill
888 1
        $objWriter->writeElement('a:noFill', null);
889
890
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln
891 1
        $objWriter->startElement('a:ln');
892 1
        $objWriter->writeAttribute('w', '12700');
893
894
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill
895 1
        $objWriter->startElement('a:solidFill');
896
897
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill/a:prstClr
898 1
        $objWriter->startElement('a:prstClr');
899 1
        $objWriter->writeAttribute('val', 'black');
900 1
        $objWriter->endElement();
901
902
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill
903 1
        $objWriter->endElement();
904
905
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln
906 1
        $objWriter->endElement();
907
908
        // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr
909 1
        $objWriter->endElement();
910
911
        // p:notes/p:cSld/p:spTree/p:sp[1]
912 1
        $objWriter->endElement();
913
914
        // p:notes/p:cSld/p:spTree/p:sp[2]
915 1
        $objWriter->startElement('p:sp');
916
917
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr
918 1
        $objWriter->startElement('p:nvSpPr');
919
920
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvPr
921 1
        $objWriter->startElement('p:cNvPr');
922 1
        $objWriter->writeAttribute('id', '3');
923 1
        $objWriter->writeAttribute('name', 'Notes Placeholder');
924 1
        $objWriter->endElement();
925
926
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr
927 1
        $objWriter->startElement('p:cNvSpPr');
928
929
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr/a:spLocks
930 1
        $objWriter->startElement('a:spLocks');
931 1
        $objWriter->writeAttribute('noGrp', '1');
932 1
        $objWriter->endElement();
933
934
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr
935 1
        $objWriter->endElement();
936
937
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr
938 1
        $objWriter->startElement('p:nvPr');
939
940
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr/p:ph
941 1
        $objWriter->startElement('p:ph');
942 1
        $objWriter->writeAttribute('type', 'body');
943 1
        $objWriter->writeAttribute('idx', '1');
944 1
        $objWriter->endElement();
945
946
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr
947 1
        $objWriter->endElement();
948
949
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr
950 1
        $objWriter->endElement();
951
952
        // START notes print below rectangle section
953
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr
954 1
        $objWriter->startElement('p:spPr');
955
956
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm
957 1
        $objWriter->startElement('a:xfrm');
958
959
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:off
960 1
        $objWriter->startElement('a:off');
961 1
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
962 1
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu(round($pNote->getExtentY() / 2) + $pNote->getOffsetY()));
963 1
        $objWriter->endElement();
964
965
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:ext
966 1
        $objWriter->startElement('a:ext');
967 1
        $objWriter->writeAttribute('cx', '5486400');
968 1
        $objWriter->writeAttribute('cy', '3600450');
969 1
        $objWriter->endElement();
970
971
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm
972 1
        $objWriter->endElement();
973
974
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom
975 1
        $objWriter->startElement('a:prstGeom');
976 1
        $objWriter->writeAttribute('prst', 'rect');
977
978
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom/a:avLst
979 1
        $objWriter->writeElement('a:avLst', null);
980
981
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom
982 1
        $objWriter->endElement();
983
984
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr
985 1
        $objWriter->endElement();
986
987
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody
988 1
        $objWriter->startElement('p:txBody');
989
990
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr
991 1
        $objWriter->writeElement('a:bodyPr', null);
992
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody/a:lstStyle
993 1
        $objWriter->writeElement('a:lstStyle', null);
994
995
        // Loop shapes
996 1
        $shapes = $pNote->getShapeCollection();
997 1
        foreach ($shapes as $shape) {
998
            // Check type
999 1
            if ($shape instanceof RichText) {
1000 1
                $paragraphs = $shape->getParagraphs();
1001 1
                $this->writeParagraphs($objWriter, $paragraphs);
1002 1
            }
1003 1
        }
1004
1005
        // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody
1006 1
        $objWriter->endElement();
1007
1008
        // p:notes/p:cSld/p:spTree/p:sp[2]
1009 1
        $objWriter->endElement();
1010
1011
        // p:notes/p:cSld/p:spTree
1012 1
        $objWriter->endElement();
1013
1014
        // p:notes/p:cSld
1015 1
        $objWriter->endElement();
1016
1017
        // p:notes
1018 1
        $objWriter->endElement();
1019
1020
        // Return
1021 1
        return $objWriter->getData();
1022
    }
1023
1024
    /**
1025
     * Write chart
1026
     *
1027
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
1028
     * @param \PhpOffice\PhpPresentation\Shape\Chart $shape
1029
     * @param  int $shapeId
1030
     */
1031
    protected function writeShapeChart(XMLWriter $objWriter, ShapeChart $shape, $shapeId)
1032
    {
1033
        // p:graphicFrame
1034
        $objWriter->startElement('p:graphicFrame');
1035
        // p:nvGraphicFramePr
1036
        $objWriter->startElement('p:nvGraphicFramePr');
1037
        // p:cNvPr
1038
        $objWriter->startElement('p:cNvPr');
1039
        $objWriter->writeAttribute('id', $shapeId);
1040
        $objWriter->writeAttribute('name', $shape->getName());
1041
        $objWriter->writeAttribute('descr', $shape->getDescription());
1042
        $objWriter->endElement();
1043
        // p:cNvGraphicFramePr
1044
        $objWriter->writeElement('p:cNvGraphicFramePr', null);
1045
        // p:nvPr
1046
        $objWriter->writeElement('p:nvPr', null);
1047
        $objWriter->endElement();
1048
        // p:xfrm
1049
        $objWriter->startElement('p:xfrm');
1050
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
1051
        // a:off
1052
        $objWriter->startElement('a:off');
1053
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1054
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1055
        $objWriter->endElement();
1056
        // a:ext
1057
        $objWriter->startElement('a:ext');
1058
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1059
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1060
        $objWriter->endElement();
1061
        $objWriter->endElement();
1062
        // a:graphic
1063
        $objWriter->startElement('a:graphic');
1064
        // a:graphicData
1065
        $objWriter->startElement('a:graphicData');
1066
        $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
1067
        // c:chart
1068
        $objWriter->startElement('c:chart');
1069
        $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
1070
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
1071
        $objWriter->writeAttribute('r:id', $shape->relationId);
1072
        $objWriter->endElement();
1073
        $objWriter->endElement();
1074
        $objWriter->endElement();
1075
        $objWriter->endElement();
1076
    }
1077
1078
    /**
1079
     * Write pic
1080
     *
1081
     * @param  \PhpOffice\Common\XMLWriter $objWriter XML Writer
1082
     * @param  \PhpOffice\PhpPresentation\Shape\AbstractGraphic $shape
1083
     * @param  int $shapeId
1084
     * @throws \Exception
1085
     */
1086 6
    protected function writeShapePic(XMLWriter $objWriter, AbstractGraphic $shape, $shapeId)
1087
    {
1088
        // p:pic
1089 6
        $objWriter->startElement('p:pic');
1090
        // p:nvPicPr
1091 6
        $objWriter->startElement('p:nvPicPr');
1092
        // p:cNvPr
1093 6
        $objWriter->startElement('p:cNvPr');
1094 6
        $objWriter->writeAttribute('id', $shapeId);
1095 6
        $objWriter->writeAttribute('name', $shape->getName());
1096 6
        $objWriter->writeAttribute('descr', $shape->getDescription());
1097
        // a:hlinkClick
1098 6
        if ($shape->hasHyperlink()) {
1099 1
            $this->writeHyperlink($objWriter, $shape);
1100 1
        }
1101 6
        $objWriter->endElement();
1102
        // p:cNvPicPr
1103 6
        $objWriter->startElement('p:cNvPicPr');
1104
        // a:picLocks
1105 6
        $objWriter->startElement('a:picLocks');
1106 6
        $objWriter->writeAttribute('noChangeAspect', '1');
1107 6
        $objWriter->endElement();
1108 6
        $objWriter->endElement();
1109
        // p:nvPr
1110 6
        $objWriter->startElement('p:nvPr');
1111
        /**
1112
         * @link : https://github.com/stefslon/exportToPPTX/blob/master/exportToPPTX.m#L2128
1113
         */
1114 6
        if ($shape instanceof Media) {
1115
            // p:nvPr > a:videoFile
1116 1
            $objWriter->startElement('a:videoFile');
1117 1
            $objWriter->writeAttribute('r:link', $shape->relationId);
1118 1
            $objWriter->endElement();
1119
            // p:nvPr > p:extLst
1120 1
            $objWriter->startElement('p:extLst');
1121
            // p:nvPr > p:extLst > p:ext
1122 1
            $objWriter->startElement('p:ext');
1123 1
            $objWriter->writeAttribute('uri', '{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}');
1124
            // p:nvPr > p:extLst > p:ext > p14:media
1125 1
            $objWriter->startElement('p14:media');
1126 1
            $objWriter->writeAttribute('r:embed', $shape->relationId);
1127 1
            $objWriter->writeAttribute('xmlns:p14', 'http://schemas.microsoft.com/office/powerpoint/2010/main');
1128
            // p:nvPr > p:extLst > p:ext > ##p14:media
1129 1
            $objWriter->endElement();
1130
            // p:nvPr > p:extLst > ##p:ext
1131 1
            $objWriter->endElement();
1132
            // p:nvPr > ##p:extLst
1133 1
            $objWriter->endElement();
1134 1
        }
1135
        // ##p:nvPr
1136 6
        $objWriter->endElement();
1137 6
        $objWriter->endElement();
1138
        // p:blipFill
1139 6
        $objWriter->startElement('p:blipFill');
1140
        // a:blip
1141 6
        $objWriter->startElement('a:blip');
1142 6
        $objWriter->writeAttribute('r:embed', $shape->relationId);
1143 6
        $objWriter->endElement();
1144
        // a:stretch
1145 6
        $objWriter->startElement('a:stretch');
1146 6
        $objWriter->writeElement('a:fillRect', null);
1147 6
        $objWriter->endElement();
1148 6
        $objWriter->endElement();
1149
        // p:spPr
1150 6
        $objWriter->startElement('p:spPr');
1151
        // a:xfrm
1152 6
        $objWriter->startElement('a:xfrm');
1153 6
        $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation()));
1154
        // a:off
1155 6
        $objWriter->startElement('a:off');
1156 6
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX()));
1157 6
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY()));
1158 6
        $objWriter->endElement();
1159
        // a:ext
1160 6
        $objWriter->startElement('a:ext');
1161 6
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth()));
1162 6
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight()));
1163 6
        $objWriter->endElement();
1164 6
        $objWriter->endElement();
1165
        // a:prstGeom
1166 6
        $objWriter->startElement('a:prstGeom');
1167 6
        $objWriter->writeAttribute('prst', 'rect');
1168
        // a:avLst
1169 6
        $objWriter->writeElement('a:avLst', null);
1170 6
        $objWriter->endElement();
1171 6
        if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) {
1172 1
            $this->writeBorder($objWriter, $shape->getBorder(), '');
1173 1
        }
1174 6
        if ($shape->getShadow()->isVisible()) {
1175 1
            $this->writeShadow($objWriter, $shape->getShadow());
1176 1
        }
1177 6
        $objWriter->endElement();
1178 6
        $objWriter->endElement();
1179 6
    }
1180
1181
    /**
1182
     * Write group
1183
     *
1184
     * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
1185
     * @param \PhpOffice\PhpPresentation\Shape\Group $group
1186
     * @param  int $shapeId
1187
     */
1188
    protected function writeShapeGroup(XMLWriter $objWriter, Group $group, &$shapeId)
1189
    {
1190
        // p:grpSp
1191
        $objWriter->startElement('p:grpSp');
1192
        // p:nvGrpSpPr
1193
        $objWriter->startElement('p:nvGrpSpPr');
1194
        // p:cNvPr
1195
        $objWriter->startElement('p:cNvPr');
1196
        $objWriter->writeAttribute('name', 'Group ' . $shapeId++);
1197
        $objWriter->writeAttribute('id', $shapeId);
1198
        $objWriter->endElement(); // p:cNvPr
1199
        // NOTE: Re: $shapeId This seems to be how PowerPoint 2010 does business.
1200
        // p:cNvGrpSpPr
1201
        $objWriter->writeElement('p:cNvGrpSpPr', null);
1202
        // p:nvPr
1203
        $objWriter->writeElement('p:nvPr', null);
1204
        $objWriter->endElement(); // p:nvGrpSpPr
1205
        // p:grpSpPr
1206
        $objWriter->startElement('p:grpSpPr');
1207
        // a:xfrm
1208
        $objWriter->startElement('a:xfrm');
1209
        // a:off
1210
        $objWriter->startElement('a:off');
1211
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
1212
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
1213
        $objWriter->endElement(); // a:off
1214
        // a:ext
1215
        $objWriter->startElement('a:ext');
1216
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
1217
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
1218
        $objWriter->endElement(); // a:ext
1219
        // a:chOff
1220
        $objWriter->startElement('a:chOff');
1221
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
1222
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
1223
        $objWriter->endElement(); // a:chOff
1224
        // a:chExt
1225
        $objWriter->startElement('a:chExt');
1226
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
1227
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
1228
        $objWriter->endElement(); // a:chExt
1229
        $objWriter->endElement(); // a:xfrm
1230
        $objWriter->endElement(); // p:grpSpPr
1231
1232
        $this->writeShapeCollection($objWriter, $group->getShapeCollection(), $shapeId);
1233
1234
        $objWriter->endElement(); // p:grpSp
1235
    }
1236
1237
    /**
1238
     * @param \PhpOffice\PhpPresentation\Slide\AbstractSlide $pSlide
1239
     * @param $objWriter
1240
     */
1241 101
    protected function writeSlideBackground(AbstractSlideAlias $pSlide, XMLWriter $objWriter)
1242
    {
1243 101
        if (!($pSlide->getBackground() instanceof Slide\AbstractBackground)) {
1244 101
            return;
1245
        }
1246 101
        $oBackground = $pSlide->getBackground();
1247
        // p:bg
1248 101
        $objWriter->startElement('p:bg');
1249 101
        if ($oBackground instanceof Slide\Background\Color) {
1250
            // p:bgPr
1251 101
            $objWriter->startElement('p:bgPr');
1252
            // a:solidFill
1253 101
            $objWriter->startElement('a:solidFill');
1254
            // a:srgbClr
1255 101
            $objWriter->startElement('a:srgbClr');
1256 101
            $objWriter->writeAttribute('val', $oBackground->getColor()->getRGB());
1257 101
            $objWriter->endElement();
1258
            // > a:solidFill
1259 101
            $objWriter->endElement();
1260
1261
            // p:bgPr/a:effectLst
1262 101
            $objWriter->writeElement('a:effectLst');
1263
1264
            // > p:bgPr
1265 101
            $objWriter->endElement();
1266 101
        }
1267 101
        if ($oBackground instanceof Slide\Background\Image) {
1268
            // p:bgPr
1269
            $objWriter->startElement('p:bgPr');
1270
            // a:blipFill
1271
            $objWriter->startElement('a:blipFill');
1272
            // a:blip
1273
            $objWriter->startElement('a:blip');
1274
            $objWriter->writeAttribute('r:embed', $oBackground->relationId);
1275
            // > a:blipFill
1276
            $objWriter->endElement();
1277
            // a:stretch
1278
            $objWriter->startElement('a:stretch');
1279
            // a:fillRect
1280
            $objWriter->writeElement('a:fillRect');
1281
            // > a:stretch
1282
            $objWriter->endElement();
1283
            // > a:blipFill
1284
            $objWriter->endElement();
1285
            // > p:bgPr
1286
            $objWriter->endElement();
1287
        }
1288
        /**
1289
         * @link : http://www.officeopenxml.com/prSlide-background.php
1290
         */
1291 101
        if ($oBackground instanceof Slide\Background\SchemeColor) {
1292
            // p:bgRef
1293
            $objWriter->startElement('p:bgRef');
1294
            $objWriter->writeAttribute('idx', '1001');
1295
            // a:schemeClr
1296
            $objWriter->startElement('a:schemeClr');
1297
            $objWriter->writeAttribute('val', $oBackground->getSchemeColor()->getValue());
1298
            $objWriter->endElement();
1299
            // > p:bgRef
1300
            $objWriter->endElement();
1301
        }
1302
        // > p:bg
1303 101
        $objWriter->endElement();
1304 101
    }
1305
1306
1307
    /**
1308
     * Write Transition Slide
1309
     * @link http://officeopenxml.com/prSlide-transitions.php
1310
     * @param XMLWriter $objWriter
1311
     * @param Slide\Transition $transition
1312
     */
1313 101
    protected function writeSlideTransition(XMLWriter $objWriter, $transition)
1314
    {
1315 101
        if (!$transition instanceof Slide\Transition) {
1316 101
            return;
1317
        }
1318 1
        $objWriter->startElement('p:transition');
1319 1
        if (!is_null($transition->getSpeed())) {
1320 1
            $objWriter->writeAttribute('spd', $transition->getSpeed());
1321 1
        }
1322 1
        $objWriter->writeAttribute('advClick', $transition->hasManualTrigger() ? '1' : '0');
1323 1
        if ($transition->hasTimeTrigger()) {
1324 1
            $objWriter->writeAttribute('advTm', $transition->getAdvanceTimeTrigger());
1325 1
        }
1326
1327 1
        switch ($transition->getTransitionType()) {
1328 1
            case Slide\Transition::TRANSITION_BLINDS_HORIZONTAL:
1329 1
                $objWriter->startElement('p:blinds');
1330 1
                $objWriter->writeAttribute('dir', 'horz');
1331 1
                $objWriter->endElement();
1332 1
                break;
1333 1
            case Slide\Transition::TRANSITION_BLINDS_VERTICAL:
1334 1
                $objWriter->startElement('p:blinds');
1335 1
                $objWriter->writeAttribute('dir', 'vert');
1336 1
                $objWriter->endElement();
1337 1
                break;
1338 1
            case Slide\Transition::TRANSITION_CHECKER_HORIZONTAL:
1339 1
                $objWriter->startElement('p:checker');
1340 1
                $objWriter->writeAttribute('dir', 'horz');
1341 1
                $objWriter->endElement();
1342 1
                break;
1343 1
            case Slide\Transition::TRANSITION_CHECKER_VERTICAL:
1344 1
                $objWriter->startElement('p:checker');
1345 1
                $objWriter->writeAttribute('dir', 'vert');
1346 1
                $objWriter->endElement();
1347 1
                break;
1348 1
            case Slide\Transition::TRANSITION_CIRCLE_HORIZONTAL:
1349 1
                $objWriter->startElement('p:circle');
1350 1
                $objWriter->writeAttribute('dir', 'horz');
1351 1
                $objWriter->endElement();
1352 1
                break;
1353 1
            case Slide\Transition::TRANSITION_CIRCLE_VERTICAL:
1354 1
                $objWriter->startElement('p:circle');
1355 1
                $objWriter->writeAttribute('dir', 'vert');
1356 1
                $objWriter->endElement();
1357 1
                break;
1358 1
            case Slide\Transition::TRANSITION_COMB_HORIZONTAL:
1359 1
                $objWriter->startElement('p:comb');
1360 1
                $objWriter->writeAttribute('dir', 'horz');
1361 1
                $objWriter->endElement();
1362 1
                break;
1363 1
            case Slide\Transition::TRANSITION_COMB_VERTICAL:
1364 1
                $objWriter->startElement('p:comb');
1365 1
                $objWriter->writeAttribute('dir', 'vert');
1366 1
                $objWriter->endElement();
1367 1
                break;
1368 1
            case Slide\Transition::TRANSITION_COVER_DOWN:
1369 1
                $objWriter->startElement('p:cover');
1370 1
                $objWriter->writeAttribute('dir', 'd');
1371 1
                $objWriter->endElement();
1372 1
                break;
1373 1
            case Slide\Transition::TRANSITION_COVER_LEFT:
1374 1
                $objWriter->startElement('p:cover');
1375 1
                $objWriter->writeAttribute('dir', 'l');
1376 1
                $objWriter->endElement();
1377 1
                break;
1378 1
            case Slide\Transition::TRANSITION_COVER_LEFT_DOWN:
1379 1
                $objWriter->startElement('p:cover');
1380 1
                $objWriter->writeAttribute('dir', 'ld');
1381 1
                $objWriter->endElement();
1382 1
                break;
1383 1
            case Slide\Transition::TRANSITION_COVER_LEFT_UP:
1384 1
                $objWriter->startElement('p:cover');
1385 1
                $objWriter->writeAttribute('dir', 'lu');
1386 1
                $objWriter->endElement();
1387 1
                break;
1388 1
            case Slide\Transition::TRANSITION_COVER_RIGHT:
1389 1
                $objWriter->startElement('p:cover');
1390 1
                $objWriter->writeAttribute('dir', 'r');
1391 1
                $objWriter->endElement();
1392 1
                break;
1393 1
            case Slide\Transition::TRANSITION_COVER_RIGHT_DOWN:
1394 1
                $objWriter->startElement('p:cover');
1395 1
                $objWriter->writeAttribute('dir', 'rd');
1396 1
                $objWriter->endElement();
1397 1
                break;
1398 1
            case Slide\Transition::TRANSITION_COVER_RIGHT_UP:
1399 1
                $objWriter->startElement('p:cover');
1400 1
                $objWriter->writeAttribute('dir', 'ru');
1401 1
                $objWriter->endElement();
1402 1
                break;
1403 1
            case Slide\Transition::TRANSITION_COVER_UP:
1404 1
                $objWriter->startElement('p:cover');
1405 1
                $objWriter->writeAttribute('dir', 'u');
1406 1
                $objWriter->endElement();
1407 1
                break;
1408 1
            case Slide\Transition::TRANSITION_CUT:
1409 1
                $objWriter->writeElement('p:cut');
1410 1
                break;
1411 1
            case Slide\Transition::TRANSITION_DIAMOND:
1412 1
                $objWriter->writeElement('p:diamond');
1413 1
                break;
1414 1
            case Slide\Transition::TRANSITION_DISSOLVE:
1415 1
                $objWriter->writeElement('p:dissolve');
1416 1
                break;
1417 1
            case Slide\Transition::TRANSITION_FADE:
1418 1
                $objWriter->writeElement('p:fade');
1419 1
                break;
1420 1
            case Slide\Transition::TRANSITION_NEWSFLASH:
1421 1
                $objWriter->writeElement('p:newsflash');
1422 1
                break;
1423 1
            case Slide\Transition::TRANSITION_PLUS:
1424 1
                $objWriter->writeElement('p:plus');
1425 1
                break;
1426 1
            case Slide\Transition::TRANSITION_PULL_DOWN:
1427 1
                $objWriter->startElement('p:pull');
1428 1
                $objWriter->writeAttribute('dir', 'd');
1429 1
                $objWriter->endElement();
1430 1
                break;
1431 1
            case Slide\Transition::TRANSITION_PULL_LEFT:
1432 1
                $objWriter->startElement('p:pull');
1433 1
                $objWriter->writeAttribute('dir', 'l');
1434 1
                $objWriter->endElement();
1435 1
                break;
1436 1
            case Slide\Transition::TRANSITION_PULL_RIGHT:
1437 1
                $objWriter->startElement('p:pull');
1438 1
                $objWriter->writeAttribute('dir', 'r');
1439 1
                $objWriter->endElement();
1440 1
                break;
1441 1
            case Slide\Transition::TRANSITION_PULL_UP:
1442 1
                $objWriter->startElement('p:pull');
1443 1
                $objWriter->writeAttribute('dir', 'u');
1444 1
                $objWriter->endElement();
1445 1
                break;
1446 1
            case Slide\Transition::TRANSITION_PUSH_DOWN:
1447 1
                $objWriter->startElement('p:push');
1448 1
                $objWriter->writeAttribute('dir', 'd');
1449 1
                $objWriter->endElement();
1450 1
                break;
1451 1
            case Slide\Transition::TRANSITION_PUSH_LEFT:
1452 1
                $objWriter->startElement('p:push');
1453 1
                $objWriter->writeAttribute('dir', 'l');
1454 1
                $objWriter->endElement();
1455 1
                break;
1456 1
            case Slide\Transition::TRANSITION_PUSH_RIGHT:
1457 1
                $objWriter->startElement('p:push');
1458 1
                $objWriter->writeAttribute('dir', 'r');
1459 1
                $objWriter->endElement();
1460 1
                break;
1461 1
            case Slide\Transition::TRANSITION_PUSH_UP:
1462 1
                $objWriter->startElement('p:push');
1463 1
                $objWriter->writeAttribute('dir', 'u');
1464 1
                $objWriter->endElement();
1465 1
                break;
1466 1
            case Slide\Transition::TRANSITION_RANDOM:
1467 1
                $objWriter->writeElement('p:random');
1468 1
                break;
1469 1
            case Slide\Transition::TRANSITION_RANDOMBAR_HORIZONTAL:
1470 1
                $objWriter->startElement('p:randomBar');
1471 1
                $objWriter->writeAttribute('dir', 'horz');
1472 1
                $objWriter->endElement();
1473 1
                break;
1474 1
            case Slide\Transition::TRANSITION_RANDOMBAR_VERTICAL:
1475 1
                $objWriter->startElement('p:randomBar');
1476 1
                $objWriter->writeAttribute('dir', 'vert');
1477 1
                $objWriter->endElement();
1478 1
                break;
1479 1
            case Slide\Transition::TRANSITION_SPLIT_IN_HORIZONTAL:
1480 1
                $objWriter->startElement('p:split');
1481 1
                $objWriter->writeAttribute('dir', 'in');
1482 1
                $objWriter->writeAttribute('orient', 'horz');
1483 1
                $objWriter->endElement();
1484 1
                break;
1485 1
            case Slide\Transition::TRANSITION_SPLIT_OUT_HORIZONTAL:
1486 1
                $objWriter->startElement('p:split');
1487 1
                $objWriter->writeAttribute('dir', 'out');
1488 1
                $objWriter->writeAttribute('orient', 'horz');
1489 1
                $objWriter->endElement();
1490 1
                break;
1491 1
            case Slide\Transition::TRANSITION_SPLIT_IN_VERTICAL:
1492 1
                $objWriter->startElement('p:split');
1493 1
                $objWriter->writeAttribute('dir', 'in');
1494 1
                $objWriter->writeAttribute('orient', 'vert');
1495 1
                $objWriter->endElement();
1496 1
                break;
1497 1
            case Slide\Transition::TRANSITION_SPLIT_OUT_VERTICAL:
1498 1
                $objWriter->startElement('p:split');
1499 1
                $objWriter->writeAttribute('dir', 'out');
1500 1
                $objWriter->writeAttribute('orient', 'vert');
1501 1
                $objWriter->endElement();
1502 1
                break;
1503 1
            case Slide\Transition::TRANSITION_STRIPS_LEFT_DOWN:
1504 1
                $objWriter->startElement('p:strips');
1505 1
                $objWriter->writeAttribute('dir', 'ld');
1506 1
                $objWriter->endElement();
1507 1
                break;
1508 1
            case Slide\Transition::TRANSITION_STRIPS_LEFT_UP:
1509 1
                $objWriter->startElement('p:strips');
1510 1
                $objWriter->writeAttribute('dir', 'lu');
1511 1
                $objWriter->endElement();
1512 1
                break;
1513 1
            case Slide\Transition::TRANSITION_STRIPS_RIGHT_DOWN:
1514 1
                $objWriter->startElement('p:strips');
1515 1
                $objWriter->writeAttribute('dir', 'rd');
1516 1
                $objWriter->endElement();
1517 1
                break;
1518 1
            case Slide\Transition::TRANSITION_STRIPS_RIGHT_UP:
1519 1
                $objWriter->startElement('p:strips');
1520 1
                $objWriter->writeAttribute('dir', 'ru');
1521 1
                $objWriter->endElement();
1522 1
                break;
1523 1
            case Slide\Transition::TRANSITION_WEDGE:
1524 1
                $objWriter->writeElement('p:wedge');
1525 1
                break;
1526 1
            case Slide\Transition::TRANSITION_WIPE_DOWN:
1527 1
                $objWriter->startElement('p:wipe');
1528 1
                $objWriter->writeAttribute('dir', 'd');
1529 1
                $objWriter->endElement();
1530 1
                break;
1531 1
            case Slide\Transition::TRANSITION_WIPE_LEFT:
1532 1
                $objWriter->startElement('p:wipe');
1533 1
                $objWriter->writeAttribute('dir', 'l');
1534 1
                $objWriter->endElement();
1535 1
                break;
1536 1
            case Slide\Transition::TRANSITION_WIPE_RIGHT:
1537 1
                $objWriter->startElement('p:wipe');
1538 1
                $objWriter->writeAttribute('dir', 'r');
1539 1
                $objWriter->endElement();
1540 1
                break;
1541 1
            case Slide\Transition::TRANSITION_WIPE_UP:
1542 1
                $objWriter->startElement('p:wipe');
1543 1
                $objWriter->writeAttribute('dir', 'u');
1544 1
                $objWriter->endElement();
1545 1
                break;
1546 1
            case Slide\Transition::TRANSITION_ZOOM_IN:
1547 1
                $objWriter->startElement('p:zoom');
1548 1
                $objWriter->writeAttribute('dir', 'in');
1549 1
                $objWriter->endElement();
1550 1
                break;
1551 1
            case Slide\Transition::TRANSITION_ZOOM_OUT:
1552 1
                $objWriter->startElement('p:zoom');
1553 1
                $objWriter->writeAttribute('dir', 'out');
1554 1
                $objWriter->endElement();
1555 1
                break;
1556 1
        }
1557
1558 1
        $objWriter->endElement();
1559 1
    }
1560
1561
    private function getGUID()
1562
    {
1563
        if (function_exists('com_create_guid')) {
1564
            return com_create_guid();
1565
        } else {
1566
            mt_srand((double)microtime() * 10000);//optional for php 4.2.0 and up.
1567
            $charid = strtoupper(md5(uniqid(rand(), true)));
1568
            $hyphen = chr(45);// "-"
1569
            $uuid = chr(123)// "{"
1570
                . substr($charid, 0, 8) . $hyphen
1571
                . substr($charid, 8, 4) . $hyphen
1572
                . substr($charid, 12, 4) . $hyphen
1573
                . substr($charid, 16, 4) . $hyphen
1574
                . substr($charid, 20, 12)
1575
                . chr(125);// "}"
1576
            return $uuid;
1577
        }
1578
    }
1579
}
1580