Failed Conditions
Push — develop ( 0ef1b5...a1e8c8 )
by Mark
34:44
created

DocProps::writeDocPropsCustom()   B

Complexity

Conditions 9
Paths 13

Size

Total Lines 63
Code Lines 40

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 36
CRAP Score 9.0368

Importance

Changes 0
Metric Value
cc 9
eloc 40
nc 13
nop 1
dl 0
loc 63
ccs 36
cts 39
cp 0.9231
crap 9.0368
rs 7.7244
c 0
b 0
f 0

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

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

234
                    $objWriter->writeRawData(date(DATE_W3C, /** @scrutinizer ignore-type */ $propertyValue));
Loading history...
235 1
                    $objWriter->endElement();
236
237 1
                    break;
238
                default:
239 2
                    $objWriter->writeElement('vt:lpwstr', $propertyValue);
240
241 2
                    break;
242
            }
243
244 2
            $objWriter->endElement();
245
        }
246
247 2
        $objWriter->endElement();
248
249 2
        return $objWriter->getData();
250
    }
251
}
252