Beispiel #1
0
 function test_API()
 {
     $dataTable = Piwik_SEO_API::getInstance()->getRank('http://forum.piwik.org/');
     $renderer = Piwik_DataTable_Renderer::factory('php');
     $renderer->setSerialize(false);
     $ranks = $renderer->render($dataTable);
     foreach ($ranks as $rank) {
         $this->assertTrue(!empty($rank['rank']), $rank['id'] . ' expected non-zero rank, got [' . $rank['rank'] . ']');
     }
 }
Beispiel #2
0
 /**
  * tell us when the API is broken
  *
  * @group Plugins
  * @group SEO
  */
 public function test_API()
 {
     $dataTable = Piwik_SEO_API::getInstance()->getRank('http://www.microsoft.com/');
     $renderer = Piwik_DataTable_Renderer::factory('php');
     $renderer->setSerialize(false);
     $ranks = $renderer->render($dataTable);
     foreach ($ranks as $rank) {
         $this->assertNotEmpty($rank['rank'], $rank['id'] . ' expected non-zero rank, got [' . $rank['rank'] . ']');
     }
 }
Beispiel #3
0
 function test_allGetMethods()
 {
     // Executes all API methods get* and check for output
     // In this plugin, output is static and manually set in the API.php, but in other scripts,
     // one could generate fake inputs, and check that ouputs are processed as expected
     // @see tests/integration/ for more info
     $this->setApiToCall('ExampleAPI');
     // Ignore the getPiwikVersion call which would otherwise fail at every new release
     $this->setApiNotToCall('ExampleAPI.getPiwikVersion');
     $renderers = Piwik_DataTable_Renderer::getRenderers();
     $this->callGetApiCompareOutput(__FUNCTION__, $renderers);
 }
Beispiel #4
0
 function getRank()
 {
     $idSite = Piwik_Common::getRequestVar('idSite');
     $site = new Piwik_Site($idSite);
     $url = urldecode(Piwik_Common::getRequestVar('url', '', 'string'));
     if (!empty($url) && strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) {
         $url = 'http://' . $url;
     }
     if (empty($url) || !Piwik_Common::isLookLikeUrl($url)) {
         $url = $site->getMainUrl();
     }
     $dataTable = Piwik_SEO_API::getInstance()->getRank($url);
     $view = Piwik_View::factory('index');
     $view->urlToRank = Piwik_SEO_RankChecker::extractDomainFromUrl($url);
     $renderer = Piwik_DataTable_Renderer::factory('php');
     $renderer->setSerialize(false);
     $view->ranks = $renderer->render($dataTable);
     echo $view->render();
 }
	function getRank()
	{
		$idSite = Piwik_Common::getRequestVar('idSite'); 
		$site = new Piwik_Site($idSite);

		$url = urldecode(Piwik_Common::getRequestVar('url', '', 'string'));

		if(empty($url) || @parse_url($url) === false)
		{
			$url = $site->getMainUrl();
		}

		$dataTable = Piwik_SEO_API::getInstance()->getRank($url);
		
		$view = Piwik_View::factory('index');
		$view->urlToRank = $url;
		
		$renderer = Piwik_DataTable_Renderer::factory('php');
		$renderer->setSerialize(false);
		$view->ranks = $renderer->render($dataTable);
		echo $view->render();
	}
	/**
	 * Render a multidimensional array to XML
	 *
	 * @static
	 * @param $array can contain scalar, arrays, Piwik_DataTable and Piwik_DataTable_Array
	 * @param int $level
	 * @return string
	 */
	public static function convertMultiDimensionalArrayToXml($array, $level = 0)
	{ 
		$xml=""; 
		foreach ($array as $key=>$value)
		{
			if(is_numeric($key))
			{
				$key = "row";
			}

			$key = str_replace(' ', '_', $key);
			$marginLeft = str_repeat("\t", $level + 1);

			switch(true)
			{
				// Case dimension is a PHP array
				case (is_array($value)):

					if(empty($value))
					{
						$xml .= $marginLeft . "<$key/>\n";
					}
					else
					{
						$xml.=	$marginLeft .
							"<$key>\n".
								self::convertMultiDimensionalArrayToXml($value, $level + 1).
								"\n". $marginLeft .
							"</$key>\n";
					}
					break;

				// Case dimension is a Piwik_DataTable_Array or a Piwik_DataTable
				case ($value instanceof Piwik_DataTable_Array || $value instanceof Piwik_DataTable):

					if($value->getRowsCount() == 0)
					{
						$xml .= $marginLeft . "<$key/>\n";
					}
					else
					{
						$XMLRenderer = new Piwik_DataTable_Renderer_Xml();
						$XMLRenderer->setTable($value);
						$renderedReport = $XMLRenderer->render();

						$renderedReport = preg_replace("/<\?xml.*\?>\n/", "", $renderedReport);
						$markupToRemove = $value instanceof Piwik_DataTable_Array ? "results" : "result";
						$renderedReport = preg_replace("/\n?<\/?". $markupToRemove .">\n?/", "", $renderedReport);

						// Add one level of margin to each line
						$renderedReport = $marginLeft . preg_replace("/\n/", "\n" . $marginLeft, $renderedReport);

						$xml.=	$marginLeft . "<$key>\n";
						$xml.=	$renderedReport;
						$xml.=	"\n" . $marginLeft . "</$key>\n";
					}

					break;

				// Case scalar
				default:

					$xml.= $marginLeft . "<$key>".Piwik_DataTable_Renderer::formatValueXml($value)."</$key>\n";
					break;
			}
		} 
		return $xml; 
	}
