1: <?php
2: /**
3: * This file is part of GameQ.
4: *
5: * GameQ is free software; you can redistribute it and/or modify
6: * it under the terms of the GNU Lesser General Public License as published by
7: * the Free Software Foundation; either version 3 of the License, or
8: * (at your option) any later version.
9: *
10: * GameQ is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: * GNU Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public License
16: * along with this program. If not, see <http://www.gnu.org/licenses/>.
17: */
18:
19: namespace GameQ;
20:
21: /**
22: * Provide an interface for easy storage of a parsed server response
23: *
24: * @author Aidan Lister <aidan@php.net>
25: * @author Tom Buskens <t.buskens@deviation.nl>
26: */
27: class Result
28: {
29: /**
30: * Formatted server response
31: *
32: * @var array
33: */
34: protected $result = [];
35:
36: /**
37: * Adds variable to results
38: *
39: * @param string $name Variable name
40: * @param string|array $value Variable value
41: */
42: public function add($name, $value)
43: {
44: $this->result[$name] = $value;
45: }
46:
47: /**
48: * Adds player variable to output
49: *
50: * @param string $name Variable name
51: * @param string $value Variable value
52: */
53: public function addPlayer($name, $value)
54: {
55: $this->addSub('players', $name, $value);
56: }
57:
58: /**
59: * Adds player variable to output
60: *
61: * @param string $name Variable name
62: * @param string $value Variable value
63: */
64: public function addTeam($name, $value)
65: {
66: $this->addSub('teams', $name, $value);
67: }
68:
69: /**
70: * Add a variable to a category
71: *
72: * @param $sub string The category
73: * @param $key string The variable name
74: * @param $value string The variable value
75: */
76: public function addSub($sub, $key, $value)
77: {
78: // Nothing of this type yet, set an empty array
79: if (!isset($this->result[$sub]) or !is_array($this->result[$sub])) {
80: $this->result[$sub] = [];
81: }
82:
83: // Find the first entry that doesn't have this variable
84: $found = false;
85: $count = count($this->result[$sub]);
86: for ($i = 0; $i != $count; $i++) {
87: if (!isset($this->result[$sub][$i][$key])) {
88: $this->result[$sub][$i][$key] = $value;
89: $found = true;
90: break;
91: }
92: }
93:
94: // Not found, create a new entry
95: if (!$found) {
96: $this->result[$sub][][$key] = $value;
97: }
98:
99: unset($count);
100: }
101:
102: /**
103: * Return all stored results
104: *
105: * @return array All results
106: */
107: public function fetch()
108: {
109: return $this->result;
110: }
111:
112: /**
113: * Return a single variable
114: *
115: * @param string $var The variable name
116: *
117: * @return mixed The variable value
118: */
119: public function get($var)
120: {
121: return isset($this->result[$var]) ? $this->result[$var] : null;
122: }
123: }
124: