Completed
Pull Request — develop (#455)
by
unknown
10:09
created

PptSlideLayouts::render()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 5.583

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 17
ccs 10
cts 14
cp 0.7143
rs 8.8571
cc 5
eloc 10
nc 5
nop 0
crap 5.583
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
use PhpOffice\PhpPresentation\Shape\Drawing\Gd;
11
12
class PptSlideLayouts extends AbstractSlide
13
{
14
    /**
15
     * @return \PhpOffice\Common\Adapter\Zip\ZipInterface
16
     */
17 114
    public function render()
18
    {
19 114
        foreach ($this->oPresentation->getAllMasterSlides() as $oSlideMaster) {
20 114
            foreach ($oSlideMaster->getAllSlideLayouts() as $oSlideLayout) {
21 114
                foreach($oSlideLayout->getShapeCollection() as $shape) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FOREACH keyword; 0 found
Loading history...
22
                    if ($shape instanceof Gd) {
23
                        $imageName = $shape->getImageIndex().'.'.$shape->getExtension();
24
                        $this->oZip->addFromString('ppt/media/image'.$imageName, $shape->getContents());
25
                    }
26 114
                }
27 114
                $this->oZip->addFromString('ppt/slideLayouts/_rels/slideLayout' . $oSlideLayout->layoutNr . '.xml.rels', $this->writeSlideLayoutRelationships($oSlideMaster->getRelsIndex(), $oSlideLayout));
28 114
                $this->oZip->addFromString('ppt/slideLayouts/slideLayout' . $oSlideLayout->layoutNr . '.xml', $this->writeSlideLayout($oSlideLayout));
29 114
            }
30 114
        }
31
32 114
        return $this->oZip;
33
    }
34
35
36
    /**
37
     * Write slide layout relationships to XML format
38
     *
39
     * @param  int       $masterId
40
     * @return string    XML Output
41
     * @throws \Exception
42
     */
43 114
    public function writeSlideLayoutRelationships($masterId = 1, SlideLayout $oSlideLayout)
0 ignored issues
show
Coding Style introduced by
Parameters which have default values should be placed at the end.

If you place a parameter with a default value before a parameter with a default value, the default value of the first parameter will never be used as it will always need to be passed anyway:

// $a must always be passed; it's default value is never used.
function someFunction($a = 5, $b) { }
Loading history...
44
    {
45
        // Create XML writer
46 114
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
47
48
        // XML header
49 114
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
50
51
        // Relationships
52 114
        $objWriter->startElement('Relationships');
53 114
        $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
54
55
        // Write slideMaster relationship
56 114
        $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster', '../slideMasters/slideMaster' . $masterId . '.xml');
57 114
        $relId = 1;
58 114
        foreach($oSlideLayout->getShapeCollection() as $shape) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FOREACH keyword; 0 found
Loading history...
59
            if ($shape instanceof Gd) {
60
                $imageName = $shape->getImageIndex().'.'.$shape->getExtension();
61
                $this->writeRelationship($objWriter, ++$relId, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", '../media/image'. $imageName );
62
                $shape->relationId = 'rId' . $relId;
63
            }
64 114
        }
65
66 114
        $objWriter->endElement();
67
68
        // Return
69 114
        return $objWriter->getData();
70
    }
71
72
    /**
73
     * Write slide to XML format
74
     *
75
     * @param  \PhpOffice\PhpPresentation\Slide\SlideLayout $pSlideLayout
76
     * @return string XML Output
77
     * @throws \Exception
78
     */
79 114
    public function writeSlideLayout(SlideLayout $pSlideLayout)
80
    {
81
        // Create XML writer
82 114
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
83
        // XML header
84 114
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
85
        // p:sldLayout
86 114
        $objWriter->startElement('p:sldLayout');
87 114
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
88 114
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
89 114
        $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
90 114
        $objWriter->writeAttribute('preserve', 1);
91
        // p:sldLayout\p:cSld
92 114
        $objWriter->startElement('p:cSld');
93 114
        $objWriter->writeAttributeIf($pSlideLayout->getLayoutName() != '', 'name', $pSlideLayout->getLayoutName());
94
        // Background
95 114
        $this->writeSlideBackground($pSlideLayout, $objWriter);
96
97
        // p:sldLayout\p:cSld\p:spTree
98 114
        $objWriter->startElement('p:spTree');
99
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr
100 114
        $objWriter->startElement('p:nvGrpSpPr');
101
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvPr
102 114
        $objWriter->startElement('p:cNvPr');
103 114
        $objWriter->writeAttribute('id', '1');
104 114
        $objWriter->writeAttribute('name', '');
105 114
        $objWriter->endElement();
106
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvGrpSpPr
107 114
        $objWriter->writeElement('p:cNvGrpSpPr', null);
108
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:nvPr
109 114
        $objWriter->writeElement('p:nvPr', null);
110
        // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr
111 114
        $objWriter->endElement();
112
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr
113 114
        $objWriter->startElement('p:grpSpPr');
114
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm
115 114
        $objWriter->startElement('a:xfrm');
116
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:off
117 114
        $objWriter->startElement('a:off');
118 114
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetX()));
119 114
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetY()));
120 114
        $objWriter->endElement();
121
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:ext
122 114
        $objWriter->startElement('a:ext');
123 114
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentX()));
124 114
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentY()));
125 114
        $objWriter->endElement();
126
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chOff
127 114
        $objWriter->startElement('a:chOff');
128 114
        $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetX()));
129 114
        $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetY()));
130 114
        $objWriter->endElement();
131
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chExt
132 114
        $objWriter->startElement('a:chExt');
133 114
        $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentX()));
134 114
        $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentY()));
135 114
        $objWriter->endElement();
136
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\
137 114
        $objWriter->endElement();
138
        // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\
139 114
        $objWriter->endElement();
140
141
        // Loop shapes
142 114
        $this->writeShapeCollection($objWriter, $pSlideLayout->getShapeCollection());
143
144
        // p:sldLayout\p:cSld\p:spTree\
145 114
        $objWriter->endElement();
146
        // p:sldLayout\p:cSld\
147 114
        $objWriter->endElement();
148
149
        // p:sldLayout\p:clrMapOvr
150 114
        $objWriter->startElement('p:clrMapOvr');
151 114
        $arrayDiff = array_diff_assoc(ColorMap::$mappingDefault, $pSlideLayout->colorMap->getMapping());
152 114
        if (!empty($arrayDiff)) {
153
            // p:sldLayout\p:clrMapOvr\a:overrideClrMapping
154
            $objWriter->startElement('a:overrideClrMapping');
155
            foreach ($pSlideLayout->colorMap->getMapping() as $n => $v) {
156
                $objWriter->writeAttribute($n, $v);
157
            }
158
            $objWriter->endElement();
159
        } else {
160
            // p:sldLayout\p:clrMapOvr\a:masterClrMapping
161 114
            $objWriter->writeElement('a:masterClrMapping');
162
        }
163
        // p:sldLayout\p:clrMapOvr\
164 114
        $objWriter->endElement();
165
166 114
        if (!is_null($pSlideLayout->getTransition())) {
167
            $this->writeSlideTransition($objWriter, $pSlideLayout->getTransition());
168
        }
169
170
        // p:sldLayout\
171 114
        $objWriter->endElement();
172
173 114
        return $objWriter->getData();
174
    }
175
}
176