getLoadedPluginsName();
foreach( $plugins as $plugin )
{
$plugin = Piwik::unprefixClass($plugin);
try {
Piwik_API_Proxy::getInstance()->registerClass('Piwik_'.$plugin.'_API');
}
catch(Exception $e){
}
}
}
/**
* 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
*
* @return string
*/
public function getAllInterfaceString( $outputExampleUrls = true, $prefixUrls = '' )
{
$str = '';
$token_auth = "&token_auth=" . Piwik::getCurrentUserTokenAuth();
$parametersToSet = array(
'idSite' => Piwik_Common::getRequestVar('idSite', 1, 'int'),
'period' => Piwik_Common::getRequestVar('period', 'day', 'string'),
'date' => Piwik_Common::getRequestVar('date', 'today', 'string')
);
foreach(Piwik_API_Proxy::getInstance()->getMetadata() as $class => $info)
{
$moduleName = Piwik_API_Proxy::getInstance()->getModuleNameFromClassName($class);
$str .= "\n
Module ".$moduleName."
";
foreach($info as $methodName => $infoMethod)
{
$params = $this->getStrListParameters($class, $methodName);
$str .= "\n" . "- $moduleName.$methodName " . $params . "";
$str .= '';
if($outputExampleUrls)
{
// we prefix all URLs with $prefixUrls
// used when we include this output in the Piwik official documentation for example
$str .= "";
$exampleUrl = $this->getExampleUrl($class, $methodName, $parametersToSet);
if($exampleUrl !== false)
{
$lastNUrls = '';
if( preg_match('/(&period)|(&date)/',$exampleUrl))
{
$exampleUrlRss1 = $prefixUrls . $this->getExampleUrl($class, $methodName, array('date' => 'last10') + $parametersToSet) ;
$exampleUrlRss2 = $prefixUrls . $this->getExampleUrl($class, $methodName, array('date' => 'last5','period' => 'week',) + $parametersToSet );
$lastNUrls = ", RSS of the last 10 days, 5 weeks,
XML of the last 10 days";
}
$exampleUrl = $prefixUrls . $exampleUrl ;
$str .= " [ Example in
XML,
PHP,
Json,
Csv,
Basic html
$lastNUrls
]";
}
else
{
$str .= " [ No example available ]";
}
$str .= "";
}
$str .= '';
$str .= "\n
";
}
}
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.
* It will not export links for methods such as deleteSite or deleteUser
*
* @param string the class
* @param methodName the method
* @return string|false when not possible
*/
protected function getExampleUrl($class, $methodName, $parametersToSet = array())
{
$knowExampleDefaultParametersValues = array(
'access' => 'view',
'userLogin' => 'test',
'passwordMd5ied' => 'passwordExample',
'email' => 'test@example.org',
'languageCode' => 'fr',
);
foreach($parametersToSet as $name => $value)
{
$knowExampleDefaultParametersValues[$name] = $value;
}
// no links for these method names
$doNotPrintExampleForTheseMethods = array(
//Sites
'deleteSite',
'addSite',
'updateSite',
'addSiteAliasUrls',
//Users
'deleteUser',
'addUser',
'updateUser',
'setUserAccess',
//Goals
'addGoal',
'updateGoal',
'deleteGoal',
);
if(in_array($methodName,$doNotPrintExampleForTheseMethods))
{
return false;
}
// we try to give an URL example to call the API
$aParameters = Piwik_API_Proxy::getInstance()->getParametersList($class, $methodName);
$moduleName = Piwik_API_Proxy::getInstance()->getModuleNameFromClassName($class);
$urlExample = '?module=API&method='.$moduleName.'.'.$methodName.'&';
foreach($aParameters as $nameVariable=> $defaultValue)
{
// if there isn't a default value for a given parameter,
// we need a 'know default value' or we can't generate the link
if($defaultValue instanceof Piwik_API_Proxy_NoDefaultValue)
{
if(isset($knowExampleDefaultParametersValues[$nameVariable]))
{
$exampleValue = $knowExampleDefaultParametersValues[$nameVariable];
$urlExample .= $nameVariable . '=' . $exampleValue . '&';
}
else
{
return false;
}
}
}
return substr($urlExample,0,-1);
}
/**
* Returns the methods $class.$name parameters (and default value if provided) as a string.
*
* @param string The class name
* @param string The method name
* @return string For example "(idSite, period, date = 'today')"
*/
protected function getStrListParameters($class, $name)
{
$aParameters = Piwik_API_Proxy::getInstance()->getParametersList($class, $name);
$asParameters = array();
foreach($aParameters as $nameVariable=> $defaultValue)
{
$str = $nameVariable;
if(!($defaultValue instanceof Piwik_API_Proxy_NoDefaultValue))
{
$str .= " = '$defaultValue'";
}
$asParameters[] = $str;
}
$sParameters = implode(", ", $asParameters);
return "($sParameters)";
}
}