update Piwik to version 2.16 (fixes #91)

This commit is contained in:
oliver 2016-04-10 18:55:57 +02:00
commit d885a4baa9
5833 changed files with 418860 additions and 226988 deletions

View file

@ -0,0 +1,70 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
use Piwik\Tracker\Action;
use Exception;
/**
* This example dimension only defines a name and does not track any data. It's supposed to be only used in reports.
*
* See {@link http://developer.piwik.org/api-reference/Piwik/Columns\Dimension} for more information.
*/
class ActionType extends ActionDimension
{
private $types = array(
Action::TYPE_PAGE_URL => 'pageviews',
Action::TYPE_CONTENT => 'contents',
Action::TYPE_SITE_SEARCH => 'sitesearches',
Action::TYPE_EVENT => 'events',
Action::TYPE_OUTLINK => 'outlinks',
Action::TYPE_DOWNLOAD => 'downloads'
);
/**
* The name of the dimension which will be visible for instance in the UI of a related report and in the mobile app.
* @return string
*/
public function getName()
{
return Piwik::translate('Actions_ActionType');
}
protected function configureSegments()
{
$types = $this->types;
$segment = new Segment();
$segment->setSegment('actionType');
$segment->setName('Actions_ActionType');
$segment->setSqlSegment('log_action.type');
$segment->setType(Segment::TYPE_DIMENSION);
$segment->setAcceptedValues(sprintf('A type of action, such as: %s', implode(', ', $types)));
$segment->setSqlFilter(function ($type) use ($types) {
if (array_key_exists($type, $types)) {
return $type;
}
$index = array_search(strtolower(trim(urldecode($type))), $types);
if ($index === false) {
throw new Exception("actionType must be one of: " . implode(', ', $types));
}
return $index;
});
$segment->setSuggestedValuesCallback(function ($idSite, $maxSuggestionsToReturn) use ($types) {
return array_slice(array_values($types), 0, $maxSuggestionsToReturn);
});
$this->addSegment($segment);
}
}

View file

@ -0,0 +1,32 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
class ActionUrl extends ActionDimension
{
public function getName()
{
return Piwik::translate('Actions_ColumnActionURL');
}
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('actionUrl');
$segment->setName('Actions_ColumnActionURL');
$segment->setUnionOfSegments(array('pageUrl', 'downloadUrl', 'outlinkUrl'));
$this->addSegment($segment);
}
}

View file

@ -0,0 +1,31 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
class ClickedUrl extends ActionDimension
{
public function getName()
{
return Piwik::translate('Actions_ColumnClickedURL');
}
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('outlinkUrl');
$segment->setName('Actions_ColumnClickedURL');
$segment->setSqlSegment('log_link_visit_action.idaction_url');
$this->addSegment($segment);
}
}

View file

@ -0,0 +1,20 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class DestinationPage extends Dimension
{
public function getName()
{
return Piwik::translate('General_ColumnDestinationPage');
}
}

View file

@ -0,0 +1,31 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
class DownloadUrl extends ActionDimension
{
public function getName()
{
return Piwik::translate('Actions_ColumnDownloadURL');
}
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('downloadUrl');
$segment->setName('Actions_ColumnDownloadURL');
$segment->setSqlSegment('log_link_visit_action.idaction_url');
$this->addSegment($segment);
}
}

View file

@ -0,0 +1,52 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugins\Actions\Segment;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
class EntryPageTitle extends VisitDimension
{
protected $columnName = 'visit_entry_idaction_name';
protected $columnType = 'INTEGER(11) UNSIGNED NOT NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('entryPageTitle');
$segment->setName('Actions_ColumnEntryPageTitle');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$idActionName = false;
if (!empty($action)) {
$idActionName = $action->getIdActionNameForEntryAndExitIds();
}
return (int) $idActionName;
}
public function getName()
{
return Piwik::translate('Actions_ColumnEntryPageTitle');
}
}

View file

@ -0,0 +1,53 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugins\Actions\Segment;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
class EntryPageUrl extends VisitDimension
{
protected $columnName = 'visit_entry_idaction_url';
protected $columnType = 'INTEGER(11) UNSIGNED NOT NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('entryPageUrl');
$segment->setName('Actions_ColumnEntryPageURL');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$idActionUrl = false;
if (!empty($action)) {
$idActionUrl = $action->getIdActionUrlForEntryAndExitIds();
}
return (int) $idActionUrl;
}
public function getName()
{
return Piwik::translate('Actions_ColumnEntryPageURL');
}
}

