1: <?php
2: 3: 4: 5: 6: 7: 8:
9:
10: error_reporting(0);
11:
12: if (!XC_CLASS_EXISTS('XCube_AbstractServiceClient')) exit();
13:
14: class ShadePlus_SoapClient extends XCube_AbstractServiceClient
15: {
16: var $mClient = null;
17:
18: function ShadePlus_SoapClient(&$service)
19: {
20: parent::XCube_AbstractServiceClient($service);
21: $this->mClient =new soap_client($service, true);
22: $this->mClient->decodeUTF8(false);
23: }
24:
25: function call($operation, $args)
26: {
27: $root =& XCube_Root::getSingleton();
28:
29: $args = $this->_encodeUTF8($args, $root->mLanguageManager);
30:
31: $retValue = $this->mClient->call($operation, $args);
32:
33: if (is_array($retValue)) {
34: $retValue = $this->_decodeUTF8($retValue, $root->mLanguageManager);
35: }
36: else {
37: $retValue = $root->mLanguageManager->decodeUTF8($retValue);
38: }
39:
40: return $retValue;
41: }
42:
43: function _encodeUTF8($arr, &$languageManager)
44: {
45: foreach (array_keys($arr) as $key) {
46: if (is_array($arr[$key])) {
47: $arr[$key] = $this->_encodeUTF8($arr[$key], $languageManager);
48: }
49: else {
50: $arr[$key] = $languageManager->encodeUTF8($arr[$key]);
51: }
52: }
53:
54: return $arr;
55: }
56:
57: function _decodeUTF8($arr, &$languageManager)
58: {
59: foreach (array_keys($arr) as $key) {
60: if (is_array($arr[$key])) {
61: $arr[$key] = $this->_decodeUTF8($arr[$key], $languageManager);
62: }
63: else {
64: $arr[$key] = $languageManager->decodeUTF8($arr[$key]);
65: }
66: }
67:
68: return $arr;
69: }
70: }
71:
72: ?>
73: