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.php108
-rw-r--r--plugins/Overlay/client/client.js9
-rw-r--r--plugins/Overlay/javascripts/Overlay_Helper.js8
-rw-r--r--plugins/Overlay/javascripts/Piwik_Overlay.js31
-rw-r--r--plugins/Overlay/javascripts/rowaction.js33
-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
10 files changed, 180 insertions, 82 deletions
diff --git a/plugins/Overlay/Controller.php b/plugins/Overlay/Controller.php
index 795d7b991d..2ed50641c5 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,22 @@ 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,
+ 'serialize' => '0'
);
- $dataTable = $request->process();
+
+ if (!empty($segment)) {
+ $params['segment'] = $segment;
+ }
+
+ $dataTable = Request::processRequest('Actions.getPageUrls', $params);
$formatter = new Metrics\Formatter\Html();
@@ -84,7 +104,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 +150,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 +166,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 04b1f88f13..f37b9a0cd3 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;
@@ -131,11 +131,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;
@@ -193,6 +194,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/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..d04f8e5fbe 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);
}
});
diff --git a/plugins/Overlay/javascripts/rowaction.js b/plugins/Overlay/javascripts/rowaction.js
index c84e60a33b..8f11c736d0 100644
--- a/plugins/Overlay/javascripts/rowaction.js
+++ b/plugins/Overlay/javascripts/rowaction.js
@@ -19,12 +19,34 @@ 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;
+
+ if (DataTable_RowActions_Transitions.isActionCustomDimensionReport(this.dataTable.param)) {
+
+ link = this.getLabelFromTr(tr);
+ if (link && link.substr(0, 1) === '@') {
+ link = link.substr(1);
+ }
+
+ link = 'http://' + unescape(link);
+
+ var subtable = tr.closest('table');
+ if (subtable.is('.subDataTable')) {
+ var prev = subtable.closest('tr').prev();
+ segment = prev.attr('data-segment-filter');
+ }
+ } else {
+
+ link = tr.find('> td:first > a').attr('href');
+ link = $('<textarea>').html(link).val(); // remove html entities
+ }
+
+
+ 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)
+ href: href
});
}
@@ -54,6 +76,11 @@ DataTable_RowActions_Registry.register({
if (!window.DataTable_RowActions_Transitions) {
return false;
}
+
+ if (DataTable_RowActions_Transitions.isActionCustomDimensionReport(dataTableParams)) {
+ return true;
+ }
+
return DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action);
},
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