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:
authorStefan Giehl <stefan@piwik.org>2017-09-04 07:49:32 +0300
committerMatthieu Aubry <mattab@users.noreply.github.com>2017-09-04 07:49:32 +0300
commit660df51720386077f0a1433d86bcb96ef002de35 (patch)
treeb953fcb22811d3e76f752713eee1c619b6d82098 /plugins/CoreHome/VisitorDetails.php
parentb40a997defdea7ba6984b268bb7c791d089cfd3f (diff)
Customizeable / Extendable Visitor Profile & Visitor Log (#11579)
* move setting visitor details into own classes instead of using an event * move manipulating actions to VisitorDetails classes * move some more parts to plugins * update test files as order of columns changed * implement new VisitorDetails method to provide actions * move rendering actions to visitordetail classes * render visitor properties in new classes * makes it possible to attach icons to visitor log * moves rendering of action tooltip into new visitordetails method * adds event for extending custom action dimension fields * small improvements * fetch log_link_visit_action.idpageview for actions * improve variable name * started to improve/change visitor profile * show devices summary in visitor profile * also remove empty xml tags for api tests * hide actions in visitor profile by default * move all icons to the middle of visitor log * small change * move rendering referrer information to referrers plugin * move provider logic to provider plugin * show content interactions in visitor log * improve look of content interactions/impressions in visitor log / profile * hide idpageview from tests * update changelog * move rendering events to Events plugin * do not hide duplicate page views in visitor log, but show them with a refresh icon instead * show top visited pages in visitor profile * always show visitor profile link in visitor log Still hidden in a widget by default, as it might overlay some other content * Show info about not shown actions truncated due to config setting * use bulk queries to fetch actions instead of fetching them for each visit * small adjustments * improve some loops to improve memory usage * move gathering visitor profile informations to VisitorDetails classes * update screenshots * update test files * move rendering of visitor profile summary to visitor details classes * improve templates * Makes VisitorDetailsAbstract class api and improves comments * show visit details in visitor profile * improve css * reverse enumeration of visits in visitor profile * improve css * Show visit id in IP tooltip * Small CSS improvements * further adjustments * sort devices by count * adds UI tests for visitor log and profile * Show bandwidth in visitor profile test * show actions by default and add button to toggle all together * CSS cleanup * remove border around refresh icon * add tooltip for refresh icon in profile * move first/last visit before top visited pages * Improve text shown for unique pageviews * link urls in top visited pages * improve sorting of device list * improve tests * Improve device overview in visitor profile * only render top pages if at least one page was visited more than once * make visitor id non bold * hide visitor type icon in profile, and show latest visits icons in overview * fix search engine icon in visitor details * small improvements * only render view if required * show visit icons only on hover in profile * remove from again * test improves * show text besides icon in profile header * improve tests * Removes unused CSS and JS * Reformats CSS * Removes invisible paper clip * Removes unused profile images from Live plugin * raise test timeouts * Improve UI tests splitting for travis * show device type in profile header if no resolution is available * prevent text overlapping * no retries * fix test * change summary order * fix position of export icon * fixes tooltip text * improve pages overview * visitor details order * action tooltip order * show only ecommerce icon if no goals where converted * show custom variables summary in profile * show user id in same size as headline * link referer urls for first/last visit in profile * make profile xml compatible * try to improve ui test * increase bottom marign * increase version number * small adjustments * CSS Rewrite for visitor profile * center action icons in visitor log and profile * improve widgetized visitor profile * small layout fix * always populate raw referrer url for visitor details * update expected test files * Refactor profile summaries into additional classes * update screenshots * submodule update * update piwik-icons submodule (#11904) * update piwik-icons submodule * fix some system tests * update screenshots * make device list xml compatible * improve translation * improve icon position * improves spacings * update test files * small css improvement * update screenshots
Diffstat (limited to 'plugins/CoreHome/VisitorDetails.php')
-rw-r--r--plugins/CoreHome/VisitorDetails.php119
1 files changed, 119 insertions, 0 deletions
diff --git a/plugins/CoreHome/VisitorDetails.php b/plugins/CoreHome/VisitorDetails.php
new file mode 100644
index 0000000000..88ae63a09c
--- /dev/null
+++ b/plugins/CoreHome/VisitorDetails.php
@@ -0,0 +1,119 @@
+<?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;
+
+use Piwik\Metrics\Formatter;
+use Piwik\Plugins\CoreHome\Columns\VisitGoalBuyer;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['userId'] = $this->getUserId();
+ $visitor['visitorType'] = $this->getVisitorReturning();
+ $visitor['visitorTypeIcon'] = $this->getVisitorReturningIcon();
+ $visitor['visitConverted'] = $this->isVisitorGoalConverted();
+ $visitor['visitConvertedIcon'] = $this->getVisitorGoalConvertedIcon();
+ $visitor['visitCount'] = $this->getVisitCount();
+ $visitor['visitEcommerceStatus'] = $this->getVisitEcommerceStatus();
+ $visitor['visitEcommerceStatusIcon'] = $this->getVisitEcommerceStatusIcon();
+ $visitor['daysSinceFirstVisit'] = $this->getDaysSinceFirstVisit();
+ $visitor['daysSinceLastEcommerceOrder'] = $this->getDaysSinceLastEcommerceOrder();
+ $visitor['visitDuration'] = $this->getVisitLength();
+ $visitor['visitDurationPretty'] = $this->getVisitLengthPretty();
+ }
+
+ protected function getVisitEcommerceStatusIcon()
+ {
+ $status = $this->getVisitEcommerceStatus();
+
+ if (in_array($status, array('ordered', 'orderedThenAbandonedCart'))) {
+ return "plugins/Morpheus/images/ecommerceOrder.png";
+ } elseif ($status == 'abandonedCart') {
+ return "plugins/Morpheus/images/ecommerceAbandonedCart.png";
+ }
+ // Note: it is important that there is no icon when there was no ecommerce conversion
+ return null;
+ }
+
+ protected function getVisitEcommerceStatus()
+ {
+ return VisitGoalBuyer::getVisitEcommerceStatusFromId($this->details['visit_goal_buyer']);
+ }
+
+ protected function isVisitorGoalConverted()
+ {
+ return $this->details['visit_goal_converted'];
+ }
+
+ protected function getVisitorGoalConvertedIcon()
+ {
+ return $this->isVisitorGoalConverted()
+ ? "plugins/Morpheus/images/goal.png"
+ : null;
+ }
+
+ protected function getDaysSinceFirstVisit()
+ {
+ return $this->details['visitor_days_since_first'];
+ }
+
+ protected function getDaysSinceLastEcommerceOrder()
+ {
+ return $this->details['visitor_days_since_order'];
+ }
+
+ protected function getVisitorReturning()
+ {
+ $type = $this->details['visitor_returning'];
+ return $type == 2
+ ? 'returningCustomer'
+ : ($type == 1
+ ? 'returning'
+ : 'new');
+ }
+
+ protected function getVisitorReturningIcon()
+ {
+ $type = $this->getVisitorReturning();
+ if ($type == 'returning'
+ || $type == 'returningCustomer'
+ ) {
+ return "plugins/Live/images/returningVisitor.png";
+ }
+ return null;
+ }
+
+ protected function getVisitCount()
+ {
+ return $this->details['visitor_count_visits'];
+ }
+
+ protected function getVisitLength()
+ {
+ return $this->details['visit_total_time'];
+ }
+
+ protected function getVisitLengthPretty()
+ {
+ $formatter = new Formatter();
+ return $formatter->getPrettyTimeFromSeconds($this->details['visit_total_time'], true);
+ }
+
+ protected function getUserId()
+ {
+ if (isset($this->details['user_id'])
+ && strlen($this->details['user_id']) > 0
+ ) {
+ return $this->details['user_id'];
+ }
+ return null;
+ }
+} \ No newline at end of file