Completed
Push — develop ( 006a34...f4e000 )
by Franck
15:50
created

PptSlideLayouts::render()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 8
cts 8
cp 1
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 6
nc 3
nop 0
crap 3
1
<?php
2
3
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
4
5
use PhpOffice\Common\Drawing as CommonDrawing;
6
use PhpOffice\Common\XMLWriter;
7
use PhpOffice\PhpPresentation\Slide;
8
use PhpOffice\PhpPresentation\Slide\SlideLayout;
9
use PhpOffice\PhpPresentation\Style\ColorMap;
10
11
class PptSlideLayouts extends AbstractSlide
12
{
13
    /**
14
     * @return \PhpOffice\Common\Adapter\Zip\ZipInterface
15
     */
16 114
    public function render()
17
    {
18 114
        foreach ($this->oPresentation->getAllMasterSlides() as $oSlideMaster) {
19 114
            foreach ($oSlideMaster->getAllSlideLayouts() as $oSlideLayout) {
20 114
                $this->oZip->addFromString('ppt/slideLayouts/_rels/slideLayout' . $oSlideLayout->layoutNr . '.xml.rels', $this->writeSlideLayoutRelationships($oSlideMaster->getRelsIndex()));
21 114
                $this->oZip->addFromString('ppt/slideLayouts/slideLayout' . $oSlideLayout->layoutNr . '.xml', $this->writeSlideLayout($oSlideLayout));
22 114
            }
23 114
        }
24
25 114
        return $this->oZip;
26
    }
27
28
29
    /**
30
     * Write slide layout relationships to XML format
31
     *
32
     * @param  int       $masterId
33
     * @return string    XML Output
34
     * @throws \Exception
35
     */
36 114
    public function writeSlideLayoutRelationships($masterId = 1)
37
    {
38
        // Create XML writer
39 114
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
40
41
        // XML header
42 114
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
43
44
        // Relationships
45 114
        $objWriter->startElement('Relationships');
46 114
        $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
47
48
        // Write slideMaster relationship
49 114
        $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster', '../slideMasters/slideMaster' . $masterId . '.xml');
50
51 114
        $objWriter->endElement();
52
53
        // Return
54 114
        return $objWriter->getData();
55
    }
56
57
    /**
58
     * Write slide to XML format
59
     *
60
     * @param  \PhpOffice\PhpPresentation\Slide\SlideLayout $pSlideLayout
61
     * @return string XML Output
62
     * @throws \Exception
63
     */
64 114
    public function writeSlideLayout(SlideLayout $pSlideLayout)
65
    {
66
        // Create XML writer
67 114
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
68
        // XML header
69 114
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
70
        // p:sldLayout
71 114
        $objWriter->startElement('p:sldLayout');
72 114
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
73 114
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
74 114
        $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
75 114
        $objWriter->writeAttribute('preserve', 1);
76
        // p:sldLayout\p:cSld
77 114
        $objWriter->startElement('p:cSld');
78 114
        $objWriter->writeAttributeIf($pSlideLayout->getLayoutName() != '', 'name', $pSlideLayout->getLayoutName());
79
        // Background
80 114
        $this->writeSlideBackground($pSlideLayout, $objWriter);
81
        // p:sldLayout\p:cSld\p:spTree
82 114
        $objWriter->startElement('p:spTree');
83
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr
84 114
        $objWriter->startElement('p:nvGrpSpPr');
85
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvPr
86 114
        $objWriter->startElement('p:cNvPr');
87 114
        $objWriter->writeAttribute('id', '1');
88 114
        $objWriter->writeAttribute('name', '');
89 114
        $objWriter->endElement();
90
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvGrpSpPr
91 114
        $objWriter->writeElement('p:cNvGrpSpPr', null);
92
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:nvPr
93 114
        $objWriter->writeElement('p:nvPr', null);
94
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr
95 114
        $objWriter->endElement();
96
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr
97 114
        $objWriter->startElement('p:grpSpPr');
98
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm
99 114
        $objWriter->startElement('a:xfrm');
100
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:off
101 114
        $objWriter->startElement('a:off');
102 114
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetX()));
103 114
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetY()));
104 114
        $objWriter->endElement();
105
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:ext
106 114
        $objWriter->startElement('a:ext');
107 114
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentX()));
108 114
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentY()));
109 114
        $objWriter->endElement();
110
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chOff
111 114
        $objWriter->startElement('a:chOff');
112 114
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetX()));
113 114
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetY()));
114 114
        $objWriter->endElement();
115
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chExt
116 114
        $objWriter->startElement('a:chExt');
117 114
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentX()));
118 114
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentY()));
119 114
        $objWriter->endElement();
120
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\
121 114
        $objWriter->endElement();
122
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\
123 114
        $objWriter->endElement();
124
125
        // Loop shapes
126 114
        $this->writeShapeCollection($objWriter, $pSlideLayout->getShapeCollection());
127
        // p:sldLayout\p:cSld\p:spTree\
128 114
        $objWriter->endElement();
129
        // p:sldLayout\p:cSld\
130 114
        $objWriter->endElement();
131
132
        // p:sldLayout\p:clrMapOvr
133 114
        $objWriter->startElement('p:clrMapOvr');
134 114
        $arrayDiff = array_diff_assoc(ColorMap::$mappingDefault, $pSlideLayout->colorMap->getMapping());
135 114
        if (!empty($arrayDiff)) {
136
            // p:sldLayout\p:clrMapOvr\a:overrideClrMapping
137
            $objWriter->startElement('a:overrideClrMapping');
138
            foreach ($pSlideLayout->colorMap->getMapping() as $n => $v) {
139
                $objWriter->writeAttribute($n, $v);
140
            }
141
            $objWriter->endElement();
142
        } else {
143
            // p:sldLayout\p:clrMapOvr\a:masterClrMapping
144 114
            $objWriter->writeElement('a:masterClrMapping');
145
        }
146
        // p:sldLayout\p:clrMapOvr\
147 114
        $objWriter->endElement();
148
149 114
        if (!is_null($pSlideLayout->getTransition())) {
150
            $this->writeSlideTransition($objWriter, $pSlideLayout->getTransition());
151
        }
152
153
        // p:sldLayout\
154 114
        $objWriter->endElement();
155
156 114
        return $objWriter->getData();
157
    }
158
}
159