diff options
author | Stefan Giehl <stefan@piwik.org> | 2017-09-04 07:49:32 +0300 |
---|---|---|
committer | Matthieu Aubry <mattab@users.noreply.github.com> | 2017-09-04 07:49:32 +0300 |
commit | 660df51720386077f0a1433d86bcb96ef002de35 (patch) | |
tree | b953fcb22811d3e76f752713eee1c619b6d82098 /plugins/Events | |
parent | b40a997defdea7ba6984b268bb7c791d089cfd3f (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/Events')
-rw-r--r-- | plugins/Events/Events.php | 17 | ||||
-rw-r--r-- | plugins/Events/VisitorDetails.php | 56 | ||||
-rw-r--r-- | plugins/Events/templates/_actionEvent.twig | 25 |
3 files changed, 92 insertions, 6 deletions
diff --git a/plugins/Events/Events.php b/plugins/Events/Events.php index 8ae0f5cb2e..eee4ce7f52 100644 --- a/plugins/Events/Events.php +++ b/plugins/Events/Events.php @@ -27,16 +27,11 @@ class Events extends \Piwik\Plugin 'Metrics.getDefaultMetricDocumentationTranslations' => 'addMetricDocumentationTranslations', 'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations', 'ViewDataTable.configure' => 'configureViewDataTable', - 'Live.getAllVisitorDetails' => 'extendVisitorDetails', 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', + 'Actions.getCustomActionDimensionFieldsAndJoins' => 'provideActionDimensionFields' ); } - public function extendVisitorDetails(&$visitor, $details) - { - $visitor['events'] = $details['visit_total_events']; - } - public function addMetricTranslations(&$translations) { $translations = array_merge($translations, $this->getMetricTranslations()); @@ -265,4 +260,14 @@ class Events extends \Piwik\Plugin { $stylesheets[] = "plugins/Events/stylesheets/datatable.less"; } + + public function provideActionDimensionFields(&$fields, &$joins) + { + $fields[] = 'log_action_event_category.name AS eventCategory'; + $fields[] = 'log_action_event_action.name as eventAction'; + $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_event_action + ON log_link_visit_action.idaction_event_action = log_action_event_action.idaction'; + $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_event_category + ON log_link_visit_action.idaction_event_category = log_action_event_category.idaction'; + } } diff --git a/plugins/Events/VisitorDetails.php b/plugins/Events/VisitorDetails.php new file mode 100644 index 0000000000..76dfd37806 --- /dev/null +++ b/plugins/Events/VisitorDetails.php @@ -0,0 +1,56 @@ +<?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\Events; + +use Piwik\Plugins\Live\VisitorDetailsAbstract; +use Piwik\Tracker\Action; +use Piwik\View; + +class VisitorDetails extends VisitorDetailsAbstract +{ + public function extendActionDetails(&$action, $nextAction, $visitorDetails) + { + if ($action['type'] == Action::TYPE_EVENT) { + $action['type'] = 'event'; + $action['icon'] = 'plugins/Morpheus/images/event.png'; + } + } + + public function extendVisitorDetails(&$visitor) + { + $visitor['events'] = $this->details['visit_total_events']; + } + + public function renderAction($action, $previousAction, $visitorDetails) + { + if ($action['type'] != 'event') { + return; + } + + $view = new View('@Events/_actionEvent.twig'); + $view->action = $action; + $view->previousAction = $previousAction; + $view->visitInfo = $visitorDetails; + return $view->render(); + } + + + public function initProfile($visits, &$profile) + { + $profile['totalEvents'] = 0; + } + + public function handleProfileAction($action, &$profile) + { + if ($action['type'] != 'event') { + return; + } + $profile['totalEvents']++; + } +}
\ No newline at end of file diff --git a/plugins/Events/templates/_actionEvent.twig b/plugins/Events/templates/_actionEvent.twig new file mode 100644 index 0000000000..6fa44108b1 --- /dev/null +++ b/plugins/Events/templates/_actionEvent.twig @@ -0,0 +1,25 @@ +<li class="action" title="{{ postEvent('Live.renderActionTooltip', action, visitInfo) }}"> + <div> + {% if action.pageTitle|default(false) is not empty %} + <span class="truncated-text-line">{{ action.pageTitle|rawSafeDecoded }}</span> + {% endif %} + <img src='plugins/Morpheus/images/event.png' title='{{ 'Events_Event'|translate }}' class="action-list-action-icon event"> + <span class="truncated-text-line event">{{ action.eventCategory|rawSafeDecoded }} + - {{ action.eventAction|rawSafeDecoded }} {% if action.eventName is defined %}- {{ action.eventName|rawSafeDecoded }}{% endif %} {% if action.eventValue is defined %}[{{ action.eventValue }}]{% endif %}</span> + {% if action.url is not empty %} + {% if previousAction.url|default(false) == action.url %} + {# For events, do not show (url) if the Event URL is the same as the URL last displayed #} + {% else %} + {% if action.url|trim|lower starts with 'javascript:' or + action.url|trim|lower starts with 'vbscript:' or + action.url|trim|lower starts with 'data:' %} + {{ action.url }} + {% else %} + <a href="{{ action.url }}" rel="noreferrer" target="_blank" class="truncated-text-line"> + {{ action.url|replace({'http://': '', 'https://': ''}) }} + </a> + {% endif %} + {% endif %} + {% endif %} + </div> +</li> |