View file

@ -0,0 +1,67 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugins\Actions\Segment;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
class ExitPageTitle extends VisitDimension
{
protected $columnName = 'visit_exit_idaction_name';
protected $columnType = 'INTEGER(11) UNSIGNED NOT NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('exitPageTitle');
$segment->setName('Actions_ColumnExitPageTitle');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int|bool
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$idActionName = false;
if (!empty($action)) {
$idActionName = $action->getIdActionNameForEntryAndExitIds();
}
return (int) $idActionName;
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int|bool
*/
public function onExistingVisit(Request $request, Visitor $visitor, $action)
{
if (empty($action)) {
return false;
}
return $action->getIdActionNameForEntryAndExitIds();
}
public function getName()
{
return Piwik::translate('Actions_ColumnExitPageTitle');
}
}

View file

@ -0,0 +1,73 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugins\Actions\Segment;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
class ExitPageUrl extends VisitDimension
{
protected $columnName = 'visit_exit_idaction_url';
protected $columnType = 'INTEGER(11) UNSIGNED NULL DEFAULT 0';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('exitPageUrl');
$segment->setName('Actions_ColumnExitPageURL');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int|bool
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$idActionUrl = false;
if (!empty($action)) {
$idActionUrl = $action->getIdActionUrlForEntryAndExitIds();
}
return (int) $idActionUrl;
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int
*/
public function onExistingVisit(Request $request, Visitor $visitor, $action)
{
if (empty($action)) {
return false;
}
$id = $action->getIdActionUrlForEntryAndExitIds();
if (!empty($id)) {
$id = (int) $id;
}
return $id;
}
public function getName()
{
return Piwik::translate('Actions_ColumnExitPageURL');
}
}

View file

@ -0,0 +1,20 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class Keyword extends Dimension
{
public function getName()
{
return Piwik::translate('General_ColumnKeyword');
}
}

View file

@ -0,0 +1,20 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class KeywordwithNoSearchResult extends Dimension
{
public function getName()
{
return Piwik::translate('Actions_ColumnNoResultKeyword');
}
}

View file

@ -0,0 +1,108 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Actions\Columns\Metrics;
use Piwik\DataTable;
use Piwik\DataTable\Row;
use Piwik\Metrics;
use Piwik\Metrics\Formatter;
use Piwik\Piwik;
use Piwik\Plugin\ProcessedMetric;
use Piwik\Plugin\Report;
/**
* The average amount of time it takes to generate a page. Calculated as
*
* sum_time_generation / nb_hits_with_time_generation
*
* The above metrics are calculated during archiving. This metric is calculated before
* serving a report.
*/
class AveragePageGenerationTime extends ProcessedMetric
{
public function getName()
{
return 'avg_time_generation';
}
public function getTranslatedName()
{
return Piwik::translate('General_ColumnAverageGenerationTime');
}
public function getDependentMetrics()
{
return array('sum_time_generation', 'nb_hits_with_time_generation');
}
public function getTemporaryMetrics()
{
return array('sum_time_generation');
}
public function compute(Row $row)
{
$sumGenerationTime = $this->getMetric($row, 'sum_time_generation');
$hitsWithTimeGeneration = $this->getMetric($row, 'nb_hits_with_time_generation');
return Piwik::getQuotientSafe($sumGenerationTime, $hitsWithTimeGeneration, $precision = 3);
}
public function format($value, Formatter $formatter)
{
if ($formatter instanceof Formatter\Html
&& !$value
) {
return '-';
} else {
return $formatter->getPrettyTimeFromSeconds($value, $displayAsSentence = true);
}
}
public function beforeCompute($report, DataTable $table)
{
$hasTimeGeneration = array_sum($this->getMetricValues($table, 'sum_time_generation')) > 0;
if (!$hasTimeGeneration
&& $table->getRowsCount() != 0
&& !$this->hasAverageTimeGeneration($table)
) {
// No generation time: remove it from the API output and add it to empty_columns metadata, so that
// the columns can also be removed from the view
$table->filter('ColumnDelete', array(array(
Metrics::INDEX_PAGE_SUM_TIME_GENERATION,
Metrics::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION,
Metrics::INDEX_PAGE_MIN_TIME_GENERATION,
Metrics::INDEX_PAGE_MAX_TIME_GENERATION,
'sum_time_generation',
'nb_hits_with_time_generation',
'min_time_generation',
'max_time_generation'
)));
if ($table instanceof DataTable) {
$emptyColumns = $table->getMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME);
if (!is_array($emptyColumns)) {
$emptyColumns = array();
}
$emptyColumns[] = 'sum_time_generation';
$emptyColumns[] = 'avg_time_generation';
$emptyColumns[] = 'min_time_generation';
$emptyColumns[] = 'max_time_generation';
$table->setMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME, $emptyColumns);
}
}
return $hasTimeGeneration;
}
private function hasAverageTimeGeneration(DataTable $table)
{
return $table->getFirstRow()->getColumn('avg_time_generation') !== false;
}
}

