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:
-rwxr-xr-xconfig/global.ini.php2
-rwxr-xr-xindex.php3
-rw-r--r--modules/Archive/Array.php113
-rw-r--r--modules/Archive/Single.php21
-rw-r--r--modules/ArchiveProcessing.php33
-rw-r--r--modules/ArchiveProcessing/Day.php2
-rw-r--r--modules/ArchiveProcessing/Period.php4
-rw-r--r--modules/ArchiveProcessing/Record.php1
-rw-r--r--modules/DataTable.php8
-rw-r--r--modules/DataTable/Renderer/Csv.php23
-rw-r--r--modules/DataTable/Renderer/Html.php5
-rw-r--r--modules/DataTable/Renderer/Json.php3
-rw-r--r--modules/DataTable/Renderer/Php.php43
-rw-r--r--modules/DataTable/Renderer/Xml.php94
-rw-r--r--modules/DataTable/Row.php4
-rw-r--r--modules/FrontController.php18
-rw-r--r--plugins/Provider/API.php15
17 files changed, 307 insertions, 85 deletions
diff --git a/config/global.ini.php b/config/global.ini.php
index e87d2779fb..b25231bb3d 100755
--- a/config/global.ini.php
+++ b/config/global.ini.php
@@ -54,7 +54,7 @@ always_archive_data = false
[General]
; Time in seconds after which an archive will be computed again.
; This setting is used only for today's statistics.
-time_before_archive_considered_outdated = 600
+time_before_archive_considered_outdated = 6000
; character used to automatically create categories in the "Action" "Downloads" reports
; for example a URL like "example.com/blog/development/first-post" will create
diff --git a/index.php b/index.php
index d523aa7272..4403d16036 100755
--- a/index.php
+++ b/index.php
@@ -22,7 +22,8 @@ if(!defined('PIWIK_INCLUDE_PATH'))
require_once PIWIK_INCLUDE_PATH . "/modules/testMinimumPhpVersion.php";
-//date_default_timezone_set('Europe/London');
+date_default_timezone_set(date_default_timezone_get());
+
if(!defined('ENABLE_DISPATCH'))
{
define('ENABLE_DISPATCH', true);
diff --git a/modules/Archive/Array.php b/modules/Archive/Array.php
index 64640ae281..de40bf56c3 100644
--- a/modules/Archive/Array.php
+++ b/modules/Archive/Array.php
@@ -5,6 +5,8 @@ require_once "DataTable/Array.php";
class Piwik_Archive_Array extends Piwik_Archive
{
protected $archives = array();
+ protected $idArchiveToTimestamp = array();
+ protected $idArchives = array();
function __construct(Piwik_Site $oSite, $strPeriod, $strDate)
@@ -13,16 +15,32 @@ class Piwik_Archive_Array extends Piwik_Archive
foreach($rangePeriod->getSubperiods() as $subPeriod)
{
- $archive = Piwik_Archive::build($oSite->getId(), $strPeriod, $subPeriod->getDateStart() );
+ $startDate = $subPeriod->getDateStart();
+
+ $archive = Piwik_Archive::build($oSite->getId(), $strPeriod, $startDate );
$archive->prepareArchive();
$this->archives[$archive->getIdArchive()] = $archive;
$this->idArchives[] = $archive->getIdArchive();
+ $this->idArchiveToTimestamp[$archive->getIdArchive()] = $startDate->getTimestamp();
}
$this->inIdArchives = implode("",$this->idArchives);
+ uksort( $this->archives, array($this, 'sortArchiveByTimestamp') );
+ }
+
+
+ protected function sortArchiveByTimestamp($a, $b)
+ {
+ return $this->idArchiveToTimestamp[$a] > $this->idArchiveToTimestamp[$b];
}
+ protected function getNewDataTableArray()
+ {
+ $table = new Piwik_DataTable_Array;
+ $table->setNameKey('date');
+ return $table;
+ }
/**
* Returns the value of the element $name from the current archive
@@ -33,7 +51,16 @@ class Piwik_Archive_Array extends Piwik_Archive
*/
public function getNumeric( $name )
{
- $table = new Piwik_DataTable_Array;
+ require_once "DataTable/Simple.php";
+ $table = $this->getNewDataTableArray();
+
+ foreach($this->archives as $archive)
+ {
+ $numeric = $archive->getNumeric( $name ) ;
+ $subTable = new Piwik_DataTable_Simple();
+ $subTable->loadFromArray( array( $numeric ) );
+ $table->addTable($subTable, $archive->getPrettyDate());
+ }
return $table;
}
@@ -49,24 +76,25 @@ class Piwik_Archive_Array extends Piwik_Archive
*/
public function getBlob( $name )
{
- $table = new Piwik_DataTable_Array;
+ require_once "DataTable/Simple.php";
+ $table = $this->getNewDataTableArray();
+
+ foreach($this->archives as $archive)
+ {
+ $blob = $archive->getBlob( $name ) ;
+ $subTable = new Piwik_DataTable_Simple();
+ $subTable->loadFromArray( array('blob' => $blob));
+ $table->addTable($subTable, $archive->getPrettyDate());
+ }
return $table;
}
/**
- * Given a list of fields defining numeric values, it will return a Piwik_DataTable_Simple
- * containing one row per value.
- *
- * For example $fields = array( 'max_actions',
- * 'nb_uniq_visitors',
- * 'nb_visits',
- * 'nb_actions',
- * 'sum_visit_length',
- * 'bounce_count',
- * );
+ * Given a list of fields defining numeric values, it will return a Piwik_DataTable_Array
+ * which is an array of Piwik_DataTable_Simple, ordered by chronological order
*
* @param array $fields array( fieldName1, fieldName2, ...)
- * @return Piwik_DataTable_Simple
+ * @return Piwik_DataTable_Array
*/
public function getDataTableFromNumeric( $fields )
{
@@ -109,10 +137,9 @@ class Piwik_Archive_Array extends Piwik_Archive
$db = Zend_Registry::get('db');
// date => array( 'field1' =>X, 'field2'=>Y)
- // date2 => array( 'field1' =>X2, 'field2'=>Y2)
-
- $tableArray = new Piwik_DataTable_Array;
+ // date2 => array( 'field1' =>X2, 'field2'=>Y2)
+ $idarchiveToName = array();
foreach($queries as $table => $aIds)
{
$inIds = implode(', ', $aIds);
@@ -123,33 +150,33 @@ class Piwik_Archive_Array extends Piwik_Archive
$values = $db->fetchAll($sql);
- $idarchiveToName = array();
foreach($values as $value)
{
$idarchiveToName[$value['idarchive']][$value['name']] = $value['value'];
- }
-// var_dump($idarchiveToName);exit;
+ }
+ }
+
+ // we need to take the Archives in chronological order
+ uksort( $idarchiveToName, array($this, 'sortArchiveByTimestamp') );
+
+// var_dump($idarchiveToName);exit;
+
+ $tableArray = $this->getNewDataTableArray();
+ foreach($idarchiveToName as $id => $aNameValues)
+ {
+ $strDate = $this->archives[$id]->getPrettyDate();
- foreach($idarchiveToName as $id => $aNameValues)
- {
- $strDate = $this->archives[$id]->getPrettyDate();
-
- $table = new Piwik_DataTable_Simple;
- $table->loadFromArray($aNameValues);
-
-// echo $table; echo $strDate;exit;
- $tableArray->addTable($table, $strDate);
- }
+ $table = new Piwik_DataTable_Simple;
+ $table->loadFromArray($aNameValues);
+
+ $tableArray->addTable($table, $strDate);
}
-
return $tableArray;
}
/**
- * This method will build a dataTable from the blob value $name in the current archive.
- *
- * For example $name = 'Referers_searchEngineByKeyword' will return a Piwik_DataTable containing all the keywords
- * If a idSubTable is given, the method will return the subTable of $name
+ * Given a BLOB field name (eg. 'Referers_searchEngineByKeyword'), it will return a Piwik_DataTable_Array
+ * which is an array of Piwik_DataTable, ordered by chronological order
*
* @param string $name
* @param int $idSubTable
@@ -158,7 +185,12 @@ class Piwik_Archive_Array extends Piwik_Archive
*/
public function getDataTable( $name, $idSubTable = null )
{
- $table = new Piwik_DataTable_Array;
+ $table = $this->getNewDataTableArray();
+ foreach($this->archives as $archive)
+ {
+ $subTable = $archive->getDataTable( $name, $idSubTable ) ;
+ $table->addTable($subTable, $archive->getPrettyDate());
+ }
return $table;
}
@@ -174,7 +206,12 @@ class Piwik_Archive_Array extends Piwik_Archive
*/
public function getDataTableExpanded($name, $idSubTable = null)
{
- $table = new Piwik_DataTable_Array;
+ $table = $this->getNewDataTableArray();
+ foreach($this->archives as $archive)
+ {
+ $subTable = $archive->getDataTableExpanded( $name, $idSubTable ) ;
+ $table->addTable($subTable, $archive->getPrettyDate());
+ }
return $table;
}
-} \ No newline at end of file
+}
diff --git a/modules/Archive/Single.php b/modules/Archive/Single.php
index de1a6fee61..3eb018d36b 100644
--- a/modules/Archive/Single.php
+++ b/modules/Archive/Single.php
@@ -51,16 +51,17 @@ class Piwik_Archive_Single extends Piwik_Archive
$archiveProcessing->setPeriod($this->period);
$IdArchive = $archiveProcessing->loadArchive();
- $this->archiveProcessing = $archiveProcessing;
- $isThereSomeVisits = Zend_Registry::get('db')->fetchOne(
- 'SELECT value
- FROM '.$archiveProcessing->getTableArchiveNumericName().
- ' WHERE name = ? AND idarchive = ?', array('nb_visits',$IdArchive));
-
- if($isThereSomeVisits!==false)
- {
- $this->isThereSomeVisits = true;
- }
+ $this->archiveProcessing = $archiveProcessing;
+// $isThereSomeVisits = Zend_Registry::get('db')->fetchOne(
+// 'SELECT value
+// FROM '.$archiveProcessing->getTableArchiveNumericName().
+// ' WHERE name = ? AND idarchive = ?', array('nb_visits',$IdArchive));
+//
+// if($isThereSomeVisits!==false)
+// {
+// $this->isThereSomeVisits = true;
+// }
+ $this->isThereSomeVisits = $this->archiveProcessing->isThereSomeVisits;
$this->idArchive = $IdArchive;
$this->alreadyChecked = true;
}
diff --git a/modules/ArchiveProcessing.php b/modules/ArchiveProcessing.php
index 0ef8fae207..1e58007d88 100644
--- a/modules/ArchiveProcessing.php
+++ b/modules/ArchiveProcessing.php
@@ -205,6 +205,7 @@ abstract class Piwik_ArchiveProcessing
{
$this->loadArchiveProperties();
$this->idArchive = $this->isArchived();
+
if(!$this->idArchive)
{
// Piwik::printMemoryUsage('Before loading subperiods');
@@ -222,6 +223,7 @@ abstract class Piwik_ArchiveProcessing
else
{
//Piwik::log("Archive already available, id = {$this->idArchive}");
+ $this->isThereSomeVisits = true;
}
return $this->idArchive;
@@ -390,21 +392,42 @@ abstract class Piwik_ArchiveProcessing
$bindSQL[] = $this->maxTimestampArchive;
}
- $idarchive = Zend_Registry::get('db')->fetchOne("
- SELECT idarchive
+ $results = Zend_Registry::get('db')->fetchAll("
+ SELECT idarchive, value, name
FROM ".$this->tableArchiveNumeric."
WHERE idsite = ?
AND date1 = ?
AND date2 = ?
AND period = ?
- AND name = 'done'
- AND value = ".Piwik_ArchiveProcessing::DONE_OK."
+ AND ( (name = 'done' AND value = ".Piwik_ArchiveProcessing::DONE_OK.")
+ OR name = 'nb_visits')
$timeStampWhere
ORDER BY ts_archived DESC",
$bindSQL
);
- if(!empty($idarchive))
+ // the archive exists in the table
+ if(!empty($results))
{
+
+ // let's look for the more recent idarchive
+ foreach($results as $result)
+ {
+ if($result['name'] == 'done')
+ {
+ $idarchive = $result['idarchive'];
+ break;
+ }
+ }
+ // let's look for the nb_visits result for this more recent archive
+ foreach($results as $result)
+ {
+ if($result['name'] == 'nb_visits'
+ && $result['idarchive'] == $idarchive)
+ {
+ $this->isThereSomeVisits = ($result['value'] != 0);
+ break;
+ }
+ }
return $idarchive;
}
else
diff --git a/modules/ArchiveProcessing/Day.php b/modules/ArchiveProcessing/Day.php
index 7b8338341b..6dd605e0e1 100644
--- a/modules/ArchiveProcessing/Day.php
+++ b/modules/ArchiveProcessing/Day.php
@@ -57,6 +57,8 @@ class Piwik_ArchiveProcessing_Day extends Piwik_ArchiveProcessing
{
return;
}
+
+ $this->isThereSomeVisits = true;
foreach($row as $name => $value)
{
diff --git a/modules/ArchiveProcessing/Period.php b/modules/ArchiveProcessing/Period.php
index b16f0b0de5..632caba439 100644
--- a/modules/ArchiveProcessing/Period.php
+++ b/modules/ArchiveProcessing/Period.php
@@ -211,7 +211,9 @@ class Piwik_ArchiveProcessing_Period extends Piwik_ArchiveProcessing
'sum_visit_length',
'bounce_count',
);
- $this->archiveNumericValuesSum($toSum);
+ $record = $this->archiveNumericValuesSum($toSum);
+
+ $this->isThereSomeVisits = ($record['nb_visits']->value != 0);
Piwik_PostEvent('ArchiveProcessing_Period.compute', $this);
}
diff --git a/modules/ArchiveProcessing/Record.php b/modules/ArchiveProcessing/Record.php
index ee4040183d..46c3d31b48 100644
--- a/modules/ArchiveProcessing/Record.php
+++ b/modules/ArchiveProcessing/Record.php
@@ -35,6 +35,7 @@ abstract class Piwik_ArchiveProcessing_Record
$this->value = $value;
Piwik_ArchiveProcessing_Record_Manager::getInstance()->registerRecord($this);
}
+
public function delete()
{
Piwik_ArchiveProcessing_Record_Manager::getInstance()->unregister($this);
diff --git a/modules/DataTable.php b/modules/DataTable.php
index 25c1796ca6..bb3ac36319 100644
--- a/modules/DataTable.php
+++ b/modules/DataTable.php
@@ -343,7 +343,13 @@ class Piwik_DataTable
$totalCount += $this->getRowsCount();
return $totalCount;
}
-
+ public function deleteColumn( $name )
+ {
+ foreach($this->getRows() as $row)
+ {
+ $row->deleteColumn($name);
+ }
+ }
public function deleteRow( $key )
{
if(!isset($this->rows[$key]))
diff --git a/modules/DataTable/Renderer/Csv.php b/modules/DataTable/Renderer/Csv.php
index be35d4a270..a1d368cd9a 100644
--- a/modules/DataTable/Renderer/Csv.php
+++ b/modules/DataTable/Renderer/Csv.php
@@ -29,10 +29,13 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
public $separator = ',';
public $exportDetail = true;
public $exportIdSubtable = true;
-
+ public $lineEnd = "\n";
+
function __construct($table = null)
{
parent::__construct($table);
+
+
}
function render()
@@ -47,6 +50,13 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
// keep track of all the existing columns in the csv file
$allColumns = array();
+ if($table instanceof Piwik_DataTable_Simple
+ && $table->getRowsCount() ==1)
+ {
+ $str = 'value' . $this->lineEnd . $table->getRowFromId(0)->getColumn('value');
+ return $this->output($str);
+ }
+
foreach($table->getRows() as $row)
{
$csvRow = array();
@@ -106,7 +116,9 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
// specific case, we have only one column and this column wasn't named properly (indexed by a number)
// we don't print anything in the CSV file => an empty line
- if(sizeof($allColumns) == 1 && reset($allColumns) && !is_string(key($allColumns)) )
+ if(sizeof($allColumns) == 1
+ && reset($allColumns)
+ && !is_string(key($allColumns)) )
{
$str .= '';
}
@@ -123,7 +135,7 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
// we render the CSV
foreach($csv as $theRow)
{
- $rowStr = "\n";
+ $rowStr = $this->lineEnd;
foreach($allColumns as $columnName => $true)
{
$rowStr .= $theRow[$columnName] . $this->separator;
@@ -134,6 +146,11 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
$str .= $rowStr;
}
+ return $this->output($str);
+ }
+
+ protected function output( $str )
+ {
// silent fail otherwise unit tests fail
@header("Content-type: application/vnd.ms-excel");
@header("Content-Disposition: attachment; filename=piwik-report-export.csv");
diff --git a/modules/DataTable/Renderer/Html.php b/modules/DataTable/Renderer/Html.php
index 5e0c076161..34541bef7f 100644
--- a/modules/DataTable/Renderer/Html.php
+++ b/modules/DataTable/Renderer/Html.php
@@ -34,6 +34,11 @@ class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer
{
return "<b><i>Empty table</i></b> <br>\n";
}
+ if($table instanceof Piwik_DataTable_Simple
+ && $table->getRowsCount() ==1)
+ {
+ $table->deleteColumn('label');
+ }
static $depth=0;
$i = 1;
diff --git a/modules/DataTable/Renderer/Json.php b/modules/DataTable/Renderer/Json.php
index f2eca8f001..6c1a83800b 100644
--- a/modules/DataTable/Renderer/Json.php
+++ b/modules/DataTable/Renderer/Json.php
@@ -31,8 +31,7 @@ class Piwik_DataTable_Renderer_Json extends Piwik_DataTable_Renderer
protected function renderTable($table)
{
$renderer = new Piwik_DataTable_Renderer_Php($table, $serialize = false);
- $array = $renderer->flatRender();
-
+ $array = $renderer->flatRender();
$str = json_encode($array);
return $str;
}
diff --git a/modules/DataTable/Renderer/Php.php b/modules/DataTable/Renderer/Php.php
index 6b32eea379..0b8d1529b5 100644
--- a/modules/DataTable/Renderer/Php.php
+++ b/modules/DataTable/Renderer/Php.php
@@ -56,17 +56,40 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
* @return array Php array representing the 'flat' version of the datatable
*
*/
- public function flatRender()
- {
+ public function flatRender( $dataTable = null )
+ {
+ if(is_null($dataTable))
+ {
+ $dataTable = $this->table;
+ }
+
+ if($dataTable instanceof Piwik_DataTable_Array)
+ {
+ $flatArray = array();
+ foreach($dataTable->getArray() as $keyName => $table)
+ {
+ $flatArray[$keyName] = $this->flatRender($table);
+ }
+ return $flatArray;
+ }
+
// A DataTable_Simple is already flattened so no need to do some crazy stuff to convert it
- if($this->table instanceof Piwik_DataTable_Simple)
+ else if($dataTable instanceof Piwik_DataTable_Simple)
{
- $flatArray = $this->renderSimpleTable($this->table);
+ $flatArray = $this->renderSimpleTable($dataTable);
+
+ // if we return only one numeric value then we print out the result in a simple <result> tag
+ // keep it simple!
+ if(count($flatArray) == 1)
+ {
+ $flatArray = current($flatArray);
+ }
+
}
// A normal DataTable needs to be handled specifically
else
{
- $array = $this->renderTable($this->table);
+ $array = $this->renderTable($dataTable);
$flatArray = array();
foreach($array as $row)
{
@@ -87,9 +110,13 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
return $flatArray;
}
- public function render()
- {
- $toReturn = $this->flatRender();
+ public function render( $dataTable = null)
+ {
+ if(is_null($dataTable))
+ {
+ $dataTable = $this->table;
+ }
+ $toReturn = $this->flatRender( $dataTable );
return $toReturn;
}
diff --git a/modules/DataTable/Renderer/Xml.php b/modules/DataTable/Renderer/Xml.php
index 060aafe968..61800f7b85 100644
--- a/modules/DataTable/Renderer/Xml.php
+++ b/modules/DataTable/Renderer/Xml.php
@@ -36,8 +36,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
$renderer = new Piwik_DataTable_Renderer_Php($table, $serialize = false);
$array = $renderer->flatRender();
-// var_dump($array); exit;
-
+// var_dump($array); exit;
$options = array(
XML_SERIALIZER_OPTION_INDENT => ' ',
@@ -45,6 +44,82 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
XML_SERIALIZER_OPTION_ROOT_NAME => 'row',
XML_SERIALIZER_OPTION_MODE => XML_SERIALIZER_MODE_SIMPLEXML
);
+ $rootName = 'result';
+
+ // case DataTable_Array
+ if($table instanceof Piwik_DataTable_Array)
+ {
+
+ // CASE 1
+ //array
+ // 'day1' => string '14' (length=2)
+ // 'day2' => string '6' (length=1)
+ $firstTable = current($array);
+ if(!is_array( $firstTable ))
+ {
+ $xml = "<results>\n";
+ $nameDescriptionAttribute = $table->getNameKey();
+ foreach($array as $valueAttribute => $value)
+ {
+ $xml .= "\t<result $nameDescriptionAttribute=\"$valueAttribute\">$value</result>\n";
+ }
+ $xml .= "</results>";
+ return $this->output($xml);
+ }
+
+ $subTables = $table->getArray();
+ $firstTable = current($subTables);
+
+ // CASE 2
+ //array
+ // 'day1' =>
+ // array
+ // 'nb_uniq_visitors' => string '18'
+ // 'nb_visits' => string '101'
+ // 'day2' =>
+ // array
+ // 'nb_uniq_visitors' => string '28'
+ // 'nb_visits' => string '11'
+ if( $firstTable instanceof Piwik_DataTable_Simple)
+ {
+ $xml = "<results>\n";
+ $nameDescriptionAttribute = $table->getNameKey();
+ foreach($array as $valueAttribute => $value)
+ {
+ $xml .= "\t<result $nameDescriptionAttribute=\"$valueAttribute\">".''."</result>\n";
+ }
+ $xml .= "</results>";
+ return $this->output($xml);
+ }
+
+ // CASE 3
+ //array
+ // 'day1' =>
+ // array
+ // 0 =>
+ // array
+ // 'label' => string 'phpmyvisites'
+ // 'nb_unique_visitors' => int 11
+ // 'nb_visits' => int 13
+ // 1 =>
+ // array
+ // 'label' => string 'phpmyvisits'
+ // 'nb_unique_visitors' => int 2
+ // 'nb_visits' => int 2
+ // 'day2' =>
+ // array
+ // 0 =>
+ // array
+ // 'label' => string 'piwik'
+ // 'nb_unique_visitors' => int 121
+ // 'nb_visits' => int 130
+ // 1 =>
+ // array
+ // 'label' => string 'piwik bis'
+ // 'nb_unique_visitors' => int 20
+ // 'nb_visits' => int 120
+ }
+
$serializer = new XML_Serializer($options);
@@ -57,15 +132,20 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
$xmlStr = $serializer->getSerializedData();
- if(get_class($table) == 'Piwik_DataTable')
+ if($table instanceof Piwik_DataTable
+ || $table instanceof Piwik_DataTable_Array)
{
- $xmlStr = "<result>\n".$xmlStr."\n</result>";
+ $xmlStr = "<$rootName>\n".$xmlStr."\n</$rootName>";
$xmlStr = str_replace(">\n", ">\n\t",$xmlStr);
- $xmlStr = str_replace("\t</result>", "</result>",$xmlStr);
+ $xmlStr = str_replace("\t</$rootName>", "</$rootName>",$xmlStr);
}
-
+ return $this->output($xmlStr);
+ }
+
+ protected function output( $xml )
+ {
// silent fail because otherwise it throws an exception in the unit tests
@header('Content-type: text/xml');
- return $xmlStr;
+ return $xml;
}
} \ No newline at end of file
diff --git a/modules/DataTable/Row.php b/modules/DataTable/Row.php
index 06415b95e8..8eaf0d2296 100644
--- a/modules/DataTable/Row.php
+++ b/modules/DataTable/Row.php
@@ -107,6 +107,10 @@ class Piwik_DataTable_Row
return $output;
}
+ public function deleteColumn( $name )
+ {
+ unset($this->c[self::COLUMNS][$name]);
+ }
/**
* Returns the given column
* @param string Column name
diff --git a/modules/FrontController.php b/modules/FrontController.php
index 088c4e417b..653989fd35 100644
--- a/modules/FrontController.php
+++ b/modules/FrontController.php
@@ -102,8 +102,8 @@ class Piwik_FrontController
Piwik::printQueryCount();
}catch(Exception $e) {}
- Piwik::printMemoryUsage();
- Piwik::printTimer();
+// Piwik::printMemoryUsage();
+// Piwik::printTimer();
// Piwik::uninstall();
//
}
@@ -220,22 +220,26 @@ class Piwik_FrontController
// Piwik::printMemoryUsage('Start program');
+ // can be used for debug purpose
$doNotDrop = array(
- Piwik::prefixTable('log_visit'),
Piwik::prefixTable('access'),
Piwik::prefixTable('user'),
Piwik::prefixTable('site'),
- Piwik::prefixTable('log_link_visit_action'),
- Piwik::prefixTable('log_action'),
- Piwik::prefixTable('log_profiling'),
Piwik::prefixTable('archive'),
+
Piwik::prefixTable('logger_api_call'),
Piwik::prefixTable('logger_error'),
Piwik::prefixTable('logger_exception'),
Piwik::prefixTable('logger_message'),
+
+ Piwik::prefixTable('log_visit'),
+ Piwik::prefixTable('log_link_visit_action'),
+ Piwik::prefixTable('log_action'),
+ Piwik::prefixTable('log_profiling'),
);
- Piwik::dropTables($doNotDrop);
+// Piwik::dropTables($doNotDrop);
+
Piwik::createTables();
Piwik_PluginsManager::getInstance()->installPlugins();
diff --git a/plugins/Provider/API.php b/plugins/Provider/API.php
index b8b6b6473a..3d3a731eb8 100644
--- a/plugins/Provider/API.php
+++ b/plugins/Provider/API.php
@@ -36,7 +36,7 @@ class Piwik_Provider_API extends Piwik_Apiable
}
return self::$instance;
}
-
+
public function getProvider( $idSite, $period, $date )
{
Piwik::checkUserHasViewAccess( $idSite );
@@ -47,6 +47,19 @@ class Piwik_Provider_API extends Piwik_Apiable
$dataTable->queueFilter('Piwik_DataTable_Filter_ReplaceColumnNames');
return $dataTable;
}
+
+ /**
+ * Example of getting a RAW BLOB
+ *
+ * @return blob
+ */
+ public function getProviderBlob( $idSite, $period, $date )
+ {
+ Piwik::checkUserHasViewAccess( $idSite );
+ $archive = Piwik_Archive::build($idSite, $period, $date );
+ $dataTable = $archive->getBlob('Provider_hostnameExt');
+ return $dataTable;
+ }
}