43 require_once
'XML/RPC2/Exception.php';
160 public function __construct(ReflectionMethod $method, $defaultPrefix)
163 $docs = $method->getDocComment();
167 $docs = explode(
"\n", $docs);
169 $parameters = array();
174 $prefix = $defaultPrefix;
177 $paramDocs = array();
178 foreach ($docs as $i => $doc) {
179 $doc = trim($doc,
" \r\t/*");
180 if (strlen($doc) && strpos($doc,
'@') !== 0) {
187 if (strpos($doc,
'@xmlrpc.hidden') === 0) {
190 if ((strpos($doc,
'@xmlrpc.prefix') === 0) && preg_match(
'/@xmlrpc.prefix( )*(.*)/', $doc, $matches)) {
191 $prefix = $matches[2];
193 if ((strpos($doc,
'@xmlrpc.methodname') === 0) && preg_match(
'/@xmlrpc.methodname( )*(.*)/', $doc, $matches)) {
194 $methodname = $matches[2];
196 if (strpos($doc,
'@param') === 0) {
200 if (strpos($doc,
'@return') === 0) {
201 $param = preg_split(
"/\s+/", $doc);
202 if (isset($param[1])) {
208 $this->_numberOfRequiredParameters = $method->getNumberOfRequiredParameters();
210 foreach ($method->getParameters() as $parameterIndex => $parameter) {
212 $newParameter = array(
'type' =>
'mixed');
215 if (array_key_exists($parameterIndex, $paramDocs) &&
216 preg_match(
'/@param\s+(\S+)(\s+(.+))/', $paramDocs[$parameterIndex], $matches)) {
217 if (strpos($matches[1],
'|')) {
222 $tmp =
'$' . $parameter->getName() .
' ';
223 if (strpos($matches[2],
'$' . $tmp) === 0) {
224 $newParameter[
'doc'] = $matches[2];
228 $newParameter[
'doc'] = substr($matches[2], strlen($tmp));
232 $parameters[$parameter->getName()] = $newParameter;
235 if (is_null($methodname)) {
236 $methodname = $prefix . $method->getName();
239 $this->_internalMethod = $method->getName();
240 $this->_parameters = $parameters;
241 $this->_returns = $returns;
242 $this->_help = $shortdesc;
243 $this->_name = $methodname;
244 $this->_hidden = $hidden;
262 if ($methodName != $this->_name)
return false;
263 if (count($callParams) < $this->_numberOfRequiredParameters)
return false;
264 if (count($callParams) > $this->_parameters)
return false;
266 foreach($this->_parameters as $param) {
268 if ($paramIndex <= $this->_numberOfRequiredParameters) {
271 if ((!($param[
'type'] ==
'mixed')) and ($param[
'type'] != $callParamType)) {
291 $result =
"<span class=\"type\">($returnType)</span> ";
292 $result .=
"<span class=\"name\">$name</span>";
293 $result .=
"<span class=\"other\">(</span>";
296 while (list($name, $parameter) = each($this->_parameters)) {
298 if ($nbr == $this->_numberOfRequiredParameters + 1) {
299 $result .=
"<span class=\"other\"> [ </span>";
306 $type = $parameter[
'type'];
307 $result .=
"<span class=\"paratype\">($type) </span>";
308 $result .=
"<span class=\"paraname\">$name</span>";
310 reset($this->_parameters);
311 if ($nbr > $this->_numberOfRequiredParameters) {
312 $result .=
"<span class=\"other\"> ] </span>";
314 $result .=
"<span class=\"other\">)</span>";
328 $help = nl2br(htmlentities($this->_help));
329 print
" <h3><a name=\"$id\">$signature</a></h3>\n";
330 print
" <p><b>Description :</b></p>\n";
331 print
" <div class=\"description\">\n";
334 if (count($this->_parameters)>0) {
335 print
" <p><b>Parameters : </b></p>\n";
336 if (count($this->_parameters)>0) {
338 print
" <tr><td><b>Type</b></td><td><b>Name</b></td><td><b>Documentation</b></td></tr>\n";
339 while (list($name, $parameter) = each($this->_parameters)) {
340 $type = $parameter[
'type'];
341 $doc = htmlentities($parameter[
'doc']);
342 print
" <tr><td>$type</td><td>$name</td><td>$doc</td></tr>\n";
344 reset($this->_parameters);
360 $tmp = strtolower($type);
361 $convertArray = array(
364 'integer' =>
'integer',
365 'string' =>
'string',
369 'boolean' =>
'boolean',
372 'double' =>
'double',
376 'structure' =>
'array',
377 'datetime' =>
'mixed',
378 'datetime.iso8601' =>
'mixed',
379 'iso8601' =>
'mixed',
382 if (isset($convertArray[$tmp])) {
383 return $convertArray[$tmp];