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