Completed
Pull Request — develop (#230)
by Franck
07:44
created

PptTheme::writeTheme()   B

Complexity

Conditions 6
Paths 12

Size

Total Lines 745
Code Lines 365

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 335
CRAP Score 6

Importance

Changes 3
Bugs 1 Features 0
Metric Value
c 3
b 1
f 0
dl 0
loc 745
ccs 335
cts 335
cp 1
rs 8.1463
cc 6
eloc 365
nc 12
nop 1
crap 6

How to fix   Long Method   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
3
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
4
5
use PhpOffice\PhpPresentation\Slide;
6
use PhpOffice\Common\XMLWriter;
7
8
class PptTheme extends AbstractDecoratorWriter
9
{
10
    /**
11
     * @return \PhpOffice\Common\Adapter\Zip\ZipInterface
12
     * @throws \Exception
13
     */
14 95
    public function render()
15
    {
16 95
        foreach ($this->oPresentation->getAllMasterSlides() as $oMasterSlide) {
17 95
            $this->getZip()->addFromString('ppt/theme/_rels/theme' . $oMasterSlide->getRelsIndex() . '.xml.rels', $this->writeThemeRelationships($oMasterSlide->getRelsIndex()));
18 95
            $this->getZip()->addFromString('ppt/theme/theme' . $oMasterSlide->getRelsIndex() . '.xml', $this->writeTheme($oMasterSlide));
19
        }
20
21
        /*
22
        $otherRelations = $oLayoutPack->getThemeRelations();
23
        foreach ($otherRelations as $otherRelation) {
24
            if (strpos($otherRelation['target'], 'http://') !== 0) {
25
                $this->getZip()->addFromString($this->absoluteZipPath('ppt/theme/' . $otherRelation['target']), $otherRelation['contents']);
26
            }
27
        }
28
        */
29
30 95
        return $this->getZip();
31
    }
32
33
34
    /**
35
     * Write theme to XML format
36
     *
37
     * @param  Slide\SlideMaster $oMasterSlide
38
     * @return string XML Output
39
     */
40 95
    protected function writeTheme(Slide\SlideMaster $oMasterSlide)
41
    {
42
43
44
        $arrayFont = array(
45 95
            'Jpan' => 'MS Pゴシック',
46
            'Hang' => '맑은 고딕',
47
            'Hans' => '宋体',
48
            'Hant' => '新細明體',
49
            'Arab' => 'Times New Roman',
50
            'Hebr' => 'Times New Roman',
51
            'Thai' => 'Angsana New',
52
            'Ethi' => 'Nyala',
53
            'Beng' => 'Vrinda',
54
            'Gujr' => 'Shruti',
55
            'Khmr' => 'MoolBoran',
56
            'Knda' => 'Tunga',
57
            'Guru' => 'Raavi',
58
            'Cans' => 'Euphemia',
59
            'Cher' => 'Plantagenet Cherokee',
60
            'Yiii' => 'Microsoft Yi Baiti',
61
            'Tibt' => 'Microsoft Himalaya',
62
            'Thaa' => 'MV Boli',
63
            'Deva' => 'Mangal',
64
            'Telu' => 'Gautami',
65
            'Taml' => 'Latha',
66
            'Syrc' => 'Estrangelo Edessa',
67
            'Orya' => 'Kalinga',
68
            'Mlym' => 'Kartika',
69
            'Laoo' => 'DokChampa',
70
            'Sinh' => 'Iskoola Pota',
71
            'Mong' => 'Mongolian Baiti',
72
            'Viet' => 'Times New Roman',
73
            'Uigh' => 'Microsoft Uighur',
74
        );
75
76
        // Create XML writer
77 95
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
78
79 95
        $name = 'Theme'.rand(1, 100);
80
81
        // XML header
82 95
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
83
84
        // a:theme
85 95
        $objWriter->startElement('a:theme');
86 95
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
87 95
        $objWriter->writeAttribute('name', $name);
88
89
        // a:theme/a:themeElements
90 95
        $objWriter->startElement('a:themeElements');
91
92
        // a:theme/a:themeElements/a:clrScheme
93 95
        $objWriter->startElement('a:clrScheme');
94 95
        $objWriter->writeAttribute('name', $name);
95
96 95
        foreach ($oMasterSlide->getAllSchemeColors() as $oSchemeColor) {
97
            // a:theme/a:themeElements/a:clrScheme/a:*
98 95
            $objWriter->startElement('a:'.$oSchemeColor->getValue());
99
100 95
            if (in_array($oSchemeColor->getValue(), array(
101 95
                'dk1', 'lt1'
102
            ))) {
103 95
                $objWriter->startElement('a:sysClr');
104 95
                $objWriter->writeAttribute('val', ($oSchemeColor->getValue() == 'dk1' ? 'windowText' : 'window'));
105 95
                $objWriter->writeAttribute('lastClr', $oSchemeColor->getRGB());
106 95
                $objWriter->endElement();
107
            } else {
108 95
                $objWriter->startElement('a:srgbClr');
109 95
                $objWriter->writeAttribute('val', $oSchemeColor->getRGB());
110 95
                $objWriter->endElement();
111
            }
112
113
            // a:theme/a:themeElements/a:clrScheme/a:*/
114 95
            $objWriter->endElement();
115
        }
116
117
        // a:theme/a:themeElements/a:clrScheme/
118 95
        $objWriter->endElement();
119
120
        // a:theme/a:themeElements/a:fontScheme
121 95
        $objWriter->startElement('a:fontScheme');
122 95
        $objWriter->writeAttribute('name', $name);
123
124
        // a:theme/a:themeElements/a:fontScheme/a:majorFont
125 95
        $objWriter->startElement('a:majorFont');
126
127
        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
128 95
        $objWriter->startElement('a:latin');
129 95
        $objWriter->writeAttribute('typeface', 'Calibri');
130 95
        $objWriter->endElement();
131
132
        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
133 95
        $objWriter->startElement('a:ea');
134 95
        $objWriter->writeAttribute('typeface', '');
135 95
        $objWriter->endElement();
136
137
        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
138 95
        $objWriter->startElement('a:cs');
139 95
        $objWriter->writeAttribute('typeface', '');
140 95
        $objWriter->endElement();
141
142 95
        foreach ($arrayFont as $script => $typeface) {
143
            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
144 95
            $objWriter->startElement('a:font');
145 95
            $objWriter->writeAttribute('script', $script);
146 95
            $objWriter->writeAttribute('typeface', $typeface);
147 95
            $objWriter->endElement();
148
        }
149
150
        // a:theme/a:themeElements/a:fontScheme/a:majorFont/
151 95
        $objWriter->endElement();
152
153
        // a:theme/a:themeElements/a:fontScheme/a:minorFont
154 95
        $objWriter->startElement('a:minorFont');
155
156
        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
157 95
        $objWriter->startElement('a:latin');
158 95
        $objWriter->writeAttribute('typeface', 'Calibri');
159 95
        $objWriter->endElement();
160
161
        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
162 95
        $objWriter->startElement('a:ea');
163 95
        $objWriter->writeAttribute('typeface', '');
164 95
        $objWriter->endElement();
165
166
        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
167 95
        $objWriter->startElement('a:cs');
168 95
        $objWriter->writeAttribute('typeface', '');
169 95
        $objWriter->endElement();
170
171 95
        foreach ($arrayFont as $script => $typeface) {
172
            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
173 95
            $objWriter->startElement('a:font');
174 95
            $objWriter->writeAttribute('script', $script);
175 95
            $objWriter->writeAttribute('typeface', $typeface);
176 95
            $objWriter->endElement();
177
        }
178
179
        // a:theme/a:themeElements/a:fontScheme/a:minorFont/
180 95
        $objWriter->endElement();
181
182
        // a:theme/a:themeElements/a:fontScheme/
183 95
        $objWriter->endElement();
184
185
        // a:theme/a:themeElements/a:fmtScheme
186 95
        $objWriter->startElement('a:fmtScheme');
187 95
        $objWriter->writeAttribute('name', $name);
188
189
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst
190 95
        $objWriter->startElement('a:fillStyleLst');
191
192
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill
193 95
        $objWriter->startElement('a:solidFill');
194
195
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr
196 95
        $objWriter->startElement('a:schemeClr');
197 95
        $objWriter->writeAttribute('val', 'phClr');
198
199
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr/
200 95
        $objWriter->endElement();
201
202
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/
203 95
        $objWriter->endElement();
204
205
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
206 95
        $objWriter->startElement('a:gradFill');
207
208
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
209 95
        $objWriter->startElement('a:gsLst');
210
211
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
212 95
        $objWriter->startElement('a:gs');
213 95
        $objWriter->writeAttribute('pos', 0);
214
215
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
216 95
        $objWriter->startElement('a:schemeClr');
217 95
        $objWriter->writeAttribute('val', 'phClr');
218
219
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
220 95
        $objWriter->endElement();
221
222
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
223 95
        $objWriter->endElement();
224
225
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
226 95
        $objWriter->startElement('a:gs');
227 95
        $objWriter->writeAttribute('pos', 35000);
228
229
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
230 95
        $objWriter->startElement('a:schemeClr');
231 95
        $objWriter->writeAttribute('val', 'phClr');
232
233
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
234 95
        $objWriter->endElement();
235
236
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
237 95
        $objWriter->endElement();
238
239
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
240 95
        $objWriter->startElement('a:gs');
241 95
        $objWriter->writeAttribute('pos', 100000);
242
243
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
244 95
        $objWriter->startElement('a:schemeClr');
245 95
        $objWriter->writeAttribute('val', 'phClr');
246
247
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
248 95
        $objWriter->endElement();
249
250
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
251 95
        $objWriter->endElement();
252
253
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
254 95
        $objWriter->endElement();
255
256
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
257 95
        $objWriter->endElement();
258
259
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
260 95
        $objWriter->startElement('a:gradFill');
261
262
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
263 95
        $objWriter->startElement('a:gsLst');
264
265
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
266 95
        $objWriter->startElement('a:gs');
267 95
        $objWriter->writeAttribute('pos', 0);
268
269
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
270 95
        $objWriter->startElement('a:schemeClr');
271 95
        $objWriter->writeAttribute('val', 'phClr');
272
273
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
274 95
        $objWriter->endElement();
275
276
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
277 95
        $objWriter->endElement();
278
279
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
280 95
        $objWriter->startElement('a:gs');
281 95
        $objWriter->writeAttribute('pos', 80000);
282
283
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
284 95
        $objWriter->startElement('a:schemeClr');
285 95
        $objWriter->writeAttribute('val', 'phClr');
286
287
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
288 95
        $objWriter->endElement();
289
290
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
291 95
        $objWriter->endElement();
292
293
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
294 95
        $objWriter->startElement('a:gs');
295 95
        $objWriter->writeAttribute('pos', 100000);
296
297
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
298 95
        $objWriter->startElement('a:schemeClr');
299 95
        $objWriter->writeAttribute('val', 'phClr');
300
301
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
302 95
        $objWriter->endElement();
303
304
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
305 95
        $objWriter->endElement();
306
307
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
308 95
        $objWriter->endElement();
309
310
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
311 95
        $objWriter->endElement();
312
313
        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/
314 95
        $objWriter->endElement();
315
316
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst
317 95
        $objWriter->startElement('a:lnStyleLst');
318
319
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
320 95
        $objWriter->startElement('a:ln');
321 95
        $objWriter->writeAttribute('w', 9525);
322 95
        $objWriter->writeAttribute('cap', 'flat');
323 95
        $objWriter->writeAttribute('cmpd', 'sng');
324 95
        $objWriter->writeAttribute('algn', 'ctr');
325
326
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
327 95
        $objWriter->startElement('a:solidFill');
328
329
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
330 95
        $objWriter->startElement('a:schemeClr');
331 95
        $objWriter->writeAttribute('val', 'phClr');
332
333
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
334 95
        $objWriter->endElement();
335
336
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
337 95
        $objWriter->endElement();
338
339
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
340 95
        $objWriter->startElement('a:prstDash');
341 95
        $objWriter->writeAttribute('val', 'solid');
342 95
        $objWriter->endElement();
343
344
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
345 95
        $objWriter->endElement();
346
347
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
348 95
        $objWriter->startElement('a:ln');
349 95
        $objWriter->writeAttribute('w', 25400);
350 95
        $objWriter->writeAttribute('cap', 'flat');
351 95
        $objWriter->writeAttribute('cmpd', 'sng');
352 95
        $objWriter->writeAttribute('algn', 'ctr');
353
354
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
355 95
        $objWriter->startElement('a:solidFill');
356
357
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
358 95
        $objWriter->startElement('a:schemeClr');
359 95
        $objWriter->writeAttribute('val', 'phClr');
360
361
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
362 95
        $objWriter->endElement();
363
364
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
365 95
        $objWriter->endElement();
366
367
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
368 95
        $objWriter->startElement('a:prstDash');
369 95
        $objWriter->writeAttribute('val', 'solid');
370 95
        $objWriter->endElement();
371
372
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
373 95
        $objWriter->endElement();
374
375
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
376 95
        $objWriter->startElement('a:ln');
377 95
        $objWriter->writeAttribute('w', 38100);
378 95
        $objWriter->writeAttribute('cap', 'flat');
379 95
        $objWriter->writeAttribute('cmpd', 'sng');
380 95
        $objWriter->writeAttribute('algn', 'ctr');
381
382
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
383 95
        $objWriter->startElement('a:solidFill');
384
385
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
386 95
        $objWriter->startElement('a:schemeClr');
387 95
        $objWriter->writeAttribute('val', 'phClr');
388
389
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
390 95
        $objWriter->endElement();
391
392
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
393 95
        $objWriter->endElement();
394
395
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
396 95
        $objWriter->startElement('a:prstDash');
397 95
        $objWriter->writeAttribute('val', 'solid');
398 95
        $objWriter->endElement();
399
400
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
401 95
        $objWriter->endElement();
402
403
        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/
404 95
        $objWriter->endElement();
405
406
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst
407 95
        $objWriter->startElement('a:effectStyleLst');
408
409
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
410 95
        $objWriter->startElement('a:effectStyle');
411
412
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
413 95
        $objWriter->startElement('a:effectLst');
414
415
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
416 95
        $objWriter->startElement('a:outerShdw');
417 95
        $objWriter->writeAttribute('blurRad', 40000);
418 95
        $objWriter->writeAttribute('dir', 5400000);
419 95
        $objWriter->writeAttribute('dist', 20000);
420 95
        $objWriter->writeAttribute('rotWithShape', 0);
421
422
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
423 95
        $objWriter->startElement('a:srgbClr');
424 95
        $objWriter->writeAttribute('val', '000000');
425
426
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
427 95
        $objWriter->startElement('a:alpha');
428 95
        $objWriter->writeAttribute('val', 38000);
429
430
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
431 95
        $objWriter->endElement();
432
433
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
434 95
        $objWriter->endElement();
435
436
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
437 95
        $objWriter->endElement();
438
439
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
440 95
        $objWriter->endElement();
441
442
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
443 95
        $objWriter->endElement();
444
445
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
446 95
        $objWriter->startElement('a:effectStyle');
447
448
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
449 95
        $objWriter->startElement('a:effectLst');
450
451
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
452 95
        $objWriter->startElement('a:outerShdw');
453 95
        $objWriter->writeAttribute('blurRad', 40000);
454 95
        $objWriter->writeAttribute('dir', 5400000);
455 95
        $objWriter->writeAttribute('dist', 23000);
456 95
        $objWriter->writeAttribute('rotWithShape', 0);
457
458
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
459 95
        $objWriter->startElement('a:srgbClr');
460 95
        $objWriter->writeAttribute('val', '000000');
461
462
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
463 95
        $objWriter->startElement('a:alpha');
464 95
        $objWriter->writeAttribute('val', 35000);
465
466
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
467 95
        $objWriter->endElement();
468
469
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
470 95
        $objWriter->endElement();
471
472
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
473 95
        $objWriter->endElement();
474
475
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
476 95
        $objWriter->endElement();
477
478
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
479 95
        $objWriter->endElement();
480
481
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
482 95
        $objWriter->startElement('a:effectStyle');
483
484
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
485 95
        $objWriter->startElement('a:effectLst');
486
487
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
488 95
        $objWriter->startElement('a:outerShdw');
489 95
        $objWriter->writeAttribute('blurRad', 40000);
490 95
        $objWriter->writeAttribute('dir', 5400000);
491 95
        $objWriter->writeAttribute('dist', 23000);
492 95
        $objWriter->writeAttribute('rotWithShape', 0);
493
494
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
495 95
        $objWriter->startElement('a:srgbClr');
496 95
        $objWriter->writeAttribute('val', '000000');
497
498
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
499 95
        $objWriter->startElement('a:alpha');
500 95
        $objWriter->writeAttribute('val', 35000);
501
502
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
503 95
        $objWriter->endElement();
504
505
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
506 95
        $objWriter->endElement();
507
508
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
509 95
        $objWriter->endElement();
510
511
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
512 95
        $objWriter->endElement();
513
514
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d
515 95
        $objWriter->startElement('a:scene3d');
516
517
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera
518 95
        $objWriter->startElement('a:camera');
519 95
        $objWriter->writeAttribute('prst', 'orthographicFront');
520
521
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/a:rot
522 95
        $objWriter->startElement('a:rot');
523 95
        $objWriter->writeAttribute('lat', 0);
524 95
        $objWriter->writeAttribute('lon', 0);
525 95
        $objWriter->writeAttribute('rev', 0);
526 95
        $objWriter->endElement();
527
528
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/
529 95
        $objWriter->endElement();
530
531
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig
532 95
        $objWriter->startElement('a:lightRig');
533 95
        $objWriter->writeAttribute('dir', 't');
534 95
        $objWriter->writeAttribute('rig', 'threePt');
535
536
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/a:rot
537 95
        $objWriter->startElement('a:rot');
538 95
        $objWriter->writeAttribute('lat', 0);
539 95
        $objWriter->writeAttribute('lon', 0);
540 95
        $objWriter->writeAttribute('rev', 1200000);
541 95
        $objWriter->endElement();
542
543
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/
544 95
        $objWriter->endElement();
545
546
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/
547 95
        $objWriter->endElement();
548
549
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d
550 95
        $objWriter->startElement('a:sp3d');
551
552
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/a:bevelT
553 95
        $objWriter->startElement('a:bevelT');
554 95
        $objWriter->writeAttribute('h', 25400);
555 95
        $objWriter->writeAttribute('w', 63500);
556 95
        $objWriter->endElement();
557
558
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/
559 95
        $objWriter->endElement();
560
561
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
562 95
        $objWriter->endElement();
563
564
        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/
565 95
        $objWriter->endElement();
566
567
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst
568 95
        $objWriter->startElement('a:bgFillStyleLst');
569
570
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill
571 95
        $objWriter->startElement('a:solidFill');
572
573
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr
574 95
        $objWriter->startElement('a:schemeClr');
575 95
        $objWriter->writeAttribute('val', 'phClr');
576
577
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr/
578 95
        $objWriter->endElement();
579
580
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/
581 95
        $objWriter->endElement();
582
583
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
584 95
        $objWriter->startElement('a:gradFill');
585 95
        $objWriter->writeAttribute('rotWithShape', 1);
586
587
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
588 95
        $objWriter->startElement('a:gsLst');
589
590
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
591 95
        $objWriter->startElement('a:gs');
592 95
        $objWriter->writeAttribute('pos', 0);
593
594
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
595 95
        $objWriter->startElement('a:schemeClr');
596 95
        $objWriter->writeAttribute('val', 'phClr');
597
598
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
599 95
        $objWriter->startElement('a:tint');
600 95
        $objWriter->writeAttribute('val', 40000);
601 95
        $objWriter->endElement();
602
603
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
604 95
        $objWriter->startElement('a:satMod');
605 95
        $objWriter->writeAttribute('val', 350000);
606 95
        $objWriter->endElement();
607
608
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
609 95
        $objWriter->endElement();
610
611
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
612 95
        $objWriter->endElement();
613
614
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
615 95
        $objWriter->startElement('a:gs');
616 95
        $objWriter->writeAttribute('pos', 40000);
617
618
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
619 95
        $objWriter->startElement('a:schemeClr');
620 95
        $objWriter->writeAttribute('val', 'phClr');
621
622
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
623 95
        $objWriter->startElement('a:tint');
624 95
        $objWriter->writeAttribute('val', 45000);
625 95
        $objWriter->endElement();
626
627
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
628 95
        $objWriter->startElement('a:shade');
629 95
        $objWriter->writeAttribute('val', 99000);
630 95
        $objWriter->endElement();
631
632
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
633 95
        $objWriter->startElement('a:satMod');
634 95
        $objWriter->writeAttribute('val', 350000);
635 95
        $objWriter->endElement();
636
637
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
638 95
        $objWriter->endElement();
639
640
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
641 95
        $objWriter->endElement();
642
643
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
644 95
        $objWriter->startElement('a:gs');
645 95
        $objWriter->writeAttribute('pos', 100000);
646
647
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
648 95
        $objWriter->startElement('a:schemeClr');
649 95
        $objWriter->writeAttribute('val', 'phClr');
650
651
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
652 95
        $objWriter->startElement('a:shade');
653 95
        $objWriter->writeAttribute('val', 20000);
654 95
        $objWriter->endElement();
655
656
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
657 95
        $objWriter->startElement('a:satMod');
658 95
        $objWriter->writeAttribute('val', 255000);
659 95
        $objWriter->endElement();
660
661
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
662 95
        $objWriter->endElement();
663
664
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
665 95
        $objWriter->endElement();
666
667
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
668 95
        $objWriter->endElement();
669
670
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
671 95
        $objWriter->startElement('a:path');
672 95
        $objWriter->writeAttribute('path', 'circle');
673
674
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
675 95
        $objWriter->startElement('a:fillToRect');
676 95
        $objWriter->writeAttribute('b', 180000);
677 95
        $objWriter->writeAttribute('l', 50000);
678 95
        $objWriter->writeAttribute('r', 50000);
679 95
        $objWriter->writeAttribute('t', -80000);
680 95
        $objWriter->endElement();
681
682
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
683 95
        $objWriter->endElement();
684
685
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
686 95
        $objWriter->endElement();
687
688
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
689 95
        $objWriter->startElement('a:gradFill');
690 95
        $objWriter->writeAttribute('rotWithShape', 1);
691
692
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
693 95
        $objWriter->startElement('a:gsLst');
694
695
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
696 95
        $objWriter->startElement('a:gs');
697 95
        $objWriter->writeAttribute('pos', 0);
698
699
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
700 95
        $objWriter->startElement('a:schemeClr');
701 95
        $objWriter->writeAttribute('val', 'phClr');
702
703
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
704 95
        $objWriter->startElement('a:tint');
705 95
        $objWriter->writeAttribute('val', 80000);
706 95
        $objWriter->endElement();
707
708
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
709 95
        $objWriter->startElement('a:satMod');
710 95
        $objWriter->writeAttribute('val', 300000);
711 95
        $objWriter->endElement();
712
713
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
714 95
        $objWriter->endElement();
715
716
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
717 95
        $objWriter->endElement();
718
719
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
720 95
        $objWriter->startElement('a:gs');
721 95
        $objWriter->writeAttribute('pos', 100000);
722
723
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
724 95
        $objWriter->startElement('a:schemeClr');
725 95
        $objWriter->writeAttribute('val', 'phClr');
726
727
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
728 95
        $objWriter->startElement('a:shade');
729 95
        $objWriter->writeAttribute('val', 30000);
730 95
        $objWriter->endElement();
731
732
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
733 95
        $objWriter->startElement('a:satMod');
734 95
        $objWriter->writeAttribute('val', 200000);
735 95
        $objWriter->endElement();
736
737
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
738 95
        $objWriter->endElement();
739
740
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
741 95
        $objWriter->endElement();
742
743
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
744 95
        $objWriter->endElement();
745
746
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
747 95
        $objWriter->startElement('a:path');
748 95
        $objWriter->writeAttribute('path', 'circle');
749
750
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
751 95
        $objWriter->startElement('a:fillToRect');
752 95
        $objWriter->writeAttribute('b', 50000);
753 95
        $objWriter->writeAttribute('l', 50000);
754 95
        $objWriter->writeAttribute('r', 50000);
755 95
        $objWriter->writeAttribute('t', 50000);
756 95
        $objWriter->endElement();
757
758
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
759 95
        $objWriter->endElement();
760
761
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
762 95
        $objWriter->endElement();
763
764
        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/
765 95
        $objWriter->endElement();
766
767
        // a:theme/a:themeElements/a:fmtScheme/
768 95
        $objWriter->endElement();
769
770
        // a:theme/a:themeElements/
771 95
        $objWriter->endElement();
772
773
        // a:theme/a:themeElements
774 95
        $objWriter->writeElement('a:objectDefaults');
775
776
        // a:theme/a:extraClrSchemeLst
777 95
        $objWriter->writeElement('a:extraClrSchemeLst');
778
779
        // a:theme/
780 95
        $objWriter->endElement();
781
782
        // Return
783 95
        return $objWriter->getData();
784
    }
785
786
787
    /**
788
     * Write theme relationships to XML format
789
     *
790
     * @param  int       $masterId Master slide id
791
     * @return string    XML Output
792
     * @throws \Exception
793
     */
794 95
    public function writeThemeRelationships($masterId = 1)
795
    {
796
        // Create XML writer
797 95
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
798
799
        // XML header
800 95
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
801
802
        // Relationships
803 95
        $objWriter->startElement('Relationships');
804 95
        $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
805
806
        // Other relationships
807
        //@todo
808
        $masterId;
809
        /*
810
        $otherRelations = $oLayoutPack->getThemeRelations();
811
        foreach ($otherRelations as $otherRelation) {
812
            if ($otherRelation['masterid'] == $masterId) {
813
                $this->writeRelationship($objWriter, $otherRelation['id'], $otherRelation['type'], $otherRelation['target']);
814
            }
815
        }
816
        */
817 95
        $objWriter->endElement();
818
819
        // Return
820 95
        return $objWriter->getData();
821
    }
822
}
823