Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
97.30% covered (success)
97.30%
36 / 37
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ResponseParser
97.30% covered (success)
97.30%
36 / 37
50.00% covered (danger)
50.00%
1 / 2
16
0.00% covered (danger)
0.00%
0 / 1
 parse
95.45% covered (success)
95.45%
21 / 22
0.00% covered (danger)
0.00%
0 / 1
8
 serialize
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
8
1<?php
2
3#declare(strict_types=1);
4
5/**
6 * CNIC\HEXONET
7 * Copyright © CentralNic Group PLC
8 */
9
10namespace CNIC\HEXONET;
11
12/**
13 * HEXONET ResponseParser
14 *
15 * @package CNIC\HEXONET
16 */
17final class ResponseParser
18{
19    /**
20     * Method to parse plain API response into js object
21     * @param string $raw API plain response
22     * @return array API response as hash
23     */
24    public static function parse($raw)
25    {
26        $hash = [];
27        $tmp = preg_replace("/\r\n/", "\n", $raw);
28        if (is_null($tmp)) {
29            $tmp = $raw;
30        }
31        $rlist = explode("\n", $tmp);
32        foreach ($rlist as $item) {
33            if (preg_match("/^([^\=]*[^\t\= ])[\t ]*=[\t ]*(.*)$/", $item, $m)) {
34                $attr = $m[1];
35                $value = $m[2];
36                $value = preg_replace("/[\t ]*$/", "", $value);
37                if (preg_match("/^property\[([^\]]*)\]/i", $attr, $m)) {
38                    if (!array_key_exists("PROPERTY", $hash)) {
39                        $hash["PROPERTY"] = [];
40                    }
41                    $prop = strtoupper($m[1]);
42                    $tmp = preg_replace("/\s/", "", $prop);
43                    if (!is_null($tmp)) {
44                        $prop = $tmp;
45                    }
46                    if (array_key_exists($prop, $hash["PROPERTY"])) {
47                        $hash["PROPERTY"][$prop][] = $value;
48                    } else {
49                        $hash["PROPERTY"][$prop] = [$value];
50                    }
51                } else {
52                    $hash[strtoupper($attr)] = $value;
53                }
54            }
55        }
56        return $hash;
57    }
58
59    /**
60     * Serialize given parsed response hash back to plain text
61     * @param array $r API response as hash
62     * @return string plain API response
63     */
64    public static function serialize($r)
65    {
66        $plain = "[RESPONSE]";
67        if (array_key_exists("PROPERTY", $r)) {
68            foreach ($r["PROPERTY"] as $key => $vals) {
69                foreach ($vals as $idx => $val) {
70                    $plain .= "\r\nPROPERTY[" . $key . "][" . $idx . "]=" . $val;
71                }
72            }
73        }
74        if (array_key_exists("CODE", $r)) {
75            $plain .= "\r\nCODE=" . $r["CODE"];
76        }
77        if (array_key_exists("DESCRIPTION", $r)) {
78            $plain .= "\r\nDESCRIPTION=" . $r["DESCRIPTION"];
79        }
80        if (array_key_exists("QUEUETIME", $r)) {
81            $plain .= "\r\nQUEUETIME=" . $r["QUEUETIME"];
82        }
83        if (array_key_exists("RUNTIME", $r)) {
84            $plain .= "\r\nRUNTIME=" . $r["RUNTIME"];
85        }
86        $plain .= "\r\nEOF\r\n";
87        return $plain;
88    }
89}