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:
authorThomas Steur <tsteur@users.noreply.github.com>2016-03-29 06:53:22 +0300
committerThomas Steur <tsteur@users.noreply.github.com>2016-03-29 06:53:22 +0300
commit218ed92b0b6e0093c5a09189847189b1cc134d04 (patch)
tree9a12a9ebce0e4054a95eaac09da7108e0ad2d667 /plugins
parentbad2c752d3926dc2d45a54556aa72d8cca542a18 (diff)
parent2884da2b668cd0844e090982643dc4b0f1ef4517 (diff)
Merge pull request #9973 from piwik/9896
Keep Page URL fragments when tracking Page URLs" not persistent
Diffstat (limited to 'plugins')
-rw-r--r--plugins/CoreHome/templates/_dataTableCell.twig15
-rw-r--r--plugins/Live/templates/getLastVisitsStart.twig35
-rw-r--r--plugins/SitesManager/Controller.php1
-rw-r--r--plugins/SitesManager/Menu.php1
-rw-r--r--plugins/SitesManager/Model.php34
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html1
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js9
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js19
-rw-r--r--plugins/SitesManager/templates/dialogs/dialogs.html1
-rw-r--r--plugins/SitesManager/templates/dialogs/edit-dialog.html1
-rw-r--r--plugins/SitesManager/templates/displayJavascriptCode.twig1
-rw-r--r--plugins/SitesManager/templates/help/timezone-help.html3
-rw-r--r--plugins/SitesManager/templates/index.html8
-rw-r--r--plugins/SitesManager/templates/siteWithoutData.twig4
-rw-r--r--plugins/SitesManager/templates/sites-list/site-fields.html2
-rw-r--r--plugins/UsersManager/Model.php105
-rw-r--r--plugins/UsersManager/tests/Integration/APITest.php11
-rw-r--r--plugins/VisitFrequency/Controller.php1
18 files changed, 155 insertions, 97 deletions
diff --git a/plugins/CoreHome/templates/_dataTableCell.twig b/plugins/CoreHome/templates/_dataTableCell.twig
index 1bcd1bb0f2..ac6b935d7c 100644
--- a/plugins/CoreHome/templates/_dataTableCell.twig
+++ b/plugins/CoreHome/templates/_dataTableCell.twig
@@ -2,9 +2,12 @@
{% set tooltipIndex = column ~ '_tooltip' %}
{% if row.getMetadata(tooltipIndex) %}<span class="cell-tooltip" data-tooltip="{{ row.getMetadata(tooltipIndex) }}">{% endif %}
{% if not row.getIdSubDataTable() and column=='label' and row.getMetadata('url') %}
- <a rel="noreferrer" target="_blank" href='{% if row.getMetadata('url')|slice(0,4) not in ['http','ftp:'] %}http://{% endif %}{{ row.getMetadata('url')|rawSafeDecoded }}'>
+ <a rel="noreferrer"
+ target="_blank"
+ href='{% if row.getMetadata('url')|slice(0,4) not in ['http','ftp:'] %}http://{% endif %}{{ row.getMetadata('url')|rawSafeDecoded }}'>
{% if not row.getMetadata('logo') %}
- <img class="link" width="10" height="9" src="plugins/Morpheus/images/link.gif"/>
+ <img class="link" width="10" height="9"
+ src="plugins/Morpheus/images/link.gif"/>
{% endif %}
{% endif %}
@@ -19,7 +22,7 @@
{% endif %}
{% set rowPercentage = row.getColumn(column)|percentage(reportTotal, 1) %}
{% set metricTitle = translations[column]|default(column) %}
- {% set reportLabel = row.getColumn(labelColumn)|truncate(40)|raw %}
+ {% set reportLabel = row.getColumn(labelColumn)|truncate(40)|rawSafeDecoded %}
{% set reportRatioTooltip = 'General_ReportRatioTooltip'|translate(reportLabel, rowPercentage|e('html_attr'), reportTotal|e('html_attr'), metricTitle|e('html_attr'), translations[labelColumn]|default(labelColumn)|e('html_attr')) %}
@@ -30,7 +33,9 @@
{% set totalRatioTooltip = '' %}
{% endif %}
- <span class="ratio" title="{{ reportRatioTooltip|raw }} {{ totalRatioTooltip|e('html_attr') }}">&nbsp;{{ rowPercentage }}</span>
+ <span class="ratio"
+ title="{{ reportRatioTooltip|raw }} {{ totalRatioTooltip|e('html_attr') }}"
+ >&nbsp;{{ rowPercentage }}</span>
{%- endif %}
{% if column=='label' %}
@@ -42,7 +47,7 @@
{% if row.getMetadata('html_label_prefix') %}<span class='label-prefix'>{{ row.getMetadata('html_label_prefix') | raw }}&nbsp;</span>{% endif -%}
{%- if row.getMetadata('html_label_suffix') %}<span class='label-suffix'>{{ row.getMetadata('html_label_suffix') | raw }}</span>{% endif -%}
{% endif %}<span class="value">
- {%- if row.getColumn(column) %}{% if column=='label' %}{{- row.getColumn(column)|raw -}}{% else %}{{- row.getColumn(column)|number(2,0)|raw -}}{% endif %}
+ {%- if row.getColumn(column) %}{% if column=='label' %}{{- row.getColumn(column)|rawSafeDecoded -}}{% else %}{{- row.getColumn(column)|number(2,0)|raw -}}{% endif %}
{%- else -%}-
{%- endif -%}</span>
{% if column=='label' %}</span>{% endif %}
diff --git a/plugins/Live/templates/getLastVisitsStart.twig b/plugins/Live/templates/getLastVisitsStart.twig
index 59a4a1fb9d..064a3545ae 100644
--- a/plugins/Live/templates/getLastVisitsStart.twig
+++ b/plugins/Live/templates/getLastVisitsStart.twig
@@ -19,23 +19,25 @@
{% endif %}
<br />
- {% if visitor.countryFlag is defined %}&nbsp;<img src="{{ visitor.countryFlag }}" title="{{ visitor.location }}, {{ 'Provider_ColumnProvider'|translate }} {% if visitor.providerName is defined %}{{ visitor.providerName }}{% endif %}"/>{% endif %}
- {% if visitor.browserIcon is defined %}&nbsp;<img src="{{ visitor.browserIcon }}" title="{{ visitor.browser }}{% if visitor.plugins is defined %}, {{ 'General_Plugins'|translate }}: {{ visitor.plugins }}{% endif %}"/>{% endif %}
+ {% if visitor.countryFlag is defined %}&nbsp;<img src="{{ visitor.countryFlag }}" title="{{ visitor.location|e('html_attr') }}, {{ 'Provider_ColumnProvider'|translate }} {% if visitor.providerName is defined %}{{ visitor.providerName }}{% endif %}"/>{% endif %}
+ {% if visitor.browserIcon is defined %}&nbsp;<img src="{{ visitor.browserIcon }}" title="{{ visitor.browser|e('html_attr') }}{% if visitor.plugins is defined %}, {{ 'General_Plugins'|translate }}: {{ visitor.plugins }}{% endif %}"/>{% endif %}
{% if visitor.operatingSystemIcon is defined %}&nbsp;<img src="{{ visitor.operatingSystemIcon }}" title="{{ visitor.operatingSystem }}{% if visitor.resolution is defined %}, {{ visitor.resolution }}{% endif %}"/>{% endif %}
&nbsp;
{% if visitor.visitConverted %}
- <span title="{{ 'General_VisitConvertedNGoals'|translate(visitor.goalConversions) }}" class='visitorRank'>
+ <span title="{{ 'General_VisitConvertedNGoals'|translate(visitor.goalConversions) }}"
+ class='visitorRank'>
<img src="{{ visitor.visitConvertedIcon }}" />
<span class='hash'>#</span>
{{ visitor.goalConversions }}
{% if visitor.visitEcommerceStatusIcon %}
- <img src="{{ visitor.visitEcommerceStatusIcon }}" title="{{ visitor.visitEcommerceStatus }}"/>
+ <img src="{{ visitor.visitEcommerceStatusIcon }}" title="{{ visitor.visitEcommerceStatus|e('html_attr') }}"/>
{% endif %}
</span>
{% endif %}
{% if visitor.visitorTypeIcon %}
- <img src="{{ visitor.visitorTypeIcon }}" title="{{ 'General_ReturningVisitor'|translate }}"/>
+ <img src="{{ visitor.visitorTypeIcon }}"
+ title="{{ 'General_ReturningVisitor'|translate }}"/>
{% endif %}
{% if visitor.visitIp %} <span title="{% if visitor.visitorId is not empty %}{{ 'General_VisitorID'|translate }}: {{ visitor.visitorId }}{% endif %}">
@@ -46,33 +48,45 @@
{% if visitor.referrerType is defined and visitor.referrerType != 'direct' %}
{{ 'General_FromReferrer'|translate }}
{% if visitor.referrerUrl is not empty %}
- <a href="{{ visitor.referrerUrl }}" rel="noreferrer" target="_blank">
+ <a rel="noreferrer" target="_blank"
+ href="{{ visitor.referrerUrl|e('html_attr') }}">
{% endif %}
+
{% if visitor.searchEngineIcon is defined %}
<img src="{{ visitor.searchEngineIcon }}" />
{% endif %}
+
{{ visitor.referrerName }}
+
{% if visitor.referrerUrl is not empty %}
</a>
{% endif %}
+
{% if visitor.referrerKeyword is not empty %} - "{{ visitor.referrerKeyword }}"{% endif %}
+
{% set keyword %}{{ visitor.referrerKeyword }}{% endset %}
{% set searchName %}{{ visitor.referrerName }}{% endset %}
{% set position %}#{{ visitor.referrerKeywordPosition}}{% endset %}
+
{% if visitor.referrerKeywordPosition is not empty %}
- <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}' class='visitorRank'>
+ <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}'
+ class='visitorRank'>
<span class='hash'>#</span> {{ visitor.referrerKeywordPosition }}
</span>
{% endif %}
+
{% elseif visitor.referrerType is defined %}
{{ 'Referrers_DirectEntry'|translate }}
{% endif %}
</span></div>
- <div id="{{ visitor.idVisit }}_actions" class="settings">
- <span class="pagesTitle" title="{{ visitor.actionDetails|length }} {{ 'General_Actions'|translate }}">{{ 'General_Actions'|translate }}:</span>&nbsp;
+ <div id="{{ visitor.idVisit|e('html_attr') }}_actions" class="settings">
+ <span class="pagesTitle"
+ title="{{ visitor.actionDetails|length }} {{ 'General_Actions'|translate }}"
+ >{{ 'General_Actions'|translate }}:</span>&nbsp;
{% set col = 0 %}
{% for action in visitor.actionDetails %}
{% if loop.index <= maxPagesDisplayedByVisitor %}
+
{% if action.type == 'ecommerceOrder' or action.type == 'ecommerceAbandonedCart' %}
{% set title %}
{%- if action.type == 'ecommerceOrder' %}
@@ -104,7 +118,9 @@
{{ 'General_ColumnRevenue'|translate }}: {{ action.revenue|money(idSite)|raw }}
{% endif %}
</span>
+
{% else %}
+
{% set col = col + 1 %}
{% if col >= 9 %}
{% set col = 0 %}
@@ -136,6 +152,7 @@
{% endif %}
{% endif %}
{% endfor %}
+
{% if visitor.actionDetails|length > maxPagesDisplayedByVisitor %}
<em>({{ 'Live_MorePagesNotDisplayed'|translate }})</em>
{% endif %}
diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php
index fc7b7eb6e8..d64fb45fa9 100644
--- a/plugins/SitesManager/Controller.php
+++ b/plugins/SitesManager/Controller.php
@@ -63,7 +63,6 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$response = new ResponseBuilder(Common::getRequestVar('format'));
$globalSettings = array();
-
$globalSettings['keepURLFragmentsGlobal'] = API::getInstance()->getKeepURLFragmentsGlobal();
$globalSettings['siteSpecificUserAgentExcludeEnabled'] = API::getInstance()->isSiteSpecificUserAgentExcludeEnabled();
$globalSettings['defaultCurrency'] = API::getInstance()->getDefaultCurrency();
diff --git a/plugins/SitesManager/Menu.php b/plugins/SitesManager/Menu.php
index a9e82e6024..d242a25351 100644
--- a/plugins/SitesManager/Menu.php
+++ b/plugins/SitesManager/Menu.php
@@ -44,6 +44,7 @@ class Menu extends \Piwik\Plugin\Menu
if (count($types) === 1) {
// only one type is in use, use this one for the wording
return reset($types);
+
} else {
// multiple types are activated, check whether only one is actually in use
$model = new Model();
diff --git a/plugins/SitesManager/Model.php b/plugins/SitesManager/Model.php
index 96062b608a..5e69d308e7 100644
--- a/plugins/SitesManager/Model.php
+++ b/plugins/SitesManager/Model.php
@@ -41,8 +41,9 @@ class Model
*/
public function getSitesFromGroup($group)
{
- $sites = $this->getDb()->fetchAll("SELECT * FROM " . $this->table . "
- WHERE `group` = ?", $group);
+ $db = $this->getDb();
+ $sites = $db->fetchAll("SELECT * FROM " . $this->table . "
+ WHERE `group` = ?", $group);
return $sites;
}
@@ -55,7 +56,8 @@ class Model
*/
public function getSitesGroups()
{
- $groups = $this->getDb()->fetchAll("SELECT DISTINCT `group` FROM " . $this->table);
+ $db = $this->getDb();
+ $groups = $db->fetchAll("SELECT DISTINCT `group` FROM " . $this->table);
$cleanedGroups = array();
foreach ($groups as $group) {
@@ -72,7 +74,8 @@ class Model
*/
public function getAllSites()
{
- $sites = $this->getDb()->fetchAll("SELECT * FROM " . $this->table . " ORDER BY idsite ASC");
+ $db = $this->getDb();
+ $sites = $db->fetchAll("SELECT * FROM " . $this->table . " ORDER BY idsite ASC");
return $sites;
}
@@ -111,7 +114,8 @@ class Model
{
$siteUrlTable = Common::prefixTable('site_url');
- $ids = $this->getDb()->fetchAll(
+ $db = $this->getDb();
+ $ids = $db->fetchAll(
'SELECT idsite FROM ' . $this->table . '
WHERE main_url IN ( ' . Common::getSqlStringFieldsArray($urls) . ') ' .
'UNION
@@ -137,7 +141,8 @@ class Model
$siteUrlTable = Common::prefixTable('site_url');
$sqlAccessSite = Access::getSqlAccessSite('idsite');
- $ids = $this->getDb()->fetchAll(
+ $db = $this->getDb();
+ $ids = $db->fetchAll(
'SELECT idsite
FROM ' . $this->table . '
WHERE main_url IN ( ' . Common::getSqlStringFieldsArray($urls) . ')' .
@@ -171,7 +176,8 @@ class Model
$query = 'SELECT idsite FROM ' . $this->table . '
WHERE timezone IN (' . Common::getSqlStringFieldsArray($timezones) . ')
ORDER BY idsite ASC';
- $sites = $this->getDb()->fetchAll($query, $timezones);
+ $db = $this->getDb();
+ $sites = $db->fetchAll($query, $timezones);
return $sites;
}
@@ -223,8 +229,9 @@ class Model
*/
public function getSiteFromId($idSite)
{
- $site = $this->getDb()->fetchRow("SELECT * FROM " . $this->table . "
- WHERE idsite = ?", $idSite);
+ $db = $this->getDb();
+ $site = $db->fetchRow("SELECT * FROM " . $this->table . "
+ WHERE idsite = ?", $idSite);
return $site;
}
@@ -237,7 +244,7 @@ class Model
*/
public function getSitesId()
{
- $result = Db::fetchAll("SELECT idsite FROM " . Common::prefixTable('site'));
+ $result = Db::fetchAll("SELECT idsite FROM " . Common::prefixTable('site'));
$idSites = array();
foreach ($result as $idSite) {
@@ -277,7 +284,8 @@ class Model
{
$db = $this->getDb();
$result = $db->fetchAll("SELECT url FROM " . Common::prefixTable("site_url") . "
- WHERE idsite = ?", $idSite);
+ WHERE idsite = ?", $idSite);
+
$urls = array();
foreach ($result as $url) {
$urls[] = $url['url'];
@@ -354,7 +362,9 @@ class Model
public function getUsedTypeIds()
{
$types = array();
- $rows = $this->getDb()->fetchAll("SELECT DISTINCT `type` as typeid FROM " . $this->table);
+
+ $db = $this->getDb();
+ $rows = $db->fetchAll("SELECT DISTINCT `type` as typeid FROM " . $this->table);
foreach ($rows as $row) {
$types[] = $row['typeid'];
diff --git a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html b/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html
index fed8822dc1..2e1bf44bf7 100644
--- a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html
+++ b/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html
@@ -3,5 +3,4 @@
rows="{{ rows }}"
ng-model="field.value"
ng-change="onChange()">
-
</textarea>
diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js
index d759ec940f..0fac17cc22 100644
--- a/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js
+++ b/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js
@@ -135,22 +135,25 @@
"http://siteUrl2.com/"
];
$scope.site.exclude_unknown_urls = 0;
- $scope.site.keep_url_fragment = "0";
+ $scope.site.keep_url_fragment = 0;
$scope.site.excluded_ips = [];
$scope.site.excluded_parameters = [];
$scope.site.excluded_user_agents = [];
$scope.site.sitesearch_keyword_parameters = [];
$scope.site.sitesearch_category_parameters = [];
- $scope.site.sitesearch = $scope.globalSettings.searchKeywordParametersGlobal.length ? "1" : "0";
+ $scope.site.sitesearch = $scope.globalSettings.searchKeywordParametersGlobal.length ? 1 : 0;
$scope.site.timezone = $scope.globalSettings.defaultTimezone;
$scope.site.currency = $scope.globalSettings.defaultCurrency;
- $scope.site.ecommerce = "0";
+ $scope.site.ecommerce = 0;
updateSiteWithSiteSearchConfig();
};
var initExistingSite = function() {
+ $scope.site.keep_url_fragment = parseInt($scope.site.keep_url_fragment, 10);
+ $scope.site.ecommerce = parseInt($scope.site.ecommerce, 10);
+ $scope.site.sitesearch = parseInt($scope.site.sitesearch, 10);
$scope.site.excluded_ips = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_ips);
$scope.site.excluded_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_parameters);
$scope.site.excluded_user_agents = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_user_agents);
diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
index 100e75bbf7..9860667e71 100644
--- a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
+++ b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
@@ -118,8 +118,8 @@
var initEcommerceSelectOptions = function() {
$scope.eCommerceptions = [
- {key: '0', value: translate('SitesManager_NotAnEcommerceSite')},
- {key: '1', value: translate('SitesManager_EnableEcommerce')}
+ {key: 0, value: translate('SitesManager_NotAnEcommerceSite')},
+ {key: 1, value: translate('SitesManager_EnableEcommerce')}
];
};
@@ -189,18 +189,17 @@
var initSiteSearchSelectOptions = function() {
$scope.siteSearchOptions = [
- {key: '1', value: translate('SitesManager_EnableSiteSearch')},
- {key: '0', value: translate('SitesManager_DisableSiteSearch')}
+ {key: 1, value: translate('SitesManager_EnableSiteSearch')},
+ {key: 0, value: translate('SitesManager_DisableSiteSearch')}
];
};
var initKeepURLFragmentsList = function() {
-
- $scope.keepURLFragmentsOptions = {
- 0: ($scope.globalSettings.keepURLFragmentsGlobal ? translate('General_Yes') : translate('General_No')) + ' (' + translate('General_Default') + ')',
- 1: translate('General_Yes'),
- 2: translate('General_No')
- };
+ $scope.keepURLFragmentsOptions = [
+ {key: 0, value: ($scope.globalSettings.keepURLFragmentsGlobal ? translate('General_Yes') : translate('General_No')) + ' (' + translate('General_Default') + ')'},
+ {key: 1, value: translate('General_Yes')},
+ {key: 2, value: translate('General_No')}
+ ];
};
var addNewEntity = function () {
diff --git a/plugins/SitesManager/templates/dialogs/dialogs.html b/plugins/SitesManager/templates/dialogs/dialogs.html
index 476505e7bf..2f3d5d8072 100644
--- a/plugins/SitesManager/templates/dialogs/dialogs.html
+++ b/plugins/SitesManager/templates/dialogs/dialogs.html
@@ -1,3 +1,2 @@
<div ng-include="'plugins/SitesManager/templates/dialogs/edit-dialog.html'"></div>
-
<div ng-include="'plugins/SitesManager/templates/dialogs/remove-dialog.html'"></div>
diff --git a/plugins/SitesManager/templates/dialogs/edit-dialog.html b/plugins/SitesManager/templates/dialogs/edit-dialog.html
index afb9910869..1bb6067f47 100644
--- a/plugins/SitesManager/templates/dialogs/edit-dialog.html
+++ b/plugins/SitesManager/templates/dialogs/edit-dialog.html
@@ -1,5 +1,4 @@
<div class="ui-confirm" piwik-dialog="site.editDialog.show">
-
<h2>{{ site.editDialog.title }}</h2>
<input role="no" type="button" value="{{ 'General_Ok'|translate }}"/>
diff --git a/plugins/SitesManager/templates/displayJavascriptCode.twig b/plugins/SitesManager/templates/displayJavascriptCode.twig
index 9b514b69c0..05d867030e 100644
--- a/plugins/SitesManager/templates/displayJavascriptCode.twig
+++ b/plugins/SitesManager/templates/displayJavascriptCode.twig
@@ -1,6 +1,5 @@
{% extends 'admin.twig' %}
{% block content %}
-
{% include "@SitesManager/_displayJavascriptCode.twig" %}
{% endblock %} \ No newline at end of file
diff --git a/plugins/SitesManager/templates/help/timezone-help.html b/plugins/SitesManager/templates/help/timezone-help.html
index 0308b783b5..f77ad7863e 100644
--- a/plugins/SitesManager/templates/help/timezone-help.html
+++ b/plugins/SitesManager/templates/help/timezone-help.html
@@ -9,10 +9,7 @@
</span>
<br/>
-
{{ 'SitesManager_UTCTimeIs'| translate : (utcTime | date : 'yyyy-MM-dd HH:mm:ss') }}
-
<br/>
-
{{ 'SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward'|translate }}
</div>
diff --git a/plugins/SitesManager/templates/index.html b/plugins/SitesManager/templates/index.html
index cfdca4a970..adedf3e644 100644
--- a/plugins/SitesManager/templates/index.html
+++ b/plugins/SitesManager/templates/index.html
@@ -1,17 +1,9 @@
<div ng-controller="SitesManagerController" class="SitesManager">
-
<div ng-include="'plugins/SitesManager/templates/sites-manager-header.html?cb=' + cacheBuster" class="sites-manager-header"></div>
-
<div ng-include="'plugins/SitesManager/templates/loading.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/sites-list/add-site-link.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/sites-list/add-entity-dialog.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/sites-list/sites-list.html?cb=' + cacheBuster"></div>
-
<div class="bottomButtonBar" ng-include="'plugins/SitesManager/templates/sites-list/add-site-link.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/global-settings.html?cb=' + cacheBuster"></div>
-
</div>
diff --git a/plugins/SitesManager/templates/siteWithoutData.twig b/plugins/SitesManager/templates/siteWithoutData.twig
index 498d2ee765..b1a659f31a 100644
--- a/plugins/SitesManager/templates/siteWithoutData.twig
+++ b/plugins/SitesManager/templates/siteWithoutData.twig
@@ -33,7 +33,7 @@
{{ 'SitesManager_SiteWithoutDataSetupTracking'|translate('<a href="' ~ linkTo({
'module': 'CoreAdminHome',
'action': 'trackingCodeGenerator',
- }) ~ '">', '</a>')|raw }}
+ }) ~ '">', "</a>")|raw }}
</p>
<p>
@@ -41,7 +41,7 @@
{{ 'SitesManager_SiteWithoutDataSetupGoals'|translate('<a href="' ~ linkTo({
'module': 'Goals',
'action': 'manage',
- }) ~ '">', '</a>')|raw }}
+ }) ~ '">', "</a>")|raw }}
</p>
{{ trackingHelp|raw }}
diff --git a/plugins/SitesManager/templates/sites-list/site-fields.html b/plugins/SitesManager/templates/sites-list/site-fields.html
index 200e935e27..2f0eaa7b76 100644
--- a/plugins/SitesManager/templates/sites-list/site-fields.html
+++ b/plugins/SitesManager/templates/sites-list/site-fields.html
@@ -94,7 +94,7 @@
<div class="form-group">
<label>{{ 'SitesManager_KeepURLFragmentsLong'|translate }}</label>
- <select ng-options="key as value for (key, value) in keepURLFragmentsOptions"
+ <select ng-options="option.key as option.value for option in keepURLFragmentsOptions"
ng-model="site.keep_url_fragment"></select>
</div>
diff --git a/plugins/UsersManager/Model.php b/plugins/UsersManager/Model.php
index e6c0971867..db0285eab6 100644
--- a/plugins/UsersManager/Model.php
+++ b/plugins/UsersManager/Model.php
@@ -50,9 +50,10 @@ class Model
$bind = $userLogins;
}
- $users = $this->getDb()->fetchAll("SELECT * FROM " . $this->table . "
- $where
- ORDER BY login ASC", $bind);
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT * FROM " . $this->table . "
+ $where
+ ORDER BY login ASC", $bind);
return $users;
}
@@ -64,7 +65,8 @@ class Model
*/
public function getUsersLogin()
{
- $users = $this->getDb()->fetchAll("SELECT login FROM " . $this->table . " ORDER BY login ASC");
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login FROM " . $this->table . " ORDER BY login ASC");
$return = array();
foreach ($users as $login) {
@@ -76,9 +78,10 @@ class Model
public function getUsersSitesFromAccess($access)
{
- $users = $this->getDb()->fetchAll("SELECT login,idsite FROM " . Common::prefixTable("access")
- . " WHERE access = ?
- ORDER BY login, idsite", $access);
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login,idsite FROM " . Common::prefixTable("access")
+ . " WHERE access = ?
+ ORDER BY login, idsite", $access);
$return = array();
foreach ($users as $user) {
@@ -90,8 +93,9 @@ class Model
public function getUsersAccessFromSite($idSite)
{
- $users = $this->getDb()->fetchAll("SELECT login,access FROM " . Common::prefixTable("access")
- . " WHERE idsite = ?", $idSite);
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login,access FROM " . Common::prefixTable("access")
+ . " WHERE idsite = ?", $idSite);
$return = array();
foreach ($users as $user) {
@@ -103,7 +107,8 @@ class Model
public function getUsersLoginWithSiteAccess($idSite, $access)
{
- $users = $this->getDb()->fetchAll("SELECT login
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login
FROM " . Common::prefixTable("access")
. " WHERE idsite = ? AND access = ?", array($idSite, $access));
@@ -133,7 +138,8 @@ class Model
*/
public function getSitesAccessFromUser($userLogin)
{
- $users = $this->getDb()->fetchAll("SELECT idsite,access FROM " . Common::prefixTable("access")
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT idsite,access FROM " . Common::prefixTable("access")
. " WHERE login = ?", $userLogin);
$return = array();
@@ -167,12 +173,14 @@ class Model
public function getUserByEmail($userEmail)
{
- return $this->getDb()->fetchRow("SELECT * FROM " . $this->table . " WHERE email = ?", $userEmail);
+ $db = $this->getDb();
+ return $db->fetchRow("SELECT * FROM " . $this->table . " WHERE email = ?", $userEmail);
}
public function getUserByTokenAuth($tokenAuth)
{
- return $this->getDb()->fetchRow('SELECT * FROM ' . $this->table . ' WHERE token_auth = ?', $tokenAuth);
+ $db = $this->getDb();
+ return $db->fetchRow('SELECT * FROM ' . $this->table . ' WHERE token_auth = ?', $tokenAuth);
}
public function addUser($userLogin, $passwordTransformed, $email, $alias, $tokenAuth, $dateRegistered)
@@ -187,17 +195,31 @@ class Model
'superuser_access' => 0
);
- $this->getDb()->insert($this->table, $user);
+ $db = $this->getDb();
+ $db->insert($this->table, $user);
}
public function setSuperUserAccess($userLogin, $hasSuperUserAccess)
{
- $this->getDb()->update($this->table,
- array(
- 'superuser_access' => $hasSuperUserAccess ? 1 : 0
- ),
- "login = '$userLogin'"
- );
+ $this->updateUserFields($userLogin, array(
+ 'superuser_access' => $hasSuperUserAccess ? 1 : 0
+ ));
+ }
+
+ private function updateUserFields($userLogin, $fields)
+ {
+ $set = array();
+ $bind = array();
+
+ foreach ($fields as $key => $val) {
+ $set[] = "`$key` = ?";
+ $bind[] = $val;
+ }
+
+ $bind[] = $userLogin;
+
+ $db = $this->getDb();
+ $db->query(sprintf('UPDATE `%s` SET %s WHERE `login` = ?', $this->table, implode(', ', $set)), $bind);
}
/**
@@ -207,45 +229,47 @@ class Model
*/
public function getUsersHavingSuperUserAccess()
{
- $users = $this->getDb()->fetchAll("SELECT login, email, token_auth
- FROM " . Common::prefixTable("user") . "
- WHERE superuser_access = 1
- ORDER BY date_registered ASC");
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login, email, token_auth
+ FROM " . Common::prefixTable("user") . "
+ WHERE superuser_access = 1
+ ORDER BY date_registered ASC");
return $users;
}
public function updateUser($userLogin, $password, $email, $alias, $tokenAuth)
{
- $this->getDb()->update($this->table,
- array(
- 'password' => $password,
- 'alias' => $alias,
- 'email' => $email,
- 'token_auth' => $tokenAuth
- ),
- "login = '$userLogin'"
- );
+ $this->updateUserFields($userLogin, array(
+ 'password' => $password,
+ 'alias' => $alias,
+ 'email' => $email,
+ 'token_auth' => $tokenAuth
+ ));
}
public function userExists($userLogin)
{
- $count = $this->getDb()->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE login = ?", $userLogin);
+ $db = $this->getDb();
+ $count = $db->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE login = ?", $userLogin);
return $count != 0;
}
public function userEmailExists($userEmail)
{
- $count = $this->getDb()->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE email = ?", $userEmail);
+ $db = $this->getDb();
+ $count = $db->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE email = ?", $userEmail);
return $count != 0;
}
public function addUserAccess($userLogin, $access, $idSites)
{
+ $db = $this->getDb();
+
foreach ($idSites as $idsite) {
- $this->getDb()->insert(Common::prefixTable("access"),
+ $db->insert(Common::prefixTable("access"),
array("idsite" => $idsite,
"login" => $userLogin,
"access" => $access)
@@ -255,7 +279,8 @@ class Model
public function deleteUserOnly($userLogin)
{
- $this->getDb()->query("DELETE FROM " . $this->table . " WHERE login = ?", $userLogin);
+ $db = $this->getDb();
+ $db->query("DELETE FROM " . $this->table . " WHERE login = ?", $userLogin);
/**
* Triggered after a user has been deleted.
@@ -270,13 +295,15 @@ class Model
public function deleteUserAccess($userLogin, $idSites = null)
{
+ $db = $this->getDb();
+
if (is_null($idSites)) {
- $this->getDb()->query("DELETE FROM " . Common::prefixTable("access") .
+ $db->query("DELETE FROM " . Common::prefixTable("access") .
" WHERE login = ?",
array($userLogin));
} else {
foreach ($idSites as $idsite) {
- $this->getDb()->query("DELETE FROM " . Common::prefixTable("access") .
+ $db->query("DELETE FROM " . Common::prefixTable("access") .
" WHERE idsite = ? AND login = ?",
array($idsite, $userLogin)
);
diff --git a/plugins/UsersManager/tests/Integration/APITest.php b/plugins/UsersManager/tests/Integration/APITest.php
index f7ab746ce6..892deedc58 100644
--- a/plugins/UsersManager/tests/Integration/APITest.php
+++ b/plugins/UsersManager/tests/Integration/APITest.php
@@ -178,6 +178,17 @@ class APITest extends IntegrationTestCase
$this->api->setUserPreference($user2, 'ohOH_myPreferenceName', 'valueForUser2');
}
+ public function test_updateUser()
+ {
+ $this->api->updateUser($this->login, 'newPassword', 'email@example.com', 'newAlias', false);
+
+ $user = $this->api->getUser($this->login);
+
+ $this->assertSame('14a88b9d2f52c55b5fbcf9c5d9c11875', $user['password']);
+ $this->assertSame('email@example.com', $user['email']);
+ $this->assertSame('newAlias', $user['alias']);
+ }
+
public function test_getSitesAccessFromUser_forSuperUser()
{
$user2 = 'userLogin2';
diff --git a/plugins/VisitFrequency/Controller.php b/plugins/VisitFrequency/Controller.php
index e1279206fd..da3c9e461b 100644
--- a/plugins/VisitFrequency/Controller.php
+++ b/plugins/VisitFrequency/Controller.php
@@ -76,6 +76,7 @@ class Controller extends \Piwik\Plugin\Controller
);
$period = Common::getRequestVar('period', false);
+
if ($period == 'day') {
// add number of unique (returning) visitors for period=day
$selectableColumns = array_merge(