Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/API/DocumentationGenerator.php')
-rw-r--r--core/API/DocumentationGenerator.php203
1 files changed, 80 insertions, 123 deletions
diff --git a/core/API/DocumentationGenerator.php b/core/API/DocumentationGenerator.php
index e738c6c4c8..990d232163 100644
--- a/core/API/DocumentationGenerator.php
+++ b/core/API/DocumentationGenerator.php
@@ -43,69 +43,49 @@ class DocumentationGenerator
/**
* Returns a HTML page containing help for all the successfully loaded APIs.
- * For each module it will return a mini help with the method names, parameters to give,
- * links to get the result in Xml/Csv/etc
*
* @param bool $outputExampleUrls
- * @param string $prefixUrls
* @return string
*/
- public function getAllInterfaceString($outputExampleUrls = true, $prefixUrls = '')
+ public function getApiDocumentationAsString($outputExampleUrls = true)
{
- if (!empty($prefixUrls)) {
- $prefixUrls = 'http://demo.piwik.org/';
- }
-
- $str = $toc = '';
-
- foreach (Proxy::getInstance()->getMetadata() as $class => $info) {
- $moduleName = Proxy::getInstance()->getModuleNameFromClassName($class);
- $rClass = new ReflectionClass($class);
-
- if (!Piwik::hasUserSuperUserAccess() && $this->checkIfClassCommentContainsHideAnnotation($rClass)) {
- continue;
- }
-
- if ($this->checkIfCommentContainsInternalAnnotation($rClass)) {
- continue;
- }
-
- $toDisplay = $this->prepareModulesAndMethods($info, $moduleName);
-
- foreach ($toDisplay as $moduleName => $methods) {
- foreach ($methods as $index => $method) {
- $reflectionMethod = new \ReflectionMethod($class, $method);
- if ($this->checkIfCommentContainsInternalAnnotation($reflectionMethod)) {
- unset($toDisplay[$moduleName][$index]);
- }
- }
- if (empty($toDisplay[$moduleName])) {
- unset($toDisplay[$moduleName]);
- }
- }
+ list($toc, $str) = $this->generateDocumentation($outputExampleUrls, $prefixUrls = '', $displayTitlesAsAngularDirective = true);
- foreach ($toDisplay as $moduleName => $methods) {
- $toc .= $this->prepareModuleToDisplay($moduleName);
- $str .= $this->prepareMethodToDisplay($moduleName, $info, $methods, $class, $outputExampleUrls, $prefixUrls);
- }
- }
-
- $str = "<div piwik-content-block content-title='Quick access to APIs' id='topApiRef' name='topApiRef'>
+ return "<div piwik-content-block content-title='Quick access to APIs' id='topApiRef' name='topApiRef'>
$toc</div>
$str";
+ }
- return $str;
+ /**
+ * Used on developer.piwik.org
+ *
+ * @param bool|true $outputExampleUrls
+ * @param string $prefixUrls
+ * @return string
+ */
+ public function getApiDocumentationAsStringForDeveloperReference($outputExampleUrls = true, $prefixUrls = '')
+ {
+ list($toc, $str) = $this->generateDocumentation($outputExampleUrls, $prefixUrls, $displayTitlesAsAngularDirective = false);
+
+ return "<h2 id='topApiRef' name='topApiRef'>Quick access to APIs</h2>
+ $toc
+ $str";
}
- public function prepareModuleToDisplay($moduleName)
+ protected function prepareModuleToDisplay($moduleName)
{
return "<a href='#$moduleName'>$moduleName</a><br/>";
}
- public function prepareMethodToDisplay($moduleName, $info, $methods, $class, $outputExampleUrls, $prefixUrls)
+ protected function prepareMethodToDisplay($moduleName, $info, $methods, $class, $outputExampleUrls, $prefixUrls, $displayTitlesAsAngularDirective)
{
$str = '';
- $str .= "\n<a name='$moduleName' id='$moduleName'></a><div piwik-content-block content-title='Module " . $moduleName . "'>";
+ $str .= "\n<a name='$moduleName' id='$moduleName'></a>";
+ if($displayTitlesAsAngularDirective) {
+ $str .= "<div piwik-content-block content-title='Module " . $moduleName . "'>";
+ } else {
+ $str .= "<h2>Module " . $moduleName . "</h2>";
+ }
$info['__documentation'] = $this->checkDocumentation($info['__documentation']);
$str .= "<div class='apiDescription'> " . $info['__documentation'] . " </div>";
foreach ($methods as $methodName) {
@@ -124,10 +104,14 @@ class DocumentationGenerator
$str .= "</div>\n";
}
- return $str . "</div>";
+ if($displayTitlesAsAngularDirective) {
+ $str .= "</div>";
+ }
+
+ return $str;
}
- public function prepareModulesAndMethods($info, $moduleName)
+ protected function prepareModulesAndMethods($info, $moduleName)
{
$toDisplay = array();
@@ -141,7 +125,7 @@ class DocumentationGenerator
return $toDisplay;
}
- public function addExamples($class, $methodName, $prefixUrls)
+ protected function addExamples($class, $methodName, $prefixUrls)
{
$token_auth = "&token_auth=" . Piwik::getCurrentUserTokenAuth();
$parametersToSet = array(
@@ -150,7 +134,6 @@ class DocumentationGenerator
'date' => Common::getRequestVar('date', 'today', 'string')
);
$str = '';
-// used when we include this output in the Piwik official documentation for example
$str .= "<span class=\"example\">";
$exampleUrl = $this->getExampleUrl($class, $methodName, $parametersToSet);
if ($exampleUrl !== false) {
@@ -209,29 +192,6 @@ class DocumentationGenerator
return $moduleToCheck;
}
- private function getInterfaceString($moduleName, $class, $info, $parametersToSet, $outputExampleUrls, $prefixUrls)
- {
- $str = '';
-
- $str .= "\n<a name='$moduleName' id='$moduleName'></a><h2>Module " . $moduleName . "</h2>";
- $str .= "<div class='apiDescription'> " . $info['__documentation'] . " </div>";
- foreach ($info as $methodName => $infoMethod) {
- if ($methodName == '__documentation') {
- continue;
- }
-
- if (Proxy::getInstance()->isDeprecatedMethod($class, $methodName)) {
- continue;
- }
-
- $str .= $this->getMethodString($moduleName, $class, $parametersToSet, $outputExampleUrls, $prefixUrls, $methodName, $str);
- }
-
- $str .= '<div style="margin:15px;"><a href="#topApiRef">↑ Back to top</a></div>';
-
- return $str;
- }
-
/**
* Returns a string containing links to examples on how to call a given method on a given API
* It will export links to XML, CSV, HTML, JSON, PHP, etc.
@@ -295,14 +255,6 @@ class DocumentationGenerator
// we try to give an URL example to call the API
$aParameters = Proxy::getInstance()->getParametersList($class, $methodName);
- // Kindly force some known generic parameters to appear in the final list
- // the parameter 'format' can be set to all API methods (used in tests)
- // the parameter 'hideIdSubDatable' is used for system tests only
- // the parameter 'serialize' sets php outputs human readable, used in system tests and debug
- // the parameter 'language' sets the language for the response (eg. country names)
- // the parameter 'flat' reduces a hierarchical table to a single level by concatenating labels
- // the parameter 'include_aggregate_rows' can be set to include inner nodes in flat reports
- // the parameter 'translateColumnNames' can be set to translate metric names in csv/tsv exports
$aParameters['format'] = false;
$aParameters['hideIdSubDatable'] = false;
$aParameters['serialize'] = false;
@@ -311,15 +263,15 @@ class DocumentationGenerator
$aParameters['label'] = false;
$aParameters['flat'] = false;
$aParameters['include_aggregate_rows'] = false;
- $aParameters['filter_offset'] = false; //@review without adding this, I can not set filter_offset in $otherRequestParameters system tests
- $aParameters['filter_limit'] = false; //@review without adding this, I can not set filter_limit in $otherRequestParameters system tests
- $aParameters['filter_sort_column'] = false; //@review without adding this, I can not set filter_sort_column in $otherRequestParameters system tests
- $aParameters['filter_sort_order'] = false; //@review without adding this, I can not set filter_sort_order in $otherRequestParameters system tests
- $aParameters['filter_excludelowpop'] = false; //@review without adding this, I can not set filter_sort_order in $otherRequestParameters system tests
- $aParameters['filter_excludelowpop_value'] = false; //@review without adding this, I can not set filter_sort_order in $otherRequestParameters system tests
- $aParameters['filter_column_recursive'] = false; //@review without adding this, I can not set filter_sort_order in $otherRequestParameters system tests
- $aParameters['filter_pattern'] = false; //@review without adding this, I can not set filter_sort_order in $otherRequestParameters system tests
- $aParameters['filter_pattern_recursive'] = false; //@review without adding this, I can not set filter_sort_order in $otherRequestParameters system tests
+ $aParameters['filter_offset'] = false;
+ $aParameters['filter_limit'] = false;
+ $aParameters['filter_sort_column'] = false;
+ $aParameters['filter_sort_order'] = false;
+ $aParameters['filter_excludelowpop'] = false;
+ $aParameters['filter_excludelowpop_value'] = false;
+ $aParameters['filter_column_recursive'] = false;
+ $aParameters['filter_pattern'] = false;
+ $aParameters['filter_pattern_recursive'] = false;
$aParameters['filter_truncate'] = false;
$aParameters['hideColumns'] = false;
$aParameters['showColumns'] = false;
@@ -354,7 +306,7 @@ class DocumentationGenerator
* @param string $name The method name
* @return string For example "(idSite, period, date = 'today')"
*/
- public function getParametersString($class, $name)
+ protected function getParametersString($class, $name)
{
$aParameters = Proxy::getInstance()->getParametersList($class, $name);
$asParameters = array();
@@ -378,42 +330,47 @@ class DocumentationGenerator
return "($sParameters)";
}
- private function getMethodString($moduleName, $class, $parametersToSet, $outputExampleUrls, $prefixUrls, $methodName)
+ /**
+ * @param $outputExampleUrls
+ * @param $prefixUrls
+ * @param $displayTitlesAsAngularDirective
+ * @return array
+ */
+ protected function generateDocumentation($outputExampleUrls, $prefixUrls, $displayTitlesAsAngularDirective)
{
- $str = '';
- $token_auth = "&token_auth=" . Piwik::getCurrentUserTokenAuth();
+ $str = $toc = '';
- $params = $this->getParametersString($class, $methodName);
- $str .= "\n <div class='apiMethod'>- <b>$moduleName.$methodName </b>" . $params . "";
- $str .= '<small>';
-
- if ($outputExampleUrls) {
- // we prefix all URLs with $prefixUrls
- // used when we include this output in the Piwik official documentation for example
- $str .= "<span class=\"example\">";
- $exampleUrl = $this->getExampleUrl($class, $methodName, $parametersToSet);
- if ($exampleUrl !== false) {
- $lastNUrls = '';
- if (preg_match('/(&period)|(&date)/', $exampleUrl)) {
- $exampleUrlRss = $prefixUrls . $this->getExampleUrl($class, $methodName, array('date' => 'last10', 'period' => 'day') + $parametersToSet);
- $lastNUrls = ", RSS of the last <a target='_blank' href='$exampleUrlRss&format=rss$token_auth&translateColumnNames=1'>10 days</a>";
- }
- $exampleUrl = $prefixUrls . $exampleUrl;
- $str .= " [ Example in
- <a target='_blank' href='$exampleUrl&format=xml$token_auth'>XML</a>,
- <a target='_blank' href='$exampleUrl&format=JSON$token_auth'>Json</a>,
- <a target='_blank' href='$exampleUrl&format=Tsv$token_auth&translateColumnNames=1'>Tsv (Excel)</a>
- $lastNUrls
- ]";
- } else {
- $str .= " [ No example available ]";
+ foreach (Proxy::getInstance()->getMetadata() as $class => $info) {
+ $moduleName = Proxy::getInstance()->getModuleNameFromClassName($class);
+ $rClass = new ReflectionClass($class);
+
+ if (!Piwik::hasUserSuperUserAccess() && $this->checkIfClassCommentContainsHideAnnotation($rClass)) {
+ continue;
}
- $str .= "</span>";
- }
- $str .= '</small>';
- $str .= "</div>\n";
+ if ($this->checkIfCommentContainsInternalAnnotation($rClass)) {
+ continue;
+ }
- return $str;
+ $toDisplay = $this->prepareModulesAndMethods($info, $moduleName);
+
+ foreach ($toDisplay as $moduleName => $methods) {
+ foreach ($methods as $index => $method) {
+ $reflectionMethod = new \ReflectionMethod($class, $method);
+ if ($this->checkIfCommentContainsInternalAnnotation($reflectionMethod)) {
+ unset($toDisplay[$moduleName][$index]);
+ }
+ }
+ if (empty($toDisplay[$moduleName])) {
+ unset($toDisplay[$moduleName]);
+ }
+ }
+
+ foreach ($toDisplay as $moduleName => $methods) {
+ $toc .= $this->prepareModuleToDisplay($moduleName);
+ $str .= $this->prepareMethodToDisplay($moduleName, $info, $methods, $class, $outputExampleUrls, $prefixUrls, $displayTitlesAsAngularDirective);
+ }
+ }
+ return array($toc, $str);
}
}