1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
{# some users view thousands of pages which can crash the browser viewing Live! #}
{% set maxPagesDisplayedByVisitor=100 %}
{% if error is not empty %}
<div piwik-alert="danger">{{ error }}</div>
{% else %}
<ul id="visitsLive">
{% for visitor in visitors.getRows() %}
<li id="{{ visitor.getColumn('idVisit') }}" class="visit">
<div style="display:none;" class="idvisit">{{ visitor.idVisit }}</div>
<div title="{{ visitor.getColumn('actionDetails')|length }} {{ 'General_Actions'|translate }}" class="datetime">
<span style="display:none;" class="serverTimestamp">{{ visitor.getColumn('serverTimestamp')|raw }}</span>
{{ postEvent('Live.visitorLogWidgetViewBeforeVisitInfo', visitor) }}
{% set year = visitor.getColumn('serverTimestamp')|date('Y') %}
<span class="realTimeWidget_datetime">{{ visitor.getColumn('serverDatePretty')|replace({(year): ' '}) }} - {{ visitor.getColumn('serverTimePretty') }} {% if visitor.getColumn('visitDuration') > 0 %}({{ visitor.getColumn('visitDurationPretty')|raw }}){% endif %}</span>
{% if visitor.getColumn('userId')|default(false) is not empty %}
<a class="visits-live-launch-visitor-profile rightLink" title="{{ 'Live_ViewVisitorProfile'|translate }} {% if visitor.getColumn('userId') is not empty %}{{ visitor.getColumn('userId') }}{% endif %}" data-visitor-id="{{ visitor.getColumn('visitorId') }}">
<span>{{ visitor.getColumn('userId')|rawSafeDecoded}}</span>
</a>
{% endif %}
{{ postEvent('Live.renderVisitorIcons', visitor) }}
{% if not userIsAnonymous %}
<a class="visits-live-launch-visitor-profile rightLink" title="{{ 'Live_ViewVisitorProfile'|translate }} {% if visitor.getColumn('userId') is not empty %}{{ visitor.getColumn('userId') }}{% endif %}" data-visitor-id="{{ visitor.getColumn('visitorId') }}">
<span class="icon-visitor-profile"></span>
</a>
{% endif %}
<span class="referrer">
{% include "@Referrers/_visitorDetails.twig" with {'visitInfo': visitor} %}
</span>
</div>
<div id="{{ visitor.getColumn('idVisit')|e('html_attr') }}_actions" class="settings">
<span class="pagesTitle"
title="{{ visitor.getColumn('actionDetails')|length }} {{ 'General_Actions'|translate }}"
>{{ 'General_Actions'|translate }}:</span>
{% set col = 0 %}
{% for action in visitor.getColumn('actionDetails') %}
{% if loop.index <= maxPagesDisplayedByVisitor %}
{% if action.type == 'ecommerceOrder' or action.type == 'ecommerceAbandonedCart' %}
{% set title %}
{%- if action.type == 'ecommerceOrder' %}
{{- 'Goals_EcommerceOrder'|translate -}}
{% else %}
{{- 'Goals_AbandonedCart'|translate -}}
{% endif %}
{{- "\n - " -}}
{%- if action.type == 'ecommerceOrder' -%}
{{- 'General_ColumnRevenue'|translate -}}:
{%- else -%}
{%- set revenueLeft -%}
{{- 'General_ColumnRevenue'|translate -}}
{%- endset -%}
{{- 'Goals_LeftInCart'|translate(revenueLeft) -}}:
{%- endif %} {{ action.revenue|money(idSite)|raw -}}
{{- "\n - " -}}{{- action.serverTimePretty -}}
{{- "\n" -}}
{% if action.itemDetails is not empty -%}
{% for product in action.itemDetails -%}
{{- "\n# " -}}{{ product.itemSKU }}{% if product.itemName is not empty %}: {{ product.itemName }}{% endif %}{% if product.itemCategory is not empty %} ({{ product.itemCategory }}){% endif %}, {{ 'General_Quantity'|translate }}: {{ product.quantity }}, {{ 'General_Price'|translate }}: {{ product.price|money(idSite)|raw }}
{%- endfor %}
{%- endif %}
{% endset %}
<span title="{{- title -}}">
<img class='iconPadding' src="{{ action.iconSVG|default(action.icon) }}"/>
{% if action.type == 'ecommerceOrder' %}
{{ 'General_ColumnRevenue'|translate }}: {{ action.revenue|money(idSite)|raw }}
{% endif %}
</span>
{% else %}
{% if action.url is defined and action.url is not empty %}
<a href="{{ action.url|safelink|e('html_attr') }}" target="_blank" rel="noreferrer noopener">
{% endif %}
{% if action.type == 'action' %}
{# white spacing matters as Chrome tooltip display whitespaces #}
{% set title %}
{% if action.url|trim is not empty %}<span class='tooltip-action-url'>{{ action.url }}</span>{% endif %}
{% if action.pageTitle is not empty %}<span class='tooltip-action-page-title'>{{ action.pageTitle }}</span>{% endif %}
<span class="tooltip-action-server-time">{{ action.serverTimePretty }}</span>
{% if action.timeSpentPretty is defined %}<span class='tooltip-time-on-page'>{{ 'General_TimeOnPage'|translate }}: {{ action.timeSpentPretty|raw }}</span>{% endif %}
{%- endset %}
<img class='iconPadding' src="{{ action.iconSVG|default(action.icon) }}" title="{{- title|e('html_attr') -}}"/>
{% elseif action.type == 'outlink' or action.type == 'download' %}
<img class='iconPadding' src="{{ action.iconSVG|default(action.icon) }}"
title="{% if action.url is defined %}{{ action.url }} - {% endif %}{{ action.serverTimePretty }}"/>
{% elseif action.type == 'search' %}
<img class='iconPadding' src="{{ action.iconSVG|default(action.icon) }}"
title="{{ 'Actions_SubmenuSitesearch'|translate }}: {{ action.siteSearchKeyword }} - {{ action.serverTimePretty }}"/>
{% elseif action.eventCategory|default(false) is not empty %}
<img class="iconPadding" src='{{ action.iconSVG|default(action.icon) }}'
title="{{ 'Events_Event'|translate }} {{ action.eventCategory }} - {{ action.eventAction }} {% if action.eventName is defined %}- {{ action.eventName }}{% endif %} {% if action.eventValue is defined %}- {{ action.eventValue }}{% endif %}"/>
{% elseif action.type == 'goal' or action.type == constant('Piwik\\Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER') or
action.type == constant('Piwik\\Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART') %}
<img class='iconPadding' src="{{ action.iconSVG|default(action.icon) }}"
title="{{ action.goalName }} - {% if action.revenue > 0 %}{{ 'General_ColumnRevenue'|translate }}: {{ action.revenue|money(idSite)|raw }} - {% endif %} {{ action.serverTimePretty }}"/>
{% endif %}
{% if action.url is defined and action.url is not empty %}
</a>
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% if visitor.getColumn('actionDetails')|length > maxPagesDisplayedByVisitor %}
({{ 'Live_MorePagesNotDisplayed'|translate }})
{% endif %}
</div>
</li>
{% endfor %}
</ul>
<script type="text/javascript">
$(function () {
$('#visitsLive').on('click', '.visits-live-launch-visitor-profile', function (e) {
e.preventDefault();
broadcast.propagateNewPopoverParameter('visitorProfile', $(this).attr('data-visitor-id'));
return false;
}).tooltip({
track: true,
content: function() {
var title = $(this).attr('title');
return piwikHelper.escape(title.replace(/\n/g, '<br />'));
},
show: {delay: 100, duration: 0},
hide: false
});
});
</script>
{% endif %}
|