View file

@ -0,0 +1,51 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Actions\Columns\Metrics;
use Piwik\DataTable\Row;
use Piwik\Metrics\Formatter;
use Piwik\Piwik;
use Piwik\Plugin\ProcessedMetric;
/**
* The average amount of time spent on a page. Calculated as:
*
* sum_time_spent / nb_visits
*
* sum_time_spent and nb_visits are calculated by Archiver classes.
*/
class AverageTimeOnPage extends ProcessedMetric
{
public function getName()
{
return 'avg_time_on_page';
}
public function getTranslatedName()
{
return Piwik::translate('General_ColumnAverageTimeOnPage');
}
public function compute(Row $row)
{
$sumTimeSpent = $this->getMetric($row, 'sum_time_spent');
$visits = $this->getMetric($row, 'nb_hits');
return Piwik::getQuotientSafe($sumTimeSpent, $visits, $precision = 0);
}
public function format($value, Formatter $formatter)
{
return $formatter->getPrettyTimeFromSeconds($value, $timeAsSentence = false);
}
public function getDependentMetrics()
{
return array('sum_time_spent', 'nb_hits');
}
}

View file

@ -0,0 +1,51 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Actions\Columns\Metrics;
use Piwik\DataTable\Row;
use Piwik\Metrics\Formatter;
use Piwik\Piwik;
use Piwik\Plugin\ProcessedMetric;
/**
* The bounce rate for individual pages. Calculated as:
*
* entry_bounce_count (single page visits on this page) / entry_nb_visits (all visits that started on this page)
*
* entry_bounce_count & entry_nb_visits are calculated by the Actions archiver.
*/
class BounceRate extends ProcessedMetric
{
public function getName()
{
return 'bounce_rate';
}
public function getTranslatedName()
{
return Piwik::translate('General_ColumnBounceRate');
}
public function compute(Row $row)
{
$entryBounceCount = $this->getMetric($row, 'entry_bounce_count');
$entryVisits = $this->getMetric($row, 'entry_nb_visits');
return Piwik::getQuotientSafe($entryBounceCount, $entryVisits, $precision = 2);
}
public function format($value, Formatter $formatter)
{
return $formatter->getPrettyPercentFromQuotient($value);
}
public function getDependentMetrics()
{
return array('entry_bounce_count', 'entry_nb_visits');
}
}

View file

@ -0,0 +1,51 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Actions\Columns\Metrics;
use Piwik\DataTable\Row;
use Piwik\Metrics\Formatter;
use Piwik\Piwik;
use Piwik\Plugin\ProcessedMetric;
/**
* Percent of visits that finished on this page. Calculated as:
*
* exit_nb_visits / nb_visits
*
* exit_nb_visits & nb_visits are calculated by the Actions archiver.
*/
class ExitRate extends ProcessedMetric
{
public function getName()
{
return 'exit_rate';
}
public function getTranslatedName()
{
return Piwik::translate('General_ColumnExitRate');
}
public function compute(Row $row)
{
$exitVisits = $this->getMetric($row, 'exit_nb_visits');
$visits = $this->getMetric($row, 'nb_visits');
return Piwik::getQuotientSafe($exitVisits, $visits, $precision = 2);
}
public function format($value, Formatter $formatter)
{
return $formatter->getPrettyPercentFromQuotient($value);
}
public function getDependentMetrics()
{
return array('exit_nb_visits', 'nb_visits');
}
}

View file

@ -0,0 +1,33 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
class PageTitle extends ActionDimension
{
protected $columnName = 'idaction_name';
protected $columnType = 'INTEGER(10) UNSIGNED';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('pageTitle');
$segment->setName('Actions_ColumnPageName');
$this->addSegment($segment);
}
public function getName()
{
return Piwik::translate('Actions_ColumnPageName');
}
}

