SoapAddressingEventSubscriber   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Test Coverage

Coverage 92.86%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 9
eloc 31
c 1
b 0
f 0
dl 0
loc 73
ccs 26
cts 28
cp 0.9286
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getSubscribedEvents() 0 7 1
A __construct() 0 7 3
A addAddressing() 0 33 5
1
<?php
2
0 ignored issues
show
Coding Style introduced by
Missing file doc comment
Loading history...
3
namespace DMT\Insolvency\Soap\Serializer;
4
5
use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
6
use JMS\Serializer\EventDispatcher\ObjectEvent;
7
use JMS\Serializer\SerializationContext;
8
use JMS\Serializer\XmlSerializationVisitor;
9
10
/**
11
 * Class SoapAddressingEventSubscriber
12
 */
0 ignored issues
show
Coding Style introduced by
Missing @category tag in class comment
Loading history...
Coding Style introduced by
Missing @package tag in class comment
Loading history...
Coding Style introduced by
Missing @author tag in class comment
Loading history...
Coding Style introduced by
Missing @license tag in class comment
Loading history...
Coding Style introduced by
Missing @link tag in class comment
Loading history...
13
class SoapAddressingEventSubscriber implements EventSubscriberInterface
14
{
15
    /** @var string $action */
0 ignored issues
show
Coding Style introduced by
The open comment tag must be the only content on the line
Loading history...
Coding Style introduced by
Missing short description in doc comment
Loading history...
Coding Style introduced by
The close comment tag must be the only content on the line
Loading history...
16
    protected $action = 'http://www.rechtspraak.nl/namespaces/cir01/%s';
17
18
    /** @var string $endPoint */
0 ignored issues
show
Coding Style introduced by
The open comment tag must be the only content on the line
Loading history...
Coding Style introduced by
Missing short description in doc comment
Loading history...
Coding Style introduced by
The close comment tag must be the only content on the line
Loading history...
19
    protected $endPoint = 'https://webservice.rechtspraak.nl/cir.asmx';
20
21
    /**
22
     * SoapAddressingEventSubscriber constructor.
23
     * @param string|null $action
0 ignored issues
show
Coding Style introduced by
There must be exactly one blank line before the tags in a doc comment
Loading history...
Coding Style introduced by
Missing parameter comment
Loading history...
24
     * @param string|null $endPoint
0 ignored issues
show
Coding Style introduced by
Missing parameter comment
Loading history...
25
     */
26 13
    public function __construct(string $action = null, string $endPoint = null)
27
    {
28 13
        if ($action) {
29
            $this->action = $action;
30
        }
31 13
        if ($endPoint) {
32
            $this->endPoint = $endPoint;
33
        }
34 13
    }
35
36
    /**
0 ignored issues
show
Coding Style introduced by
Missing short description in doc comment
Loading history...
37
     * @return array
38
     */
39 12
    public static function getSubscribedEvents()
40
    {
41
        return [
42
            [
43 12
                'event' => 'serializer.post_serialize',
44
                'method' => 'addAddressing',
45
                'format' => 'soap',
46
            ]
47
        ];
48
    }
49
50
    /**
0 ignored issues
show
Coding Style introduced by
Missing short description in doc comment
Loading history...
51
     * @param ObjectEvent $event
0 ignored issues
show
Coding Style introduced by
Missing parameter comment
Loading history...
52
     */
0 ignored issues
show
Coding Style introduced by
Missing @return tag in function comment
Loading history...
53 12
    public function addAddressing(ObjectEvent $event)
54
    {
55
        /** @var SerializationContext $context */
0 ignored issues
show
Coding Style introduced by
The open comment tag must be the only content on the line
Loading history...
Coding Style introduced by
Missing short description in doc comment
Loading history...
Coding Style introduced by
The close comment tag must be the only content on the line
Loading history...
56 12
        $context = $event->getContext();
57
        /** @var XmlSerializationVisitor $visitor */
0 ignored issues
show
Coding Style introduced by
The open comment tag must be the only content on the line
Loading history...
Coding Style introduced by
Missing short description in doc comment
Loading history...
Coding Style introduced by
The close comment tag must be the only content on the line
Loading history...
58 12
        $visitor = $event->getVisitor();
59
60 12
        $document = $visitor->getDocument();
61 12
        $xpath = new \DOMXPath($document);
62 12
        $query = '//*[local-name()="Action" and namespace-uri()="http://schemas.xmlsoap.org/ws/2004/08/addressing"]';
63 12
        $namespace = $document->lookupNamespaceUri('soap');
64
65
        if (
0 ignored issues
show
Coding Style introduced by
First condition of a multi-line IF statement must directly follow the opening parenthesis
Loading history...
66 12
            $context->getDepth() > 0
0 ignored issues
show
Coding Style introduced by
Each line in a multi-line IF statement must begin with a boolean operator
Loading history...
67 12
            || $document->getElementsByTagNameNS($namespace, 'Body')->length == 0
68 12
            || $document->getElementsByTagNameNS($namespace, 'Header')->length == 0
69 12
            || $xpath->query($query)->length > 0
70
        ) {
71 11
            return;
72
        }
73
74 12
        $action = sprintf(
75 12
            $this->action,
76 12
            $document->getElementsByTagNameNS($namespace, 'Body')[0]->firstChild->localName
77
        );
78
79
        /** @var \DOMElement $element */
0 ignored issues
show
Coding Style introduced by
The open comment tag must be the only content on the line
Loading history...
Coding Style introduced by
Missing short description in doc comment
Loading history...
Coding Style introduced by
The close comment tag must be the only content on the line
Loading history...
80 12
        $element = $document->getElementsByTagNameNS($namespace, 'Header')[0];
81 12
        $element->appendChild(
82 12
            $document->createElementNS('http://schemas.xmlsoap.org/ws/2004/08/addressing', 'Action', $action)
83
        );
84 12
        $element->appendChild(
85 12
            $document->createElementNS('http://schemas.xmlsoap.org/ws/2004/08/addressing', 'To', $this->endPoint)
86
        );
87
    }
88
}