Passed
Push — master ( b101db...a45b24 )
by Robbie
05:17
created

DiffTransformation::transform()   B

Complexity

Conditions 8
Paths 5

Size

Total Lines 36
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 20
nc 5
nop 1
dl 0
loc 36
rs 8.4444
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\VersionedAdmin\Forms;
4
5
use BadMethodCallException;
6
use SilverStripe\Forms\CompositeField;
7
use SilverStripe\Forms\FormField;
8
use SilverStripe\Forms\FormTransformation;
9
use SilverStripe\Forms\LiteralField;
10
11
class DiffTransformation extends FormTransformation
12
{
13
    public function transform(FormField $field)
14
    {
15
        if ($field->isComposite()) {
16
            /** @var CompositeField $field */
17
            // There isn't an interface for child fields so this is unfortunately just a best guess.
18
            $newKids = $field->getChildren()->transform($this);
19
            $newField = clone $field;
20
            $newField->setChildren($newKids);
21
            return $newField;
22
        }
23
24
        if (!$field->hasData()) {
25
            // No data; no value.
26
            return clone $field;
27
        }
28
29
        $name = $field->getName();
30
31
        // Do not compare generated security data
32
        if (($form = $field->getForm())
33
            && ($securityToken = $form->getSecurityToken())
34
            && ($securityTokenName = $securityToken->getName())
35
            && $securityTokenName === $name
36
        ) {
37
            return LiteralField::create($name, '');
38
        }
39
40
        try {
41
            // First check if a field implements performDiffTransformation()
42
            $diffField = parent::transform($field);
43
        } catch (BadMethodCallException $e) {
44
            $diffField = $field->castedCopy(DiffField::class);
45
            $diffField->addExtraClass("history-viewer__version-detail-diff");
46
            $diffField->setComparisonField($field);
47
        }
48
        return $diffField;
49
    }
50
}
51