Merge 5.3 branch, as that becomes the new master, and 5.1 becomes the legacy branch
[plcapi.git] / demo / client / introspect.php
1 <html>\r\r<head><title>xmlrpc</title></head>\r\r<body>\r\r<h1>Introspect demo</h1>\r\r<h2>Query server for available methods and their description</h2>\r\r<h3>The code demonstrates usage of multicall and introspection methods</h3>\r\r<?php\r\r    include("xmlrpc.inc");\r\r\r\r    function display_error($r)\r\r    {\r\r        print "An error occurred: ";\r\r        print "Code: " . $r->faultCode()\r\r            . " Reason: '" .$r->faultString()."'<br/>";\r\r    }\r\r\r\r    // 'new style' client constuctor\r\r    $c = new xmlrpc_client("http://phpxmlrpc.sourceforge.net/server.php");\r\r    print "<h3>methods available at http://" . $c->server . $c->path .  "</h3>\n";\r\r\r\r    $m = new xmlrpcmsg('system.listMethods');\r\r    $r =& $c->send($m);\r\r    if($r->faultCode())\r\r    {\r\r        display_error($r);\r\r    }\r\r    else\r\r    {\r\r        $v=$r->value();\r\r        for($i=0; $i<$v->arraysize(); $i++)\r\r        {\r\r            $mname=$v->arraymem($i);\r\r            print "<h4>" . $mname->scalarval() . "</h4>\n";\r\r\r\r            // build messages first, add params later\r\r            $m1  = new xmlrpcmsg('system.methodHelp');\r\r            $m2  = new xmlrpcmsg('system.methodSignature');\r\r            $val = new xmlrpcval($mname->scalarval(), "string");\r\r            $m1->addParam($val);\r\r            $m2->addParam($val);\r\r\r\r            // send multiple messages in one pass.\r\r            // If server does not support multicall, client will fall back to 2 separate calls\r\r            $ms = array($m1, $m2);\r\r            $rs =& $c->send($ms);\r\r\r\r            if($rs[0]->faultCode())\r\r            {\r\r                display_error($rs[0]);\r\r            }\r\r            else\r\r            {\r\r                $val=$rs[0]->value();\r\r                $txt=$val->scalarval();\r\r                if($txt != "")\r\r                {\r\r                    print "<h4>Documentation</h4><p>${txt}</p>\n";\r\r                }\r\r                else\r\r                {\r\r                    print "<p>No documentation available.</p>\n";\r\r                }\r\r            }\r\r\r\r            if($rs[1]->faultCode())\r\r            {\r\r                display_error($rs[1]);\r\r            }\r\r            else\r\r            {\r\r                print "<h4>Signature</h4><p>\n";\r\r                $val = $rs[1]->value();\r\r                if($val->kindOf()=="array")\r\r                {\r\r                    for($j=0; $j<$val->arraysize(); $j++)\r\r                    {\r\r                        $x = $val->arraymem($j);\r\r                        $ret = $x->arraymem(0);\r\r                        print "<code>" . $ret->scalarval() . " "\r\r                            . $mname->scalarval() . "(";\r\r                        if($x->arraysize()>1)\r\r                        {\r\r                            for($k=1; $k<$x->arraysize(); $k++)\r\r                            {\r\r                                $y = $x->arraymem($k);\r\r                                print $y->scalarval();\r\r                                if($k < $x->arraysize()-1)\r\r                                {\r\r                                    print ", ";\r\r                                }\r\r                            }\r\r                        }\r\r                        print ")</code><br/>\n";\r\r                    }\r\r                }\r\r                else\r\r                {\r\r                    print "Signature unknown\n";\r\r                }\r\r                print "</p>\n";\r\r            }\r\r        }\r\r    }\r\r?>\r\r</body>\r\r</html>\r\r