From 72d6d97ff0f3adfa341e7f0ef6b93e9d8bc02602 Mon Sep 17 00:00:00 2001 From: sgiehl Date: Wed, 12 Feb 2020 13:53:11 +0100 Subject: [PATCH] Remove PHP response format --- CHANGELOG.md | 1 + core/CliMulti.php | 2 +- core/CronArchive.php | 8 +- core/DataTable/Renderer.php | 153 +++++- core/DataTable/Renderer/Json.php | 12 - core/DataTable/Renderer/Php.php | 265 --------- core/DataTable/Renderer/Xml.php | 32 +- plugins/API/API.php | 4 +- plugins/API/Renderer/Php.php | 85 --- .../API/tests/System/AutoSuggestAPITest.php | 4 +- plugins/API/tests/Unit/PhpRendererTest.php | 218 -------- .../tests/UI/CoreUpdaterDb_spec.js | 2 +- plugins/MultiSites/Dashboard.php | 4 +- plugins/SEO/Widgets/GetRank.php | 7 +- plugins/SEO/tests/Integration/SEOTest.php | 5 +- plugins/UserCountryMap/Controller.php | 8 +- .../Framework/TestRequest/Collection.php | 5 +- tests/PHPUnit/Integration/CronArchiveTest.php | 6 +- .../DataTable/Filter/PivotByDimensionTest.php | 5 +- .../System/ApiGetReportMetadataTest.php | 4 - ...erer__API.getDefaultMetricTranslations.php | 1 - tests/PHPUnit/Unit/API/ApiRendererTest.php | 14 +- .../PHPUnit/Unit/API/ResponseBuilderTest.php | 24 +- .../Unit/DataTable/Renderer/PHPTest.php | 512 ------------------ tests/PHPUnit/Unit/FilesystemTest.php | 5 +- ...ing_Referrers.getWebsites_exported.php.txt | 1 - ...ortExporting_RowEvolution_exported.php.txt | 1 - ...porting_VisitsSummary.get_exported.php.txt | 1 - tests/UI/specs/ReportExporting_spec.js | 2 +- 29 files changed, 207 insertions(+), 1184 deletions(-) delete mode 100644 core/DataTable/Renderer/Php.php delete mode 100644 plugins/API/Renderer/Php.php delete mode 100644 plugins/API/tests/Unit/PhpRendererTest.php delete mode 100644 tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php delete mode 100644 tests/PHPUnit/Unit/DataTable/Renderer/PHPTest.php delete mode 100644 tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.php.txt delete mode 100644 tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.php.txt delete mode 100644 tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.php.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index a058ea81bf1c..862363c3a261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ The Product Changelog at **[matomo.org/changelog](https://matomo.org/changelog)* * The event `CustomPiwikJs.shouldAddTrackerFile` has been renamed to `CustomJsTracker.shouldAddTrackerFile` * Public API class `Piwik\Plugins\CustomPiwikJs\TrackerUpdater` has been renamed to `Piwik\Plugins\CustomJsTracker\TrackerUpdater` * API method `CustomPiwikJs.doesIncludePluginTrackersAutomatically` has been renamed to `CustomJsTracker.doesIncludePluginTrackersAutomatically` +* The API response format `php` has been removed. ## Matomo 3.13.1 diff --git a/core/CliMulti.php b/core/CliMulti.php index 863bea1b3b9f..08d72367a847 100644 --- a/core/CliMulti.php +++ b/core/CliMulti.php @@ -327,7 +327,7 @@ public function isCommandAlreadyRunning($url) $posStart = strpos($commandToCheck, 'console climulti'); $posPid = strpos($commandToCheck, '&pid='); // the pid is random each time so we need to ignore it. $shortendCommand = substr($commandToCheck, $posStart, $posPid - $posStart); - // equals eg console climulti:request -q --matomo-domain= --superuser module=API&method=API.get&idSite=1&period=month&date=2018-04-08,2018-04-30&format=php&trigger=archivephp + // equals eg console climulti:request -q --matomo-domain= --superuser module=API&method=API.get&idSite=1&period=month&date=2018-04-08,2018-04-30&format=json&trigger=archivephp $shortendCommand = preg_replace("/([&])date=.*?(&|$)/", "", $shortendCommand); $currentlyRunningJobs = preg_replace("/([&])date=.*?(&|$)/", "", $currentlyRunningJobs); diff --git a/core/CronArchive.php b/core/CronArchive.php index 6e7d186db235..fd27a1ca9898 100644 --- a/core/CronArchive.php +++ b/core/CronArchive.php @@ -828,7 +828,7 @@ private function processArchiveForPeriods($idSite, $lastTimestampWebsiteProcesse */ private function getVisitsRequestUrl($idSite, $period, $date, $segment = false) { - $request = "?module=API&method=API.get&idSite=$idSite&period=$period&date=" . $date . "&format=php"; + $request = "?module=API&method=API.get&idSite=$idSite&period=$period&date=" . $date . "&format=json"; if ($segment) { $request .= '&segment=' . urlencode($segment); } @@ -908,7 +908,7 @@ protected function processArchiveDays($idSite, $lastTimestampWebsiteProcessedDay $this->logArchiveWebsite($idSite, "day", $date); $content = $this->request($url); - $daysResponse = Common::safe_unserialize($content); + $daysResponse = json_decode($content, true); if (empty($content) || !is_array($daysResponse) @@ -1139,7 +1139,7 @@ private function archiveReportsFor($idSite, $period, $date, $archiveSegments, Ti $success = $success && $this->checkResponse($content, $url); if ($noSegmentUrl == $url && $success) { - $stats = Common::safe_unserialize($content); + $stats = json_decode($content, true); if (!is_array($stats)) { $this->logError("Error unserializing the following response from $url: " . $content); @@ -1217,7 +1217,7 @@ private function logNetworkError($url, $response) } /** - * Issues a request to $url eg. "?module=API&method=API.getDefaultMetricTranslations&format=original&serialize=1" + * Issues a request to $url eg. "?module=API&method=API.getDefaultMetricTranslations&format=json&serialize=1" * * @param string $url * @return string diff --git a/core/DataTable/Renderer.php b/core/DataTable/Renderer.php index 02ae434f0daf..376e78fc5b6f 100644 --- a/core/DataTable/Renderer.php +++ b/core/DataTable/Renderer.php @@ -11,6 +11,7 @@ use Exception; use Piwik\Columns\Dimension; use Piwik\Common; +use Piwik\DataTable; use Piwik\Metrics; use Piwik\Piwik; use Piwik\BaseFactory; @@ -143,8 +144,7 @@ public function setTable($table) 'json', 'csv', 'tsv', - 'html', - 'php' + 'html' ); /** @@ -379,4 +379,153 @@ protected static function shouldWrapArrayBeforeRendering( return $wrap; } + + /** + * Produces a flat php array from the DataTable, putting "columns" and "metadata" on the same level. + * + * For example, when a originalRender() would be + * array( 'columns' => array( 'col1_name' => value1, 'col2_name' => value2 ), + * 'metadata' => array( 'metadata1_name' => value_metadata) ) + * + * a flatRender() is + * array( 'col1_name' => value1, + * 'col2_name' => value2, + * 'metadata1_name' => value_metadata ) + * + * @param null|DataTable|DataTable\Map|Simple $dataTable + * @return array Php array representing the 'flat' version of the datatable + */ + protected function convertDataTableToArray($dataTable = null) + { + if (is_null($dataTable)) { + $dataTable = $this->table; + } + + if (is_array($dataTable)) { + $flatArray = $dataTable; + if (self::shouldWrapArrayBeforeRendering($flatArray)) { + $flatArray = array($flatArray); + } + } elseif ($dataTable instanceof DataTable\Map) { + $flatArray = array(); + foreach ($dataTable->getDataTables() as $keyName => $table) { + $flatArray[$keyName] = $this->convertDataTableToArray($table); + } + } elseif ($dataTable instanceof Simple) { + $flatArray = $this->convertSimpleTable($dataTable); + + reset($flatArray); + $firstKey = key($flatArray); + + // if we return only one numeric value then we print out the result in a simple tag + // keep it simple! + if (count($flatArray) == 1 + && $firstKey !== DataTable\Row::COMPARISONS_METADATA_NAME + ) { + $flatArray = current($flatArray); + } + } // A normal DataTable needs to be handled specifically + else { + $array = $this->convertTable($dataTable); + $flatArray = $this->flattenArray($array); + } + + return $flatArray; + } + + /** + * Converts the given data table to an array + * + * @param DataTable $table + * @return array + */ + protected function convertTable($table) + { + $array = []; + + foreach ($table->getRows() as $id => $row) { + $newRow = array( + 'columns' => $row->getColumns(), + 'metadata' => $row->getMetadata(), + 'idsubdatatable' => $row->getIdSubDataTable(), + ); + + if ($id == DataTable::ID_SUMMARY_ROW) { + $newRow['issummaryrow'] = true; + } + + if (isset($newRow['metadata'][DataTable\Row::COMPARISONS_METADATA_NAME])) { + $newRow['metadata'][DataTable\Row::COMPARISONS_METADATA_NAME] = $row->getComparisons(); + } + + $subTable = $row->getSubtable(); + if ($this->isRenderSubtables() + && $subTable + ) { + $subTable = $this->convertTable($subTable); + $newRow['subtable'] = $subTable; + if ($this->hideIdSubDatatable === false + && isset($newRow['metadata']['idsubdatatable_in_db']) + ) { + $newRow['columns']['idsubdatatable'] = $newRow['metadata']['idsubdatatable_in_db']; + } + unset($newRow['metadata']['idsubdatatable_in_db']); + } + if ($this->hideIdSubDatatable !== false) { + unset($newRow['idsubdatatable']); + } + + $array[] = $newRow; + } + return $array; + } + + /** + * Converts the simple data table to an array + * + * @param Simple $table + * @return array + */ + protected function convertSimpleTable($table) + { + $array = []; + + $row = $table->getFirstRow(); + if ($row === false) { + return $array; + } + foreach ($row->getColumns() as $columnName => $columnValue) { + $array[$columnName] = $columnValue; + } + + $comparisons = $row->getComparisons(); + if (!empty($comparisons)) { + $array[DataTable\Row::COMPARISONS_METADATA_NAME] = $comparisons; + } + + return $array; + } + + /** + * + * @param array $array + * @return array + */ + protected function flattenArray($array) + { + $flatArray = []; + foreach ($array as $row) { + $newRow = $row['columns'] + $row['metadata']; + if (isset($row['idsubdatatable']) + && $this->hideIdSubDatatable === false + ) { + $newRow += array('idsubdatatable' => $row['idsubdatatable']); + } + if (isset($row['subtable'])) { + $newRow += array('subtable' => $this->flattenArray($row['subtable'])); + } + $flatArray[] = $newRow; + } + return $flatArray; + } } diff --git a/core/DataTable/Renderer/Json.php b/core/DataTable/Renderer/Json.php index 28d57eb6faf9..c608b27ab5c3 100644 --- a/core/DataTable/Renderer/Json.php +++ b/core/DataTable/Renderer/Json.php @@ -109,18 +109,6 @@ public static function sendHeaderJSON() Common::sendHeader('Content-Type: application/json; charset=utf-8'); } - private function convertDataTableToArray($table) - { - $renderer = new Php(); - $renderer->setTable($table); - $renderer->setRenderSubTables($this->isRenderSubtables()); - $renderer->setSerialize(false); - $renderer->setHideIdSubDatableFromResponse($this->hideIdSubDatatable); - $array = $renderer->flatRender(); - - return $array; - } - private function convertDataTableColumnMetadataValues(&$table) { if (empty($table)) { diff --git a/core/DataTable/Renderer/Php.php b/core/DataTable/Renderer/Php.php deleted file mode 100644 index 5bcb86195097..000000000000 --- a/core/DataTable/Renderer/Php.php +++ /dev/null @@ -1,265 +0,0 @@ -serialize = (bool)$bool; - } - - /** - * Enables/Disables pretty display - * - * @param bool $bool - */ - public function setPrettyDisplay($bool) - { - $this->prettyDisplay = (bool)$bool; - } - - /** - * Converts current data table to string - * - * @return string - */ - public function __toString() - { - $data = $this->render(); - if (!is_string($data)) { - $data = serialize($data); - } - return $data; - } - - /** - * Computes the dataTable output and returns the string/binary - * - * @param null|DataTable|DataTable\Map|Simple $dataTable - * @return string - */ - public function render($dataTable = null) - { - if (is_null($dataTable)) { - $dataTable = $this->table; - } - $toReturn = $this->flatRender($dataTable); - - if ($this->prettyDisplay) { - if (!is_array($toReturn)) { - $toReturn = Common::safe_unserialize($toReturn); - } - $toReturn = "
" . var_export($toReturn, true) . "
"; - } - return $toReturn; - } - - /** - * Produces a flat php array from the DataTable, putting "columns" and "metadata" on the same level. - * - * For example, when a originalRender() would be - * array( 'columns' => array( 'col1_name' => value1, 'col2_name' => value2 ), - * 'metadata' => array( 'metadata1_name' => value_metadata) ) - * - * a flatRender() is - * array( 'col1_name' => value1, - * 'col2_name' => value2, - * 'metadata1_name' => value_metadata ) - * - * @param null|DataTable|DataTable\Map|Simple $dataTable - * @return array Php array representing the 'flat' version of the datatable - */ - public function flatRender($dataTable = null) - { - if (is_null($dataTable)) { - $dataTable = $this->table; - } - - if (is_array($dataTable)) { - $flatArray = $dataTable; - if (self::shouldWrapArrayBeforeRendering($flatArray)) { - $flatArray = array($flatArray); - } - } elseif ($dataTable instanceof DataTable\Map) { - $flatArray = array(); - foreach ($dataTable->getDataTables() as $keyName => $table) { - $serializeSave = $this->serialize; - $this->serialize = false; - $flatArray[$keyName] = $this->flatRender($table); - $this->serialize = $serializeSave; - } - } elseif ($dataTable instanceof Simple) { - $flatArray = $this->renderSimpleTable($dataTable); - - reset($flatArray); - $firstKey = key($flatArray); - - // if we return only one numeric value then we print out the result in a simple tag - // keep it simple! - if (count($flatArray) == 1 - && $firstKey !== DataTable\Row::COMPARISONS_METADATA_NAME - ) { - $flatArray = current($flatArray); - } - } // A normal DataTable needs to be handled specifically - else { - $array = $this->renderTable($dataTable); - $flatArray = $this->flattenArray($array); - } - - if ($this->serialize) { - $flatArray = serialize($flatArray); - } - - return $flatArray; - } - - /** - * - * @param array $array - * @return array - */ - protected function flattenArray($array) - { - $flatArray = array(); - foreach ($array as $row) { - $newRow = $row['columns'] + $row['metadata']; - if (isset($row['idsubdatatable']) - && $this->hideIdSubDatatable === false - ) { - $newRow += array('idsubdatatable' => $row['idsubdatatable']); - } - if (isset($row['subtable'])) { - $newRow += array('subtable' => $this->flattenArray($row['subtable'])); - } - $flatArray[] = $newRow; - } - return $flatArray; - } - - /** - * Converts the current data table to an array - * - * @return array - * @throws Exception - */ - public function originalRender() - { - Piwik::checkObjectTypeIs($this->table, array('Simple', 'DataTable')); - - if ($this->table instanceof Simple) { - $array = $this->renderSimpleTable($this->table); - } elseif ($this->table instanceof DataTable) { - $array = $this->renderTable($this->table); - } - - if ($this->serialize) { - $array = serialize($array); - } - return $array; - } - - /** - * Converts the given data table to an array - * - * @param DataTable $table - * @return array - */ - protected function renderTable($table) - { - $array = array(); - - foreach ($table->getRows() as $id => $row) { - $newRow = array( - 'columns' => $row->getColumns(), - 'metadata' => $row->getMetadata(), - 'idsubdatatable' => $row->getIdSubDataTable(), - ); - - if ($id == DataTable::ID_SUMMARY_ROW) { - $newRow['issummaryrow'] = true; - } - - if (isset($newRow['metadata'][DataTable\Row::COMPARISONS_METADATA_NAME])) { - $newRow['metadata'][DataTable\Row::COMPARISONS_METADATA_NAME] = $row->getComparisons(); - } - - $subTable = $row->getSubtable(); - if ($this->isRenderSubtables() - && $subTable - ) { - $subTable = $this->renderTable($subTable); - $newRow['subtable'] = $subTable; - if ($this->hideIdSubDatatable === false - && isset($newRow['metadata']['idsubdatatable_in_db']) - ) { - $newRow['columns']['idsubdatatable'] = $newRow['metadata']['idsubdatatable_in_db']; - } - unset($newRow['metadata']['idsubdatatable_in_db']); - } - if ($this->hideIdSubDatatable !== false) { - unset($newRow['idsubdatatable']); - } - - $array[] = $newRow; - } - return $array; - } - - /** - * Converts the simple data table to an array - * - * @param Simple $table - * @return array - */ - protected function renderSimpleTable($table) - { - $array = array(); - - $row = $table->getFirstRow(); - if ($row === false) { - return $array; - } - foreach ($row->getColumns() as $columnName => $columnValue) { - $array[$columnName] = $columnValue; - } - - $comparisons = $row->getComparisons(); - if (!empty($comparisons)) { - $array[DataTable\Row::COMPARISONS_METADATA_NAME] = $comparisons; - } - - return $array; - } -} diff --git a/core/DataTable/Renderer/Xml.php b/core/DataTable/Renderer/Xml.php index 939b3a897135..3d04dc007c37 100644 --- a/core/DataTable/Renderer/Xml.php +++ b/core/DataTable/Renderer/Xml.php @@ -35,26 +35,6 @@ public function render() return '' . "\n" . $this->renderTable($this->table); } - /** - * Converts the given data table to an array - * - * @param DataTable|DataTable/Map $table data table to convert - * @return array - */ - protected function getArrayFromDataTable($table) - { - if (is_array($table)) { - return $table; - } - - $renderer = new Php(); - $renderer->setRenderSubTables($this->isRenderSubtables()); - $renderer->setSerialize(false); - $renderer->setTable($table); - $renderer->setHideIdSubDatableFromResponse($this->hideIdSubDatatable); - return $renderer->flatRender(); - } - /** * Computes the output for the given data table * @@ -66,7 +46,7 @@ protected function getArrayFromDataTable($table) */ protected function renderTable($table, $returnOnlyDataTableXml = false, $prefixLines = '') { - $array = $this->getArrayFromDataTable($table); + $array = $this->convertDataTableToArray($table); if ($table instanceof Map) { $out = $this->renderDataTableMap($table, $array, $prefixLines); @@ -188,11 +168,11 @@ private function renderArray($array, $prefixLines) } else { $result .= $prefixLines . $prefix . "\n"; if ($value instanceof Map) { - $result .= $this->renderDataTableMap($value, $this->getArrayFromDataTable($value), $prefixLines); + $result .= $this->renderDataTableMap($value, $this->convertDataTableToArray($value), $prefixLines); } elseif ($value instanceof Simple) { - $result .= $this->renderDataTableSimple($this->getArrayFromDataTable($value), $prefixLines); + $result .= $this->renderDataTableSimple($this->convertDataTableToArray($value), $prefixLines); } else { - $result .= $this->renderDataTable($this->getArrayFromDataTable($value), $prefixLines); + $result .= $this->renderDataTable($this->convertDataTableToArray($value), $prefixLines); } $result .= $prefixLines . $suffix . "\n"; } @@ -381,7 +361,7 @@ protected function renderDataTable($array, $prefixLine = "") foreach ($row as $name => $value) { // handle the recursive dataTable case by XML outputting the recursive table if ($value instanceof DataTable) { - $value = $this->getArrayFromDataTable($value); + $value = $this->convertDataTableToArray($value); if ($value instanceof Simple) { $value = "\n" . $this->renderDataTableSimple($value, $prefixLine . "\t\t"); } else { @@ -436,7 +416,7 @@ protected function renderDataTableSimple($array, $prefixLine = "") if (is_string($xmlValue) && strlen($xmlValue) == 0) { $out .= $prefixLine . "\t<$tagStart />\n"; } else if ($value instanceof DataTable || is_array($value)) { - $arrayValue = $this->getArrayFromDataTable($value); + $arrayValue = $this->convertDataTableToArray($value); if (!is_array(reset($arrayValue))) { $xmlTable = $this->renderDataTableSimple($arrayValue, $prefixLine . "\t"); } else { diff --git a/plugins/API/API.php b/plugins/API/API.php index f84c95f443e9..f5fbfba7c5a7 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -524,7 +524,7 @@ public function getBulkRequest($urls) $result = array(); foreach ($urls as $url) { - $params = Request::getRequestArrayFromString($url . '&format=php&serialize=0'); + $params = Request::getRequestArrayFromString($url . '&format=json'); if (!empty($params['method']) && $params['method'] === 'API.getBulkRequest') { continue; @@ -543,7 +543,7 @@ public function getBulkRequest($urls) } $req = new Request($params); - $result[] = $req->process(); + $result[] = json_decode($req->process(), true); } return $result; } diff --git a/plugins/API/Renderer/Php.php b/plugins/API/Renderer/Php.php deleted file mode 100644 index 50836abea789..000000000000 --- a/plugins/API/Renderer/Php.php +++ /dev/null @@ -1,85 +0,0 @@ - 'success', 'message' => $message); - - return $this->serializeIfNeeded($success); - } - - /** - * @param $message - * @param \Exception|\Throwable $exception - * @return string - */ - public function renderException($message, $exception) - { - $message = array('result' => 'error', 'message' => $message); - - return $this->serializeIfNeeded($message); - } - - public function renderDataTable($dataTable) - { - /** @var \Piwik\DataTable\Renderer\Php $tableRenderer */ - $tableRenderer = $this->buildDataTableRenderer($dataTable); - - $tableRenderer->setSerialize($this->shouldSerialize(1)); - $tableRenderer->setPrettyDisplay(Common::getRequestVar('prettyDisplay', false, 'int', $this->request)); - - return $tableRenderer->render(); - } - - public function renderArray($array) - { - if (!Piwik::isMultiDimensionalArray($array)) { - return $this->renderDataTable($array); - } - - if ($this->shouldSerialize(1)) { - return serialize($array); - } - - return $array; - } - - public function sendHeader() - { - Common::sendHeader('Content-Type: text/plain; charset=utf-8'); - } - - /** - * Returns true if the user requested to serialize the output data (&serialize=1 in the request) - * - * @param mixed $defaultSerializeValue Default value in case the user hasn't specified a value - * @return bool - */ - private function shouldSerialize($defaultSerializeValue) - { - $serialize = Common::getRequestVar('serialize', $defaultSerializeValue, 'int', $this->request); - - return !empty($serialize); - } - - private function serializeIfNeeded($response) - { - if ($this->shouldSerialize(1)) { - return serialize($response); - } - return $response; - } -} diff --git a/plugins/API/tests/System/AutoSuggestAPITest.php b/plugins/API/tests/System/AutoSuggestAPITest.php index 006f780424ed..b4901efd6e22 100644 --- a/plugins/API/tests/System/AutoSuggestAPITest.php +++ b/plugins/API/tests/System/AutoSuggestAPITest.php @@ -126,9 +126,9 @@ public function testAnotherApi($api, $params) 'method=API.getSuggestedValuesForSegment' . '&segmentName=' . $params['segmentToComplete'] . '&idSite=' . $params['idSite'] - . '&format=php&serialize=0' + . '&format=json' ); - $response = $request->process(); + $response = json_decode($request->process(), true); $this->assertApiResponseHasNoError($response); $topSegmentValue = @$response[0]; diff --git a/plugins/API/tests/Unit/PhpRendererTest.php b/plugins/API/tests/Unit/PhpRendererTest.php deleted file mode 100644 index ea28790ff21a..000000000000 --- a/plugins/API/tests/Unit/PhpRendererTest.php +++ /dev/null @@ -1,218 +0,0 @@ -builder = $this->makeBuilder(array('serialize' => 0)); - DataTable\Manager::getInstance()->deleteAll(); - } - - public function test_renderSuccess_shouldAlwaysReturnTrueAndIgnoreMessage() - { - $response = $this->builder->renderSuccess('ok'); - $expected = array('result' => 'success', 'message' => 'ok'); - - $this->assertEquals($expected, $response); - } - - public function test_renderSuccess_shouldSerializeByDefault() - { - $response = $this->makeBuilder(array())->renderSuccess('ok'); - $expected = 'a:2:{s:6:"result";s:7:"success";s:7:"message";s:2:"ok";}'; - - $this->assertEquals($expected, $response); - } - - public function test_renderException_shouldReturnTheMessageAndNotTheExceptionMessage() - { - $response = $this->builder->renderException('This message should be ignored', new \BadMethodCallException('The other message')); - $expected = array('result' => 'error', 'message' => 'This message should be ignored'); - - $this->assertEquals($expected, $response); - } - - public function test_renderException_shouldSerializeByDefault() - { - $response = $this->makeBuilder(array())->renderException('This message should be ignored', new \BadMethodCallException('The other message')); - $expected = 'a:2:{s:6:"result";s:5:"error";s:7:"message";s:30:"This message should be ignored";}'; - - $this->assertEquals($expected, $response); - } - - public function test_renderScalar_shouldReturnTheSameValue() - { - $response = $this->builder->renderScalar(true); - $this->assertEquals(true, $response); - - $response = $this->builder->renderScalar(5); - $this->assertEquals(5, $response); - - $response = $this->builder->renderScalar('string'); - $this->assertEquals('string', $response); - } - - public function test_renderObject_shouldReturnTheSameValue() - { - $response = $this->builder->renderObject($this); - $expected = array('result' => 'error', 'message' => 'The API cannot handle this data structure.'); - - $this->assertEquals($expected, $response); - } - - public function test_renderResource_shouldReturnTheSameValue() - { - $resource = curl_init(); - $response = $this->builder->renderResource($resource); - $expected = array('result' => 'error', 'message' => 'The API cannot handle this data structure.'); - - $this->assertEquals($expected, $response); - } - - public function test_renderDataTable_shouldNotSerializeIfDisabled() - { - $dataTable = new DataTable(); - $dataTable->addRowFromSimpleArray(array('nb_visits' => 5, 'nb_random' => 10)); - - $response = $this->builder->renderDataTable($dataTable); - $expected = array( - array('nb_visits' => 5, 'nb_random' => 10) - ); - $this->assertEquals($expected, $response); - } - - public function test_renderDataTable_shouldSerializeByDefault() - { - $dataTable = new DataTable(); - $dataTable->addRowFromSimpleArray(array('nb_visits' => 5, 'nb_random' => 10)); - - $builder = $this->makeBuilder(array()); - $response = $builder->renderDataTable($dataTable); - - $expected = 'a:1:{i:0;a:2:{s:9:"nb_visits";i:5;s:9:"nb_random";i:10;}}'; - $this->assertSame($expected, $response); - } - - public function test_renderDataTable_shouldRenderSubtables() - { - $subtable = new DataTable(); - $subtable->addRowFromSimpleArray(array('nb_visits' => 2, 'nb_random' => 6)); - - $dataTable = new DataTable(); - $dataTable->addRowFromSimpleArray(array('nb_visits' => 5, 'nb_random' => 10)); - $dataTable->getFirstRow()->setSubtable($subtable); - - $response = $this->builder->renderDataTable($dataTable); - $expected = array(array('nb_visits' => 5, 'nb_random' => 10, 'idsubdatatable' => 1)); - - $this->assertEquals($expected, $response); - } - - public function test_renderDataTable_shouldRenderDataTableMaps() - { - $map = new DataTable\Map(); - - $dataTable = new DataTable(); - $dataTable->addRowFromSimpleArray(array('nb_visits' => 5, 'nb_random' => 10)); - - $dataTable2 = new DataTable(); - $dataTable2->addRowFromSimpleArray(array('nb_visits' => 3, 'nb_random' => 6)); - - $map->addTable($dataTable, 'table1'); - $map->addTable($dataTable2, 'table2'); - - $response = $this->builder->renderDataTable($map); - $expected = array( - 'table1' => array(array('nb_visits' => 5, 'nb_random' => 10)), - 'table2' => array(array('nb_visits' => 3, 'nb_random' => 6)) - ); - - $this->assertEquals($expected, $response); - } - - public function test_renderDataTable_shouldRenderSimpleDataTable() - { - $dataTable = new DataTable\Simple(); - $dataTable->addRowsFromArray(array('nb_visits' => 3, 'nb_random' => 6)); - - $response = $this->builder->renderDataTable($dataTable); - $expected = array('nb_visits' => 3, 'nb_random' => 6); - - $this->assertEquals($expected, $response); - } - - public function test_renderArray_ShouldReturnSameArrayNotSerialize() - { - $input = array(1, 2, 5, 'string', 10); - - // builder has serialize=0 - $response = $this->builder->renderArray($input); - - $this->assertSame($input, $response); - } - - public function test_renderArray_ShouldSerializeByDefault() - { - $builder = $this->makeBuilder(array()); - $input = array(1, 2, 5, 'string', 10); - - $response = $builder->renderArray($input); - - $this->assertSame('a:5:{i:0;i:1;i:1;i:2;i:2;i:5;i:3;s:6:"string";i:4;i:10;}', $response); - } - - public function test_renderArray_ShouldSerializeByDefaulMultiDimensionalArray() - { - $input = array( - "firstElement" => "isFirst", - "secondElement" => array( - "firstElement" => "isFirst", - "secondElement" => "isSecond", - ), - "thirdElement" => "isThird"); - - $builder = $this->makeBuilder(array()); - $actual = $builder->renderArray($input); - $this->assertSame( serialize($input), $actual); - } - - public function test_renderArray_ShouldConvertMultiDimensionalAssociativeArrayToJson() - { - $input = array( - "firstElement" => "isFirst", - "secondElement" => array( - "firstElement" => "isFirst", - "secondElement" => "isSecond", - ), - "thirdElement" => "isThird"); - - $actual = $this->builder->renderArray($input); - $this->assertSame($input, $actual); - } - - private function makeBuilder($request) - { - return new Php($request); - } -} diff --git a/plugins/CoreUpdater/tests/UI/CoreUpdaterDb_spec.js b/plugins/CoreUpdater/tests/UI/CoreUpdaterDb_spec.js index af81d3b45969..2972b4733353 100644 --- a/plugins/CoreUpdater/tests/UI/CoreUpdaterDb_spec.js +++ b/plugins/CoreUpdater/tests/UI/CoreUpdaterDb_spec.js @@ -34,7 +34,7 @@ describe("CoreUpdaterDb", function () { }); } - var formats = ['CSV', 'TSV', 'XML', 'JSON', 'PHP']; + var formats = ['CSV', 'TSV', 'XML', 'JSON']; formats.forEach(apiUpgradeTest); it("should start the updater when an old version of Piwik is detected in the DB", async function() { diff --git a/plugins/MultiSites/Dashboard.php b/plugins/MultiSites/Dashboard.php index 590cadee1595..393e3e8025c2 100644 --- a/plugins/MultiSites/Dashboard.php +++ b/plugins/MultiSites/Dashboard.php @@ -209,8 +209,8 @@ private function convertDataTableToArrayAndApplyQueuedFilters(DataTable $table, $request['format_metrics'] = 1; $request['disable_generic_filters'] = 1; - $responseBuilder = new ResponseBuilder('php', $request); - $rows = $responseBuilder->getResponse($table, 'MultiSites', 'getAll'); + $responseBuilder = new ResponseBuilder('json', $request); + $rows = json_decode($responseBuilder->getResponse($table, 'MultiSites', 'getAll'), true); return $rows; } diff --git a/plugins/SEO/Widgets/GetRank.php b/plugins/SEO/Widgets/GetRank.php index ebc9f6eb505c..16eadeb1ac9d 100644 --- a/plugins/SEO/Widgets/GetRank.php +++ b/plugins/SEO/Widgets/GetRank.php @@ -51,13 +51,12 @@ public function render() $dataTable = API::getInstance()->getRank($url); - /** @var \Piwik\DataTable\Renderer\Php $renderer */ - $renderer = Renderer::factory('php'); - $renderer->setSerialize(false); + /** @var \Piwik\DataTable\Renderer\Json $renderer */ + $renderer = Renderer::factory('json'); return $this->renderTemplate('getRank', array( 'urlToRank' => Url::getHostFromUrl($url), - 'ranks' => $renderer->render($dataTable) + 'ranks' => json_decode($renderer->render($dataTable), true) )); } diff --git a/plugins/SEO/tests/Integration/SEOTest.php b/plugins/SEO/tests/Integration/SEOTest.php index 374923f6984e..73ba4d14d429 100644 --- a/plugins/SEO/tests/Integration/SEOTest.php +++ b/plugins/SEO/tests/Integration/SEOTest.php @@ -51,9 +51,8 @@ public function test_API() } catch(Exception $e) { $this->markTestSkipped('A SEO http request failed, Skipping this test for now. Error was: '.$e->getMessage()); } - $renderer = Renderer::factory('php'); - $renderer->setSerialize(false); - $ranks = $renderer->render($dataTable); + $renderer = Renderer::factory('json'); + $ranks = json_decode($renderer->render($dataTable), true); foreach ($ranks as $rank) { if ($rank["id"] == "alexa") { // alexa is broken at the moment continue; diff --git a/plugins/UserCountryMap/Controller.php b/plugins/UserCountryMap/Controller.php index 854362f73db6..b042ff6a601f 100644 --- a/plugins/UserCountryMap/Controller.php +++ b/plugins/UserCountryMap/Controller.php @@ -68,7 +68,7 @@ public function visitorMap($fetch = false, $segmentOverride = false) // request visits summary $request = new Request( - 'method=VisitsSummary.get&format=php' + 'method=VisitsSummary.get&format=json' . '&idSite=' . $this->idSite . '&period=' . $period . '&date=' . $date @@ -77,7 +77,7 @@ public function visitorMap($fetch = false, $segmentOverride = false) . '&filter_limit=-1' ); $config = array(); - $config['visitsSummary'] = Common::safe_unserialize($request->process()); + $config['visitsSummary'] = json_decode($request->process(), true); $config['countryDataUrl'] = $this->_report('UserCountry', 'getCountry', $this->idSite, $period, $date, $token_auth, false, $segment); $config['regionDataUrl'] = $this->_report('UserCountry', 'getRegion', @@ -274,7 +274,7 @@ private function checkUserCountryPluginEnabled() private function getMetrics($idSite, $period, $date, $token_auth) { $request = new Request( - 'method=API.getMetadata&format=PHP' + 'method=API.getMetadata&format=json' . '&apiModule=UserCountry&apiAction=getCountry' . '&idSite=' . $idSite . '&period=' . $period @@ -282,7 +282,7 @@ private function getMetrics($idSite, $period, $date, $token_auth) . '&token_auth=' . $token_auth . '&filter_limit=-1' ); - $metaData = Common::safe_unserialize($request->process()); + $metaData = json_decode($request->process(), true); $metrics = array(); if (!empty($metaData[0]['metrics']) && is_array($metaData[0]['metrics'])) { diff --git a/tests/PHPUnit/Framework/TestRequest/Collection.php b/tests/PHPUnit/Framework/TestRequest/Collection.php index 2dc256e78037..b7b6cc1d8f0e 100644 --- a/tests/PHPUnit/Framework/TestRequest/Collection.php +++ b/tests/PHPUnit/Framework/TestRequest/Collection.php @@ -229,11 +229,10 @@ protected function generateApiUrlPermutations($parametersToSet) 'idSite' => $parametersToSet['idSite'], 'period' => $parametersToSet['period'], 'date' => $parametersToSet['date'], - 'format' => 'php', - 'serialize' => 0, + 'format' => 'json', )); - $content = $request->process(); + $content = json_decode($request->process(), true); SystemTestCase::assertApiResponseHasNoError($content); // find first row w/ subtable diff --git a/tests/PHPUnit/Integration/CronArchiveTest.php b/tests/PHPUnit/Integration/CronArchiveTest.php index 74f0dc561b28..498eb5743fba 100644 --- a/tests/PHPUnit/Integration/CronArchiveTest.php +++ b/tests/PHPUnit/Integration/CronArchiveTest.php @@ -87,7 +87,7 @@ public function test_wasSegmentCreatedRecently() public function test_skipSegmentsToday() { \Piwik\Tests\Framework\Mock\FakeCliMulti::$specifiedResults = array( - '/method=API.get/' => serialize(array(array('nb_visits' => 1))) + '/method=API.get/' => json_encode(array(array('nb_visits' => 1))) ); Fixture::createWebsite('2014-12-12 00:01:02'); @@ -114,7 +114,7 @@ public function test_skipSegmentsToday() public function test_output() { \Piwik\Tests\Framework\Mock\FakeCliMulti::$specifiedResults = array( - '/method=API.get/' => serialize(array(array('nb_visits' => 1))) + '/method=API.get/' => json_encode(array(array('nb_visits' => 1))) ); Fixture::createWebsite('2014-12-12 00:01:02'); @@ -190,7 +190,7 @@ public function test_output() public function test_shouldNotStopProcessingWhenOneSiteIsInvalid() { \Piwik\Tests\Framework\Mock\FakeCliMulti::$specifiedResults = array( - '/method=API.get/' => serialize(array(array('nb_visits' => 1))) + '/method=API.get/' => json_encode(array(array('nb_visits' => 1))) ); Fixture::createWebsite('2014-12-12 00:01:02'); diff --git a/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php b/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php index 4e72693de4cf..d33d4a32266a 100644 --- a/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php +++ b/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php @@ -366,9 +366,8 @@ public function getSegmentTable() private function assertTableRowsEquals($expectedRows, $table) { - $renderer = new DataTable\Renderer\Php(); - $renderer->setSerialize(false); - $actualRows = $renderer->render($table); + $renderer = new DataTable\Renderer\Json(); + $actualRows = json_decode($renderer->render($table), true); $this->assertEquals($expectedRows, $actualRows); } diff --git a/tests/PHPUnit/System/ApiGetReportMetadataTest.php b/tests/PHPUnit/System/ApiGetReportMetadataTest.php index 0ac96175cd70..fcf9d9c8b20e 100644 --- a/tests/PHPUnit/System/ApiGetReportMetadataTest.php +++ b/tests/PHPUnit/System/ApiGetReportMetadataTest.php @@ -74,10 +74,6 @@ public function getApiForTesting() // Test w/ showRawMetrics=true array('Actions.getPageTitles', array('idSite' => $idSite, 'date' => $dateTime, 'testSuffix' => '_pageTitleZeroString')), - - // test php renderer w/ array data - array('API.getDefaultMetricTranslations', array('idSite' => $idSite, 'date' => $dateTime, - 'format' => 'php', 'testSuffix' => '_phpRenderer')), ); } diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php deleted file mode 100644 index 48effc749615..000000000000 --- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_phpRenderer__API.getDefaultMetricTranslations.php +++ /dev/null @@ -1 +0,0 @@ -a:1:{i:0;a:112:{s:9:"nb_visits";s:6:"Visits";s:16:"nb_uniq_visitors";s:15:"Unique visitors";s:10:"nb_actions";s:7:"Actions";s:8:"nb_users";s:5:"Users";s:20:"nb_actions_per_visit";s:17:"Actions per Visit";s:16:"avg_time_on_site";s:20:"Avg. Time on Website";s:11:"bounce_rate";s:11:"Bounce Rate";s:15:"conversion_rate";s:15:"Conversion Rate";s:5:"label";s:5:"Label";s:4:"date";s:4:"Date";s:16:"avg_time_on_page";s:17:"Avg. time on page";s:14:"sum_time_spent";s:41:"Total time spent by visitors (in seconds)";s:16:"sum_visit_length";s:41:"Total time spent by visitors (in seconds)";s:12:"bounce_count";s:7:"Bounces";s:22:"bounce_count_returning";s:33:"Bounce Count for Returning Visits";s:11:"max_actions";s:28:"Maximum actions in one visit";s:21:"max_actions_returning";s:38:"Maximum actions in one returning visit";s:29:"nb_visits_converted_returning";s:36:"Number of converted returning visits";s:26:"sum_visit_length_returning";s:51:"Total time spent by returning visitors (in seconds)";s:19:"nb_visits_converted";s:23:"Visits with Conversions";s:14:"nb_conversions";s:11:"Conversions";s:7:"revenue";s:7:"Revenue";s:7:"nb_hits";s:9:"Pageviews";s:15:"entry_nb_visits";s:9:"Entrances";s:22:"entry_nb_uniq_visitors";s:16:"Unique entrances";s:14:"exit_nb_visits";s:5:"Exits";s:21:"exit_nb_uniq_visitors";s:12:"Unique exits";s:18:"entry_bounce_count";s:7:"Bounces";s:17:"exit_bounce_count";s:7:"Bounces";s:9:"exit_rate";s:9:"Exit rate";s:26:"sum_daily_nb_uniq_visitors";s:27:"Unique visitors (daily sum)";s:18:"sum_daily_nb_users";s:17:"Users (daily sum)";s:32:"sum_daily_entry_nb_uniq_visitors";s:28:"Unique entrances (daily sum)";s:31:"sum_daily_exit_nb_uniq_visitors";s:24:"Unique exits (daily sum)";s:16:"entry_nb_actions";s:27:"Actions after entering here";s:22:"entry_sum_visit_length";s:61:"Total time spent by visitors (in seconds) after entering here";s:12:"nb_pageviews";s:9:"Pageviews";s:17:"nb_uniq_pageviews";s:16:"Unique Pageviews";s:12:"nb_downloads";s:9:"Downloads";s:17:"nb_uniq_downloads";s:16:"Unique Downloads";s:11:"nb_outlinks";s:8:"Outlinks";s:16:"nb_uniq_outlinks";s:15:"Unique Outlinks";s:11:"nb_searches";s:8:"Searches";s:11:"nb_keywords";s:15:"Unique Keywords";s:19:"avg_time_generation";s:20:"Avg. generation time";s:19:"nb_pages_per_search";s:20:"Search Results pages";s:24:"nb_hits_following_search";s:25:"Clicked in search results";s:16:"visits_evolution";s:16:"Visits Evolution";s:17:"actions_evolution";s:17:"Actions Evolution";s:19:"pageviews_evolution";s:19:"Pageviews Evolution";s:17:"revenue_evolution";s:17:"Revenue Evolution";s:24:"nb_conversions_evolution";s:21:"Conversions Evolution";s:16:"orders_evolution";s:26:"Ecommerce Orders Evolution";s:27:"ecommerce_revenue_evolution";s:25:"Product Revenue Evolution";s:35:"Referrers_visitorsFromSearchEngines";s:28:"Visitors from Search Engines";s:43:"Referrers_visitorsFromSearchEngines_percent";s:39:"Percent of Visitors from Search Engines";s:36:"Referrers_visitorsFromSocialNetworks";s:29:"Visitors from Social Networks";s:44:"Referrers_visitorsFromSocialNetworks_percent";s:40:"Percent of Visitors from Social Networks";s:33:"Referrers_visitorsFromDirectEntry";s:26:"Visitors from Direct Entry";s:41:"Referrers_visitorsFromDirectEntry_percent";s:37:"Percent of Visitors from Direct Entry";s:30:"Referrers_visitorsFromWebsites";s:22:"Visitors from Websites";s:38:"Referrers_visitorsFromWebsites_percent";s:33:"Percent of Visitors from Websites";s:31:"Referrers_visitorsFromCampaigns";s:23:"Visitors from Campaigns";s:39:"Referrers_visitorsFromCampaigns_percent";s:34:"Percent of Visitors from Campaigns";s:31:"Referrers_distinctSearchEngines";s:23:"Distinct search engines";s:32:"Referrers_distinctSocialNetworks";s:24:"Distinct social networks";s:26:"Referrers_distinctWebsites";s:17:"Distinct websites";s:26:"Referrers_distinctKeywords";s:17:"Distinct keywords";s:27:"Referrers_distinctCampaigns";s:18:"Distinct campaigns";s:6:"orders";s:16:"Ecommerce Orders";s:17:"ecommerce_revenue";s:15:"Product Revenue";s:17:"revenue_per_visit";s:17:"Revenue per Visit";s:8:"quantity";s:8:"Quantity";s:9:"avg_price";s:13:"Average Price";s:12:"avg_quantity";s:16:"Average Quantity";s:16:"revenue_subtotal";s:8:"Subtotal";s:11:"revenue_tax";s:3:"Tax";s:16:"revenue_shipping";s:8:"Shipping";s:16:"revenue_discount";s:8:"Discount";s:17:"avg_order_revenue";s:19:"Average Order Value";s:9:"nb_events";s:6:"Events";s:15:"sum_event_value";s:11:"Event value";s:15:"min_event_value";s:19:"Minimum Event value";s:15:"max_event_value";s:19:"Maximum Event value";s:15:"avg_event_value";s:13:"Average value";s:20:"nb_events_with_value";s:19:"Events with a value";s:19:"nb_visits_returning";s:16:"Returning Visits";s:20:"nb_actions_returning";s:27:"Actions by Returning Visits";s:26:"avg_time_on_site_returning";s:43:"Avg. Duration of a Returning Visit (in sec)";s:21:"bounce_rate_returning";s:32:"Bounce Rate for Returning Visits";s:30:"nb_actions_per_visit_returning";s:32:"Avg. Actions per Returning Visit";s:26:"nb_uniq_visitors_returning";s:25:"Unique returning visitors";s:18:"nb_users_returning";s:15:"Returning Users";s:13:"nb_visits_new";s:10:"New Visits";s:14:"nb_actions_new";s:21:"Actions by New Visits";s:20:"avg_time_on_site_new";s:37:"Avg. Duration of a New Visit (in sec)";s:15:"bounce_rate_new";s:26:"Bounce Rate for New Visits";s:24:"nb_actions_per_visit_new";s:26:"Avg. Actions per New Visit";s:20:"nb_uniq_visitors_new";s:19:"Unique new visitors";s:12:"nb_users_new";s:9:"New Users";s:14:"nb_impressions";s:11:"Impressions";s:15:"nb_interactions";s:20:"Content Interactions";s:16:"interaction_rate";s:16:"Interaction Rate";s:20:"nb_visits_percentage";s:8:"% Visits";s:22:"nb_hits_with_bandwidth";s:28:"Recorded hits with bandwidth";s:13:"max_bandwidth";s:13:"Max Bandwidth";s:13:"min_bandwidth";s:13:"Min Bandwidth";s:13:"sum_bandwidth";s:13:"Sum Bandwidth";s:13:"avg_bandwidth";s:14:"Avg. Bandwidth";s:26:"nb_total_overall_bandwidth";s:25:"Bytes transferred overall";s:27:"nb_total_pageview_bandwidth";s:27:"Bytes transferred pageviews";s:27:"nb_total_download_bandwidth";s:27:"Bytes transferred downloads";}} \ No newline at end of file diff --git a/tests/PHPUnit/Unit/API/ApiRendererTest.php b/tests/PHPUnit/Unit/API/ApiRendererTest.php index 37d193483f4e..c53dbe397a22 100644 --- a/tests/PHPUnit/Unit/API/ApiRendererTest.php +++ b/tests/PHPUnit/Unit/API/ApiRendererTest.php @@ -24,14 +24,14 @@ public function setUp() public function test_factory_shouldCreateAnInstance_IfValidFormatGiven() { - $renderer = ApiRenderer::factory('php', array()); - $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Php', $renderer); + $renderer = ApiRenderer::factory('xml', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Xml', $renderer); - $renderer = ApiRenderer::factory('PHP', array()); - $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Php', $renderer); + $renderer = ApiRenderer::factory('XML', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Xml', $renderer); - $renderer = ApiRenderer::factory('pHp', array()); - $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Php', $renderer); + $renderer = ApiRenderer::factory('cSv', array()); + $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Csv', $renderer); $renderer = ApiRenderer::factory('xmL', array()); $this->assertInstanceOf('Piwik\Plugins\API\Renderer\Xml', $renderer); @@ -46,6 +46,6 @@ public function test_factory_shouldCreateAnInstance_IfValidFormatGiven() */ public function test_factory_shouldThrowAnException_IfInvalidFormatGiven() { - ApiRenderer::factory('phpi', array()); + ApiRenderer::factory('csvi', array()); } } diff --git a/tests/PHPUnit/Unit/API/ResponseBuilderTest.php b/tests/PHPUnit/Unit/API/ResponseBuilderTest.php index 67280d9c3618..e2dbf07bb298 100644 --- a/tests/PHPUnit/Unit/API/ResponseBuilderTest.php +++ b/tests/PHPUnit/Unit/API/ResponseBuilderTest.php @@ -171,13 +171,13 @@ public function test_getResponse_shouldBeAbleToApplyFilterOnIndexedAssociativeAr $input[] = array('test' => 'two' . $i, 'test2' => 'three'); } - $builder = new ResponseBuilder('php', array('serialize' => 0)); + $builder = new ResponseBuilder('original', array('serialize' => 0)); $response = $builder->getResponse($input); $this->assertEquals($input, $response); $this->assertCount(10, $response); - $builder = new ResponseBuilder('php', array('serialize' => 0, 'showColumns' => 'test')); + $builder = new ResponseBuilder('original', array('serialize' => 0, 'showColumns' => 'test')); $response = $builder->getResponse($input); $this->assertEquals(array('test' => 'two0'), array_shift($response)); @@ -228,8 +228,8 @@ private function assertLimitedResponseEquals($expectedResponse, $input, $limit, $params['filter_offset'] = $offset; } - $builder = new ResponseBuilder('php', $params); - $response = $builder->getResponse($input); + $builder = new ResponseBuilder('json', $params); + $response = json_decode($builder->getResponse($input), true); $this->assertEquals($expectedResponse, $response); } @@ -239,14 +239,14 @@ public function test_getResponse_shouldAlwaysApplyDefaultFilterLimit_EvenWhenRes $input = range(0, 200); $limit = Config::getInstance()->General['API_datatable_default_limit']; - $builder = new ResponseBuilder('php', array( + $builder = new ResponseBuilder('json', array( 'serialize' => 0, 'api_datatable_default_limit' => $limit, 'filter_limit' => $limit, 'filter_offset' => 0)); $response = $builder->getResponse($input); - $this->assertEquals(range(0, 99), $response); + $this->assertEquals(range(0, 99), json_decode($response, true)); } public function test_getResponse_shouldApplyLimit_IfLimitIsSetBySystemButDifferentToDefaultLimit() @@ -255,14 +255,14 @@ public function test_getResponse_shouldApplyLimit_IfLimitIsSetBySystemButDiffere $defaultLimit = Config::getInstance()->General['API_datatable_default_limit']; $limit = $defaultLimit - 1; - $builder = new ResponseBuilder('php', array( + $builder = new ResponseBuilder('json', array( 'serialize' => 0, 'api_datatable_default_limit' => $defaultLimit, 'filter_limit' => $limit, 'filter_offset' => 0)); $response = $builder->getResponse($input); - $this->assertEquals(range(0, $limit - 1), $response); + $this->assertEquals(range(0, $limit - 1), json_decode($response, true)); } public function test_getResponse_shouldApplyFilterOffsetOnIndexedArray_IfFilterLimitIsGiven() @@ -309,7 +309,7 @@ public function test_getResponse_shouldApplyPattern_IfFilterColumnAndPatternIsGi 5 => array('url' => 'nz.piwik.org'), ); - $builder = new ResponseBuilder('php', array( + $builder = new ResponseBuilder('json', array( 'serialize' => 0, 'filter_limit' => -1, 'filter_column' => array('name', 'url'), @@ -321,7 +321,7 @@ public function test_getResponse_shouldApplyPattern_IfFilterColumnAndPatternIsGi 2 => array('name' => 'piwik', 'url' => 'piwik.org'), 5 => array('url' => 'nz.piwik.org'), ); - $this->assertEquals($expected, $response); + $this->assertEquals($expected, json_decode($response, true)); } public function test_getResponse_shouldBeAbleToApplyColumFilterAndLimitFilterOnIndexedAssociativeArray() @@ -333,7 +333,7 @@ public function test_getResponse_shouldBeAbleToApplyColumFilterAndLimitFilterOnI $limit = 3; - $builder = new ResponseBuilder('php', array( + $builder = new ResponseBuilder('json', array( 'serialize' => 0, 'filter_limit' => $limit, 'filter_offset' => 3, @@ -345,6 +345,6 @@ public function test_getResponse_shouldBeAbleToApplyColumFilterAndLimitFilterOnI 0 => array('test' => 'two3'), 1 => array('test' => 'two4'), 2 => array('test' => 'two5'), - ), $response); + ), json_decode($response, true)); } } diff --git a/tests/PHPUnit/Unit/DataTable/Renderer/PHPTest.php b/tests/PHPUnit/Unit/DataTable/Renderer/PHPTest.php deleted file mode 100644 index cf80b1cb8d07..000000000000 --- a/tests/PHPUnit/Unit/DataTable/Renderer/PHPTest.php +++ /dev/null @@ -1,512 +0,0 @@ -deleteAll(); - } - - /** - * DATA TESTS - * ----------------------- - * for each renderer we test the case - * - datatableSimple - * - normal datatable with 2 row (including columns and metadata) - */ - protected function _getDataTableTest() - { - $dataTable = new DataTable(); - - $arraySubTableForRow2 = array( - array(Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)), - array(Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)), - ); - $subDataTableForRow2 = new DataTable(); - $subDataTableForRow2->addRowsFromArray($arraySubTableForRow2); - - $array = array( - array(Row::COLUMNS => array('label' => 'Google©', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9), - Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png'), - ), - array(Row::COLUMNS => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90), - Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png'), - Row::DATATABLE_ASSOCIATED => $subDataTableForRow2, - ) - ); - $dataTable->addRowsFromArray($array); - return $dataTable; - } - - protected function _getDataTableSimpleTest() - { - $array = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0, 'nb_visits' => 66.0, 'nb_actions' => 151.0, 'sum_visit_length' => 5118.0, 'bounce_count' => 44.0,); - - $table = new Simple; - $table->addRowsFromArray($array); - return $table; - } - - protected function _getDataTableSimpleOneRowTest() - { - $array = array('nb_visits' => 14.0); - - $table = new Simple; - $table->addRowsFromArray($array); - return $table; - } - - protected function _getDataTableEmpty() - { - $table = new DataTable; - return $table; - } - - protected function _getDataTableSimpleOneZeroRowTest() - { - $array = array('nb_visits' => 0); - $table = new Simple; - $table->addRowsFromArray($array); - return $table; - } - - protected function _getDataTableSimpleOneFalseRowTest() - { - $array = array('is_excluded' => false); - $table = new Simple; - $table->addRowsFromArray($array); - return $table; - } - - - public function testPHPTest1() - { - $dataTable = $this->_getDataTableTest(); - $render = new Php(); - $render->setTable($dataTable); - $render->setRenderSubTables(true); - - $expected = serialize(array( - 0 => - array( - 'label' => 'Google©', - 'bool' => false, - 'goals' => array( - 'idgoal=1' => array( - 'revenue' => 5.5, - 'nb_conversions' => 10, - ), - ), - 'nb_uniq_visitors' => 11, - 'nb_visits' => 11, - 'nb_actions' => 17, - 'max_actions' => '5', - 'sum_visit_length' => 517, - 'bounce_count' => 9, - 'url' => 'http://www.google.com/display"and,properly', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png', - ), - 1 => - array( - 'label' => 'Yahoo!', - 'nb_uniq_visitors' => 15, - 'bool' => true, - 'nb_visits' => 151, - 'nb_actions' => 147, - 'max_actions' => '50', - 'sum_visit_length' => 517, - 'bounce_count' => 90, - 'url' => 'http://www.yahoo.com', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png', - 'idsubdatatable' => 2, - 'subtable' => - array( - 0 => - array( - 'label' => 'sub1', - 'count' => 1, - 'bool' => false, - ), - 1 => - array( - 'label' => 'sub2', - 'count' => 2, - 'bool' => true, - ), - ), - ), - )); - $rendered = $render->render(null); - $this->assertEquals($expected, $rendered); - } - - - public function testPHPTest2() - { - $dataTable = $this->_getDataTableSimpleTest(); - $render = new Php(); - $render->setTable($dataTable); - $expected = serialize(array( - 'max_actions' => 14.0, - 'nb_uniq_visitors' => 57.0, - 'nb_visits' => 66.0, - 'nb_actions' => 151.0, - 'sum_visit_length' => 5118.0, - 'bounce_count' => 44.0, - )); - $this->assertEquals($expected, $render->render()); - } - - - public function testPHPTest3() - { - $dataTable = $this->_getDataTableSimpleOneRowTest(); - $render = new Php(); - $render->setTable($dataTable); - $expected = serialize(14.0); - $this->assertEquals($expected, $render->render()); - } - - - public function testPHPTest4() - { - $dataTable = $this->_getDataTableEmpty(); - $render = new Php(); - $render->setTable($dataTable); - $expected = serialize(array()); - $this->assertEquals($expected, $render->render()); - } - - - public function testPHPTest5() - { - $dataTable = $this->_getDataTableSimpleOneZeroRowTest(); - $render = new Php(); - $render->setTable($dataTable); - $expected = serialize(0); - $this->assertEquals($expected, $render->render()); - } - - - public function testPHPTest6() - { - $dataTable = $this->_getDataTableSimpleOneFalseRowTest(); - $render = new Php(); - $render->setTable($dataTable); - $expected = serialize(false); - $this->assertEquals($expected, $render->render()); - } - - /** - * DATA OF DATATABLE_ARRAY - * ------------------------- - */ - - protected function _getDataTableMapTest() - { - $array1 = array( - array(Row::COLUMNS => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,), - Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png'), - ), - array(Row::COLUMNS => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,), - Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png'), - ) - ); - $table1 = new DataTable(); - $table1->addRowsFromArray($array1); - - $array2 = array( - array(Row::COLUMNS => array('label' => 'Google1©', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,), - Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png1'), - ), - array(Row::COLUMNS => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,), - Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png1'), - ) - ); - $table2 = new DataTable(); - $table2->addRowsFromArray($array2); - - $table3 = new DataTable(); - - $table = new DataTable\Map(); - $table->setKeyName('testKey'); - $table->addTable($table1, 'date1'); - $table->addTable($table2, 'date2'); - $table->addTable($table3, 'date3'); - - return $table; - } - - protected function _getDataTableSimpleMapTest() - { - $array1 = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0,); - $table1 = new Simple; - $table1->addRowsFromArray($array1); - - $array2 = array('max_actions' => 140.0, 'nb_uniq_visitors' => 570.0,); - $table2 = new Simple; - $table2->addRowsFromArray($array2); - - $table3 = new Simple; - - $table = new DataTable\Map(); - $table->setKeyName('testKey'); - $table->addTable($table1, 'row1'); - $table->addTable($table2, 'row2'); - $table->addTable($table3, 'row3'); - - return $table; - } - - protected function _getDataTableSimpleOneRowMapTest() - { - $array1 = array('nb_visits' => 14.0); - $table1 = new Simple; - $table1->addRowsFromArray($array1); - $array2 = array('nb_visits' => 15.0); - $table2 = new Simple; - $table2->addRowsFromArray($array2); - - $table3 = new Simple; - - $table = new DataTable\Map(); - $table->setKeyName('testKey'); - $table->addTable($table1, 'row1'); - $table->addTable($table2, 'row2'); - $table->addTable($table3, 'row3'); - - return $table; - } - - protected function _getDataTableMap_containsDataTableMap_normal() - { - $table = new DataTable\Map(); - $table->setKeyName('parentArrayKey'); - $table->addTable($this->_getDataTableMapTest(), 'idSite'); - return $table; - } - - protected function _getDataTableMap_containsDataTableMap_simple() - { - $table = new DataTable\Map(); - $table->setKeyName('parentArrayKey'); - $table->addTable($this->_getDataTableSimpleMapTest(), 'idSite'); - return $table; - } - - protected function _getDataTableMap_containsDataTableMap_simpleOneRow() - { - $table = new DataTable\Map(); - $table->setKeyName('parentArrayKey'); - $table->addTable($this->_getDataTableSimpleOneRowMapTest(), 'idSite'); - return $table; - } - - - public function testPHPMapTest1() - { - $dataTable = $this->_getDataTableMapTest(); - $render = new Php(); - $render->setTable($dataTable); - $rendered = $render->render(); - - $expected = serialize(array( - 'date1' => - array( - 0 => - array( - 'label' => 'Google', - 'nb_uniq_visitors' => 11, - 'nb_visits' => 11, - 'url' => 'http://www.google.com', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png', - ), - 1 => - array( - 'label' => 'Yahoo!', - 'nb_uniq_visitors' => 15, - 'nb_visits' => 151, - 'url' => 'http://www.yahoo.com', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png', - ), - ), - 'date2' => - array( - 0 => - array( - 'label' => 'Google1©', - 'nb_uniq_visitors' => 110, - 'nb_visits' => 110, - 'url' => 'http://www.google.com1', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png1', - ), - 1 => - array( - 'label' => 'Yahoo!1', - 'nb_uniq_visitors' => 150, - 'nb_visits' => 1510, - 'url' => 'http://www.yahoo.com1', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png1', - ), - ), - 'date3' => array(), - )); - $this->assertEquals($expected, $rendered); - } - - - public function testPHPMapTest2() - { - $dataTable = $this->_getDataTableSimpleMapTest(); - $render = new Php(); - $render->setTable($dataTable); - $rendered = $render->render(); - - $expected = serialize(array( - 'row1' => - array( - 'max_actions' => 14.0, - 'nb_uniq_visitors' => 57.0, - ), - 'row2' => - array( - 'max_actions' => 140.0, - 'nb_uniq_visitors' => 570.0, - ), - 'row3' => - array(), - )); - $this->assertEquals($expected, $rendered); - } - - - public function testPHPMapTest3() - { - $dataTable = $this->_getDataTableSimpleOneRowMapTest(); - $render = new Php(); - $render->setTable($dataTable); - $rendered = $render->render(); - - $expected = serialize(array( - 'row1' => 14.0, - 'row2' => 15.0, - 'row3' => array(), - )); - $this->assertEquals($expected, $rendered); - } - - - public function testPHPMapIsMadeOfMapTest1() - { - $dataTable = $this->_getDataTableMap_containsDataTableMap_normal(); - $render = new Php(); - $render->setTable($dataTable); - $rendered = $render->render(); - - $expected = serialize(array('idSite' => - array( - 'date1' => - array( - 0 => - array( - 'label' => 'Google', - 'nb_uniq_visitors' => 11, - 'nb_visits' => 11, - 'url' => 'http://www.google.com', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png', - ), - 1 => - array( - 'label' => 'Yahoo!', - 'nb_uniq_visitors' => 15, - 'nb_visits' => 151, - 'url' => 'http://www.yahoo.com', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png', - ), - ), - 'date2' => - array( - 0 => - array( - 'label' => 'Google1©', - 'nb_uniq_visitors' => 110, - 'nb_visits' => 110, - 'url' => 'http://www.google.com1', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.google.com.png1', - ), - 1 => - array( - 'label' => 'Yahoo!1', - 'nb_uniq_visitors' => 150, - 'nb_visits' => 1510, - 'url' => 'http://www.yahoo.com1', - 'logo' => './plugins/Morpheus/icons/dist/searchEngines/www.yahoo.com.png1', - ), - ), - 'date3' => array(), - ))); - - $this->assertEquals($expected, $rendered); - } - - - public function testPHPMapIsMadeOfMapTest2() - { - $dataTable = $this->_getDataTableMap_containsDataTableMap_simple(); - $render = new Php(); - $render->setTable($dataTable); - $rendered = $render->render(); - - $expected = serialize(array('idSite' => - array( - 'row1' => - array( - 'max_actions' => 14.0, - 'nb_uniq_visitors' => 57.0, - ), - 'row2' => - array( - 'max_actions' => 140.0, - 'nb_uniq_visitors' => 570.0, - ), - 'row3' => - array(), - ))); - $this->assertEquals($expected, $rendered); - } - - - public function testPHPMapIsMadeOfMapTest3() - { - $dataTable = $this->_getDataTableMap_containsDataTableMap_simpleOneRow(); - $render = new Php(); - $render->setTable($dataTable); - $rendered = $render->render(); - - $expected = serialize(array('idSite' => - array( - 'row1' => 14.0, - 'row2' => 15.0, - 'row3' => array(), - ))); - $this->assertEquals($expected, $rendered); - } -} diff --git a/tests/PHPUnit/Unit/FilesystemTest.php b/tests/PHPUnit/Unit/FilesystemTest.php index 66e8808c7bf3..923608cb4576 100644 --- a/tests/PHPUnit/Unit/FilesystemTest.php +++ b/tests/PHPUnit/Unit/FilesystemTest.php @@ -101,7 +101,6 @@ public function test_directoryDiff_shouldReturnAllTargetFiles_IfSourceIsEmpty() '/DataTable/Renderer/Csv.php', '/DataTable/Renderer/Html.php', '/DataTable/Renderer/Json.php', - '/DataTable/Renderer/Php.php', '/DataTable/Renderer/Rss.php', '/DataTable/Renderer/Tsv.php', '/DataTable/Renderer/Xml', @@ -132,7 +131,6 @@ public function test_directoryDiff_shouldReturnFilesPresentInTargetButNotSource_ '/DataTable/Filter/index.htm', // this was is created as side effect of "Target files" being within the tmp/ folder, @see createIndexFilesToPreventDirectoryListing '/DataTable/Filter/index.php', // this was is created as side effect of "Target files" being within the tmp/ folder, @see createIndexFilesToPreventDirectoryListing '/DataTable/Renderer/Json.php', - '/DataTable/Renderer/Php.php', '/DataTable/Renderer/Rss.php', '/DataTable/Renderer/Xml', '/DataTable/Renderer/Xml/Other.php', @@ -152,7 +150,7 @@ public function test_unlinkTargetFilesNotPresentInSource_shouldUnlinkFilesPresen // make sure there is a difference between those folders $result = Filesystem::directoryDiff($source, $target); - $this->assertCount(14, $result); + $this->assertCount(13, $result); Filesystem::unlinkTargetFilesNotPresentInSource($source, $target); @@ -233,7 +231,6 @@ private function createTargetFiles() file_put_contents($target . '/DataTable/Renderer/Csv.php', ''); file_put_contents($target . '/DataTable/Renderer/Html.php', ''); file_put_contents($target . '/DataTable/Renderer/Json.php', ''); - file_put_contents($target . '/DataTable/Renderer/Php.php', ''); file_put_contents($target . '/DataTable/Renderer/Rss.php', ''); file_put_contents($target . '/DataTable/Renderer/Tsv.php', ''); file_put_contents($target . '/DataTable/Renderer/Xml.php', ''); diff --git a/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.php.txt b/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.php.txt deleted file mode 100644 index 3af21f11cf46..000000000000 --- a/tests/UI/expected-screenshots/ReportExporting_Referrers.getWebsites_exported.php.txt +++ /dev/null @@ -1 +0,0 @@ -a:17:{i:0;a:15:{s:5:"label";s:12:"referrer.com";s:9:"nb_visits";i:11;s:10:"nb_actions";i:45;s:11:"max_actions";d:7;s:16:"sum_visit_length";i:7398;s:12:"bounce_count";i:2;s:19:"nb_visits_converted";i:11;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:23;s:19:"nb_visits_converted";i:11;s:7:"revenue";d:115;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:11;s:19:"nb_visits_converted";i:11;s:7:"revenue";d:55;}}s:14:"nb_conversions";i:34;s:7:"revenue";d:170;s:26:"sum_daily_nb_uniq_visitors";i:11;s:18:"sum_daily_nb_users";i:2;s:14:"idsubdatatable";i:8;s:7:"segment";s:26:"referrerName==referrer.com";s:8:"subtable";a:5:{i:0;a:9:{s:5:"label";s:34:"http://referrer.com/Other_Page.htm";s:9:"nb_visits";i:4;s:10:"nb_actions";i:18;s:11:"max_actions";d:5;s:16:"sum_visit_length";i:2888;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:4;s:26:"sum_daily_nb_uniq_visitors";i:4;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:35:"https://referrer.com/Other_Page.htm";s:9:"nb_visits";i:4;s:10:"nb_actions";i:18;s:11:"max_actions";d:5;s:16:"sum_visit_length";i:2888;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:4;s:26:"sum_daily_nb_uniq_visitors";i:4;s:18:"sum_daily_nb_users";i:0;}i:2;a:9:{s:5:"label";s:54:"http://referrer.com/<script>_x(8)</script>";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:0;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:1;}i:3;a:9:{s:5:"label";s:56:"http://referrer.com/page.htm?param=valuewith some spaces";s:9:"nb_visits";i:1;s:10:"nb_actions";i:7;s:11:"max_actions";d:7;s:16:"sum_visit_length";i:1622;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:4;a:9:{s:5:"label";s:69:"http://referrer.com/{{constructor.constructor("_x(21)")()}}";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:0;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:1;}}}i:1;a:15:{s:5:"label";s:17:"www.referrer1.com";s:9:"nb_visits";i:8;s:10:"nb_actions";i:12;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2194;s:12:"bounce_count";i:6;s:19:"nb_visits_converted";i:8;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:14;s:19:"nb_visits_converted";i:8;s:7:"revenue";d:70;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:8;s:19:"nb_visits_converted";i:8;s:7:"revenue";d:40;}}s:14:"nb_conversions";i:22;s:7:"revenue";d:110;s:26:"sum_daily_nb_uniq_visitors";i:8;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:5;s:7:"segment";s:31:"referrerName==www.referrer1.com";s:8:"subtable";a:4:{i:0;a:9:{s:5:"label";s:46:"http://www.referrer1.com/theReferrerPage0.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:46:"http://www.referrer1.com/theReferrerPage1.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}i:2;a:9:{s:5:"label";s:43:"http://www.referrer1.com/sub/dir/page1.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:3;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:3;a:9:{s:5:"label";s:43:"http://www.referrer1.com/sub/dir/page2.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:3;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:2;a:15:{s:5:"label";s:17:"www.referrer2.com";s:9:"nb_visits";i:8;s:10:"nb_actions";i:12;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2194;s:12:"bounce_count";i:6;s:19:"nb_visits_converted";i:8;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:14;s:19:"nb_visits_converted";i:8;s:7:"revenue";d:70;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:8;s:19:"nb_visits_converted";i:8;s:7:"revenue";d:40;}}s:14:"nb_conversions";i:22;s:7:"revenue";d:110;s:26:"sum_daily_nb_uniq_visitors";i:8;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:6;s:7:"segment";s:31:"referrerName==www.referrer2.com";s:8:"subtable";a:4:{i:0;a:9:{s:5:"label";s:46:"http://www.referrer2.com/theReferrerPage0.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:46:"http://www.referrer2.com/theReferrerPage1.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}i:2;a:9:{s:5:"label";s:43:"http://www.referrer2.com/sub/dir/page1.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:3;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:3;a:9:{s:5:"label";s:43:"http://www.referrer2.com/sub/dir/page2.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:3;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:3;a:15:{s:5:"label";s:17:"www.referrer3.com";s:9:"nb_visits";i:8;s:10:"nb_actions";i:12;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2194;s:12:"bounce_count";i:6;s:19:"nb_visits_converted";i:8;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:14;s:19:"nb_visits_converted";i:8;s:7:"revenue";d:70;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:8;s:19:"nb_visits_converted";i:8;s:7:"revenue";d:40;}}s:14:"nb_conversions";i:22;s:7:"revenue";d:110;s:26:"sum_daily_nb_uniq_visitors";i:8;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:7;s:7:"segment";s:31:"referrerName==www.referrer3.com";s:8:"subtable";a:4:{i:0;a:9:{s:5:"label";s:46:"http://www.referrer3.com/theReferrerPage0.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:46:"http://www.referrer3.com/theReferrerPage1.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}i:2;a:9:{s:5:"label";s:43:"http://www.referrer3.com/sub/dir/page1.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:3;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:3;a:9:{s:5:"label";s:43:"http://www.referrer3.com/sub/dir/page2.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:3;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:4;a:15:{s:5:"label";s:17:"www.referrer0.com";s:9:"nb_visits";i:7;s:10:"nb_actions";i:7;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:2555;s:12:"bounce_count";i:7;s:19:"nb_visits_converted";i:7;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:14;s:19:"nb_visits_converted";i:7;s:7:"revenue";d:70;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:7;s:19:"nb_visits_converted";i:7;s:7:"revenue";d:35;}}s:14:"nb_conversions";i:21;s:7:"revenue";d:105;s:26:"sum_daily_nb_uniq_visitors";i:7;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:14;s:7:"segment";s:31:"referrerName==www.referrer0.com";s:8:"subtable";a:2:{i:0;a:9:{s:5:"label";s:46:"http://www.referrer0.com/theReferrerPage0.html";s:9:"nb_visits";i:4;s:10:"nb_actions";i:4;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1460;s:12:"bounce_count";i:4;s:19:"nb_visits_converted";i:4;s:26:"sum_daily_nb_uniq_visitors";i:4;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:46:"http://www.referrer0.com/theReferrerPage1.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}}}i:5;a:15:{s:5:"label";s:17:"www.referrer4.com";s:9:"nb_visits";i:6;s:10:"nb_actions";i:6;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:2190;s:12:"bounce_count";i:6;s:19:"nb_visits_converted";i:6;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:12;s:19:"nb_visits_converted";i:6;s:7:"revenue";d:60;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:6;s:19:"nb_visits_converted";i:6;s:7:"revenue";d:30;}}s:14:"nb_conversions";i:18;s:7:"revenue";d:90;s:26:"sum_daily_nb_uniq_visitors";i:6;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:15;s:7:"segment";s:31:"referrerName==www.referrer4.com";s:8:"subtable";a:2:{i:0;a:9:{s:5:"label";s:46:"http://www.referrer4.com/theReferrerPage0.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:46:"http://www.referrer4.com/theReferrerPage1.html";s:9:"nb_visits";i:3;s:10:"nb_actions";i:3;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1095;s:12:"bounce_count";i:3;s:19:"nb_visits_converted";i:3;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;}}}i:6;a:15:{s:5:"label";s:13:"whatever0.com";s:9:"nb_visits";i:4;s:10:"nb_actions";i:4;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:4;s:12:"bounce_count";i:4;s:19:"nb_visits_converted";i:4;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:4;s:19:"nb_visits_converted";i:4;s:7:"revenue";d:20;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:4;s:19:"nb_visits_converted";i:4;s:7:"revenue";d:20;}}s:14:"nb_conversions";i:8;s:7:"revenue";d:40;s:26:"sum_daily_nb_uniq_visitors";i:3;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:2;s:7:"segment";s:27:"referrerName==whatever0.com";s:8:"subtable";a:3:{i:0;a:9:{s:5:"label";s:22:"http://whatever0.com/0";s:9:"nb_visits";i:2;s:10:"nb_actions";i:2;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:2;s:19:"nb_visits_converted";i:2;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:22:"http://whatever0.com/1";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:2;a:9:{s:5:"label";s:22:"http://whatever0.com/2";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:7;a:15:{s:5:"label";s:15:"anothersite.com";s:9:"nb_visits";i:2;s:10:"nb_actions";i:6;s:11:"max_actions";d:5;s:16:"sum_visit_length";i:723;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:2;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:6;s:19:"nb_visits_converted";i:2;s:7:"revenue";d:30;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:2;s:19:"nb_visits_converted";i:2;s:7:"revenue";d:10;}}s:14:"nb_conversions";i:8;s:7:"revenue";d:40;s:26:"sum_daily_nb_uniq_visitors";i:2;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:13;s:7:"segment";s:29:"referrerName==anothersite.com";s:8:"subtable";a:2:{i:0;a:9:{s:5:"label";s:36:"http://anothersite.com/whatever.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:49:"http://anothersite.com/whatever.html?whatever=Ato";s:9:"nb_visits";i:1;s:10:"nb_actions";i:5;s:11:"max_actions";d:5;s:16:"sum_visit_length";i:722;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:8;a:15:{s:5:"label";s:13:"whatever1.com";s:9:"nb_visits";i:2;s:10:"nb_actions";i:2;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:2;s:19:"nb_visits_converted";i:2;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:2;s:19:"nb_visits_converted";i:2;s:7:"revenue";d:10;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:2;s:19:"nb_visits_converted";i:2;s:7:"revenue";d:10;}}s:14:"nb_conversions";i:4;s:7:"revenue";d:20;s:26:"sum_daily_nb_uniq_visitors";i:2;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:3;s:7:"segment";s:27:"referrerName==whatever1.com";s:8:"subtable";a:2:{i:0;a:9:{s:5:"label";s:22:"http://whatever1.com/0";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:22:"http://whatever1.com/2";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:9;a:15:{s:5:"label";s:19:"www.external.com.vn";s:9:"nb_visits";i:2;s:10:"nb_actions";i:7;s:11:"max_actions";d:4;s:16:"sum_visit_length";i:1804;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:2;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:7;s:19:"nb_visits_converted";i:2;s:7:"revenue";d:35;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:2;s:19:"nb_visits_converted";i:2;s:7:"revenue";d:10;}}s:14:"nb_conversions";i:9;s:7:"revenue";d:45;s:26:"sum_daily_nb_uniq_visitors";i:2;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:12;s:7:"segment";s:33:"referrerName==www.external.com.vn";s:8:"subtable";a:2:{i:0;a:9:{s:5:"label";s:52:"http://www.external.com.vn/referrerPage-counted.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:3;s:11:"max_actions";d:3;s:16:"sum_visit_length";i:722;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}i:1;a:9:{s:5:"label";s:55:"http://www.external.com.vn/referrerPage-notCounted.html";s:9:"nb_visits";i:1;s:10:"nb_actions";i:4;s:11:"max_actions";d:4;s:16:"sum_visit_length";i:1082;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:10;a:15:{s:5:"label";s:22:"mutantregistration.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}}s:14:"nb_conversions";i:2;s:7:"revenue";d:10;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:9;s:7:"segment";s:36:"referrerName==mutantregistration.com";s:8:"subtable";a:1:{i:0;a:9:{s:5:"label";s:29:"http://mutantregistration.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:11;a:15:{s:5:"label";s:26:"myotherreferrerwebsite.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:2;s:11:"max_actions";d:2;s:16:"sum_visit_length";i:362;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:2;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:10;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}}s:14:"nb_conversions";i:3;s:7:"revenue";d:15;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:10;s:7:"segment";s:40:"referrerName==myotherreferrerwebsite.com";s:8:"subtable";a:1:{i:0;a:9:{s:5:"label";s:33:"http://myotherreferrerwebsite.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:2;s:11:"max_actions";d:2;s:16:"sum_visit_length";i:362;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:12;a:15:{s:5:"label";s:21:"myreferrerwebsite.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}}s:14:"nb_conversions";i:2;s:7:"revenue";d:10;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:11;s:7:"segment";s:35:"referrerName==myreferrerwebsite.com";s:8:"subtable";a:1:{i:0;a:9:{s:5:"label";s:28:"http://myreferrerwebsite.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:13;a:15:{s:5:"label";s:9:"piwik.org";s:9:"nb_visits";i:1;s:10:"nb_actions";i:2;s:11:"max_actions";d:2;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}}s:14:"nb_conversions";i:2;s:7:"revenue";d:10;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:16;s:7:"segment";s:23:"referrerName==piwik.org";s:8:"subtable";a:1:{i:0;a:9:{s:5:"label";s:28:"http://piwik.org/contribute%";s:9:"nb_visits";i:1;s:10:"nb_actions";i:2;s:11:"max_actions";d:2;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:14;a:15:{s:5:"label";s:27:"sn110w.snt110.mail.live.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:2;s:11:"max_actions";d:2;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}}s:14:"nb_conversions";i:2;s:7:"revenue";d:10;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:17;s:7:"segment";s:41:"referrerName==sn110w.snt110.mail.live.com";s:8:"subtable";a:1:{i:0;a:9:{s:5:"label";s:67:"http://sn110w.snt110.mail.live.com/mail/InboxLight.aspx?n=184083971";s:9:"nb_visits";i:1;s:10:"nb_actions";i:2;s:11:"max_actions";d:2;s:16:"sum_visit_length";i:2;s:12:"bounce_count";i:0;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:15;a:15:{s:5:"label";s:13:"whatever.com1";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}}s:14:"nb_conversions";i:2;s:7:"revenue";d:10;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:1;s:7:"segment";s:27:"referrerName==whatever.com1";s:8:"subtable";a:1:{i:0;a:9:{s:5:"label";s:22:"http://whatever.com1/1";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}i:16;a:15:{s:5:"label";s:13:"whatever3.com";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:1;s:19:"nb_visits_converted";i:1;s:7:"revenue";d:5;}}s:14:"nb_conversions";i:2;s:7:"revenue";d:10;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;s:14:"idsubdatatable";i:4;s:7:"segment";s:27:"referrerName==whatever3.com";s:8:"subtable";a:1:{i:0;a:9:{s:5:"label";s:22:"http://whatever3.com/3";s:9:"nb_visits";i:1;s:10:"nb_actions";i:1;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:1;s:12:"bounce_count";i:1;s:19:"nb_visits_converted";i:1;s:26:"sum_daily_nb_uniq_visitors";i:1;s:18:"sum_daily_nb_users";i:0;}}}} \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.php.txt b/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.php.txt deleted file mode 100644 index b820df144bf6..000000000000 --- a/tests/UI/expected-screenshots/ReportExporting_RowEvolution_exported.php.txt +++ /dev/null @@ -1 +0,0 @@ -a:5:{i:2008;a:0:{}i:2009;a:0:{}i:2010;a:0:{}i:2011;a:0:{}i:2012;a:1:{i:0;a:14:{s:5:"label";s:12:"referrer.com";s:9:"nb_visits";i:11;s:10:"nb_actions";i:45;s:11:"max_actions";d:7;s:16:"sum_visit_length";i:7398;s:12:"bounce_count";i:2;s:19:"nb_visits_converted";i:11;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:23;s:19:"nb_visits_converted";i:11;s:7:"revenue";d:115;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:11;s:19:"nb_visits_converted";i:11;s:7:"revenue";d:55;}}s:14:"nb_conversions";i:34;s:7:"revenue";d:170;s:26:"sum_daily_nb_uniq_visitors";i:11;s:18:"sum_daily_nb_users";i:2;s:7:"segment";s:26:"referrerName==referrer.com";s:14:"idsubdatatable";i:8;}}} \ No newline at end of file diff --git a/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.php.txt b/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.php.txt deleted file mode 100644 index 24fa5ca81927..000000000000 --- a/tests/UI/expected-screenshots/ReportExporting_VisitsSummary.get_exported.php.txt +++ /dev/null @@ -1 +0,0 @@ -a:5:{i:2008;a:0:{}i:2009;a:0:{}i:2010;a:0:{}i:2011;a:0:{}i:2012;a:9:{s:9:"nb_visits";d:311;s:10:"nb_actions";d:708;s:19:"nb_visits_converted";d:245;s:12:"bounce_count";d:166;s:16:"sum_visit_length";d:96791;s:11:"max_actions";d:20;s:11:"bounce_rate";s:3:"53%";s:20:"nb_actions_per_visit";d:2.2999999999999998;s:16:"avg_time_on_site";s:9:"5 min 11s";}} \ No newline at end of file diff --git a/tests/UI/specs/ReportExporting_spec.js b/tests/UI/specs/ReportExporting_spec.js index 563e01c42556..e57e1098e658 100644 --- a/tests/UI/specs/ReportExporting_spec.js +++ b/tests/UI/specs/ReportExporting_spec.js @@ -94,7 +94,7 @@ describe("ReportExporting", function () { }); } - var formats = ['CSV', 'TSV', 'XML', 'JSON', 'PHP']; + var formats = ['CSV', 'TSV', 'XML', 'JSON']; formats.forEach(normalReportTest); formats.forEach(evolutionReportTest); formats.forEach(rowEvolutionReportTest);