/** * @return string */ private function getInputs() { global $wgEnableWriteAPI; $apiMain = new ApiMain(new FauxRequest(array()), $wgEnableWriteAPI); $this->apiQuery = new ApiQuery($apiMain, 'query'); $formats = $apiMain->getModuleManager()->getNamesWithClasses('format'); $formats = array_filter(array_keys($formats), 'SpecialApiSandbox::filterFormats'); sort($formats); $formatOptions = array_combine($formats, $formats); $modules = array_keys($apiMain->getModuleManager()->getNamesWithClasses('action')); sort($modules); $key = array_search('query', $modules); if ($key !== false) { array_splice($modules, $key, 1); array_unshift($modules, 'query'); } $moduleOptions = array_combine($modules, $modules); $queryModules = array_merge($this->getQueryModules('list'), $this->getQueryModules('prop'), $this->getQueryModules('meta')); $format = $this->msg('apisb-label-format')->escaped(); $action = $this->msg('apisb-label-action')->escaped(); $doc = $this->msg('apisb-label-doc')->escaped(); $s = ' <table class="api-sandbox-options"> <tbody> <tr> <th><label for="api-sandbox-format">' . $format . '</label></th> <th><label for="api-sandbox-action">' . $action . '</label></th> <th class="api-sandbox-docs-col">' . $doc . '</th> </tr> <tr> <td>' . $this->getSelect('format', $formatOptions, 'json') . '</td> <td> ' . $this->getSelect('action', $moduleOptions) . ' <div id="api-sandbox-query-row" style="display: none;"> ' . $this->getSelect('query', $queryModules) . ' </div> </td> <td class="api-sandbox-docs-col"> <div id="api-sandbox-buttons"></div> <div dir="ltr" id="api-sandbox-help"></div> <div id="api-sandbox-examples" style="display: none;" dir="ltr" class="mw-content-ltr"></div> </td> </tr> </tbody> </table> '; $s .= '<div id="api-sandbox-main-inputs"></div>' . '<div id="api-sandbox-query-inputs" style="display: none"></div>' . $this->openFieldset('generic-parameters') . '<div id="api-sandbox-generic-inputs" class="mw-collapsible mw-collapsed"></div></fieldset>' . $this->openFieldset('generator-parameters', array('style' => 'display: none;')) . '<div id="api-sandbox-generator-inputs"></div></fieldset> '; return $s; }
/** * Get the formatter output for the given input data * @param array $params Query parameters * @param array $data Data to encode * @param string $class Printer class to use instead of the normal one * @return string * @throws Exception */ protected function encodeData(array $params, array $data, $class = null) { $context = new RequestContext(); $context->setRequest(new FauxRequest($params, true)); $main = new ApiMain($context); if ($class !== null) { $main->getModuleManager()->addModule($this->printerName, 'format', $class); } $result = $main->getResult(); $result->addArrayType(null, 'default'); foreach ($data as $k => $v) { $result->addValue(null, $k, $v); } $printer = $main->createPrinterByName($this->printerName); $printer->initPrinter(); $printer->execute(); ob_start(); try { $printer->closePrinter(); return ob_get_clean(); } catch (Exception $ex) { ob_end_clean(); throw $ex; } }
/** * Test if all classes in the main module manager exists */ public function testClassNamesInModuleManager() { global $wgAutoloadLocalClasses, $wgAutoloadClasses; // wgAutoloadLocalClasses has precedence, just like in includes/AutoLoader.php $classes = $wgAutoloadLocalClasses + $wgAutoloadClasses; $api = new ApiMain(new FauxRequest(array('action' => 'query', 'meta' => 'siteinfo'))); $modules = $api->getModuleManager()->getNamesWithClasses(); foreach ($modules as $name => $class) { $this->assertArrayHasKey($class, $classes, 'Class ' . $class . ' for api module ' . $name . ' not in autoloader (with exact case)'); } }