diff options
Diffstat (limited to 'plugins/CoreHome')
33 files changed, 212 insertions, 62 deletions
diff --git a/plugins/CoreHome/Columns/UserId.php b/plugins/CoreHome/Columns/UserId.php index bbe7e44c8f..a611ca8def 100644 --- a/plugins/CoreHome/Columns/UserId.php +++ b/plugins/CoreHome/Columns/UserId.php @@ -11,6 +11,7 @@ namespace Piwik\Plugins\CoreHome\Columns; use Piwik\Cache; use Piwik\DataTable; use Piwik\DataTable\Map; +use Piwik\Metrics; use Piwik\Period\Range; use Piwik\Piwik; use Piwik\Plugin\Dimension\VisitDimension; @@ -124,7 +125,14 @@ class UserId extends VisitDimension return false; } - $numUsers = $result->getColumn('nb_users'); + $firstRow = $result->getFirstRow(); + if ($firstRow instanceof DataTable\Row && $firstRow->hasColumn(Metrics::INDEX_NB_USERS)) { + $metric = Metrics::INDEX_NB_USERS; + } else { + $metric = 'nb_users'; + } + + $numUsers = $result->getColumn($metric); $numUsers = array_sum($numUsers); return !empty($numUsers); diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php index 519891acb0..c1f88e035c 100644 --- a/plugins/CoreHome/CoreHome.php +++ b/plugins/CoreHome/CoreHome.php @@ -143,6 +143,8 @@ class CoreHome extends \Piwik\Plugin $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/trim.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/pretty-url.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/escape.js"; + $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/htmldecode.js"; + $jsFiles[] = "plugins/CoreHome/angularjs/common/filters/ucfirst.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/directive.module.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js"; @@ -207,7 +209,6 @@ class CoreHome extends \Piwik\Plugin $translationKeys[] = 'General_Show'; $translationKeys[] = 'General_Hide'; $translationKeys[] = 'General_Website'; - $translationKeys[] = 'General_ChooseWebsite'; $translationKeys[] = 'Intl_Year_Short'; $translationKeys[] = 'General_MultiSitesSummary'; $translationKeys[] = 'General_SearchNoResults'; @@ -278,6 +279,7 @@ class CoreHome extends \Piwik\Plugin $translationKeys[] = 'Intl_Day_Min_StandAlone_6'; $translationKeys[] = 'Intl_Day_Min_StandAlone_7'; $translationKeys[] = 'General_And'; + $translationKeys[] = 'General_All'; $translationKeys[] = 'General_Search'; $translationKeys[] = 'General_Clear'; $translationKeys[] = 'General_MoreDetails'; @@ -304,5 +306,6 @@ class CoreHome extends \Piwik\Plugin $translationKeys[] = 'CoreHome_Segments'; $translationKeys[] = 'CoreHome_MenuEntries'; $translationKeys[] = 'SitesManager_Sites'; + $translationKeys[] = 'CoreHome_ChangeCurrentWebsite'; } } diff --git a/plugins/CoreHome/DataTableRowAction/RowEvolution.php b/plugins/CoreHome/DataTableRowAction/RowEvolution.php index d73c5c2158..106685edf7 100644 --- a/plugins/CoreHome/DataTableRowAction/RowEvolution.php +++ b/plugins/CoreHome/DataTableRowAction/RowEvolution.php @@ -91,7 +91,7 @@ class RowEvolution if (!is_array($this->label)) { throw new Exception("Expected label to be an array, got instead: " . $this->label); } - $this->label = $this->label[0]; + $this->label = Common::unsanitizeInputValue($this->label[0]); if ($this->label === '') throw new Exception("Parameter label not set."); diff --git a/plugins/CoreHome/Menu.php b/plugins/CoreHome/Menu.php index 20d9ac8eb8..c9331e4470 100644 --- a/plugins/CoreHome/Menu.php +++ b/plugins/CoreHome/Menu.php @@ -35,12 +35,13 @@ class Menu extends \Piwik\Plugin\Menu if (Piwik::isUserIsAnonymous()) { if (Plugin\Manager::getInstance()->isPluginActivated('ScheduledReports')) { - $menu->addItem($login, null, array('module' => 'ScheduledReports', 'action' => 'index'), 970, $login); + $menu->addItem($login, null, array('module' => 'ScheduledReports', 'action' => 'index'), 970, Piwik::translate('ScheduledReports_PersonalEmailReports')); } else { - $menu->addItem($login, null, array('module' => 'API', 'action' => 'listAllAPI'), 970, $login); + $menu->addItem($login, null, array('module' => 'API', 'action' => 'listAllAPI'), 970, Piwik::translate('API_ReportingApiReference')); } } else { - $menu->addItem($login, null, array('module' => 'UsersManager', 'action' => 'userSettings'), 970, $login); + $tooltip = sprintf('%s: %s', Piwik::translate('UsersManager_PersonalSettings'), $login); + $menu->addItem($login, null, array('module' => 'UsersManager', 'action' => 'userSettings'), 970, $tooltip); } $module = $this->getLoginModule(); diff --git a/plugins/CoreHome/angularjs/common/filters/htmldecode.js b/plugins/CoreHome/angularjs/common/filters/htmldecode.js new file mode 100644 index 0000000000..c3e8107931 --- /dev/null +++ b/plugins/CoreHome/angularjs/common/filters/htmldecode.js @@ -0,0 +1,26 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +(function () { + angular.module('piwikApp.filter').filter('htmldecode', htmldecode); + + htmldecode.$inject = ['piwik']; + + /** + * Be aware that this filter can cause XSS so only use it when you're sure it is safe. + * Eg it should be safe when it is afterwards escaped by angular sanitize again. + */ + function htmldecode(piwik) { + + return function(text) { + if (text && text.length) { + return piwik.helper.htmlDecode(text); + } + + return text; + }; + } +})(); diff --git a/plugins/CoreHome/angularjs/common/filters/ucfirst.js b/plugins/CoreHome/angularjs/common/filters/ucfirst.js new file mode 100644 index 0000000000..34b3460be8 --- /dev/null +++ b/plugins/CoreHome/angularjs/common/filters/ucfirst.js @@ -0,0 +1,21 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +(function () { + angular.module('piwikApp.filter').filter('ucfirst', ucfirst); + + function ucfirst() { + + return function(value) { + if (!value) { + return value; + } + + var firstLetter = (value + '').charAt(0).toUpperCase(); + return firstLetter + value.substr(1); + }; + } +})(); diff --git a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html index 8cf6a9a67b..93371a03bf 100644 --- a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html +++ b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html @@ -1,6 +1,7 @@ -<ul class="navbar"> +<ul class="navbar"role="menu"> <li ng-repeat="category in menuModel.menu" class="menuTab" + role="menuitem" ng-class="{'active': category.active}"> <a class="item" href="" @@ -10,8 +11,9 @@ {{ 'CoreHome_Menu'|translate }} </span> </a> - <ul> + <ul role="menu"> <li ng-repeat="subcategory in category.subcategories" + role="menuitem" ng-class="{'active': subcategory.active}"> <div ng-if="subcategory.isGroup" piwik-menudropdown show-search="true" menu-title="{{ subcategory.name|escape }}"> <a class="item" diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.html b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.html index 9ee4932163..e4e46a676a 100644 --- a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.html +++ b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.html @@ -16,7 +16,7 @@ <a ng-click="view.showSitesList=!view.showSitesList; view.showSitesList && !model.isLoading && model.loadInitialSites();" piwik-onenter="view.showSitesList=!view.showSitesList; view.showSitesList && !model.isLoading && model.loadInitialSites();" href="javascript:void(0)" - title="{{ 'General_ChooseWebsite'|translate }}" + title="{{ 'CoreHome_ChangeCurrentWebsite'|translate:((selectedSite.name || model.firstSiteName)|htmldecode) }}" ng-class="{'loading': model.isLoading}" class="title"> <span class="icon icon-arrow-bottom" @@ -37,6 +37,7 @@ ng-hide="!showSelectedSite && activeSiteId==site.idsite"> <a piwik-ignore-click href="{{ getUrlForSiteId(site.idsite) }}" piwik-autocomplete-matched="view.searchTerm" + title="{{ site.name|htmldecode }}" ng-bind-html="site.name"></a> </li> </ul> diff --git a/plugins/CoreHome/config/config.php b/plugins/CoreHome/config/config.php index 3c646cbd88..39236b62c5 100644 --- a/plugins/CoreHome/config/config.php +++ b/plugins/CoreHome/config/config.php @@ -3,10 +3,6 @@ return array( 'Piwik\Plugins\CoreHome\Tracker\VisitRequestProcessor' => DI\object() - ->constructorParameter('visitStandardLength', DI\get('ini.Tracker.visit_standard_length')), - - 'tracker.request.processors' => DI\add(array( - DI\get('Piwik\Plugins\CoreHome\Tracker\VisitRequestProcessor'), - )), + ->constructorParameter('visitStandardLength', DI\get('ini.Tracker.visit_standard_length')) ); diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js index 3d5fb0432c..30b21f46af 100644 --- a/plugins/CoreHome/javascripts/broadcast.js +++ b/plugins/CoreHome/javascripts/broadcast.js @@ -214,6 +214,10 @@ var broadcast = { currentHashStr = broadcast.updateParamValue('idDashboard=', currentHashStr); } + if (module != 'CustomDimensions') { + currentHashStr = broadcast.updateParamValue('idDimension=', currentHashStr); + } + if (disableHistory) { var newLocation = window.location.href.split('#')[0] + '#?' + currentHashStr; // window.location.replace changes the current url without pushing it on the browser's history stack @@ -451,7 +455,8 @@ var broadcast = { broadcast.getParamValue('action', urlAjax), { idGoal: broadcast.getParamValue('idGoal', urlAjax), - idDashboard: broadcast.getParamValue('idDashboard', urlAjax) + idDashboard: broadcast.getParamValue('idDashboard', urlAjax), + idDimension: broadcast.getParamValue('idDimension', urlAjax) } ); }); diff --git a/plugins/CoreHome/javascripts/dataTable.js b/plugins/CoreHome/javascripts/dataTable.js index 9a7f34cd4c..2ec3fb16d8 100644 --- a/plugins/CoreHome/javascripts/dataTable.js +++ b/plugins/CoreHome/javascripts/dataTable.js @@ -508,13 +508,20 @@ $.extend(DataTable.prototype, UIControl.prototype, { }; } + function getFilterLimitAsString(limit) { + if (limit == '-1') { + return _pk_translate('General_All').toLowerCase(); + } + return limit; + } + // setup limit control - $('.limitSelection', domElem).append('<div><span>' + self.param[limitParamName] + '</span></div><ul></ul>'); + $('.limitSelection', domElem).append('<div><span value="'+ self.param[limitParamName] +'">' + getFilterLimitAsString(self.param[limitParamName]) + '</span></div><ul></ul>'); if (self.props.show_limit_control) { $('.limitSelection ul', domElem).hide(); for (var i = 0; i < numbers.length; i++) { - $('.limitSelection ul', domElem).append('<li value="' + numbers[i] + '"><span>' + numbers[i] + '</span></li>'); + $('.limitSelection ul', domElem).append('<li value="' + numbers[i] + '"><span>' + getFilterLimitAsString(numbers[i]) + '</span></li>'); } $('.limitSelection ul li:last', domElem).addClass('last'); @@ -537,12 +544,12 @@ $.extend(DataTable.prototype, UIControl.prototype, { $('.limitSelection', domElem).is('.visible') ? hide() : show(); }); $('.limitSelection ul li', domElem).on('click', function (event) { - var limit = parseInt($(event.target).text()); + var limit = parseInt($(event.target).closest('li').attr('value')); hide(); if (limit != self.param[limitParamName]) { setLimitValue(self.param, limit); - $('.limitSelection>div>span', domElem).text(limit); + $('.limitSelection>div>span', domElem).text( getFilterLimitAsString(limit)).attr('value', limit); self.reloadAjaxDataTable(); var data = {}; @@ -1047,7 +1054,7 @@ $.extend(DataTable.prototype, UIControl.prototype, { $(this).attr('href', function () { var url = $(this).attr('href') + '&token_auth=' + piwik.token_auth; - var limit = $('.limitSelection>div>span', domElem).text(); + var limit = $('.limitSelection>div>span', domElem).attr('value'); var defaultLimit = $(this).attr('filter_limit'); if (!limit || 'undefined' === limit || defaultLimit == -1) { limit = defaultLimit; @@ -1071,6 +1078,7 @@ $.extend(DataTable.prototype, UIControl.prototype, { var segment = self.param.segment; var label = self.param.label; var idGoal = self.param.idGoal; + var idDimension = self.param.idDimension; var param_date = self.param.date; var date = $(this).attr('date'); if (typeof date != 'undefined') { @@ -1139,6 +1147,11 @@ $.extend(DataTable.prototype, UIControl.prototype, { && idGoal != '-1') { str += '&idGoal=' + idGoal; } + // Export Dimension specific reports + if (typeof idDimension != 'undefined' + && idDimension != '-1') { + str += '&idDimension=' + idDimension; + } if (label) { label = label.split(','); diff --git a/plugins/CoreHome/javascripts/dataTable_rowactions.js b/plugins/CoreHome/javascripts/dataTable_rowactions.js index 004e27e3b6..e7308fb93f 100644 --- a/plugins/CoreHome/javascripts/dataTable_rowactions.js +++ b/plugins/CoreHome/javascripts/dataTable_rowactions.js @@ -386,6 +386,17 @@ DataTable_RowActions_RowEvolution.prototype.showRowEvolution = function (apiMeth requestParams.action = 'getRowEvolutionPopover'; requestParams.colors = JSON.stringify(piwik.getSparklineColors()); + var idDimension; + if (broadcast.getValueFromUrl('module') === 'Widgetize') { + idDimension = broadcast.getValueFromUrl('idDimension'); + } else { + idDimension = broadcast.getValueFromHash('idDimension'); + } + + if (idDimension) { + requestParams.idDimension = parseInt(idDimension, 10); + } + $.extend(requestParams, extraParams); var ajaxRequest = new ajaxHelper(); diff --git a/plugins/CoreHome/javascripts/notification.js b/plugins/CoreHome/javascripts/notification.js index e6c3f017f2..527c845d87 100644 --- a/plugins/CoreHome/javascripts/notification.js +++ b/plugins/CoreHome/javascripts/notification.js @@ -54,6 +54,16 @@ this.$node = placeNotification(template, options); }; + /** + * Removes a previously shown notification having the given notification id. + * + * + * @param {string} notificationId The id of a notification that was previously registered. + */ + Notification.prototype.remove = function (notificationId) { + $('[piwik-notification][notification-id=' + notificationId + ']').remove(); + }; + Notification.prototype.scrollToNotification = function () { if (this.$node) { piwikHelper.lazyScrollTo(this.$node, 250); diff --git a/plugins/CoreHome/javascripts/popover.js b/plugins/CoreHome/javascripts/popover.js index aff7ed7ff9..f694769821 100644 --- a/plugins/CoreHome/javascripts/popover.js +++ b/plugins/CoreHome/javascripts/popover.js @@ -142,7 +142,17 @@ var Piwik_Popover = (function () { /** Set the title of the popover */ setTitle: function (titleHtml) { + var titleText = piwikHelper.htmlDecode(titleHtml); + if (titleText.length > 60) { + titleHtml = $('<span>').attr('class', 'tooltip').attr('title', titleText).html(titleHtml); + } container.dialog('option', 'title', titleHtml); + try { + $('.tooltip', container.parentNode).tooltip('destroy'); + } catch (e) {} + if (titleText.length > 60) { + $('.tooltip', container.parentNode).tooltip({track: true, items: '.tooltip'}); + } }, /** Set inner HTML of the popover */ diff --git a/plugins/CoreHome/lang/cs.json b/plugins/CoreHome/lang/cs.json index b2a02bb644..aba489871a 100644 --- a/plugins/CoreHome/lang/cs.json +++ b/plugins/CoreHome/lang/cs.json @@ -20,7 +20,7 @@ "IncludeRowsWithLowPopulation": "Řádky s nízkou populací jsou skryty %s Zobrazit všechny řádky", "InjectedHostEmailBody": "Ahoj. Dnes jsem se snažil dostat do \\Piwiku a dostal jsem varování o neznámém ménu hostitele.", "InjectedHostEmailSubject": "K piwiku bylo přistupováno s neznámým jménem hostitele %s", - "InjectedHostNonSuperUserWarning": "%1$sKlikněte zde pro bezpečný přístup k Piwiku%2$s a odstranění tohoto varování. Pokud chcete upozornit administrátora na tento problém, %3$sklikněte zde pro odeslání e-mailu%4$s.", + "InjectedHostNonSuperUserWarning": "%1$sKlikněte zde pro bezpečný přístup k Piwiku%2$s a odstranění tohoto varování. Pokud chcete upozornit administrátora na tento problém, %3$sklikněte zde pro odeslání emailu%4$s.", "InjectedHostSuperUserWarning": "Piwik může být špatně nakonfigurován, například pokud byl přesunut na nový server nebo URL. Můžete %1$skliknout zde a přidat %2$s jako platné jméno hostitele Piwiku (pokud mu důvěřujete)%3$s, nebo %4$s klikněte zde%5$s pro bezpečný přístup k Piwiku%6$s.", "InjectedHostWarningIntro": "Nyní přistupujete k Piwiku z %1$s, ale byl nakonfigurován, aby naslouchal na následující adrese: %2$s.", "JavascriptDisabled": "Musíte mít zapnutý JavaScript, jinak Piwik nezobrazíte.<br \/> Nebo jen není Váš prohlížeč mezi podporovanými.<br \/>Pro běžné zobrazení zapněte JavaScript ve svém prohlížeči, poté %1$szkuste znovu%2$s.<br \/>", @@ -48,6 +48,11 @@ "YouAreUsingTheLatestVersion": "Používáte nejnovější verzi Piwiku.", "ClickRowToExpandOrContract": "Klikněte na tento řádek pro rozbalení nebo zbalení podtabulky.", "UndoPivotBySubtable": "Toto hlášení bylo zaměřeno %s Vrátit zpět", - "PivotBySubtable": "Toto hlášení není zaměřené %s Zaměřit na %s" + "PivotBySubtable": "Toto hlášení není zaměřené %s Zaměřit na %s", + "QuickAccessTitle": "Najít zástupce %s: Pro hledání stiskněte 'f'.", + "MenuEntries": "Položky menu", + "Segments": "Segmenty", + "AdblockIsMaybeUsed": "Pokud používáte blokovač reklam, zakažte ho pro tyto stránky, aby Piwik správně fungoval.", + "ChangeCurrentWebsite": "Vybrat webovou stránku, aktuálně vybraná stránka: %s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/de.json b/plugins/CoreHome/lang/de.json index 4c744998eb..a80015d88d 100644 --- a/plugins/CoreHome/lang/de.json +++ b/plugins/CoreHome/lang/de.json @@ -52,6 +52,7 @@ "QuickAccessTitle": "Suche nach %s. Tastenkürzel: Drücken Sie 'f' um zu suchen.", "MenuEntries": "Menüeinträge", "Segments": "Segmente", - "AdblockIsMaybeUsed": "Für den Fall, dass Sie einen Ad-Blocker verwenden, deaktivieren Sie diesen bitte für diese Seite um sicherzustellen, dass Piwik problemlos läuft." + "AdblockIsMaybeUsed": "Für den Fall, dass Sie einen Ad-Blocker verwenden, deaktivieren Sie diesen bitte für diese Seite um sicherzustellen, dass Piwik problemlos läuft.", + "ChangeCurrentWebsite": "Wählen Sie eine Webseite, aktuell gewählte Webseite: %s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/el.json b/plugins/CoreHome/lang/el.json index 242a7af9e6..ed3ae34bb2 100644 --- a/plugins/CoreHome/lang/el.json +++ b/plugins/CoreHome/lang/el.json @@ -52,6 +52,7 @@ "QuickAccessTitle": "Αναζήτηση για το %s. Πλήκτρο συντόμευσης: Πατήστε 'f' για αναζήτηση.", "MenuEntries": "Καταχωρήσεις μενού", "Segments": "Τμήματα", - "AdblockIsMaybeUsed": "Σε περίπτωση που χρησιμοποιείτε κάποια πρόγραμμα που μπλοκάρει τις διαφημίσεις, παρακαλούμε απενεργοποιήστε το για αυτόν τον ιστοτόπο για να είστε σίγουροι ότι το Piwik δουλεύει σωστά." + "AdblockIsMaybeUsed": "Σε περίπτωση που χρησιμοποιείτε κάποια πρόγραμμα που μπλοκάρει τις διαφημίσεις, παρακαλούμε απενεργοποιήστε το για αυτόν τον ιστοτόπο για να είστε σίγουροι ότι το Piwik δουλεύει σωστά.", + "ChangeCurrentWebsite": "Επιλέξτε ένα ιστοτόπο, επιλεγμένος ιστοτόπος αυτή τη στιγμή: %s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/en.json b/plugins/CoreHome/lang/en.json index 6e38e1d0f2..75566a08f2 100644 --- a/plugins/CoreHome/lang/en.json +++ b/plugins/CoreHome/lang/en.json @@ -53,6 +53,7 @@ "QuickAccessTitle": "Search for %s. Shortcut: Press 'f' to search.", "MenuEntries": "Menu entries", "Segments": "Segments", - "AdblockIsMaybeUsed": "In case you are using an ad blocker, please disable it for this site to make sure Piwik works without any issues." + "AdblockIsMaybeUsed": "In case you are using an ad blocker, please disable it for this site to make sure Piwik works without any issues.", + "ChangeCurrentWebsite": "Choose a website, currently selected website: %s" } } diff --git a/plugins/CoreHome/lang/fr.json b/plugins/CoreHome/lang/fr.json index dc5980c335..c63eb35c23 100644 --- a/plugins/CoreHome/lang/fr.json +++ b/plugins/CoreHome/lang/fr.json @@ -48,6 +48,7 @@ "YouAreUsingTheLatestVersion": "Vous utilisez la dernière version de Piwik!", "ClickRowToExpandOrContract": "Cliquez sur cette rangée pour afficher ou masquer le sous-tableau", "UndoPivotBySubtable": "Ce rapport a été pivoté %s Annuler le pivot", - "PivotBySubtable": "Ce rapport n'a pas été pivoté %s Pivoter par %s" + "PivotBySubtable": "Ce rapport n'a pas été pivoté %s Pivoter par %s", + "Segments": "Segments" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/it.json b/plugins/CoreHome/lang/it.json index 1d1513c8de..37c9c5fc1a 100644 --- a/plugins/CoreHome/lang/it.json +++ b/plugins/CoreHome/lang/it.json @@ -52,6 +52,7 @@ "QuickAccessTitle": "Cerca %s. Shortcut: Premi 'f' per la ricerca.", "MenuEntries": "Ingressi da menù", "Segments": "Segmenti", - "AdblockIsMaybeUsed": "Se stai utilizzando un plugin di blocco della pubblicità, disabilitalo per questo sito, per essere sicuro che Piwik lavori senza problemi." + "AdblockIsMaybeUsed": "Se stai utilizzando un plugin di blocco della pubblicità, disabilitalo per questo sito, per essere sicuro che Piwik lavori senza problemi.", + "ChangeCurrentWebsite": "Scegli un sito, attualmente è selezionato: %s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/ja.json b/plugins/CoreHome/lang/ja.json index 6efb5237e9..d328182c53 100644 --- a/plugins/CoreHome/lang/ja.json +++ b/plugins/CoreHome/lang/ja.json @@ -48,6 +48,11 @@ "YouAreUsingTheLatestVersion": "Piwik の最新バージョンを使用しています !", "ClickRowToExpandOrContract": "サブテーブルを拡大または縮小するには、この列をクリックしてください。", "UndoPivotBySubtable": "このレポートは、%s 元に戻すピボットを旋回しました。", - "PivotBySubtable": "このレポートは、%s が %s ピボット を旋回していません。" + "PivotBySubtable": "このレポートは、%s が %s ピボット を旋回していません。", + "QuickAccessTitle": "%s を検索。ショートカット: ' f' キーを押して検索します。", + "MenuEntries": "メニュー エントリー", + "Segments": "セグメント", + "AdblockIsMaybeUsed": "広告ブロッカーを使用している場合には、Piwik が問題なく動作することを確認するために、このサイトでそれを無効にしてください。", + "ChangeCurrentWebsite": "ウェブサイトを選ぶ 現在選択されているWebサイト:%s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/ko.json b/plugins/CoreHome/lang/ko.json index f43ee7f5ae..aee10161d2 100644 --- a/plugins/CoreHome/lang/ko.json +++ b/plugins/CoreHome/lang/ko.json @@ -3,6 +3,7 @@ "CategoryNoData": "이 카테고리 안에 데이터가 없습니다. \"모든 집단 포함\"을 시도해보세요.", "CheckForUpdates": "업데이트 확인", "CheckPiwikOut": "Piwik 출시 확인!", + "ClickToEditX": "%s 수정하기", "CloseWidgetDirections": "위젯의 상단에있는 'X'아이콘을 클릭하여 이 위젯을 닫을 수 있습니다.", "DataForThisReportHasBeenPurged": "이 보고서의 데이터는 %s 개월 이상 되었기 때문에 제거되었습니다.", "DataTableExcludeAggregateRows": "요약 행 표시 %s 숨기기", @@ -13,6 +14,7 @@ "DonateCall3": "Piwik이 당신의 업무나 시도하는 일에 특별한 가치를 더해준다고 느끼신다면, %1$s기부해 주세요!%2$s", "DonateFormInstructions": "슬라이더를 클릭하여 금액을 선택하고, 기부에 기명을 클릭합니다.", "ExcludeRowsWithLowPopulation": "모든 행을 표시 %s 적은 량의 항목은 제외", + "ExternalHelp": "도움말 (새로운 탭에 열기)", "FlattenDataTable": "이 보고서는 계층형입니다. %s 펼치기", "HowMuchIsPiwikWorth": "당신에게 Piwik의 가치는 얼마인가요?", "IncludeRowsWithLowPopulation": "수가 적은 줄 숨기기 %s 모든 행을 표시", @@ -24,7 +26,9 @@ "JavascriptDisabled": "Piwik의 표준보기를 이용하려면 JavaScript가가 활성화되어 있어야 합니다.<br \/>하지만, 당신의 브라우저는 활성화되어있지 않거나 지원되지 않는 것 같습니다.<br \/>표준보기를 이용하려면 브라우저 옵션을 변경하여 JavaScript를 활성화하고 <br \/> %1$s다시 시도하세요%2$s.<br \/>", "MakeADifference": "개발 지원: Piwik 2.0에 %1$s기부해 주세요%2$s!", "MakeOneTimeDonation": "또는, 한 번만 기부합니다.", + "Menu": "메뉴", "NoPrivilegesAskPiwikAdmin": "'%s'로 로그인되었지만 권한이 설정되어 있지 않습니다. %s Piwik 관리자(클릭 이메일) %s에 '보기'권한을 부여 받으세요.", + "OnlyForSuperUserAccess": "해당 위젯은 유저가 수퍼 유저일 경우에만 나타납니다.", "PageOf": "%1$s \/ %2$s", "PeriodRange": "기간", "ReportGeneratedOn": "%s에 생성된 보고서", @@ -33,12 +37,20 @@ "SharePiwikShort": "Piwik은 오픈소스기반 무료 웹 분석 도구입니다. 이제 소중한 정보를 소유하세요!", "ShareThis": "공유하기", "ShowJSCode": "삽입할 자바스크립트 코드 보기", + "SkipToContent": "내용 건너뛰기", "SubscribeAndBecomePiwikSupporter": "Piwik의 후원자가 되기 위해서 보안 신용카드 결제 페이지 (페이팔)로 이동합니다!", "SupportPiwik": "Piwik 지원!", + "TableNoData": "이 테이블에 데이터가 없습니다.", "ThereIsNoDataForThisReport": "이 보고서에는 데이터가 없습니다.", "UnFlattenDataTable": "보고서가 펼쳐져 있습니다 %s 계층으로 표시하기", "ViewAllPiwikVideoTutorials": "모든 비디오 튜토리얼 보기", "WebAnalyticsReports": "웹 분석 보고서", - "YouAreUsingTheLatestVersion": "Piwik 최신 버전을 사용하고 있습니다!" + "YouAreUsingTheLatestVersion": "Piwik 최신 버전을 사용하고 있습니다!", + "ClickRowToExpandOrContract": "하위 테이블의 행을 확장하거나 축소하기 위해 클릭하세요.", + "QuickAccessTitle": "%s 검색하기. 단축키: 검색을 하려면 'f'를 누르세요.", + "MenuEntries": "메뉴", + "Segments": "세그멘트", + "AdblockIsMaybeUsed": "Piwik가 문제 없이 동작하기 위해서 광고 차단기능이 있는 플러그인을 꺼주시길 바랍니다.", + "ChangeCurrentWebsite": "웹사이트를 선택하세요, 현재 선택된 웹사이트: %s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/lt.json b/plugins/CoreHome/lang/lt.json index f0b88807bf..907f1bf178 100644 --- a/plugins/CoreHome/lang/lt.json +++ b/plugins/CoreHome/lang/lt.json @@ -3,6 +3,7 @@ "CategoryNoData": "Šioje kategorijoje duomenų nėra. Pabandykite \"Įtraukti visą populiaciją\"", "JavascriptDisabled": "JavaScript turi būti įjungta, kad būtų galima naudoti standartinę Piwik išvaizdą.<br \/>Tačiau panašu, kad JavaScript yra arba išjungta, arba nepalaikoma Jūsų naršyklės.<br \/>Norėdami matyti standartinę išvaizdą, įjunkite JavaScript keisdami savo naršyklės nustatymus, tada %1$sbandykite dar kartą%2$s.<br \/>", "PageOf": "%1$s iš %2$s", + "SharePiwikShort": "Piwik! Nemokama\/laisva saityno analitika. Būkite savo duomenų savininkais.", "ShowJSCode": "Parodyti JavaScript kodą įvedimui", "ThereIsNoDataForThisReport": "Nėra duomenų šiai ataskaitai.", "WebAnalyticsReports": "Žiniatinklio analizės sprendimo ataskaitos" diff --git a/plugins/CoreHome/lang/nb.json b/plugins/CoreHome/lang/nb.json index 91308236ff..33cc4649d0 100644 --- a/plugins/CoreHome/lang/nb.json +++ b/plugins/CoreHome/lang/nb.json @@ -1,12 +1,12 @@ { "CoreHome": { - "CategoryNoData": "Ingen data i denne kategorien. Prøv å velge \"Inkluder hele populasjon\".", + "CategoryNoData": "Ingen data i denne kategorien. Prøv å velge «Inkluder hele populasjonen».", "CheckForUpdates": "Se etter oppdateringer", "CheckPiwikOut": "Sjekk ut Piwik!", "ClickToEditX": "Klikk for å redigere %s", - "CloseWidgetDirections": "Du kan lukke dette elementet ved å klikke på X-ikonet på toppen av elementet.", + "CloseWidgetDirections": "Du kan lukke dette elementet ved å klikke på X-ikonet over widgeten.", "DataForThisReportHasBeenPurged": "Dataene for denne rapporten er mer enn %s måneder gamle og har blitt fjernet.", - "DataTableExcludeAggregateRows": "Aggregerte rader er vist som %s Skjul dem", + "DataTableExcludeAggregateRows": "Aggregerte rader vises %s Skjul dem", "DataTableIncludeAggregateRows": "Aggregerte rader er skjult %s Vi dem", "Default": "standard", "DonateCall1": "Det vil aldri koste noe å bruke Piwik, men det betyr ikke at det ikke koster oss noe å lage.", @@ -20,7 +20,7 @@ "IncludeRowsWithLowPopulation": "Rader med lav populasjon er skjult %s Vis alle rader", "InjectedHostEmailBody": "Hei, jeg prøvde å få tilgang til Piwik i dag og ble møtt av «ukjent vertsnavn»-advarselen.", "InjectedHostEmailSubject": "Piwik ble åpnet med et ukjent vertsnavn: %s", - "InjectedHostNonSuperUserWarning": "%1$sKlikk her for å få sikker tilgang til Piwik%2$s og for å fjerne denne advarselen. Du ømsker kanskje også å kontakte din Piwik-administrator for å varsle dem om dette problemet (%3$sklikk her for å sende epost%4$s).", + "InjectedHostNonSuperUserWarning": "%1$sKlikk her for å få sikker tilgang til Piwik%2$s og for å fjerne denne advarselen. Du vil kanskje også kontakte din Piwik-administrator for å varsle dem om dette problemet (%3$sklikk her for å sende e-post%4$s).", "InjectedHostSuperUserWarning": "Piwik kan være feilkonfigurert (for eksempel hvis Piwik nylig var flyttet til en ny tjener eller ny URL). Du kan enten %1$sklikke her og legge til %2$s som et gyldig Piwik-vertsnavn (hvis du stoler på det)%3$s eller %4$sklikk her og gå til %5$s for sikker tilgang til Piwik%6$s.", "InjectedHostWarningIntro": "Du har tilgang til Piwik fra %1$s, men Piwik er konfigurert til å kjøre på adressen: %2$s", "JavascriptDisabled": "JavaScript må være aktivert for at du skal kunne bruke Piwik i standardvisning.<br \/>Det ser ut til at JavaScript enten er deaktivert eller ikke støttet av din nettleser.<br \/>For å bruke standardvisning, må du aktivere JavaScript i nettleserinnstillingene og deretter %1$sprøve igjen%2$s.<br \/>", @@ -28,13 +28,13 @@ "MakeOneTimeDonation": "Bidra med en engangsdonasjon i stedet.", "Menu": "Meny", "NoPrivilegesAskPiwikAdmin": "Du er logget inn som «%s», men det ser ut til at du ikke har noen rettigheter satt i Piwik. %s Be din Piwik-administrator (klikk for å sende e-post)%s å gi deg «vis»-tilgang til et nettsted.", - "OnlyForSuperUserAccess": "Dette elementet er vises kun til brukere som har superbruker-tilgang.", + "OnlyForSuperUserAccess": "Denne widgeten vises kun til brukere som har superbruker-tilgang.", "PageOf": "%1$s av %2$s", - "PeriodRange": "Område", + "PeriodRange": "Periode", "ReportGeneratedOn": "Rapport generert %s", "ReportGeneratedXAgo": "Rapport generert %s siden", "SharePiwikLong": "Hei! Jeg har nettopp funnet et bra stykke fri programvare: Piwik!\n\nPiwik lar deg spore besøkende på ditt nettsted gratis. Du bør definitivt prøve det ut.", - "SharePiwikShort": "Piwik! Gratis og åpen kildekode web analyse. Du eier dataene.", + "SharePiwikShort": "Piwik! Gratis og åpen kildekode for nettstatistikk. Du eier dataene.", "ShareThis": "Del dette", "ShowJSCode": "Vis JavaScript-koden til å sette inn på din nettside.", "SkipToContent": "Hopp til innhold", @@ -48,6 +48,11 @@ "YouAreUsingTheLatestVersion": "Du bruker den nyeste versjonen av Piwik!", "ClickRowToExpandOrContract": "Klikk denne raden for utvide eller slå sammen undertabellen.", "UndoPivotBySubtable": "Denne rapporten er pivotert %s Angre pivot", - "PivotBySubtable": "Denne rapporten er ikke pivotert %s Pivot etter %s" + "PivotBySubtable": "Denne rapporten er ikke pivotert %s Pivot etter %s", + "QuickAccessTitle": "Søk etter %s. Snarvei: Trykk «f» for å søke.", + "MenuEntries": "Menyvalg", + "Segments": "Segmenter", + "AdblockIsMaybeUsed": "Hvis du bruker en ad-blocker, vennligst deaktiver den for dette nettstedet for å forsikre deg om at Piwik fungerer som det skal.", + "ChangeCurrentWebsite": "Velg et nettsted. Nettstedet som nå er valgt er: %s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/pt-br.json b/plugins/CoreHome/lang/pt-br.json index 69f02cb1ad..b7522980e0 100644 --- a/plugins/CoreHome/lang/pt-br.json +++ b/plugins/CoreHome/lang/pt-br.json @@ -52,6 +52,7 @@ "QuickAccessTitle": "Buscar por %s. Atalho: Tecle 'f' para buscar.", "MenuEntries": "Itens do menu", "Segments": "Segmentos", - "AdblockIsMaybeUsed": "Caso você esteja usando um bloqueador de anúncios, por favor desative-o para este site, pois assim poderá certificar-se de que o Piwik funciona sem qualquer problema." + "AdblockIsMaybeUsed": "Caso você esteja usando um bloqueador de anúncios, por favor desative-o para este site, pois assim poderá certificar-se de que o Piwik funciona sem qualquer problema.", + "ChangeCurrentWebsite": "Escolha um website; website atualmente selecionado: %s" } }
\ No newline at end of file diff --git a/plugins/CoreHome/lang/tr.json b/plugins/CoreHome/lang/tr.json index 572a8f8459..eddff9951e 100644 --- a/plugins/CoreHome/lang/tr.json +++ b/plugins/CoreHome/lang/tr.json @@ -31,7 +31,7 @@ "ShowJSCode": "Eklenecek JavaScript kodu göster", "SubscribeAndBecomePiwikSupporter": "Piwik Destekçisi olmak için güvenli bir kredi kartı ödeme sayfasına (Paypal) geçin!", "SupportPiwik": "Piwike destek ol", - "TableNoData": "Bu tablo için bir data yok.", + "TableNoData": "Bu tablo için bir veri yok.", "ThereIsNoDataForThisReport": "Bu rapor için veri yok.", "ViewAllPiwikVideoTutorials": "Tüm Piwik Yardım Videolarına Bak", "WebAnalyticsReports": "Web Analiz Raporları", diff --git a/plugins/CoreHome/stylesheets/coreHome.less b/plugins/CoreHome/stylesheets/coreHome.less index 9be7d14879..ab4b749b02 100644 --- a/plugins/CoreHome/stylesheets/coreHome.less +++ b/plugins/CoreHome/stylesheets/coreHome.less @@ -177,28 +177,24 @@ div.pk-emptyGraph { } .Piwik_Popover_Error_Title { - color: @theme-color-link; - font-weight: bold; font-size: 16px; } .Piwik_Popover_Error_Title span { - color: #222; font-weight: normal; font-size: 16px; } .Piwik_Popover_Error_Message { - color: #7e7363; padding: 20px 0 0 0; - font-size: 14px; + font-size: 13px; } a.Piwik_Popover_Error_Back { display: block; margin: 20px 0 0 0; - color: #1D3256; - font-size: 14px; + font-size: 13px; + text-decoration: underline; } #alert.ui-confirm input { diff --git a/plugins/CoreHome/stylesheets/layout.less b/plugins/CoreHome/stylesheets/layout.less index 5cffdf3be8..a398657c7c 100644 --- a/plugins/CoreHome/stylesheets/layout.less +++ b/plugins/CoreHome/stylesheets/layout.less @@ -30,7 +30,7 @@ height: 100%; transition: background-color 150ms linear; - &:hover { + &:hover, &:focus { background-color: @theme-color-menu-contrast-background; } @@ -59,7 +59,7 @@ .navbar { a { text-decoration: none; - &:hover, &:focus, &:active { + &:hover, &:focus { text-decoration: none; } } @@ -244,7 +244,7 @@ > .item { cursor: default; font-weight: bold; - &:hover { + &:hover, &:focus { text-decoration: none; } } @@ -257,7 +257,7 @@ padding: 11px 22px 11px 45px; decoration: none; transition: background-color 200ms linear; - &:hover { + &:hover, &:focus { text-decoration: none; color: @theme-color-menu-contrast-textActive; } @@ -300,7 +300,7 @@ font-size: 13px; font-weight: normal; - &:hover { + &:hover, &:focus { color: @theme-color-menu-contrast-textActive; } @@ -325,7 +325,7 @@ > .item { cursor: pointer; - &:hover { + &:hover, &:focus { color: @theme-color-menu-contrast-textActive; } } @@ -388,7 +388,7 @@ border: 1px solid @theme-color-background-tinyContrast; transition: box-shadow 150ms linear; &.expanded, - &:hover { + &:hover, &:focus { box-shadow: 0 1px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12); } } diff --git a/plugins/CoreHome/templates/_dataTable.twig b/plugins/CoreHome/templates/_dataTable.twig index 6bc35bca9e..697af2c9b6 100644 --- a/plugins/CoreHome/templates/_dataTable.twig +++ b/plugins/CoreHome/templates/_dataTable.twig @@ -12,7 +12,7 @@ data-params="{% if clientSideParameters is empty %}{}{% else %}{{ clientSideParameters|json_encode }}{% endif %}"> <div class="reportDocumentation"> {% if properties.documentation|default is not empty %}<p>{{ properties.documentation|raw }}</p>{% endif %} - {% if reportLastUpdatedMessage is defined %}<span class='helpDate'>{{ reportLastUpdatedMessage }}</span>{% endif %} + {% if reportLastUpdatedMessage is defined %}<span class='helpDate'>{{ reportLastUpdatedMessage|raw }}</span>{% endif %} </div> <div class="dataTableWrapper"> {% if error is defined %} diff --git a/plugins/CoreHome/templates/_menu.twig b/plugins/CoreHome/templates/_menu.twig index 51b87bc301..94321a033f 100644 --- a/plugins/CoreHome/templates/_menu.twig +++ b/plugins/CoreHome/templates/_menu.twig @@ -1,10 +1,9 @@ - {% macro menu(menu, anchorlink, cssClass, currentModule, currentAction) %} <div id="secondNavBar" class="{{ cssClass }}"> <div id="search" ng-cloak> <div piwik-quick-access class="borderedControl"></div> </div> - <ul class="navbar"> + <ul class="navbar" role="menu"> {% for level1,level2 in menu %} {% set hasSubmenuItem = false %} @@ -15,7 +14,7 @@ {% endfor %} {% if hasSubmenuItem %} - <li class="menuTab"> + <li class="menuTab" role="menuitem"> <a class="item"> <span class="menu-icon {{ level2._icon|default('icon-arrow-right') }}"></span>{{ level1|translate }} @@ -23,12 +22,14 @@ {{ 'CoreHome_Menu'|translate }} </span> </a> - <ul> + <ul role="menu"> {% for name,urlParameters in level2 %} {% if name|slice(0,1) != '_' %} <li {% if urlParameters._url.module is defined and urlParameters._url.module == currentModule and urlParameters._url.action is defined and urlParameters._url.action == currentAction %}class="active"{% endif %} - > + role="menuitem" + > <a class="item" + title="{{ urlParameters._tooltip|default(name)|translate|e('html_attr') }}" href="index.php?{{ urlParameters._url|urlRewriteWithParameters|slice(1) }}"> {{ name|translate }} </a> diff --git a/plugins/CoreHome/templates/_siteSelectHeader.twig b/plugins/CoreHome/templates/_siteSelectHeader.twig index 7353e2e07a..beacabd849 100644 --- a/plugins/CoreHome/templates/_siteSelectHeader.twig +++ b/plugins/CoreHome/templates/_siteSelectHeader.twig @@ -1,3 +1,3 @@ <div class="top_bar_sites_selector piwikTopControl"> - <div piwik-siteselector class="sites_autocomplete"></div> + <div piwik-siteselector show-selected-site="true" class="sites_autocomplete"></div> </div>
\ No newline at end of file diff --git a/plugins/CoreHome/templates/_topBar.twig b/plugins/CoreHome/templates/_topBar.twig index e69e9c1978..c1158f46bb 100644 --- a/plugins/CoreHome/templates/_topBar.twig +++ b/plugins/CoreHome/templates/_topBar.twig @@ -1,5 +1,5 @@ {{ postEvent("Template.beforeTopBar", userAlias, userLogin, topMenu, userMenu) }} -<ul class="navbar-right"> +<ul role="menubar" class="navbar-right"> {% macro menuItemLabel(label, icon) %} {% if icon is defined and icon and icon starts with 'icon-' %} @@ -27,7 +27,7 @@ {% spaceless %} {% for label,menu in topMenu %} - <li>{{ _self.topMenuItem(label, menu, topMenuModule, topMenuAction) }}</li> + <li role="menuitem">{{ _self.topMenuItem(label, menu, topMenuModule, topMenuAction) }}</li> {% endfor %} {% endspaceless %} diff --git a/plugins/CoreHome/tests/Integration/Column/UserIdTest.php b/plugins/CoreHome/tests/Integration/Column/UserIdTest.php index 33c268afae..70715a4dc2 100644 --- a/plugins/CoreHome/tests/Integration/Column/UserIdTest.php +++ b/plugins/CoreHome/tests/Integration/Column/UserIdTest.php @@ -12,6 +12,7 @@ use Piwik\Access; use Piwik\Cache; use Piwik\DataAccess\ArchiveTableCreator; use Piwik\Db; +use Piwik\Metrics; use Piwik\Plugin\Manager; use Piwik\Plugins\CoreHome\Columns\UserId; use Piwik\Tests\Framework\Fixture; @@ -164,6 +165,17 @@ class UserIdTest extends IntegrationTestCase $this->assertDataTableHasUsers($this->getDataTableWithUsers()); } + public function test_hasDataTableUsers_shouldBeAbleToDetectIfNbUsersMetricIdIsused() + { + $table = $this->getDataTableWithZeroUsers(); + $table->renameColumn('nb_users', Metrics::INDEX_NB_USERS); + $this->assertNotDataTableHasUsers($table); + + $table = $this->getDataTableWithUsers(); + $table->renameColumn('nb_users', Metrics::INDEX_NB_USERS); + $this->assertDataTableHasUsers($this->getDataTableWithUsers()); + } + private function getDataTableWithoutUsersColumn() { $tableWithoutUsers = new DataTable(); |