diff options
author | Thomas Steur <tsteur@users.noreply.github.com> | 2016-12-01 02:57:37 +0300 |
---|---|---|
committer | Matthieu Aubry <mattab@users.noreply.github.com> | 2016-12-01 02:57:37 +0300 |
commit | 107147670f46b234afadefe82e0c384b10c41279 (patch) | |
tree | 37aaebf3b7444cb03c36964696daae2604ce2ac5 /plugins/Actions/Columns | |
parent | 592f9bd80e27e48f8159a90d6df055f8f0791f93 (diff) |
New visit dimension "total interactions" and new action dimension "Interaction position" and corresponding segments (#10911)
* adding new interaction segments
* add possibility to limit queries
* fix Piwik does not join correctly if 2 custom joins require each other
* added position to api output
* Contents plugin: Rename "Interaction" metric to "Content Interaction"
Diffstat (limited to 'plugins/Actions/Columns')
-rw-r--r-- | plugins/Actions/Columns/InteractionPosition.php | 47 | ||||
-rw-r--r-- | plugins/Actions/Columns/VisitTotalInteractions.php | 106 |
2 files changed, 153 insertions, 0 deletions
diff --git a/plugins/Actions/Columns/InteractionPosition.php b/plugins/Actions/Columns/InteractionPosition.php new file mode 100644 index 0000000000..34bd9064f2 --- /dev/null +++ b/plugins/Actions/Columns/InteractionPosition.php @@ -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\Actions\Columns; + +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; +use Piwik\Tracker\Visitor; +use Piwik\Piwik; +use Piwik\Plugin\Dimension\ActionDimension; + +class InteractionPosition extends ActionDimension +{ + protected $columnName = 'interaction_position'; + protected $columnType = 'SMALLINT UNSIGNED DEFAULT NULL'; + + /** + * @param Request $request + * @param Visitor $visitor + * @param Action $action + * + * @return mixed|false + */ + public function onNewAction(Request $request, Visitor $visitor, Action $action) + { + $shouldCount = VisitTotalInteractions::shouldCountInteraction($action); + + if ($shouldCount && $visitor->isNewVisit()) { + return 1; + } else if ($shouldCount) { + return VisitTotalInteractions::getCurrentInteractionPosition($request); + } + + return false; + } + + public function getName() + { + return Piwik::translate('Actions_ColumnInteractionPosition'); + } + +}
\ No newline at end of file diff --git a/plugins/Actions/Columns/VisitTotalInteractions.php b/plugins/Actions/Columns/VisitTotalInteractions.php new file mode 100644 index 0000000000..ee8d4938d8 --- /dev/null +++ b/plugins/Actions/Columns/VisitTotalInteractions.php @@ -0,0 +1,106 @@ +<?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\Visitor; + +class VisitTotalInteractions extends VisitDimension +{ + protected $columnName = 'visit_total_interactions'; + protected $columnType = 'SMALLINT UNSIGNED DEFAULT 0'; + + protected function configureSegments() + { + $segment = new Segment(); + $segment->setType(Segment::TYPE_METRIC); + $segment->setSegment('interactions'); + $segment->setName('General_NbInteractions'); + $segment->setAcceptedValues('Any positive integer'); + $segment->setSuggestedValuesCallback(function ($idSite, $maxValuesToReturn) { + $positions = range(1,50); + + return array_slice($positions, 0, $maxValuesToReturn); + }); + $this->addSegment($segment); + } + + /** + * @param Request $request + * @param Visitor $visitor + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, Visitor $visitor, $action) + { + if (self::shouldCountInteraction($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) + { + $request->setMetadata('Actions', $this->columnName, $visitor->getVisitorColumn($this->columnName)); + + if (self::shouldCountInteraction($action)) { + return $this->columnName . ' + 1'; + } + + return false; + } + + /** + * @param Request $request + * @return int + */ + public static function getCurrentInteractionPosition($request) + { + $position = $request->getMetadata('Actions', 'visit_total_interactions'); + + return $position + 1; + } + + /** + * @param Action|null $action + * @return bool + */ + public static function shouldCountInteraction($action) + { + if (empty($action)) { + return false; + } + + $idActionUrl = $action->getIdActionUrlForEntryAndExitIds(); + + if ($idActionUrl !== false) { + return true; + } + + $actionType = $action->getActionType(); + $types = array(Action::TYPE_SITE_SEARCH); + + if (in_array($actionType, $types)) { + return true; + } + + return false; + } + +}
\ No newline at end of file |