Response   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 119
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 63.89%

Importance

Changes 0
Metric Value
wmc 16
lcom 1
cbo 0
dl 0
loc 119
ccs 46
cts 72
cp 0.6389
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A readReturn() 0 32 4
B readRespStd() 0 36 8
A xml2Obj() 0 15 1
A checkForFault() 0 13 3
1
<?php
2
3
namespace NFePHP\Esfinge;
4
5
use DOMDocument;
6
7
class Response
8
{
9 21
    public static function readReturn($tag = '', $xmlResp = '')
10
    {
11 21
        if (trim($xmlResp) == '') {
12
            return [
13
                'bStat' => false,
14
                'message' => 'Não retornou nenhum dado'
15
            ];
16
        }
17 21
        libxml_use_internal_errors(true);
18 21
        $dom = new DOMDocument('1.0', 'utf-8');
19 21
        $dom->loadXML($xmlResp);
20 21
        $errors = libxml_get_errors();
21 21
        libxml_clear_errors();
22 21
        if (! empty($errors)) {
23
            return [
24
                'bStat' => false,
25
                'message' => $xmlResp,
26
                'errors' => $errors
27
            ];
28
        }
29
        //foi retornado um xml continue
30 21
        $reason = self::checkForFault($dom);
31 21
        if ($reason != '') {
32
            return [
33
                'bStat' => false,
34
                'message' => $reason
35
            ];
36
        }
37
        //converte o xml em uma StdClass
38 21
        $std = self::xml2Obj($dom, $tag);
39 21
        return self::readRespStd($std);
40
    }
41
    
42
    /**
43
     * Retorna os dados do objeto
44
     * @param StdClass $std
45
     * @return array
46
     */
47 21
    protected static function readRespStd($std)
48
    {
49 21
        if ($std->return->status == 'ERRO') {
50
            return [
51
                'bStat' => false,
52
                'message' => $std->return->mensagem,
53
                'status' => $std->return->status
54
            ];
55
        }
56
        $aResp = [
57 21
            'bStat' => true,
58 21
            'message' => $std->return->mensagem,
59 21
            'status' => $std->return->status
60 14
        ];
61 21
        $dados = $std->return->dados;
62 21
        $aReg = array();
63 21
        if (property_exists($dados, 'entry')) {
64 12
            foreach ($std->return->dados->entry as $entry) {
65 12
                if (is_object($entry->value)) {
66 6
                    if (property_exists($entry->value, 'registros')) {
67
                        foreach ($entry->value->registros as $registro) {
68
                            $aReg[$registro->campo] = $registro->valor;
69
                        }
70
                    } else {
71 6
                        foreach ($entry->value as $chave => $valor) {
72 6
                            $aReg[$chave] = $valor;
73 4
                        }
74
                    }
75 6
                    $aResp[$entry->key] = $aReg;
76 4
                } else {
77 12
                    $aResp[$entry->key] = $entry->value;
78
                }
79 8
            }
80 8
        }
81 21
        return $aResp;
82
    }
83
    
84
    /**
85
     * Converte DOMDocument em uma StdClass com a tag desejada
86
     * @param DOMDocument $dom
87
     * @param string $tag
88
     * @return StdClass
89
     */
90 21
    protected static function xml2Obj($dom, $tag)
91
    {
92 21
        $node = $dom->getElementsByTagName($tag.'Response')->item(0);
93 21
        $newdoc = new DOMDocument('1.0', 'utf-8');
94 21
        $newdoc->appendChild($newdoc->importNode($node, true));
95 21
        $xml = $newdoc->saveXML();
96 21
        $newdoc = null;
0 ignored issues
show
Unused Code introduced by
$newdoc is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

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.

Loading history...
97 21
        $xml = str_replace('<?xml version="1.0" encoding="UTF-8"?>', '', $xml);
98 21
        $xml = str_replace('<?xml version="1.0" encoding="utf-8"?>', '', $xml);
99 21
        $resp = simplexml_load_string($xml, null, LIBXML_NOCDATA);
100 21
        $std = json_encode($resp);
101 21
        $std = str_replace('@attributes', 'attributes', $std);
102 21
        $std = json_decode($std);
103 21
        return $std;
104
    }
105
106
    /**
107
     * Verifica se o retorno é relativo a um ERRO SOAP
108
     *
109
     * @param DOMDocument $dom
110
     * @return string
111
     */
112
    protected static function checkForFault($dom)
113
    {
114
        $tagfault = $dom->getElementsByTagName('Fault')->item(0);
115
        if (empty($tagfault)) {
116
            return '';
117
        }
118
        $tagreason = $tagfault->getElementsByTagName('Reason')->item(0);
119
        if (! empty($tagreason)) {
120
            $reason = $tagreason->getElementsByTagName('Text')->item(0)->nodeValue;
121
            return $reason;
122
        }
123
        return 'Houve uma falha na comunicação.';
124
    }
125
}
126