Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2016-12-01 02:57:37 +0300
committerMatthieu Aubry <mattab@users.noreply.github.com>2016-12-01 02:57:37 +0300
commit107147670f46b234afadefe82e0c384b10c41279 (patch)
tree37aaebf3b7444cb03c36964696daae2604ce2ac5 /plugins/Actions/Columns
parent592f9bd80e27e48f8159a90d6df055f8f0791f93 (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.php47
-rw-r--r--plugins/Actions/Columns/VisitTotalInteractions.php106
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