Implement interface ArrayAccess in the Value class
[plcapi.git] / debugger / action.php
index 18d9295..3b01444 100644 (file)
@@ -284,11 +284,12 @@ if ($action) {
 
                     $v = $response->value();
                     if ($v->kindOf() == "array") {
-                        $max = $v->arraysize();
+                        $max = $v->count();
                         echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
                         echo "<thead>\n<tr><th>Method ($max)</th><th>Description</th></tr>\n</thead>\n<tbody>\n";
-                        for ($i = 0; $i < $max; $i++) {
-                            $rec = $v->arraymem($i);
+                        //for ($i = 0; $i < $max; $i++) {
+                        foreach($v as $i => $rec) {
+                            //$rec = $v->arraymem($i);
                             if ($i % 2) {
                                 $class = ' class="oddrow"';
                             } else {
@@ -354,7 +355,8 @@ if ($action) {
                     if ($r2->kindOf() != "array") {
                         echo "<tr><td class=\"oddrow\">Signature</td><td class=\"oddrow\">Unknown</td><td class=\"oddrow\">&nbsp;</td></tr>\n";
                     } else {
-                        for ($i = 0; $i < $r2->arraysize(); $i++) {
+                        //for ($i = 0; $i < $r2->arraysize(); $i++) {
+                        foreach($r2 as $i => $x) {
                             $payload = "";
                             $alt_payload = "";
                             if ($i + 1 % 2) {
@@ -363,26 +365,36 @@ if ($action) {
                                 $class = ' class="evenrow"';
                             }
                             echo "<tr><td$class>Signature&nbsp;" . ($i + 1) . "</td><td$class>";
-                            $x = $r2->arraymem($i);
+                            //$x = $r2->arraymem($i);
                             if ($x->kindOf() == "array") {
-                                $ret = $x->arraymem(0);
+                                //$ret = $x->arraymem(0);
+                                $ret = $x[0];
                                 echo "<code>OUT:&nbsp;" . htmlspecialchars($ret->scalarval(), ENT_COMPAT, \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding) . "<br />IN: (";
-                                if ($x->arraysize() > 1) {
-                                    for ($k = 1; $k < $x->arraysize(); $k++) {
-                                        $y = $x->arraymem($k);
+                                if ($x->count() > 1) {
+                                    foreach($x as $k => $y) {
+                                        if ($k == 0) continue;
+                                    //for ($k = 1; $k < $x->arraysize(); $k++) {
+                                        //$y = $x->arraymem($k);
                                         echo htmlspecialchars($y->scalarval(), ENT_COMPAT, \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding);
                                         if ($wstype != 1) {
                                             $type = $y->scalarval();
-                                            if ($type == 'null') {
-                                                $type = 'nil';
+                                            $payload .= '<param><value>';
+                                            switch($type) {
+                                                case 'undefined':
+                                                    break;
+                                                case 'null';
+                                                    $type = 'nil';
+                                                    // fall thru intentionally
+                                                default:
+                                                    $payload .= '<' .
+                                                        htmlspecialchars($type, ENT_COMPAT, \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding) .
+                                                        '></' . htmlspecialchars($type, ENT_COMPAT, \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding) .
+                                                        '>';
                                             }
-                                            $payload = $payload . '<param><value><' .
-                                                htmlspecialchars($type, ENT_COMPAT, \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding) .
-                                                '></' . htmlspecialchars($type, ENT_COMPAT, \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding) .
-                                                "></value></param>\n";
+                                            $payload .= "</value></param>\n";
                                         }
                                         $alt_payload .= $y->scalarval();
-                                        if ($k < $x->arraysize() - 1) {
+                                        if ($k < $x->count() - 1) {
                                             $alt_payload .= ';';
                                             echo ", ";
                                         }
@@ -463,7 +475,7 @@ if ($action) {
                 case 'wrap':
                     $r1 = $resp[0]->value();
                     $r2 = $resp[1]->value();
-                    if ($r2->kindOf() != "array" || $r2->arraysize() <= $methodsig) {
+                    if ($r2->kindOf() != "array" || $r2->count() <= $methodsig) {
                         echo "Error: signature unknown\n";
                     } else {
                         $mdesc = $r1->scalarval();
@@ -474,18 +486,17 @@ if ($action) {
                         if ($proxy == '' && $username == '' && !$requestcompression && !$responsecompression &&
                             $clientcookies == ''
                         ) {
-                            $opts = 0; // simple client copy in stub code
+                            $opts = 1; // simple client copy in stub code
                         } else {
-                            $opts = 1; // complete client copy in stub code
+                            $opts = 0; // complete client copy in stub code
                         }
                         if ($wstype == 1) {
                             $prefix = 'jsonrpc';
                         } else {
                             $prefix = 'xmlrpc';
                         }
-                        //$code = wrap_xmlrpc_method($client, $method, $methodsig, 0, $proto, '', $opts);
                         $wrapper = new PhpXmlRpc\Wrapper();
-                        $code = $wrapper->build_remote_method_wrapper_code($client, $method, str_replace('.', '_', $prefix . '_' . $method), $msig, $mdesc, $timeout, $proto, $opts, $prefix);
+                        $code = $wrapper->buildWrapMethodSource($client, $method, array('timeout' => $timeout, 'protocol' => $proto, 'simple_client_copy' => $opts, 'prefix' => $prefix), str_replace('.', '_', $prefix . '_' . $method), $msig, $mdesc);
                         //if ($code)
                         //{
                         echo "<div id=\"phpcode\">\n";
@@ -537,6 +548,7 @@ if ($action) {
 
     <h3>Changelog</h3>
     <ul>
+        <li>2015-05-30: fix problems with generating method payloads for NIL and Undefined parameters</li>
         <li>2015-04-19: fix problems with LATIN-1 characters in payload</li>
         <li>2007-02-20: add visual editor for method payload; allow strings, bools as jsonrpc msg id</li>
         <li>2006-06-26: support building php code stub for calling remote methods</li>