PDF rausgenommen
This commit is contained in:
63
msd2/tracking/piwik/plugins/CoreHome/Columns/IdSite.php
Normal file
63
msd2/tracking/piwik/plugins/CoreHome/Columns/IdSite.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Site;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class IdSite extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'idsite';
|
||||
// we do not install or define column definition here as we need to create this column when installing as there is
|
||||
// an index on it. Currently we do not define the index here... although we could overwrite the install() method
|
||||
// and add column 'idsite' and add index. Problem is there is also an index
|
||||
// INDEX(idsite, config_id, visit_last_action_time) and we maybe not be sure whether config_id already exists at
|
||||
// installing point (we do not know whether visit_last_action_time or idsite column would be added first).
|
||||
|
||||
protected $nameSingular = 'General_Measurable';
|
||||
protected $namePlural = 'General_Measurables';
|
||||
protected $type = self::TYPE_TEXT;
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $request->getIdSite();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $request->getIdSite();
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
try {
|
||||
return Site::getNameFor($value);
|
||||
} catch (\Exception $ex) {
|
||||
$formatted = parent::formatValue($value, $idSite, $formatter);
|
||||
return Piwik::translate('General_MeasurableId') . ': ' . $formatted;
|
||||
}
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ArchivedMetric;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
|
||||
class LinkVisitActionId extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'idlink_va';
|
||||
protected $acceptValues = 'Any integer.';
|
||||
protected $category = 'General_Actions';
|
||||
protected $nameSingular = 'General_Actions';
|
||||
protected $metricId = 'hits';
|
||||
protected $type = self::TYPE_NUMBER;
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
$metric = $dimensionMetricFactory->createMetric(ArchivedMetric::AGGREGATION_UNIQUE);
|
||||
$metric->setTranslatedName(Piwik::translate('General_ColumnHits'));
|
||||
$metric->setName('hits');
|
||||
$metricsList->addMetric($metric);
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\Discriminator;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ArchivedMetric;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
|
||||
class LinkVisitActionIdPages extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'idlink_va';
|
||||
protected $category = 'General_Actions';
|
||||
protected $nameSingular = 'General_Actions';
|
||||
protected $type = self::TYPE_NUMBER;
|
||||
|
||||
public function configureSegments()
|
||||
{
|
||||
// empty so we don't auto-generate a segment
|
||||
}
|
||||
|
||||
public function getDbDiscriminator()
|
||||
{
|
||||
return new Discriminator('log_action', 'type', Action::TYPE_PAGE_URL);
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
$metric = $dimensionMetricFactory->createMetric(ArchivedMetric::AGGREGATION_UNIQUE);
|
||||
$metric->setTranslatedName(Piwik::translate('General_ColumnPageviews'));
|
||||
$metric->setDocumentation(Piwik::translate('General_ColumnPageviewsDocumentation'));
|
||||
$metric->setName('pageviews');
|
||||
$metricsList->addMetric($metric);
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
<?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\CoreHome\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
|
||||
/**
|
||||
* The average number of actions per visit. Calculated as:
|
||||
*
|
||||
* nb_actions / nb_visits
|
||||
*
|
||||
* nb_actions & nb_visits are calculated during archiving.
|
||||
*/
|
||||
class ActionsPerVisit extends ProcessedMetric
|
||||
{
|
||||
public function getName()
|
||||
{
|
||||
return 'nb_actions_per_visit';
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
$actions = $this->getMetric($row, 'nb_actions');
|
||||
$visits = $this->getMetric($row, 'nb_visits');
|
||||
|
||||
return Piwik::getQuotientSafe($actions, $visits, $precision = 1);
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
return Piwik::translate('General_ColumnActionsPerVisit');
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return array('nb_actions', 'nb_visits');
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
|
||||
/**
|
||||
* The average number of seconds spent on the site per visit. Calculated as:
|
||||
*
|
||||
* sum_visit_length / nb_visits
|
||||
*
|
||||
* sum_visit_length & nb_visits are calculated during archiving.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
class AverageTimeOnSite extends ProcessedMetric
|
||||
{
|
||||
public function getName()
|
||||
{
|
||||
return 'avg_time_on_site';
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
$sumVisitLength = $this->getMetric($row, 'sum_visit_length');
|
||||
$nbVisits = $this->getMetric($row, 'nb_visits');
|
||||
|
||||
return Piwik::getQuotientSafe($sumVisitLength, $nbVisits, $precision = 0);
|
||||
}
|
||||
|
||||
public function format($value, Formatter $formatter)
|
||||
{
|
||||
return $formatter->getPrettyTimeFromSeconds($value, true);
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
return Piwik::translate('General_ColumnAvgTimeOnSite');
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return array('sum_visit_length', 'nb_visits');
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
|
||||
/**
|
||||
* The percentage of visits that leave the site without visiting another page. Calculated
|
||||
* as:
|
||||
*
|
||||
* bounce_count / nb_visits
|
||||
*
|
||||
* bounce_count & nb_visits are calculated by an Archiver.
|
||||
*/
|
||||
class BounceRate extends ProcessedMetric
|
||||
{
|
||||
public function getName()
|
||||
{
|
||||
return 'bounce_rate';
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
return Piwik::translate('General_ColumnBounceRate');
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return array('bounce_count', 'nb_visits');
|
||||
}
|
||||
|
||||
public function format($value, Formatter $formatter)
|
||||
{
|
||||
return $formatter->getPrettyPercentFromQuotient($value);
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
$bounceCount = $this->getMetric($row, 'bounce_count');
|
||||
$visits = $this->getMetric($row, 'nb_visits');
|
||||
|
||||
return Piwik::getQuotientSafe($bounceCount, $visits, $precision = 2);
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
<?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\CoreHome\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
|
||||
class CallableProcessedMetric extends ProcessedMetric
|
||||
{
|
||||
private $name;
|
||||
private $callback;
|
||||
private $dependentMetrics;
|
||||
|
||||
public function __construct($name, $callback, $dependentMetrics = array())
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->callback = $callback;
|
||||
$this->dependentMetrics = $dependentMetrics;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
if ($this->callback) {
|
||||
return call_user_func($this->callback, $row);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return $this->dependentMetrics;
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
|
||||
/**
|
||||
* The percent of visits that result in a conversion. Calculated as:
|
||||
*
|
||||
* nb_visits_converted / nb_visits
|
||||
*
|
||||
* nb_visits_converted & nb_visits are calculated by the archiving process.
|
||||
*/
|
||||
class ConversionRate extends ProcessedMetric
|
||||
{
|
||||
public function getName()
|
||||
{
|
||||
return 'conversion_rate';
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
return Piwik::translate('General_ColumnConversionRate');
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return array('nb_visits_converted', 'nb_visits');
|
||||
}
|
||||
|
||||
public function format($value, Formatter $formatter)
|
||||
{
|
||||
return $formatter->getPrettyPercentFromQuotient($value);
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
$nbVisitsConverted = $this->getMetric($row, 'nb_visits_converted');
|
||||
$nbVisits = $this->getMetric($row, 'nb_visits');
|
||||
|
||||
return Piwik::getQuotientSafe($nbVisitsConverted, $nbVisits, $precision = 4);
|
||||
}
|
||||
}
|
@ -0,0 +1,173 @@
|
||||
<?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\CoreHome\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable;
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Metrics;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Metric;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
|
||||
/**
|
||||
* Calculates evolution values for any other metric. An evolution is the percent change from a
|
||||
* point in the past to the present. They are computed as:
|
||||
*
|
||||
* (current value - value in past) / value in past
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
class EvolutionMetric extends ProcessedMetric
|
||||
{
|
||||
/**
|
||||
* @var Metric|string
|
||||
*/
|
||||
private $wrapped;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $evolutionMetricName;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $quotientPrecision;
|
||||
|
||||
/**
|
||||
* @var DataTable
|
||||
*/
|
||||
private $pastData;
|
||||
|
||||
/**
|
||||
* The list of labels leading to the current subtable being processed. Used to get the proper subtable in
|
||||
* $pastData.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
private $labelPath = [];
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string|Metric $wrapped The metric used to calculate the evolution.
|
||||
* @param DataTable|null $pastData The data in the past to use when calculating evolutions.
|
||||
* @param string|false $evolutionMetricName The name of the evolution processed metric. Defaults to
|
||||
* $wrapped's name with `'_evolution'` appended.
|
||||
* @param int $quotientPrecision The percent's quotient precision.
|
||||
*/
|
||||
public function __construct($wrapped, DataTable $pastData = null, $evolutionMetricName = false, $quotientPrecision = 0)
|
||||
{
|
||||
$this->wrapped = $wrapped;
|
||||
$this->pastData = $pastData;
|
||||
|
||||
if (empty($evolutionMetricName)) {
|
||||
$wrappedName = $this->getWrappedName();
|
||||
$evolutionMetricName = $wrappedName . '_evolution';
|
||||
}
|
||||
|
||||
$this->evolutionMetricName = $evolutionMetricName;
|
||||
$this->quotientPrecision = $quotientPrecision;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->evolutionMetricName;
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
if ($this->wrapped instanceof Metric) {
|
||||
$metricName = $this->wrapped->getTranslatedName();
|
||||
} else {
|
||||
$defaultMetricTranslations = Metrics::getDefaultMetricTranslations();
|
||||
$metricName = isset($defaultMetricTranslations[$this->wrapped]) ? $defaultMetricTranslations[$this->wrapped] : $this->wrapped;
|
||||
}
|
||||
return Piwik::translate('CoreHome_EvolutionMetricName', [$metricName]);
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
$columnName = $this->getWrappedName();
|
||||
$pastRow = $this->getPastRowFromCurrent($row);
|
||||
|
||||
$currentValue = $this->getMetric($row, $columnName);
|
||||
$pastValue = $pastRow ? $this->getMetric($pastRow, $columnName) : 0;
|
||||
|
||||
$dividend = $currentValue - $pastValue;
|
||||
$divisor = $pastValue;
|
||||
|
||||
if ($dividend == 0) {
|
||||
return 0;
|
||||
} else if ($divisor == 0) {
|
||||
return 1;
|
||||
} else {
|
||||
return Piwik::getQuotientSafe($dividend, $divisor, $this->quotientPrecision + 2);
|
||||
}
|
||||
}
|
||||
|
||||
public function format($value, Formatter $formatter)
|
||||
{
|
||||
return $formatter->getPrettyPercentFromQuotient($value);
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return array($this->getWrappedName());
|
||||
}
|
||||
|
||||
public function beforeComputeSubtable(Row $row)
|
||||
{
|
||||
$this->labelPath[] = $row->getColumn('label');
|
||||
}
|
||||
|
||||
public function afterComputeSubtable(Row $row)
|
||||
{
|
||||
array_pop($this->labelPath);
|
||||
}
|
||||
|
||||
protected function getWrappedName()
|
||||
{
|
||||
return $this->wrapped instanceof Metric ? $this->wrapped->getName() : $this->wrapped;
|
||||
}
|
||||
|
||||
/**
|
||||
* public for Insights use.
|
||||
*/
|
||||
public function getPastRowFromCurrent(Row $row)
|
||||
{
|
||||
$pastData = $this->getPastDataTable();
|
||||
if (empty($pastData)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$label = $row->getColumn('label');
|
||||
return $label ? $pastData->getRowFromLabel($label) : $pastData->getFirstRow();
|
||||
}
|
||||
|
||||
private function getPastDataTable()
|
||||
{
|
||||
$result = $this->pastData;
|
||||
foreach ($this->labelPath as $label) {
|
||||
$row = $result->getRowFromLabel($label);
|
||||
if (empty($row)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$subtable = $row->getSubtable();
|
||||
if (empty($subtable)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$result = $subtable;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
<?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\CoreHome\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable;
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
use Piwik\Plugin\Report;
|
||||
|
||||
/**
|
||||
* Percent of visits in the whole table. Calculated as:
|
||||
*
|
||||
* nb_visits / sum(all nb_visits in table)
|
||||
*
|
||||
* nb_visits is calculated by core archiving process.
|
||||
*/
|
||||
class VisitsPercent extends ProcessedMetric
|
||||
{
|
||||
private $cachedTotalVisits = null;
|
||||
private $forceTotalVisits = null;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param int|null $totalVisits The forced value of total visits to use.
|
||||
*/
|
||||
public function __construct($totalVisits = null)
|
||||
{
|
||||
$this->forceTotalVisits = $totalVisits;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'nb_visits_percentage';
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
return Piwik::translate('General_ColumnPercentageVisits');
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
$visits = $this->getMetric($row, 'nb_visits');
|
||||
|
||||
return Piwik::getQuotientSafe($visits, $this->cachedTotalVisits, $precision = 2);
|
||||
}
|
||||
|
||||
public function format($value, Formatter $formatter)
|
||||
{
|
||||
return $formatter->getPrettyPercentFromQuotient($value);
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return array('nb_visits');
|
||||
}
|
||||
|
||||
public function beforeCompute($report, DataTable $table)
|
||||
{
|
||||
if ($this->forceTotalVisits === null) {
|
||||
$this->cachedTotalVisits = array_sum($this->getMetricValues($table, 'nb_visits'));
|
||||
} else {
|
||||
$this->cachedTotalVisits = $this->forceTotalVisits;
|
||||
}
|
||||
|
||||
return true; // always compute
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
|
||||
class ServerMinute extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'server_time';
|
||||
protected $segmentName = 'actionServerMinute';
|
||||
protected $sqlSegment = 'MINUTE(log_link_visit_action.server_time)';
|
||||
protected $nameSingular = 'VisitTime_ColumnServerMinute';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $acceptValues = '0, 1, 2, 3, ..., 56, 57, 58, 59';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(0, min(59, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
|
||||
}
|
55
msd2/tracking/piwik/plugins/CoreHome/Columns/ServerTime.php
Normal file
55
msd2/tracking/piwik/plugins/CoreHome/Columns/ServerTime.php
Normal file
@ -0,0 +1,55 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Date;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/VisitTime/functions.php';
|
||||
|
||||
class ServerTime extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'server_time';
|
||||
protected $columnType = 'DATETIME NOT NULL';
|
||||
protected $segmentName = 'actionServerHour';
|
||||
protected $sqlSegment = 'HOUR(log_link_visit_action.server_time)';
|
||||
protected $nameSingular = 'VisitTime_ColumnServerHour';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(0, min(23, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return \Piwik\Plugins\VisitTime\getTimeLabel($value);
|
||||
}
|
||||
|
||||
public function install()
|
||||
{
|
||||
$changes = parent::install();
|
||||
$changes['log_link_visit_action'][] = "ADD INDEX index_idsite_servertime ( idsite, server_time )";
|
||||
|
||||
return $changes;
|
||||
}
|
||||
|
||||
public function onNewAction(Request $request, Visitor $visitor, Action $action)
|
||||
{
|
||||
$timestamp = $request->getCurrentTimestamp();
|
||||
|
||||
return Date::getDatetimeFromTimestamp($timestamp);
|
||||
}
|
||||
}
|
139
msd2/tracking/piwik/plugins/CoreHome/Columns/UserId.php
Normal file
139
msd2/tracking/piwik/plugins/CoreHome/Columns/UserId.php
Normal file
@ -0,0 +1,139 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Cache;
|
||||
use Piwik\DataTable;
|
||||
use Piwik\DataTable\Map;
|
||||
use Piwik\Metrics;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryApi;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
use Piwik\Tracker\Action;
|
||||
|
||||
/**
|
||||
* UserId dimension.
|
||||
*/
|
||||
class UserId extends VisitDimension
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $columnName = 'user_id';
|
||||
protected $type = self::TYPE_TEXT;
|
||||
protected $allowAnonymous = false;
|
||||
protected $segmentName = 'userId';
|
||||
protected $nameSingular = 'General_UserId';
|
||||
protected $namePlural = 'General_UserIds';
|
||||
protected $acceptValues = 'any non empty unique string identifying the user (such as an email address or a username).';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $columnType = 'VARCHAR(200) NULL';
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed|false
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $request->getForcedUserId();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
*
|
||||
* @return mixed|false
|
||||
*/
|
||||
public function onExistingVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $request->getForcedUserId();
|
||||
}
|
||||
|
||||
public function isUsedInAtLeastOneSite($idSites, $period, $date)
|
||||
{
|
||||
if ($period === 'day' || $period === 'week') {
|
||||
$period = 'month';
|
||||
}
|
||||
|
||||
if ($period === 'range') {
|
||||
$period = 'day';
|
||||
}
|
||||
|
||||
if (!empty($idSites)) {
|
||||
foreach ($idSites as $idSite) {
|
||||
if ($this->isUsedInSiteCached($idSite, $period, $date)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function isUsedInSiteCached($idSite, $period, $date)
|
||||
{
|
||||
$cache = Cache::getTransientCache();
|
||||
$key = sprintf('%d.%s.%s', $idSite, $period, $date);
|
||||
|
||||
if (!$cache->contains($key)) {
|
||||
$result = $this->isUsedInSite($idSite, $period, $date);
|
||||
$cache->save($key, $result);
|
||||
}
|
||||
|
||||
return $cache->fetch($key);
|
||||
}
|
||||
|
||||
private function isUsedInSite($idSite, $period, $date)
|
||||
{
|
||||
$result = \Piwik\API\Request::processRequest('VisitsSummary.get', [
|
||||
'columns' => 'nb_users',
|
||||
'idSite' => $idSite,
|
||||
'period' => $period,
|
||||
'date' => $date,
|
||||
'segment' => false,
|
||||
], $default = []);
|
||||
|
||||
return $this->hasDataTableUsers($result);
|
||||
}
|
||||
|
||||
public function hasDataTableUsers(DataTable\DataTableInterface $result)
|
||||
{
|
||||
if ($result instanceof Map) {
|
||||
foreach ($result->getDataTables() as $table) {
|
||||
if ($this->hasDataTableUsers($table)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$result->getRowsCount()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$firstRow = $result->getFirstRow();
|
||||
if ($firstRow instanceof DataTable\Row && $firstRow->hasColumn(Metrics::INDEX_NB_USERS)) {
|
||||
$metric = Metrics::INDEX_NB_USERS;
|
||||
} else {
|
||||
$metric = 'nb_users';
|
||||
}
|
||||
|
||||
$numUsers = $result->getColumn($metric);
|
||||
$numUsers = array_sum($numUsers);
|
||||
|
||||
return !empty($numUsers);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/VisitTime/functions.php';
|
||||
|
||||
class VisitFirstActionMinute extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_first_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
|
||||
protected $sqlSegment = 'HOUR(log_visit.visit_first_action_time)';
|
||||
protected $segmentName = 'visitStartServerMinute';
|
||||
protected $acceptValues = '0, 1, 2, 3, ..., 56, 57, 58, 59';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitStartServerMinute';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(0, min(59, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics to be generated
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
|
||||
}
|
@ -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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Date;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/VisitTime/functions.php';
|
||||
|
||||
class VisitFirstActionTime extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_first_action_time';
|
||||
protected $columnType = 'DATETIME NOT NULL';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
|
||||
protected $sqlSegment = 'HOUR(log_visit.visit_first_action_time)';
|
||||
protected $segmentName = 'visitStartServerHour';
|
||||
protected $acceptValues = '0, 1, 2, 3, ..., 20, 21, 22, 23';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitStartServerHour';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(0, min(23, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return \Piwik\Plugins\VisitTime\getTimeLabel($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return Date::getDatetimeFromTimestamp($request->getCurrentTimestamp());
|
||||
}
|
||||
}
|
143
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitGoalBuyer.php
Normal file
143
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitGoalBuyer.php
Normal file
@ -0,0 +1,143 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Plugins\CoreHome\Segment;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\GoalManager;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class VisitGoalBuyer extends VisitDimension
|
||||
{
|
||||
// log_visit.visit_goal_buyer
|
||||
const TYPE_BUYER_NONE = 0;
|
||||
const TYPE_BUYER_ORDERED = 1;
|
||||
const TYPE_BUYER_OPEN_CART = GoalManager::TYPE_BUYER_OPEN_CART;
|
||||
const TYPE_BUYER_ORDERED_AND_OPEN_CART = GoalManager::TYPE_BUYER_ORDERED_AND_OPEN_CART;
|
||||
|
||||
protected static $visitEcommerceStatus = array(
|
||||
self::TYPE_BUYER_NONE => 'none',
|
||||
self::TYPE_BUYER_ORDERED => 'ordered',
|
||||
self::TYPE_BUYER_OPEN_CART => 'abandonedCart',
|
||||
self::TYPE_BUYER_ORDERED_AND_OPEN_CART => 'orderedThenAbandonedCart',
|
||||
);
|
||||
|
||||
protected $columnName = 'visit_goal_buyer';
|
||||
protected $columnType = 'TINYINT(1) NULL';
|
||||
protected $segmentName = 'visitEcommerceStatus';
|
||||
protected $nameSingular = 'General_EcommerceVisitStatusDesc';
|
||||
protected $type = self::TYPE_ENUM;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$example = Piwik::translate('General_EcommerceVisitStatusEg', '"&segment=visitEcommerceStatus==ordered,visitEcommerceStatus==orderedThenAbandonedCart"');
|
||||
$this->acceptValues = implode(", ", self::$visitEcommerceStatus) . '. ' . $example;
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
switch ($value) {
|
||||
case 'none';
|
||||
case '0':
|
||||
case self::TYPE_BUYER_NONE:
|
||||
return Piwik::translate('UserCountryMap_None');
|
||||
case 'ordered':
|
||||
case '1':
|
||||
case self::TYPE_BUYER_ORDERED:
|
||||
return Piwik::translate('CoreHome_VisitStatusOrdered');
|
||||
case 'abandonedCart':
|
||||
case self::TYPE_BUYER_OPEN_CART:
|
||||
return Piwik::translate('Goals_AbandonedCart');
|
||||
case 'orderedThenAbandonedCart':
|
||||
case self::TYPE_BUYER_ORDERED_AND_OPEN_CART:
|
||||
return Piwik::translate('CoreHome_VisitStatusOrderedThenAbandoned');
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function getEnumColumnValues()
|
||||
{
|
||||
return self::$visitEcommerceStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $this->getBuyerType($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return int
|
||||
*/
|
||||
public function onExistingVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
$goalBuyer = $visitor->getVisitorColumn($this->columnName);
|
||||
|
||||
// Ecommerce buyer status
|
||||
$visitEcommerceStatus = $this->getBuyerType($request, $goalBuyer);
|
||||
|
||||
if ($visitEcommerceStatus != self::TYPE_BUYER_NONE
|
||||
// only update if the value has changed (prevents overwriting the value in case a request has
|
||||
// updated it in the meantime)
|
||||
&& $visitEcommerceStatus != $goalBuyer) {
|
||||
|
||||
return $visitEcommerceStatus;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
public static function getVisitEcommerceStatusFromId($id)
|
||||
{
|
||||
if (!isset(self::$visitEcommerceStatus[$id])) {
|
||||
throw new \Exception("Unexpected ECommerce status value ");
|
||||
}
|
||||
|
||||
return self::$visitEcommerceStatus[$id];
|
||||
}
|
||||
|
||||
private function getBuyerType(Request $request, $existingType = self::TYPE_BUYER_NONE)
|
||||
{
|
||||
$isRequestEcommerce = $request->getMetadata('Ecommerce', 'isRequestEcommerce');
|
||||
if (!$isRequestEcommerce) {
|
||||
return $existingType;
|
||||
}
|
||||
|
||||
$isGoalAnOrder = $request->getMetadata('Ecommerce', 'isGoalAnOrder');
|
||||
if ($isGoalAnOrder) {
|
||||
return self::TYPE_BUYER_ORDERED;
|
||||
}
|
||||
|
||||
// request is Add to Cart
|
||||
if ($existingType == self::TYPE_BUYER_ORDERED
|
||||
|| $existingType == self::TYPE_BUYER_ORDERED_AND_OPEN_CART
|
||||
) {
|
||||
return self::TYPE_BUYER_ORDERED_AND_OPEN_CART;
|
||||
}
|
||||
|
||||
return self::TYPE_BUYER_OPEN_CART;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ComputedMetric;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class VisitGoalConverted extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_goal_converted';
|
||||
protected $columnType = 'TINYINT(1) NULL';
|
||||
protected $type = self::TYPE_BOOL;
|
||||
protected $segmentName = 'visitConverted';
|
||||
protected $nameSingular = 'General_VisitConvertedGoal';
|
||||
protected $acceptValues = '0, 1';
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
$metric1 = $dimensionMetricFactory->createCustomMetric('nb_visits_converted', Piwik::translate('General_ColumnVisitsWithConversions'), 'sum(case %s when 1 then 1 else 0 end)');
|
||||
$metricsList->addMetric($metric1);
|
||||
|
||||
$metric = $dimensionMetricFactory->createComputedMetric($metric1->getName(), 'nb_visits', ComputedMetric::AGGREGATION_RATE);
|
||||
$metric->setTranslatedName(Piwik::translate('General_ColumnConversionRate'));
|
||||
$metric->setDocumentation(Piwik::translate('General_ColumnConversionRateDocumentation'));
|
||||
$metric->setName('visits_conversion_rate');
|
||||
$metricsList->addMetric($metric);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onConvertedVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
48
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitId.php
Normal file
48
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitId.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ArchivedMetric;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Plugin\Segment;
|
||||
|
||||
/**
|
||||
* Dimension for the log_visit.idvisit column. This column is added in the CREATE TABLE
|
||||
* statement, so this dimension exists only to configure a segment.
|
||||
*/
|
||||
class VisitId extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'idvisit';
|
||||
protected $acceptValues = 'Any integer.';
|
||||
protected $nameSingular = 'General_Visit';
|
||||
protected $namePlural = 'General_ColumnNbVisits';
|
||||
protected $segmentName = 'visitId';
|
||||
protected $allowAnonymous = false;
|
||||
protected $metricId = 'visits';
|
||||
protected $type = self::TYPE_TEXT;
|
||||
|
||||
protected function configureSegments()
|
||||
{
|
||||
$segment = new Segment();
|
||||
$segment->setName('General_VisitId');
|
||||
$this->addSegment($segment);
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
$metric = $dimensionMetricFactory->createMetric(ArchivedMetric::AGGREGATION_UNIQUE);
|
||||
$metric->setTranslatedName(Piwik::translate('General_ColumnNbVisits'));
|
||||
$metric->setDocumentation(Piwik::translate('General_ColumnNbVisitsDocumentation'));
|
||||
$metric->setName('nb_visits');
|
||||
$metricsList->addMetric($metric);
|
||||
}
|
||||
}
|
45
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitIp.php
Normal file
45
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitIp.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Common;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Network\IPUtils;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Plugin\Segment;
|
||||
|
||||
/**
|
||||
* Dimension for the log_visit.location_ip column. This column is added in the CREATE TABLE
|
||||
* statement, so this dimension exists only to configure a segment.
|
||||
*/
|
||||
class VisitIp extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'location_ip';
|
||||
protected $type = self::TYPE_BINARY;
|
||||
protected $allowAnonymous = false;
|
||||
protected $segmentName = 'visitIp';
|
||||
protected $nameSingular = 'General_VisitorIP';
|
||||
protected $namePlural = 'General_VisitorIPs';
|
||||
protected $acceptValues = '13.54.122.1. </code>Select IP ranges with notation: <code>visitIp>13.54.122.0;visitIp<13.54.122.255';
|
||||
protected $sqlFilterValue = array('Piwik\Network\IPUtils', 'stringToBinaryIP');
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
$value = Common::hex2bin($value);
|
||||
$value = IPUtils::binaryToStringIP($value);
|
||||
return $value;
|
||||
}
|
||||
|
||||
protected function configureSegments()
|
||||
{
|
||||
$segment = new Segment();
|
||||
$segment->setType(Segment::TYPE_METRIC); // we cannot remove this for now as it would assign dimension based on text type
|
||||
$this->addSegment($segment);
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Date;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
class VisitLastActionDate extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerDate';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerDate';
|
||||
protected $sqlSegment = 'DATE(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '2018-12-31, 2018-03-20, ...';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
if (defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE) {
|
||||
$date = Date::factory('2018-02-02');
|
||||
} else {
|
||||
$date = Date::now();
|
||||
}
|
||||
$return = array($date->toString());
|
||||
for ($i = 0; $i < $maxValuesToReturn; $i++) {
|
||||
$date = $date->subDay(1);
|
||||
$return[] = $date->toString();
|
||||
}
|
||||
return $return;
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
class VisitLastActionDayOfMonth extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerDayOfMonth';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerDayOfMonth';
|
||||
protected $sqlSegment = 'DAYOFMONTH(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '0, 1, 2, 3, ..., 29, 30, 31';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(0, min(31, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/VisitTime/functions.php';
|
||||
|
||||
class VisitLastActionDayOfWeek extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerDayOfWeek';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerDayOfWeek';
|
||||
protected $sqlSegment = 'DAYOFWEEK(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '1, 2, 3, 4, 5, 6, 7';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(1, min(7, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return \Piwik\Plugins\VisitTime\translateDayOfWeek($value);
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
class VisitLastActionDayOfYear extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerDayOfYear';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerDayOfYear';
|
||||
protected $sqlSegment = 'DAYOFYEAR(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '1, 2, 3, 4, ..., 365, 366';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(1, min(366, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/VisitTime/functions.php';
|
||||
|
||||
/**
|
||||
* This dimension holds the best guess for a visit's end time. It is set the last action
|
||||
* time for each visit. `ping=1` requests can be sent to update the dimension value so
|
||||
* it can be a more accurate guess of the time the visitor spent on the site.
|
||||
*
|
||||
* Note: though it is named 'visit last action time' it actually refers to the visit's last action's
|
||||
* end time.
|
||||
*/
|
||||
class VisitLastActionMinute extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerMinute';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerMinute';
|
||||
protected $sqlSegment = 'MINUTE(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '0, 1, 2, 3, ..., 56, 57, 58, 59';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(0, min(59, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/VisitTime/functions.php';
|
||||
|
||||
class VisitLastActionMonth extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerMonth';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerMonth';
|
||||
protected $sqlSegment = 'MONTH(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '1, 2, 3, ..., 11, 12';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(1, min(12, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return \Piwik\Plugins\VisitTime\translateMonth($value);
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
class VisitLastActionQuarter extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerQuarter';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerQuarter';
|
||||
protected $sqlSegment = 'QUARTER(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '1, 2, 3, 4';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(1, min(4, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
class VisitLastActionSecond extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerSecond';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerSecond';
|
||||
protected $sqlSegment = 'SECOND(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '0, 1, 2, 3, ..., 58, 59';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(0, min(59, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Date;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
require_once PIWIK_INCLUDE_PATH . '/plugins/VisitTime/functions.php';
|
||||
|
||||
/**
|
||||
* This dimension holds the best guess for a visit's end time. It is set the last action
|
||||
* time for each visit. `ping=1` requests can be sent to update the dimension value so
|
||||
* it can be a more accurate guess of the time the visitor spent on the site.
|
||||
*
|
||||
* Note: though it is named 'visit last action time' it actually refers to the visit's last action's
|
||||
* end time.
|
||||
*/
|
||||
class VisitLastActionTime extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerHour';
|
||||
protected $sqlSegment = 'HOUR(log_visit.visit_last_action_time)';
|
||||
protected $segmentName = 'visitServerHour';
|
||||
protected $acceptValues = '0, 1, 2, 3, ..., 20, 21, 22, 23';
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return \Piwik\Plugins\VisitTime\getTimeLabel($value);
|
||||
}
|
||||
|
||||
// we do not install or define column definition here as we need to create this column when installing as there is
|
||||
// an index on it. Currently we do not define the index here... although we could overwrite the install() method
|
||||
// and add column 'visit_last_action_time' and add index. Problem is there is also an index
|
||||
// INDEX(idsite, config_id, visit_last_action_time) and we maybe not be sure whether idsite already exists at
|
||||
// installing point (we do not know whether idsite column will be added first).
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return Date::getDatetimeFromTimestamp($request->getCurrentTimestamp());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onExistingVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
if ($request->getParam('ping') == 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->onNewVisit($request, $visitor, $action);
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
class VisitLastActionWeekOfYear extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerWeekOfYear';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerWeekOfYear';
|
||||
protected $sqlSegment = 'WEEKOFYEAR(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '1, 2, 3, 4, ..., 51, 52, 53';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(1, min(53, $maxValuesToReturn));
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Metrics\Formatter;
|
||||
|
||||
class VisitLastActionYear extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_last_action_time';
|
||||
protected $type = self::TYPE_DATETIME;
|
||||
protected $segmentName = 'visitEndServerYear';
|
||||
protected $nameSingular = 'VisitTime_ColumnVisitEndServerYear';
|
||||
protected $sqlSegment = 'YEAR(log_visit.visit_last_action_time)';
|
||||
protected $acceptValues = '2016, 2017, 2018, ..., 9998, 9999';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->suggestedValuesCallback = function ($idSite, $maxValuesToReturn) {
|
||||
return range(2016, 2016 + $maxValuesToReturn);
|
||||
};
|
||||
}
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Config;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Plugins\CoreHome\Segment;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class VisitTotalTime extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visit_total_time';
|
||||
protected $columnType = 'INT(11) UNSIGNED NOT NULL';
|
||||
protected $segmentName = 'visitDuration';
|
||||
protected $nameSingular = 'General_ColumnVisitDuration';
|
||||
protected $type = self::TYPE_DURATION_S;
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
$totalTime = Config::getInstance()->Tracker['default_time_one_page_visit'];
|
||||
$totalTime = $this->cleanupVisitTotalTime($totalTime);
|
||||
|
||||
return $totalTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onExistingVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
$firstActionTime = $visitor->getVisitorColumn('visit_first_action_time');
|
||||
|
||||
$totalTime = 1 + $request->getCurrentTimestamp() - $firstActionTime;
|
||||
$totalTime = $this->cleanupVisitTotalTime($totalTime);
|
||||
|
||||
return $totalTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return int
|
||||
*/
|
||||
public function onConvertedVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
if (!$visitor->isVisitorKnown()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$totalTime = $visitor->getVisitorColumn('visit_total_time');
|
||||
|
||||
// If a pageview and goal conversion in the same second, with previously a goal conversion recorded
|
||||
// the request would not "update" the row since all values are the same as previous
|
||||
// therefore the request below throws exception, instead we make sure the UPDATE will affect the row
|
||||
$totalTime = $totalTime + $request->getParam('idgoal');
|
||||
// +2 to offset idgoal=-1 and idgoal=0
|
||||
$totalTime = $totalTime + 2;
|
||||
|
||||
return $this->cleanupVisitTotalTime($totalTime);
|
||||
}
|
||||
|
||||
public function getRequiredVisitFields()
|
||||
{
|
||||
return array('visit_first_action_time');
|
||||
}
|
||||
|
||||
private function cleanupVisitTotalTime($t)
|
||||
{
|
||||
$t = (int)$t;
|
||||
|
||||
if ($t < 0) {
|
||||
$t = 0;
|
||||
}
|
||||
|
||||
return $t;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class VisitorDaysSinceFirst extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visitor_days_since_first';
|
||||
protected $columnType = 'SMALLINT(5) UNSIGNED NULL';
|
||||
protected $segmentName = 'daysSinceFirstVisit';
|
||||
protected $nameSingular = 'General_DaysSinceFirstVisit';
|
||||
protected $type = self::TYPE_NUMBER;
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
// if the visitor is new, force days since first to 0, to ignore any potential bad values for _idts
|
||||
if (!$visitor->isVisitorKnown()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $request->getDaysSinceFirstVisit();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $visitor->getVisitorColumn($this->columnName);
|
||||
}
|
||||
}
|
@ -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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class VisitorDaysSinceOrder extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visitor_days_since_order';
|
||||
protected $columnType = 'SMALLINT(5) UNSIGNED NULL';
|
||||
protected $segmentName = 'daysSinceLastEcommerceOrder';
|
||||
protected $nameSingular = 'General_DaysSinceLastEcommerceOrder';
|
||||
protected $category = 'General_Visitors'; // todo put into ecommerce category?
|
||||
protected $type = self::TYPE_NUMBER;
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
$daysSinceLastOrder = $request->getDaysSinceLastOrder();
|
||||
|
||||
if ($daysSinceLastOrder === false) {
|
||||
$daysSinceLastOrder = 0;
|
||||
}
|
||||
|
||||
return $daysSinceLastOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $visitor->getVisitorColumn($this->columnName);
|
||||
}
|
||||
}
|
41
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitorId.php
Normal file
41
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitorId.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ArchivedMetric;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
|
||||
/**
|
||||
* Dimension for the log_visit.idvisitor column. This column is added in the CREATE TABLE
|
||||
* statement, so this dimension exists only to configure a segment.
|
||||
*/
|
||||
class VisitorId extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'idvisitor';
|
||||
protected $metricId = 'visitors';
|
||||
protected $nameSingular = 'General_VisitorID';
|
||||
protected $namePlural = 'General_Visitors';
|
||||
protected $segmentName = 'visitorId';
|
||||
protected $acceptValues = '34c31e04394bdc63 - any 16 Hexadecimal chars ID, which can be fetched using the Tracking API function getVisitorId()';
|
||||
protected $allowAnonymous = false;
|
||||
protected $sqlFilterValue = array('Piwik\Common', 'convertVisitorIdToBin');
|
||||
protected $type = self::TYPE_BINARY;
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
$metric = $dimensionMetricFactory->createMetric(ArchivedMetric::AGGREGATION_UNIQUE);
|
||||
$metric->setTranslatedName(Piwik::translate('General_ColumnNbUniqVisitors'));
|
||||
$metric->setName('nb_uniq_visitors');
|
||||
$metricsList->addMetric($metric);
|
||||
}
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
<?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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class VisitorReturning extends VisitDimension
|
||||
{
|
||||
const IS_RETURNING_CUSTOMER = 2;
|
||||
const IS_RETURNING = 1;
|
||||
const IS_NEW = 0;
|
||||
|
||||
protected $columnName = 'visitor_returning';
|
||||
protected $columnType = 'TINYINT(1) NULL';
|
||||
protected $segmentName = 'visitorType';
|
||||
protected $nameSingular = 'General_VisitType';
|
||||
protected $namePlural = 'General_VisitTypes';
|
||||
protected $conversionField = true;
|
||||
protected $type = self::TYPE_ENUM;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->acceptValues = 'new, returning, returningCustomer. ';
|
||||
$this->acceptValues .= Piwik::translate('General_VisitTypeExample', '"&segment=visitorType==returning,visitorType==returningCustomer"');
|
||||
$this->sqlFilterValue = function ($type) {
|
||||
if (is_numeric($type)) {
|
||||
return $type;
|
||||
}
|
||||
return $type == "new" ? 0 : ($type == "returning" ? 1 : 2);
|
||||
};
|
||||
}
|
||||
|
||||
public function formatValue($value, $idSite, Formatter $formatter)
|
||||
{
|
||||
if ($value === 1 || $value === '1' || $value === 'returning') {
|
||||
return Piwik::translate('CoreHome_VisitTypeReturning');
|
||||
} elseif ($value === 2 || $value === '2' || $value === 'returningCustomer'){
|
||||
return Piwik::translate('CoreHome_VisitTypeReturningCustomer');
|
||||
} elseif ($value === 0 || $value === '0' || $value === 'new'){
|
||||
return Piwik::translate('General_New');
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function getEnumColumnValues()
|
||||
{
|
||||
return array(
|
||||
self::IS_RETURNING_CUSTOMER => 'returningCustomer',
|
||||
self::IS_RETURNING => 'returning',
|
||||
self::IS_NEW => 'new',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
$daysSinceLastOrder = $request->getDaysSinceLastOrder();
|
||||
$isReturningCustomer = ($daysSinceLastOrder !== false);
|
||||
|
||||
if ($isReturningCustomer) {
|
||||
return self::IS_RETURNING_CUSTOMER;
|
||||
}
|
||||
|
||||
$visitCount = $request->getVisitCount();
|
||||
$daysSinceFirstVisit = $request->getDaysSinceFirstVisit();
|
||||
$daysSinceLastVisit = $request->getDaysSinceLastVisit();
|
||||
|
||||
if ($visitCount > 1 || $visitor->isVisitorKnown() || $daysSinceFirstVisit > 0 || $daysSinceLastVisit > 0) {
|
||||
return self::IS_RETURNING;
|
||||
}
|
||||
|
||||
return self::IS_NEW;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $visitor->getVisitorColumn($this->columnName);
|
||||
}
|
||||
}
|
52
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitsCount.php
Normal file
52
msd2/tracking/piwik/plugins/CoreHome/Columns/VisitsCount.php
Normal 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\CoreHome\Columns;
|
||||
|
||||
use Piwik\Columns\DimensionMetricFactory;
|
||||
use Piwik\Columns\MetricsList;
|
||||
use Piwik\Plugin\Dimension\VisitDimension;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker\Visitor;
|
||||
|
||||
class VisitsCount extends VisitDimension
|
||||
{
|
||||
protected $columnName = 'visitor_count_visits';
|
||||
protected $columnType = 'INT(11) UNSIGNED NOT NULL';
|
||||
protected $segmentName = 'visitCount';
|
||||
protected $nameSingular = 'General_NumberOfVisits';
|
||||
protected $type = self::TYPE_NUMBER;
|
||||
|
||||
public function configureMetrics(MetricsList $metricsList, DimensionMetricFactory $dimensionMetricFactory)
|
||||
{
|
||||
// no metrics for this dimension, it would be rather confusing I think
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onNewVisit(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $request->getVisitCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Visitor $visitor
|
||||
* @param Action|null $action
|
||||
* @return mixed
|
||||
*/
|
||||
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
|
||||
{
|
||||
return $visitor->getVisitorColumn($this->columnName);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user