Completed
Pull Request — develop (#187)
by Franck
19:04 queued 41s
created

PptPresentation   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
c 1
b 0
f 0
lcom 1
cbo 5
dl 0
loc 77
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B render() 0 74 4
1
<?php
2
3
namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
4
5
use PhpOffice\Common\XMLWriter;
6
use PhpOffice\PhpPresentation\DocumentLayout;
7
use PhpOffice\PhpPresentation\Writer\PowerPoint2007\LayoutPack\PackDefault;
8
9
class PptPresentation extends AbstractDecoratorWriter
10
{
11
    public function render()
12
    {
13
        // Create XML writer
14
        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
15
16
        // XML header
17
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
18
19
        // p:presentation
20
        $objWriter->startElement('p:presentation');
21
        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
22
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
23
        $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
24
25
        // p:sldMasterIdLst
26
        $objWriter->startElement('p:sldMasterIdLst');
27
28
        // Add slide masters
29
        $relationId    = 1;
30
        $slideMasterId = 2147483648;
31
        $oLayoutPack = new PackDefault();
32
        $masterSlides  = $oLayoutPack->getMasterSlides();
33
        $masterSlidesCount = count($masterSlides);
34
        // @todo foreach ($masterSlides as $masterSlide)
35
        for ($i = 0; $i < $masterSlidesCount; $i++) {
36
            // p:sldMasterId
37
            $objWriter->startElement('p:sldMasterId');
38
            $objWriter->writeAttribute('id', $slideMasterId);
39
            $objWriter->writeAttribute('r:id', 'rId' . $relationId++);
40
            $objWriter->endElement();
41
42
            // Increase identifier
43
            $slideMasterId += 12;
44
        }
45
        $objWriter->endElement();
46
47
        // theme
48
        $relationId++;
49
50
        // p:sldIdLst
51
        $objWriter->startElement('p:sldIdLst');
52
        // Write slides
53
        $slideCount = $this->oPresentation->getSlideCount();
54
        for ($i = 0; $i < $slideCount; ++$i) {
55
            // p:sldId
56
            $objWriter->startElement('p:sldId');
57
            $objWriter->writeAttribute('id', ($i + 256));
58
            $objWriter->writeAttribute('r:id', 'rId' . ($i + $relationId));
59
            $objWriter->endElement();
60
        }
61
        $objWriter->endElement();
62
63
        // p:sldSz
64
        $objWriter->startElement('p:sldSz');
65
        $objWriter->writeAttribute('cx', $this->oPresentation->getLayout()->getCX());
66
        $objWriter->writeAttribute('cy', $this->oPresentation->getLayout()->getCY());
67
        if ($this->oPresentation->getLayout()->getDocumentLayout() != DocumentLayout::LAYOUT_CUSTOM) {
68
            $objWriter->writeAttribute('type', $this->oPresentation->getLayout()->getDocumentLayout());
69
        }
70
        $objWriter->endElement();
71
72
        // p:notesSz
73
        $objWriter->startElement('p:notesSz');
74
        $objWriter->writeAttribute('cx', '6858000');
75
        $objWriter->writeAttribute('cy', '9144000');
76
        $objWriter->endElement();
77
78
        $objWriter->endElement();
79
80
        $this->oZip->addFromString('ppt/presentation.xml', $objWriter->getData());
81
82
        // Return
83
        return $this->oZip;
84
    }
85
}
86