Beispiel #7
0
 /**
  * Apply the specified renderer to the DataTable
  * 
  * @param Piwik_DataTable
  * @return string
  */
 protected function getRenderedDataTable($dataTable)
 {
     $format = strtolower($this->outputFormat);
     // if asked for original dataStructure
     if ($format == 'original') {
         // if the original dataStructure is a simpleDataTable
         // and has only one column, we return the value
         if ($dataTable instanceof Piwik_DataTable_Simple) {
             $columns = $dataTable->getFirstRow()->getColumns();
             if (count($columns) == 1) {
                 $values = array_values($columns);
                 return $values[0];
             }
         }
         // by default "original" data is not serialized
         if ($this->caseRendererPHPSerialize($defaultSerialize = 0)) {
             $dataTable = serialize($dataTable);
         }
         return $dataTable;
     }
     $renderer = Piwik_DataTable_Renderer::factory($format);
     $renderer->setTable($dataTable);
     $renderer->setRenderSubTables(Piwik_Common::getRequestVar('expanded', false, 'int', $this->request));
     if ($format == 'php') {
         $renderer->setSerialize($this->caseRendererPHPSerialize());
         $renderer->setPrettyDisplay(Piwik_Common::getRequestVar('prettyDisplay', false, 'int', $this->request));
     } else {
         if ($format == 'html') {
             $renderer->setTableId($this->request['method']);
         }
     }
     return $renderer->render();
 }
Beispiel #8
0
 /**
  * Returns friendly php array from the Piwik_DataTable
  * @see Piwik_DataTable_Renderer_Php
  * @return array
  */
 protected function getPHPArrayFromDataTable()
 {
     $renderer = Piwik_DataTable_Renderer::factory('php');
     $renderer->setTable($this->dataTable);
     $renderer->setSerialize(false);
     // we get the php array from the datatable but conserving the original datatable format,
     // ie. rows 'columns', 'metadata' and 'idsubdatatable'
     $phpArray = $renderer->originalRender();
     return $phpArray;
 }
Beispiel #9
0
 function __construct($table = null)
 {
     parent::__construct($table);
 }
Beispiel #10
0
 function __construct($table = null)
 {
     parent::__construct($table);
     $this->setPrefixRow('#');
 }
Beispiel #11
0
 /**
  * Apply the specified renderer to the DataTable
  * 
  * @param Piwik_DataTable
  * @return string
  */
 protected function getRenderedDataTable($dataTable)
 {
     // Renderer
     $format = Piwik_Common::getRequestVar('format', 'php', 'string', $this->requestToUse);
     $format = strtolower($format);
     // if asked for original dataStructure
     if ($format == 'original') {
         // if the original dataStructure is a simpleDataTable and has only one row, we return the value
         if ($dataTable instanceof Piwik_DataTable_Simple && $dataTable->getRowsCount() == 1) {
             return $dataTable->getRowFromId(0)->getColumn('value');
         }
         // the original data structure can be asked as serialized.
         // but by default it's not serialized
         if ($this->caseRendererPHPSerialize($defaultSerialize = 0)) {
             $dataTable = serialize($dataTable);
         }
         return $dataTable;
     }
     $renderer = Piwik_DataTable_Renderer::factory($format);
     $renderer->setTable($dataTable);
     if ($format == 'php') {
         $renderer->setSerialize($this->caseRendererPHPSerialize());
     }
     $toReturn = $renderer->render();
     return $toReturn;
 }
Beispiel #12
0
 protected function convertMultiDimensionalArrayToXml($array, $level = 0)
 {
     $xml = "";
     foreach ($array as $key => $value) {
         if (is_numeric($key)) {
             $key = 'row';
         }
         $key = str_replace(' ', '_', $key);
         $marginLeft = str_repeat("\t", $level + 1);
         if (is_array($value)) {
             if (empty($value)) {
                 $xml .= $marginLeft . "<{$key}/>\n";
             } else {
                 $xml .= $marginLeft . "<{$key}>\n" . $this->convertMultiDimensionalArrayToXml($value, $level + 1) . "\n" . $marginLeft . "</{$key}>\n";
             }
         } else {
             $xml .= $marginLeft . "<{$key}>" . Piwik_DataTable_Renderer::formatValueXml($value) . "</{$key}>\n";
         }
     }
     return $xml;
 }
Beispiel #13
0
 public function __construct($table = null, $serialize = true)
 {
     parent::__construct($table);
     $this->setSerialize($serialize);
 }