View file

@ -0,0 +1,33 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
class PageUrl extends ActionDimension
{
protected $columnName = 'idaction_url';
protected $columnType = 'INTEGER(10) UNSIGNED DEFAULT NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('pageUrl');
$segment->setName('Actions_ColumnPageURL');
$segment->setAcceptedValues('All these segments must be URL encoded, for example: ' . urlencode('http://example.com/path/page?query'));
$this->addSegment($segment);
}
public function getName()
{
return Piwik::translate('Actions_ColumnPageURL');
}
}

View file

@ -0,0 +1,20 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class SearchCategory extends Dimension
{
public function getName()
{
return Piwik::translate('Actions_ColumnSearchCategory');
}
}

View file

@ -0,0 +1,20 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class SearchDestinationPage extends Dimension
{
public function getName()
{
return Piwik::translate('General_ColumnDestinationPage');
}
}

View file

@ -0,0 +1,30 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
class SearchKeyword extends ActionDimension
{
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('siteSearchKeyword');
$segment->setName('Actions_SiteSearchKeyword');
$segment->setSqlSegment('log_link_visit_action.idaction_name');
$this->addSegment($segment);
}
public function getName()
{
return Piwik::translate('General_ColumnKeyword');
}
}

View file

@ -0,0 +1,20 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class SearchNoResultKeyword extends Dimension
{
public function getName()
{
return Piwik::translate('Actions_ColumnNoResultKeyword');
}
}

View file

@ -0,0 +1,31 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
class TimeSpentRefAction extends ActionDimension
{
protected $columnName = 'time_spent_ref_action';
protected $columnType = 'INTEGER(10) UNSIGNED NOT NULL';
public function onNewAction(Request $request, Visitor $visitor, Action $action)
{
$timeSpent = $visitor->getVisitorColumn('time_spent_ref_action');
if (empty($timeSpent)) {
return 0;
}
return $timeSpent;
}
}

View file

@ -0,0 +1,90 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Plugins\CoreHome\Segment;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker;
use Piwik\Tracker\Visitor;
class VisitTotalActions extends VisitDimension
{
protected $columnName = 'visit_total_actions';
protected $columnType = 'SMALLINT(5) UNSIGNED NOT NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setType(Segment::TYPE_METRIC);
$segment->setSegment('actions');
$segment->setName('General_NbActions');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$actionType = false;
if ($action) {
$actionType = $action->getActionType();
}
$actions = array(
Action::TYPE_PAGE_URL,
Action::TYPE_DOWNLOAD,
Action::TYPE_OUTLINK,
Action::TYPE_SITE_SEARCH,
Action::TYPE_EVENT
);
// if visit starts with something else (e.g. ecommerce order), don't record as an action
if (in_array($actionType, $actions)) {
return 1;
}
return 0;
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int
*/
public function onExistingVisit(Request $request, Visitor $visitor, $action)
{
if (!$action) {
return false;
}
$increment = 'visit_total_actions + 1';
$idActionUrl = $action->getIdActionUrlForEntryAndExitIds();
if ($idActionUrl !== false) {
return $increment;
}
$actionType = $action->getActionType();
if (in_array($actionType, array(Action::TYPE_SITE_SEARCH, Action::TYPE_EVENT))) {
return $increment;
}
return false;
}
}

View file

@ -0,0 +1,72 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Actions\Columns;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Plugins\CoreHome\Segment;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker;
use Piwik\Tracker\Visitor;
class VisitTotalSearches extends VisitDimension
{
protected $columnName = 'visit_total_searches';
protected $columnType = 'SMALLINT(5) UNSIGNED NOT NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setType(Segment::TYPE_METRIC);
$segment->setSegment('searches');
$segment->setName('General_NbSearches');
$segment->setAcceptedValues('To select all visits who used internal Site Search, use: &segment=searches>0');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
if ($this->isSiteSearchAction($action)) {
return 1;
}
return 0;
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return int
*/
public function onExistingVisit(Request $request, Visitor $visitor, $action)
{
if ($this->isSiteSearchAction($action)) {
return 'visit_total_searches + 1';
}
return false;
}
/**
* @param Action|null $action
* @return bool
*/
private function isSiteSearchAction($action)
{
return ($action && $action->getActionType() == Action::TYPE_SITE_SEARCH);
}
}