/** * Returns a help text descibing a given webservice. * The help text is generated via introspection from phpdoc comments on the source code. * Note that it takes 2 params insted of 1 as this helps clients sending requests: * it is hard for ezjscore to send a string param containing two colons in a row... * @param string className * @param string methodName * @return string */ static function methodHelp($params) { // we can not use ezjscServerRouter::getInstance() to see if method exists, // because it checks permissions! if (count($params) != 2) { throw new Exception(ggWebservicesServer::INVALIDPARAMSERROR . ' ' . ggWebservicesServer::INVALIDPARAMSSTRING); } $className = array_shift($params); $functionName = array_shift($params); $ini = eZINI::Instance('ezjscore.ini'); if ($ini->hasGroup('ezjscServer_' . $className)) { if ($ini->hasVariable('ezjscServer_' . $className, 'File')) { include_once $ini->variable('ezjscServer_' . $className, 'File'); } if ($ini->hasVariable('ezjscServer_' . $className, 'TemplateFunction')) { if ($ini->variable('ezjscServer_' . $className, 'TemplateFunction') === 'true') { return 'No description can be given: method implemented via a template'; } } if ($ini->hasVariable('ezjscServer_' . $className, 'Class')) { $realclassname = $ini->variable('ezjscServer_' . $className, 'Class'); } else { $realclassname = $className; } if (class_exists($realclassname)) { $reflectionClass = new ReflectionClass($realclassname); $reflectionMethod = $reflectionClass->getMethod($functionName); if (is_object($reflectionMethod) && $reflectionMethod->isStatic()) { $doc = $reflectionMethod->getDocComment(); // Clean up a bit the phpdoc format $doc = preg_replace('#^(/\\*?)#', '', $doc); // opening comment $doc = preg_replace('#(\\*/)$#', '', $doc); // end comment $doc = preg_replace('#^( *\\*)#m', '', $doc); // star on begin of line $doc = preg_replace('#(\\* *)$#m', '', $doc); // star on end of line return $doc; } } else { /// @todo log config error } } throw new Exception(ggWebservicesServer::INVALIDINTROSPECTIONERROR . ' ' . ggWebservicesServer::INVALIDINTROSPECTIONSTRING); }