Passed
Push — master ( dcb10e...d87ef3 )
by Adrien
12:23
created

DocProps::writeDocPropsCore()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 62
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 32
CRAP Score 2.0001

Importance

Changes 0
Metric Value
cc 2
eloc 33
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 62
ccs 32
cts 33
cp 0.9697
crap 2.0001
rs 9.392

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\PhpSpreadsheet\Writer\Xlsx;
4
5
use PhpOffice\PhpSpreadsheet\Document\Properties;
6
use PhpOffice\PhpSpreadsheet\Reader\Xlsx\Namespaces;
7
use PhpOffice\PhpSpreadsheet\Shared\Date;
8
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
9
use PhpOffice\PhpSpreadsheet\Spreadsheet;
10
11
class DocProps extends WriterPart
12
{
13
    /**
14
     * Write docProps/app.xml to XML format.
15
     *
16
     * @return string XML Output
17
     */
18 248
    public function writeDocPropsApp(Spreadsheet $spreadsheet)
19
    {
20
        // Create XML writer
21 248
        $objWriter = null;
22 248
        if ($this->getParentWriter()->getUseDiskCaching()) {
23
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
24
        } else {
25 248
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
26
        }
27
28
        // XML header
29 248
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
30
31
        // Properties
32 248
        $objWriter->startElement('Properties');
33 248
        $objWriter->writeAttribute('xmlns', Namespaces::EXTENDED_PROPERTIES);
34 248
        $objWriter->writeAttribute('xmlns:vt', Namespaces::PROPERTIES_VTYPES);
35
36
        // Application
37 248
        $objWriter->writeElement('Application', 'Microsoft Excel');
38
39
        // DocSecurity
40 248
        $objWriter->writeElement('DocSecurity', '0');
41
42
        // ScaleCrop
43 248
        $objWriter->writeElement('ScaleCrop', 'false');
44
45
        // HeadingPairs
46 248
        $objWriter->startElement('HeadingPairs');
47
48
        // Vector
49 248
        $objWriter->startElement('vt:vector');
50 248
        $objWriter->writeAttribute('size', '2');
51 248
        $objWriter->writeAttribute('baseType', 'variant');
52
53
        // Variant
54 248
        $objWriter->startElement('vt:variant');
55 248
        $objWriter->writeElement('vt:lpstr', 'Worksheets');
56 248
        $objWriter->endElement();
57
58
        // Variant
59 248
        $objWriter->startElement('vt:variant');
60 248
        $objWriter->writeElement('vt:i4', (string) $spreadsheet->getSheetCount());
61 248
        $objWriter->endElement();
62
63 248
        $objWriter->endElement();
64
65 248
        $objWriter->endElement();
66
67
        // TitlesOfParts
68 248
        $objWriter->startElement('TitlesOfParts');
69
70
        // Vector
71 248
        $objWriter->startElement('vt:vector');
72 248
        $objWriter->writeAttribute('size', (string) $spreadsheet->getSheetCount());
73 248
        $objWriter->writeAttribute('baseType', 'lpstr');
74
75 248
        $sheetCount = $spreadsheet->getSheetCount();
76 248
        for ($i = 0; $i < $sheetCount; ++$i) {
77 248
            $objWriter->writeElement('vt:lpstr', $spreadsheet->getSheet($i)->getTitle());
78
        }
79
80 248
        $objWriter->endElement();
81
82 248
        $objWriter->endElement();
83
84
        // Company
85 248
        $objWriter->writeElement('Company', $spreadsheet->getProperties()->getCompany());
86
87
        // Company
88 248
        $objWriter->writeElement('Manager', $spreadsheet->getProperties()->getManager());
89
90
        // LinksUpToDate
91 248
        $objWriter->writeElement('LinksUpToDate', 'false');
92
93
        // SharedDoc
94 248
        $objWriter->writeElement('SharedDoc', 'false');
95
96
        // HyperlinksChanged
97 248
        $objWriter->writeElement('HyperlinksChanged', 'false');
98
99
        // AppVersion
100 248
        $objWriter->writeElement('AppVersion', '12.0000');
101
102 248
        $objWriter->endElement();
103
104
        // Return
105 248
        return $objWriter->getData();
106
    }
107
108
    /**
109
     * Write docProps/core.xml to XML format.
110
     *
111
     * @return string XML Output
112
     */
113 248
    public function writeDocPropsCore(Spreadsheet $spreadsheet)
114
    {
115
        // Create XML writer
116 248
        $objWriter = null;
117 248
        if ($this->getParentWriter()->getUseDiskCaching()) {
118
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
119
        } else {
120 248
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
121
        }
122
123
        // XML header
124 248
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
125
126
        // cp:coreProperties
127 248
        $objWriter->startElement('cp:coreProperties');
128 248
        $objWriter->writeAttribute('xmlns:cp', Namespaces::CORE_PROPERTIES2);
129 248
        $objWriter->writeAttribute('xmlns:dc', Namespaces::DC_ELEMENTS);
130 248
        $objWriter->writeAttribute('xmlns:dcterms', Namespaces::DC_TERMS);
131 248
        $objWriter->writeAttribute('xmlns:dcmitype', Namespaces::DC_DCMITYPE);
132 248
        $objWriter->writeAttribute('xmlns:xsi', Namespaces::SCHEMA_INSTANCE);
133
134
        // dc:creator
135 248
        $objWriter->writeElement('dc:creator', $spreadsheet->getProperties()->getCreator());
136
137
        // cp:lastModifiedBy
138 248
        $objWriter->writeElement('cp:lastModifiedBy', $spreadsheet->getProperties()->getLastModifiedBy());
139
140
        // dcterms:created
141 248
        $objWriter->startElement('dcterms:created');
142 248
        $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF');
143 248
        $created = $spreadsheet->getProperties()->getCreated();
144 248
        $date = Date::dateTimeFromTimestamp("$created");
145 248
        $objWriter->writeRawData($date->format(DATE_W3C));
146 248
        $objWriter->endElement();
147
148
        // dcterms:modified
149 248
        $objWriter->startElement('dcterms:modified');
150 248
        $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF');
151 248
        $created = $spreadsheet->getProperties()->getModified();
152 248
        $date = Date::dateTimeFromTimestamp("$created");
153 248
        $objWriter->writeRawData($date->format(DATE_W3C));
154 248
        $objWriter->endElement();
155
156
        // dc:title
157 248
        $objWriter->writeElement('dc:title', $spreadsheet->getProperties()->getTitle());
158
159
        // dc:description
160 248
        $objWriter->writeElement('dc:description', $spreadsheet->getProperties()->getDescription());
161
162
        // dc:subject
163 248
        $objWriter->writeElement('dc:subject', $spreadsheet->getProperties()->getSubject());
164
165
        // cp:keywords
166 248
        $objWriter->writeElement('cp:keywords', $spreadsheet->getProperties()->getKeywords());
167
168
        // cp:category
169 248
        $objWriter->writeElement('cp:category', $spreadsheet->getProperties()->getCategory());
170
171 248
        $objWriter->endElement();
172
173
        // Return
174 248
        return $objWriter->getData();
175
    }
176
177
    /**
178
     * Write docProps/custom.xml to XML format.
179
     *
180
     * @return null|string XML Output
181
     */
182 248
    public function writeDocPropsCustom(Spreadsheet $spreadsheet)
183
    {
184 248
        $customPropertyList = $spreadsheet->getProperties()->getCustomProperties();
185 248
        if (empty($customPropertyList)) {
186 238
            return null;
187
        }
188
189
        // Create XML writer
190 11
        $objWriter = null;
191 11
        if ($this->getParentWriter()->getUseDiskCaching()) {
192
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
193
        } else {
194 11
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
195
        }
196
197
        // XML header
198 11
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
199
200
        // cp:coreProperties
201 11
        $objWriter->startElement('Properties');
202 11
        $objWriter->writeAttribute('xmlns', Namespaces::CUSTOM_PROPERTIES);
203 11
        $objWriter->writeAttribute('xmlns:vt', Namespaces::PROPERTIES_VTYPES);
204
205 11
        foreach ($customPropertyList as $key => $customProperty) {
206 11
            $propertyValue = $spreadsheet->getProperties()->getCustomPropertyValue($customProperty);
207 11
            $propertyType = $spreadsheet->getProperties()->getCustomPropertyType($customProperty);
208
209 11
            $objWriter->startElement('property');
210 11
            $objWriter->writeAttribute('fmtid', '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}');
211 11
            $objWriter->writeAttribute('pid', (string) ($key + 2));
212 11
            $objWriter->writeAttribute('name', $customProperty);
213
214
            switch ($propertyType) {
215
                case Properties::PROPERTY_TYPE_INTEGER:
216 2
                    $objWriter->writeElement('vt:i4', $propertyValue);
217
218 2
                    break;
219
                case Properties::PROPERTY_TYPE_FLOAT:
220 3
                    $objWriter->writeElement('vt:r8', sprintf('%F', $propertyValue));
221
222 3
                    break;
223
                case Properties::PROPERTY_TYPE_BOOLEAN:
224 4
                    $objWriter->writeElement('vt:bool', ($propertyValue) ? 'true' : 'false');
225
226 4
                    break;
227
                case Properties::PROPERTY_TYPE_DATE:
228 6
                    $objWriter->startElement('vt:filetime');
229 6
                    $date = Date::dateTimeFromTimestamp("$propertyValue");
230 6
                    $objWriter->writeRawData($date->format(DATE_W3C));
231 6
                    $objWriter->endElement();
232
233 6
                    break;
234
                default:
235 8
                    $objWriter->writeElement('vt:lpwstr', $propertyValue);
236
237 8
                    break;
238
            }
239
240 11
            $objWriter->endElement();
241
        }
242
243 11
        $objWriter->endElement();
244
245 11
        return $objWriter->getData();
246
    }
247
}
248