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:
Diffstat (limited to 'plugins/Overlay')
-rw-r--r--plugins/Overlay/Controller.php107
-rw-r--r--plugins/Overlay/client/client.js9
-rw-r--r--plugins/Overlay/config/ui-test.php14
-rw-r--r--plugins/Overlay/javascripts/Overlay_Helper.js8
-rw-r--r--plugins/Overlay/javascripts/Piwik_Overlay.js37
-rw-r--r--plugins/Overlay/javascripts/rowaction.js55
-rw-r--r--plugins/Overlay/lang/ja.json1
-rw-r--r--plugins/Overlay/lang/ko.json1
-rw-r--r--plugins/Overlay/stylesheets/overlay.css12
-rw-r--r--plugins/Overlay/templates/index.twig4
-rw-r--r--plugins/Overlay/templates/index_noframe.twig2
-rw-r--r--plugins/Overlay/templates/renderSidebar.twig5
-rw-r--r--plugins/Overlay/templates/startOverlaySession.twig50
13 files changed, 218 insertions, 87 deletions
diff --git a/plugins/Overlay/Controller.php b/plugins/Overlay/Controller.php
index 795d7b991d..6327d34ddf 100644
--- a/plugins/Overlay/Controller.php
+++ b/plugins/Overlay/Controller.php
@@ -16,14 +16,26 @@ use Piwik\Metrics;
use Piwik\Piwik;
use Piwik\Plugin\Report;
use Piwik\Plugins\Actions\ArchivingHelper;
+use Piwik\Plugins\SegmentEditor\SegmentFormatter;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\ProxyHttp;
+use Piwik\Segment;
use Piwik\Tracker\Action;
use Piwik\Tracker\PageUrl;
use Piwik\View;
class Controller extends \Piwik\Plugin\Controller
{
+ /**
+ * @var SegmentFormatter
+ */
+ private $segmentFormatter;
+
+ public function __construct(SegmentFormatter $segmentFormatter)
+ {
+ $this->segmentFormatter = $segmentFormatter;
+ parent::__construct();
+ }
/** The index of the plugin */
public function index()
@@ -38,6 +50,7 @@ class Controller extends \Piwik\Plugin\Controller
$view = new View($template);
$this->setGeneralVariablesView($view);
+ $view->segment = Request::getRawSegmentFromRequest();
$view->ssl = ProxyHttp::isHttps();
@@ -52,8 +65,9 @@ class Controller extends \Piwik\Plugin\Controller
$period = Common::getRequestVar('period');
$date = Common::getRequestVar('date');
$currentUrl = Common::getRequestVar('currentUrl');
+ $segment = Request::getRawSegmentFromRequest();
$currentUrl = Common::unsanitizeInputValue($currentUrl);
- $segment = '';
+ $segmentSidebar = '';
$normalizedCurrentUrl = PageUrl::excludeQueryParametersFromUrl($currentUrl, $idSite);
$normalizedCurrentUrl = Common::unsanitizeInputValue($normalizedCurrentUrl);
@@ -63,16 +77,21 @@ class Controller extends \Piwik\Plugin\Controller
$path = ArchivingHelper::getActionExplodedNames($normalizedCurrentUrl, Action::TYPE_PAGE_URL);
$path = array_map('urlencode', $path);
$label = implode('>', $path);
- $request = new Request(
- 'method=Actions.getPageUrls'
- . '&idSite=' . urlencode($idSite)
- . '&date=' . urlencode($date)
- . '&period=' . urlencode($period)
- . '&label=' . urlencode($label)
- . '&format=original'
- . '&format_metrics=0'
+
+ $params = array(
+ 'idSite' => $idSite,
+ 'date' => $date,
+ 'period' => $period,
+ 'label' => $label,
+ 'format' => 'original',
+ 'format_metrics' => 0,
);
- $dataTable = $request->process();
+
+ if (!empty($segment)) {
+ $params['segment'] = $segment;
+ }
+
+ $dataTable = Request::processRequest('Actions.getPageUrls', $params);
$formatter = new Metrics\Formatter\Html();
@@ -84,7 +103,10 @@ class Controller extends \Piwik\Plugin\Controller
$showMetrics = array('nb_hits', 'nb_visits', 'nb_users', 'nb_uniq_visitors',
'bounce_rate', 'exit_rate', 'avg_time_on_page');
- $segment = $row->getMetadata('segment');
+ $segmentSidebar = $row->getMetadata('segment');
+ if (!empty($segmentSidebar) && !empty($segment)) {
+ $segmentSidebar = $segment . ';' . $segmentSidebar;
+ }
foreach ($showMetrics as $metric) {
$value = $row->getColumn($metric);
@@ -127,7 +149,8 @@ class Controller extends \Piwik\Plugin\Controller
$view->idSite = $idSite;
$view->period = $period;
$view->date = $date;
- $view->segment = $segment;
+ $view->segment = $segmentSidebar;
+ $view->segmentDescription = $this->segmentFormatter->getHumanReadable($segment, $idSite);
$this->outputCORSHeaders();
return $view->render();
@@ -142,64 +165,20 @@ class Controller extends \Piwik\Plugin\Controller
$idSite = Common::getRequestVar('idSite', 0, 'int');
Piwik::checkUserHasViewAccess($idSite);
+ $view = new View('@Overlay/startOverlaySession');
+
$sitesManager = APISitesManager::getInstance();
$site = $sitesManager->getSiteFromId($idSite);
$urls = $sitesManager->getSiteUrlsFromId($idSite);
+ $view->isHttps = ProxyHttp::isHttps();
+ $view->knownUrls = json_encode($urls);
+ $view->mainUrl = $site['main_url'];
+
$this->outputCORSHeaders();
Common::sendHeader('Content-Type: text/html; charset=UTF-8');
- return '
- <html><head><title></title></head><body>
- <script type="text/javascript">
- function handleProtocol(url) {
- if (' . (ProxyHttp::isHttps() ? 'true' : 'false') . ') {
- return url.replace(/http:\/\//i, "https://");
- } else {
- return url.replace(/https:\/\//i, "http://");
- }
- }
-
- function removeUrlPrefix(url) {
- return url.replace(/http(s)?:\/\/(www\.)?/i, "");
- }
-
- if (window.location.hash) {
- var match = false;
-
- var urlToRedirect = window.location.hash.substr(1);
- var urlToRedirectWithoutPrefix = removeUrlPrefix(urlToRedirect);
-
- var knownUrls = ' . json_encode($urls) . ';
- for (var i = 0; i < knownUrls.length; i++) {
- var testUrl = removeUrlPrefix(knownUrls[i]);
- if (urlToRedirectWithoutPrefix.substr(0, testUrl.length) == testUrl) {
- match = true;
- if (navigator.appName == "Microsoft Internet Explorer") {
- // internet explorer loses the referrer if we use window.location.href=X
- var referLink = document.createElement("a");
- referLink.href = handleProtocol(urlToRedirect);
- document.body.appendChild(referLink);
- referLink.click();
- } else {
- window.location.href = handleProtocol(urlToRedirect);
- }
- break;
- }
- }
-
- if (!match) {
- var idSite = window.location.href.match(/idSite=([0-9]+)/i)[1];
- window.location.href = "index.php?module=Overlay&action=showErrorWrongDomain"
- + "&idSite=" + idSite
- + "&url=" + encodeURIComponent(urlToRedirect);
- }
- }
- else {
- window.location.href = handleProtocol("' . $site['main_url'] . '");
- };
- </script>
- </body></html>
- ';
+
+ return $view->render();
}
/**
diff --git a/plugins/Overlay/client/client.js b/plugins/Overlay/client/client.js
index 75bd19f3b3..5fd99c466b 100644
--- a/plugins/Overlay/client/client.js
+++ b/plugins/Overlay/client/client.js
@@ -10,7 +10,7 @@ var Piwik_Overlay_Client = (function () {
var idSite;
/** The current period and date */
- var period, date;
+ var period, date, segment;
/** Reference to the status bar DOM element */
var statusBar;
@@ -84,11 +84,12 @@ var Piwik_Overlay_Client = (function () {
return {
/** Initialize in-site analytics */
- initialize: function (pPiwikRoot, pIdSite, pPeriod, pDate) {
+ initialize: function (pPiwikRoot, pIdSite, pPeriod, pDate, pSegment) {
piwikRoot = pPiwikRoot;
idSite = pIdSite;
period = pPeriod;
date = pDate;
+ segment = pSegment;
var load = this.loadScript;
var loading = this.loadingNotification;
@@ -146,6 +147,10 @@ var Piwik_Overlay_Client = (function () {
var url = piwikRoot + 'index.php?module=API&method=Overlay.' + method
+ '&idSite=' + idSite + '&period=' + period + '&date=' + date + '&format=JSON&filter_limit=-1';
+ if (segment) {
+ url += '&segment=' + segment;
+ }
+
if (additionalParams) {
url += '&' + additionalParams;
}
diff --git a/plugins/Overlay/config/ui-test.php b/plugins/Overlay/config/ui-test.php
new file mode 100644
index 0000000000..1bb5ae8b75
--- /dev/null
+++ b/plugins/Overlay/config/ui-test.php
@@ -0,0 +1,14 @@
+<?php
+
+return array(
+
+ // Overlay needs the full URLs in order to find the links in the embedded page (otherwise the %
+ // tooltips don't show up)
+ 'tests.ui.url_normalizer_blacklist.api' => DI\add(array(
+ 'Overlay.getFollowingPages',
+ )),
+ 'tests.ui.url_normalizer_blacklist.controller' => DI\add(array(
+ 'Overlay.renderSidebar',
+ )),
+
+); \ No newline at end of file
diff --git a/plugins/Overlay/javascripts/Overlay_Helper.js b/plugins/Overlay/javascripts/Overlay_Helper.js
index e0681e7b45..42ff388d81 100644
--- a/plugins/Overlay/javascripts/Overlay_Helper.js
+++ b/plugins/Overlay/javascripts/Overlay_Helper.js
@@ -20,11 +20,17 @@ var Overlay_Helper = {
},
/** Get the url to launch overlay */
- getOverlayLink: function (idSite, period, date, link) {
+ getOverlayLink: function (idSite, period, date, segment, link) {
var url = 'index.php?module=Overlay&period=' + encodeURIComponent(period) + '&date=' + encodeURIComponent(date) + '&idSite=' + encodeURIComponent(idSite);
+
+ if (segment) {
+ url += '&segment=' + encodeURIComponent(segment);
+ }
+
if (link) {
url += '#?l=' + Overlay_Helper.encodeFrameUrl(link);
}
+
return url;
}
diff --git a/plugins/Overlay/javascripts/Piwik_Overlay.js b/plugins/Overlay/javascripts/Piwik_Overlay.js
index 4c78080806..4bde0ee343 100644
--- a/plugins/Overlay/javascripts/Piwik_Overlay.js
+++ b/plugins/Overlay/javascripts/Piwik_Overlay.js
@@ -10,7 +10,7 @@ var Piwik_Overlay = (function () {
var $body, $iframe, $sidebar, $main, $location, $loading, $errorNotLoading;
var $rowEvolutionLink, $transitionsLink, $fullScreenLink, $visitorLogLink;
- var idSite, period, date;
+ var idSite, period, date, segment;
var iframeSrcBase;
var iframeDomain = '';
@@ -28,13 +28,19 @@ var Piwik_Overlay = (function () {
iframeCurrentPage = currentUrl;
iframeDomain = currentUrl.match(/http(s)?:\/\/(www\.)?([^\/]*)/i)[3];
- globalAjaxQueue.abort();
- var ajaxRequest = new ajaxHelper();
- ajaxRequest.addParams({
+ var params = {
module: 'Overlay',
action: 'renderSidebar',
currentUrl: currentUrl
- }, 'get');
+ };
+
+ if (segment) {
+ params.segment = segment;
+ }
+
+ globalAjaxQueue.abort();
+ var ajaxRequest = new ajaxHelper();
+ ajaxRequest.addParams(params, 'get');
ajaxRequest.setCallback(
function (response) {
hideLoading();
@@ -111,6 +117,16 @@ var Piwik_Overlay = (function () {
$fullScreenLink.show();
}
+ function getOverlaySegment(url) {
+ var location = broadcast.getParamValue('segment', url);
+
+ // angular will encode the value again since it is added as the fragment path, not the fragment query parameter,
+ // so we have to decode it again after getParamValue
+ location = decodeURIComponent(location);
+
+ return location;
+ }
+
function getOverlayLocationFromHash(urlHash) {
var location = broadcast.getParamValue('l', urlHash);
@@ -143,11 +159,12 @@ var Piwik_Overlay = (function () {
return {
/** This method is called when Overlay loads */
- init: function (iframeSrc, pIdSite, pPeriod, pDate) {
+ init: function (iframeSrc, pIdSite, pPeriod, pDate, pSegment) {
iframeSrcBase = iframeSrc;
idSite = pIdSite;
period = pPeriod;
date = pDate;
+ segment = pSegment;
$body = $('body');
$iframe = $('#overlayIframe');
@@ -201,7 +218,7 @@ var Piwik_Overlay = (function () {
if (parts.length == 2) {
period = parts[0];
date = parts[1];
- window.location.href = Overlay_Helper.getOverlayLink(idSite, period, date, iframeCurrentPage);
+ window.location.href = Overlay_Helper.getOverlayLink(idSite, period, date, segment, iframeCurrentPage);
}
});
@@ -219,7 +236,11 @@ var Piwik_Overlay = (function () {
// handle transitions link
$transitionsLink.click(function () {
- DataTable_RowActions_Transitions.launchForUrl(iframeCurrentPageNormalized);
+ var unescapedSegment = null;
+ if (segment) {
+ unescapedSegment = unescape(segment);
+ }
+ DataTable_RowActions_Transitions.launchForUrl(iframeCurrentPageNormalized, unescapedSegment);
return false;
});
diff --git a/plugins/Overlay/javascripts/rowaction.js b/plugins/Overlay/javascripts/rowaction.js
index c84e60a33b..de063b990e 100644
--- a/plugins/Overlay/javascripts/rowaction.js
+++ b/plugins/Overlay/javascripts/rowaction.js
@@ -15,17 +15,47 @@ function DataTable_RowActions_Overlay(dataTable) {
DataTable_RowActions_Overlay.prototype = new DataTable_RowAction;
+DataTable_RowActions_Overlay.registeredReports = [];
+DataTable_RowActions_Overlay.registerReport = function (handler) {
+ DataTable_RowActions_Overlay.registeredReports.push(handler);
+}
+
+
DataTable_RowActions_Overlay.prototype.onClick = function (actionA, tr, e) {
if (!actionA.data('overlay-manipulated')) {
actionA.data('overlay-manipulated', 1);
- var link = tr.find('> td:first > a').attr('href');
- link = $('<textarea>').html(link).val(); // remove html entities
+ var segment, link;
+
+ var i = 0;
+ for (i; i < DataTable_RowActions_Overlay.registeredReports.length; i++) {
+ var report = DataTable_RowActions_Overlay.registeredReports[i];
+ if (report
+ && report.onClick
+ && report.isAvailableOnReport
+ && report.isAvailableOnReport(this.dataTable.param)) {
+ var result = report.onClick.apply(this, arguments);
+
+ if (!result || !result.link) {
+ return;
+ }
+
+ link = result.link;
+ if (result.segment) {
+ segment = result.segment;
+ }
+ break;
+ }
+ }
+
+ if (link) {
+ var href = Overlay_Helper.getOverlayLink(this.dataTable.param.idSite, 'month', 'today', segment, link);
- actionA.attr({
- target: '_blank',
- href: Overlay_Helper.getOverlayLink(this.dataTable.param.idSite, 'month', 'today', link)
- });
+ actionA.attr({
+ target: '_blank',
+ href: href
+ });
+ }
}
return true;
@@ -54,7 +84,18 @@ DataTable_RowActions_Registry.register({
if (!window.DataTable_RowActions_Transitions) {
return false;
}
- return DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action);
+
+ var i = 0;
+ for (i; i < DataTable_RowActions_Overlay.registeredReports.length; i++) {
+ var report = DataTable_RowActions_Overlay.registeredReports[i];
+ if (report
+ && report.isAvailableOnReport
+ && report.isAvailableOnReport(dataTableParams)) {
+ return true;
+ }
+ }
+
+ return false;
},
isAvailableOnRow: function (dataTableParams, tr) {
diff --git a/plugins/Overlay/lang/ja.json b/plugins/Overlay/lang/ja.json
index 952ea205ac..3c99e23c55 100644
--- a/plugins/Overlay/lang/ja.json
+++ b/plugins/Overlay/lang/ja.json
@@ -15,6 +15,7 @@
"Overlay": "ページオーバーレイ",
"PluginDescription": "実際の web サイト上のオーバーレイ分析データを参照してください。ユーザーが各リンクをクリックした回数が表示されます。注: 有効なトランジションプラグインが必要です。",
"RedirectUrlError": "URL \"%s\" に対するページオーバーレイを開こうとしています。%s Piwik 設定のドメインが、すべてリンクに一致しません。",
+ "RedirectUrlErrorAdmin": "%s 設定で %s 追加の URL としてドメインを追加できます。",
"RedirectUrlErrorUser": "管理者に、任意のドメインを追加 URL として追加するよう管理者に依頼してください。"
}
} \ No newline at end of file
diff --git a/plugins/Overlay/lang/ko.json b/plugins/Overlay/lang/ko.json
index 4b761eaf5e..1c2ebbc404 100644
--- a/plugins/Overlay/lang/ko.json
+++ b/plugins/Overlay/lang/ko.json
@@ -13,6 +13,7 @@
"OneClick": "1회 클릭",
"OpenFullScreen": "전체 화면 (사이드바 아님)으로 이동",
"Overlay": "페이지 오버레이",
+ "PluginDescription": "당신의 웹사이트 분석 데이터를 오버레이 형식으로 볼 수 있습니다. 사용자가 얼마나 각 링크를 클릭했는지 확인해보세요. 참고: Transitions 플러그인이 활성화 되어 있어야 합니다.",
"RedirectUrlError": "URL \"%s\"에 대한 페이지 오버레이를 열려고 시도합니다. %s은 Piwik 설정한 도메인과 어떤 링크도 일치하지 않습니다.",
"RedirectUrlErrorAdmin": "당신은 %s설정%s에서 추가적인 URL로 도메인을 추가할 수 있습니다.",
"RedirectUrlErrorUser": "도메인에 추가적인 URL을 추가하려면 관리자에게 문의하세요."
diff --git a/plugins/Overlay/stylesheets/overlay.css b/plugins/Overlay/stylesheets/overlay.css
index 4e30660775..a13dd67a46 100644
--- a/plugins/Overlay/stylesheets/overlay.css
+++ b/plugins/Overlay/stylesheets/overlay.css
@@ -35,12 +35,20 @@ a#overlayTitle .icon-help {
margin: 20px 10px;
}
-#overlayLocation {
+#overlayLocation, .overlaySegment {
width: 200px;
- margin: 0 0 30px 10px;
font-size: 12px;
}
+#overlayLocation {
+ margin: 0 0 10px 10px;
+}
+
+.overlaySegment {
+ margin: 0 0 30px 0;
+ word-break: break-all;
+}
+
#overlayLoading {
background: url(../../Morpheus/images/loading-blue.gif) no-repeat center 10px;
width: 190px;
diff --git a/plugins/Overlay/templates/index.twig b/plugins/Overlay/templates/index.twig
index 10a0b40d76..effe5fbade 100644
--- a/plugins/Overlay/templates/index.twig
+++ b/plugins/Overlay/templates/index.twig
@@ -61,8 +61,8 @@
<script type="text/javascript">
broadcast._isInit = true;
$(function () {
- var iframeSrc = 'index.php?module=Overlay&action=startOverlaySession&idSite={{ idSite }}&period={{ period }}&date={{ rawDate }}';
- Piwik_Overlay.init(iframeSrc, '{{ idSite }}', '{{ period }}', '{{ rawDate }}');
+ var iframeSrc = 'index.php?module=Overlay&action=startOverlaySession&idSite={{ idSite }}&period={{ period }}&date={{ rawDate }}&segment={{ segment }}';
+ Piwik_Overlay.init(iframeSrc, '{{ idSite }}', '{{ period }}', '{{ rawDate }}', '{{ segment }}');
window.Piwik_Overlay_Translations = {
domain: "{{ 'Overlay_Domain'|translate }}"
diff --git a/plugins/Overlay/templates/index_noframe.twig b/plugins/Overlay/templates/index_noframe.twig
index 0478715edb..f3c9e61579 100644
--- a/plugins/Overlay/templates/index_noframe.twig
+++ b/plugins/Overlay/templates/index_noframe.twig
@@ -6,7 +6,7 @@
<div id="overlayNoFrame">
<script type="text/javascript">
- var newLocation = 'index.php?module=Overlay&action=startOverlaySession&idSite={{ idSite }}&period={{ period }}&date={{ date }}';
+ var newLocation = 'index.php?module=Overlay&action=startOverlaySession&idSite={{ idSite }}&period={{ period }}&date={{ date }}&segment={{ segment }}';
var locationParts = window.location.href.split('#');
if (locationParts.length > 1) {
diff --git a/plugins/Overlay/templates/renderSidebar.twig b/plugins/Overlay/templates/renderSidebar.twig
index 09d8cf0d40..36ff9c8ba1 100644
--- a/plugins/Overlay/templates/renderSidebar.twig
+++ b/plugins/Overlay/templates/renderSidebar.twig
@@ -8,6 +8,11 @@
</span>
</div>
+ <div class="overlaySegment">
+ <strong>{{ 'General_Segment'|translate }}:</strong>
+ <span>{{ segmentDescription }}</span>
+ </div>
+
{% if data|length > 0 %}
<h2 class="overlayMainMetrics">{{ 'General_MainMetrics'|translate }}</h2>
<ul class="overlayMetrics">
diff --git a/plugins/Overlay/templates/startOverlaySession.twig b/plugins/Overlay/templates/startOverlaySession.twig
new file mode 100644
index 0000000000..b1db8ce5b2
--- /dev/null
+++ b/plugins/Overlay/templates/startOverlaySession.twig
@@ -0,0 +1,50 @@
+<html><head><title></title></head><body>
+<script type="text/javascript">
+ function handleProtocol(url) {
+ if ({% if isHttps %}true{% else %}false{% endif %}) {
+ return url.replace(/http:\/\//i, "https://");
+ } else {
+ return url.replace(/https:\/\//i, "http://");
+ }
+ }
+
+ function removeUrlPrefix(url) {
+ return url.replace(/http(s)?:\/\/(www\.)?/i, "");
+ }
+
+ if (window.location.hash) {
+ var match = false;
+
+ var urlToRedirect = window.location.hash.substr(1);
+ var urlToRedirectWithoutPrefix = removeUrlPrefix(urlToRedirect);
+
+ var knownUrls = {{ knownUrls|raw }};
+ for (var i = 0; i < knownUrls.length; i++) {
+ var testUrl = removeUrlPrefix(knownUrls[i]);
+ if (urlToRedirectWithoutPrefix.substr(0, testUrl.length) == testUrl) {
+ match = true;
+ if (navigator.appName == "Microsoft Internet Explorer") {
+ // internet explorer loses the referrer if we use window.location.href=X
+ var referLink = document.createElement("a");
+ referLink.href = handleProtocol(urlToRedirect);
+ document.body.appendChild(referLink);
+ referLink.click();
+ } else {
+ window.location.href = handleProtocol(urlToRedirect);
+ }
+ break;
+ }
+ }
+
+ if (!match) {
+ var idSite = window.location.href.match(/idSite=([0-9]+)/i)[1];
+ window.location.href = "index.php?module=Overlay&action=showErrorWrongDomain"
+ + "&idSite=" + idSite
+ + "&url=" + encodeURIComponent(urlToRedirect);
+ }
+ }
+ else {
+ window.location.href = handleProtocol("{{ mainUrl|e('js') }}");
+ };
+</script>
+</body></html> \ No newline at end of file