Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
27 | class Rels extends WriterPart |
||
28 | { |
||
29 | /** |
||
30 | * Write relationships to XML format. |
||
31 | * |
||
32 | * @param \PhpOffice\PhpSpreadsheet\SpreadSheet $spreadsheet |
||
33 | * |
||
34 | * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception |
||
35 | * |
||
36 | * @return string XML Output |
||
37 | */ |
||
38 | 56 | public function writeRelationships(\PhpOffice\PhpSpreadsheet\SpreadSheet $spreadsheet = null) |
|
103 | |||
104 | /** |
||
105 | * Write workbook relationships to XML format. |
||
106 | * |
||
107 | * @param \PhpOffice\PhpSpreadsheet\SpreadSheet $spreadsheet |
||
108 | * |
||
109 | * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception |
||
110 | * |
||
111 | * @return string XML Output |
||
112 | */ |
||
113 | 56 | public function writeWorkbookRelationships(\PhpOffice\PhpSpreadsheet\SpreadSheet $spreadsheet = null) |
|
180 | |||
181 | /** |
||
182 | * Write worksheet relationships to XML format. |
||
183 | * |
||
184 | * Numbering is as follows: |
||
185 | * rId1 - Drawings |
||
186 | * rId_hyperlink_x - Hyperlinks |
||
187 | * |
||
188 | * @param \PhpOffice\PhpSpreadsheet\Worksheet $pWorksheet |
||
189 | * @param int $pWorksheetId |
||
190 | * @param bool $includeCharts Flag indicating if we should write charts |
||
191 | * |
||
192 | * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception |
||
193 | * |
||
194 | * @return string XML Output |
||
195 | */ |
||
196 | 56 | public function writeWorksheetRelationships(\PhpOffice\PhpSpreadsheet\Worksheet $pWorksheet = null, $pWorksheetId = 1, $includeCharts = false) |
|
197 | { |
||
198 | // Create XML writer |
||
199 | 56 | $objWriter = null; |
|
200 | 56 | View Code Duplication | if ($this->getParentWriter()->getUseDiskCaching()) { |
201 | $objWriter = new \PhpOffice\PhpSpreadsheet\Shared\XMLWriter(\PhpOffice\PhpSpreadsheet\Shared\XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); |
||
202 | } else { |
||
203 | 56 | $objWriter = new \PhpOffice\PhpSpreadsheet\Shared\XMLWriter(\PhpOffice\PhpSpreadsheet\Shared\XMLWriter::STORAGE_MEMORY); |
|
204 | } |
||
205 | |||
206 | // XML header |
||
207 | 56 | $objWriter->startDocument('1.0', 'UTF-8', 'yes'); |
|
208 | |||
209 | // Relationships |
||
210 | 56 | $objWriter->startElement('Relationships'); |
|
211 | 56 | $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); |
|
212 | |||
213 | // Write drawing relationships? |
||
214 | 56 | $d = 0; |
|
215 | 56 | if ($includeCharts) { |
|
216 | 14 | $charts = $pWorksheet->getChartCollection(); |
|
217 | } else { |
||
218 | 43 | $charts = []; |
|
219 | } |
||
220 | 56 | if (($pWorksheet->getDrawingCollection()->count() > 0) || |
|
221 | 56 | (count($charts) > 0)) { |
|
222 | 22 | $this->writeRelationship( |
|
223 | $objWriter, |
||
224 | ++$d, |
||
225 | 22 | 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', |
|
226 | 22 | '../drawings/drawing' . $pWorksheetId . '.xml' |
|
227 | ); |
||
228 | } |
||
229 | |||
230 | // Write hyperlink relationships? |
||
231 | 56 | $i = 1; |
|
232 | 56 | foreach ($pWorksheet->getHyperlinkCollection() as $hyperlink) { |
|
233 | 8 | if (!$hyperlink->isInternal()) { |
|
234 | 8 | $this->writeRelationship( |
|
235 | $objWriter, |
||
236 | 8 | '_hyperlink_' . $i, |
|
237 | 8 | 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', |
|
238 | 8 | $hyperlink->getUrl(), |
|
239 | 8 | 'External' |
|
240 | ); |
||
241 | |||
242 | 8 | ++$i; |
|
243 | } |
||
244 | } |
||
245 | |||
246 | // Write comments relationship? |
||
247 | 56 | $i = 1; |
|
248 | 56 | if (count($pWorksheet->getComments()) > 0) { |
|
249 | 9 | $this->writeRelationship( |
|
250 | $objWriter, |
||
251 | 9 | '_comments_vml' . $i, |
|
252 | 9 | 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', |
|
253 | 9 | '../drawings/vmlDrawing' . $pWorksheetId . '.vml' |
|
254 | ); |
||
255 | |||
256 | 9 | $this->writeRelationship( |
|
257 | $objWriter, |
||
258 | 9 | '_comments' . $i, |
|
259 | 9 | 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', |
|
260 | 9 | '../comments' . $pWorksheetId . '.xml' |
|
261 | ); |
||
262 | } |
||
263 | |||
264 | // Write header/footer relationship? |
||
265 | 56 | $i = 1; |
|
266 | 56 | if (count($pWorksheet->getHeaderFooter()->getImages()) > 0) { |
|
267 | 1 | $this->writeRelationship( |
|
268 | $objWriter, |
||
269 | 1 | '_headerfooter_vml' . $i, |
|
270 | 1 | 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', |
|
271 | 1 | '../drawings/vmlDrawingHF' . $pWorksheetId . '.vml' |
|
272 | ); |
||
273 | } |
||
274 | |||
275 | 56 | $objWriter->endElement(); |
|
276 | |||
277 | 56 | return $objWriter->getData(); |
|
278 | } |
||
279 | |||
280 | /** |
||
281 | * Write drawing relationships to XML format. |
||
282 | * |
||
283 | * @param \PhpOffice\PhpSpreadsheet\Worksheet $pWorksheet |
||
284 | * @param int &$chartRef Chart ID |
||
285 | * @param bool $includeCharts Flag indicating if we should write charts |
||
286 | * |
||
287 | * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception |
||
288 | * |
||
289 | * @return string XML Output |
||
290 | */ |
||
291 | 22 | public function writeDrawingRelationships(\PhpOffice\PhpSpreadsheet\Worksheet $pWorksheet, &$chartRef, $includeCharts = false) |
|
346 | |||
347 | /** |
||
348 | * Write header/footer drawing relationships to XML format. |
||
349 | * |
||
350 | * @param \PhpOffice\PhpSpreadsheet\Worksheet $pWorksheet |
||
351 | * |
||
352 | * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception |
||
353 | * |
||
354 | * @return string XML Output |
||
355 | */ |
||
356 | 1 | public function writeHeaderFooterDrawingRelationships(\PhpOffice\PhpSpreadsheet\Worksheet $pWorksheet = null) |
|
388 | |||
389 | /** |
||
390 | * Write Override content type. |
||
391 | * |
||
392 | * @param \PhpOffice\PhpSpreadsheet\Shared\XMLWriter $objWriter XML Writer |
||
393 | * @param int $pId Relationship ID. rId will be prepended! |
||
394 | * @param string $pType Relationship type |
||
395 | * @param string $pTarget Relationship target |
||
396 | * @param string $pTargetMode Relationship target mode |
||
397 | * |
||
398 | * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception |
||
399 | */ |
||
400 | 56 | View Code Duplication | private function writeRelationship(\PhpOffice\PhpSpreadsheet\Shared\XMLWriter $objWriter = null, $pId = 1, $pType = '', $pTarget = '', $pTargetMode = '') |
418 | } |
||
419 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.