Passed
Pull Request — master (#39)
by Burhan
01:51
created

FieldSorter::sort()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 6
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 10
ccs 0
cts 5
cp 0
crap 6
rs 10
1
<?php
2
3
namespace Graze\CiffRenderer\Parser;
4
5
use SimpleXMLElement;
6
7
class FieldSorter
8
{
9
    /**
10
     * @var int
11
     */
12
    protected $fieldTypeToOrder = [
13
        FieldType::FIELD_STATIC_GRAPHIC    => 1,
14
        FieldType::FIELD_FIXED_TEXT        => 2,
15
        FieldType::FIELD_COMPLEX_TEXT      => 3,
16
        FieldType::FIELD_BARCODE           => 4,
17
        FieldType::FIELD_DATE              => 5,
18
        FieldType::FIELD_OFFSET_DATE       => 6,
19
        FieldType::FIELD_MERGE_FIELD       => 7,
20
        FieldType::FIELD_GRAPHIC_PRIMITIVE => 8,
21
    ];
22
23
    /**
24
     * @param SimpleXMLElement[] $fields
25
     */
26
    public function sort(array &$fields)
27
    {
28
        usort($fields, function (SimpleXMLElement $field1, SimpleXMLElement $field2) {
29
            $typeComparison = $this->fieldTypeToOrder[(string) $field1->FldType] - $this->fieldTypeToOrder[(string) $field2->FldType];
30
31
            if ($typeComparison === 0) {
32
                // Same field type, so order by field name
33
                return strcmp((string)$field1->attributes()['Name'], (string)$field2->attributes()['Name']);
34
            } else {
35
                return $typeComparison;
36
            }
37
        });
38
    }
39
}
40