diff options
author | Matthieu Aubry <mattab@users.noreply.github.com> | 2016-12-06 15:19:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-06 15:19:48 +0300 |
commit | b1c09fa5123155ab9cd79342a4a0cef42e80de7f (patch) | |
tree | 06541e0c5bd079a8904fb3d2f82bfaf9155bda46 /plugins | |
parent | 46eafa8ab66d9d7bc785dc6697b8c3168c9d4145 (diff) | |
parent | d96661e2bd8e54c1ef022cc88e95d133d3f6c615 (diff) |
Merge pull request #10974 from piwik/3.x-dev3.0.0-rc1
Release Piwik 3.0.0-rc1
Diffstat (limited to 'plugins')
19 files changed, 208 insertions, 34 deletions
diff --git a/plugins/API/templates/listAllAPI.twig b/plugins/API/templates/listAllAPI.twig index 258b74c49d..9aa2685881 100644 --- a/plugins/API/templates/listAllAPI.twig +++ b/plugins/API/templates/listAllAPI.twig @@ -20,7 +20,7 @@ <div piwik-content-block content-title="{{ 'API_UserAuthentication'|translate|e('html_attr') }}"> <p> {{ 'API_UsingTokenAuth'|translate('','',"")|raw }}<br/> - <pre piwik-select-on-focus id='token_auth'>&token_auth=<strong>{{ token_auth }}</strong></pre><br/> + <pre piwik-select-on-focus id='token_auth'>&token_auth=<strong piwik-show-sensitive-data="{{ token_auth }}" data-click-element-selector="#token_auth"></strong></pre><br/> {{ 'API_KeepTokenSecret'|translate('<b>','</b>')|raw }}<br /> {{ 'API_ChangeTokenHint'|translate('<a href="' ~ linkTo({ 'module': 'UsersManager', diff --git a/plugins/Actions/lang/en.json b/plugins/Actions/lang/en.json index c31dc264ec..27c9b2f72f 100644 --- a/plugins/Actions/lang/en.json +++ b/plugins/Actions/lang/en.json @@ -18,7 +18,7 @@ "ColumnSearchCategory": "Search Category", "ColumnSearches": "Searches", "ColumnSearchesDocumentation": "The number of visits that searched for this keyword on your website's search engine.", - "ColumnSearchExits": "% Search Exits", + "ColumnSearchExits": "%% Search Exits", "ColumnSearchExitsDocumentation": "The percentage of visits that left the website after searching for this Keyword on your Site Search engine.", "ColumnSearchResultsCount": "Search Results Count", "ColumnSiteSearchKeywords": "Unique Keywords", diff --git a/plugins/CoreAdminHome/templates/home.twig b/plugins/CoreAdminHome/templates/home.twig index aaf5afc5ba..d938a1d809 100644 --- a/plugins/CoreAdminHome/templates/home.twig +++ b/plugins/CoreAdminHome/templates/home.twig @@ -35,6 +35,7 @@ {% endif %} {% if isMarketplaceEnabled %} + <div piwik-widget-loader='{"module":"Marketplace","action":"getPremiumFeatures"}'></div> <div piwik-widget-loader='{"module":"Marketplace","action":"getNewPlugins", "isAdminPage": "1"}'></div> {% endif %} diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php index f5a1a594bc..7a221bc7db 100644 --- a/plugins/CoreHome/CoreHome.php +++ b/plugins/CoreHome/CoreHome.php @@ -155,6 +155,7 @@ class CoreHome extends \Piwik\Plugin $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/directive.module.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/attributes.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/field-condition.js"; + $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/show-sensitive-data.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/focus-anywhere-but-here.js"; $jsFiles[] = "plugins/CoreHome/angularjs/common/directives/ignore-click.js"; @@ -255,6 +256,7 @@ class CoreHome extends \Piwik\Plugin $translationKeys[] = 'General_MultiSitesSummary'; $translationKeys[] = 'General_SearchNoResults'; $translationKeys[] = 'CoreHome_ChooseX'; + $translationKeys[] = 'CoreHome_ClickToSeeFullInformation'; $translationKeys[] = 'CoreHome_YouAreUsingTheLatestVersion'; $translationKeys[] = 'CoreHome_IncludeRowsWithLowPopulation'; $translationKeys[] = 'CoreHome_ExcludeRowsWithLowPopulation'; diff --git a/plugins/CoreHome/angularjs/common/directives/show-sensitive-data.js b/plugins/CoreHome/angularjs/common/directives/show-sensitive-data.js new file mode 100644 index 0000000000..1744f9e622 --- /dev/null +++ b/plugins/CoreHome/angularjs/common/directives/show-sensitive-data.js @@ -0,0 +1,59 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +/** + * Handles visibility of sensitive data. By default data will be shown replaced with stars (*) + * On click on the element the full data will be shown + * + * Configuration attributes: + * data-show-characters number of characters to show in clear text (defaults to 6) + * data-click-element-selector selector for element that will show the full data on click (defaults to element) + * + * Example: + * <div piwik-show-sensitive-date="some text"></div> + */ +(function () { + angular.module('piwikApp.directive').directive('piwikShowSensitiveData', piwikShowSensitiveData); + + function piwikShowSensitiveData(){ + return { + restrict: 'A', + link: function(scope, element, attr) { + + var sensitiveData = attr.piwikShowSensitiveData || attr.text(); + var showCharacters = attr.showCharacters || 6; + var clickElement = attr.clickElementSelector || element; + + var protectedData = ''; + if (showCharacters > 0) { + protectedData += sensitiveData.substr(0, showCharacters); + } + protectedData += sensitiveData.substr(showCharacters).replace(/./g, '*'); + element.html(protectedData); + + function onClickHandler(event) { + element.html(sensitiveData); + $(clickElement).css({ + cursor: '' + }); + $(clickElement).tooltip("destroy"); + } + + $(clickElement).tooltip({ + content: _pk_translate('CoreHome_ClickToSeeFullInformation'), + items: '*', + track: true + }); + + $(clickElement).one('click', onClickHandler); + $(clickElement).css({ + cursor: 'pointer' + }) + } + }; + } +})(); diff --git a/plugins/CoreHome/lang/en.json b/plugins/CoreHome/lang/en.json index 808250348e..57c5071c4a 100644 --- a/plugins/CoreHome/lang/en.json +++ b/plugins/CoreHome/lang/en.json @@ -5,6 +5,7 @@ "CheckForUpdates": "Check for updates", "CheckPiwikOut": "Check Piwik out!", "ClickToEditX": "Click to edit %s", + "ClickToSeeFullInformation": "Click to see the full information", "CloseSearch": "Close search", "CloseWidgetDirections": "You can close this widget by clicking on the 'X' icon at the top of the widget.", "ChooseX": "Choose %1$s", diff --git a/plugins/CoreHome/templates/getSystemSummary.twig b/plugins/CoreHome/templates/getSystemSummary.twig index 75cdf0a935..264162c180 100644 --- a/plugins/CoreHome/templates/getSystemSummary.twig +++ b/plugins/CoreHome/templates/getSystemSummary.twig @@ -14,7 +14,7 @@ </div> <div> <span>{{ 'CoreHome_SystemSummaryPiwikVersion'|translate }}:</span> - <span>{{ piwikVersion }}</span> + <span class="piwik-version">{{ piwikVersion }}</span> </div> <div> <span>{{ 'CoreHome_SystemSummaryMysqlVersion'|translate }}:</span> diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts -Subproject 49ae454fd7eae39e07300c83e0dff40dda2e427 +Subproject 8c861c9084a25dc36e1176496598a175a1619ee diff --git a/plugins/Installation/templates/getSystemCheckWidget.twig b/plugins/Installation/templates/getSystemCheckWidget.twig index 7f10dc06e1..5f1d9f8385 100644 --- a/plugins/Installation/templates/getSystemCheckWidget.twig +++ b/plugins/Installation/templates/getSystemCheckWidget.twig @@ -4,7 +4,7 @@ {% endif %} {% if numErrors %} - <p class="system-errors"><span class="icon-error"></span> {{ 'General_Errors'|translate }}:</p> + <p class="system-errors"><span class="icon-error"></span> {{ 'General_Errors'|translate }}</p> <ul> {% for error in errors %} <li title="{{ error.getLongErrorMessage|e('html_attr') }}">{{ error.getLabel }}</li> @@ -20,7 +20,7 @@ <br /> {% endif %} - <span class="icon-warning"></span> {{ 'General_Warnings'|translate }}: + <span class="icon-warning"></span> {{ 'General_Warnings'|translate }} </p> <ul> {% for warning in warnings %} diff --git a/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php b/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php index 0ff66919ce..59124a79cd 100755 --- a/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php +++ b/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php @@ -156,6 +156,32 @@ class LanguagesManagerTest extends \PHPUnit_Framework_TestCase } /** + * check all english translations do not contain unescaped % symbols + * + * @group Plugins + * @group numbered2 + */ + function testTranslationsUseEscapedPercentSigns() + { + Cache::flushAll(); + $translator = StaticContainer::get('Piwik\Translation\Translator'); + $translator->reset(); + Translate::loadAllTranslations(); + $translations = $translator->getAllTranslations(); + foreach ($translations AS $plugin => $pluginTranslations) { + if ($plugin == 'Intl') { + continue; // skip generated stuff + } + foreach ($pluginTranslations as $key => $pluginTranslation) { + $pluginTranslation = preg_replace('/(%(?:[1-9]\$)?[a-z])/', '', $pluginTranslation); // remove placeholders + $pluginTranslation = str_replace('%%', '', $pluginTranslation); // remove already escaped symbols + $this->assertEquals(0, substr_count($pluginTranslation, '%'), + sprintf('%s.%s must use escaped %% symbols', $plugin, $key)); + } + } + } + + /** * test English short name for language * * @group Plugins diff --git a/plugins/Marketplace/Widgets/GetNewPlugins.php b/plugins/Marketplace/Widgets/GetNewPlugins.php index 6079c1a8e8..8ffc54b856 100644 --- a/plugins/Marketplace/Widgets/GetNewPlugins.php +++ b/plugins/Marketplace/Widgets/GetNewPlugins.php @@ -10,6 +10,7 @@ namespace Piwik\Plugins\Marketplace\Widgets; use Piwik\Common; use Piwik\Plugins\Marketplace\Api\Client; +use Piwik\Plugins\Marketplace\Input\PurchaseType; use Piwik\Plugins\Marketplace\Input\Sort; use Piwik\Widget\Widget; use Piwik\Widget\WidgetConfig; @@ -43,7 +44,7 @@ class GetNewPlugins extends Widget $template = 'getNewPlugins'; } - $plugins = $this->marketplaceApiClient->searchForPlugins('', '', Sort::METHOD_LAST_UPDATED, ''); + $plugins = $this->marketplaceApiClient->searchForPlugins('', '', Sort::METHOD_LAST_UPDATED, PurchaseType::TYPE_ALL); return $this->renderTemplate($template, array( 'plugins' => array_splice($plugins, 0, 3) diff --git a/plugins/Marketplace/Widgets/GetPremiumFeatures.php b/plugins/Marketplace/Widgets/GetPremiumFeatures.php new file mode 100644 index 0000000000..4e777a218f --- /dev/null +++ b/plugins/Marketplace/Widgets/GetPremiumFeatures.php @@ -0,0 +1,56 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\Marketplace\Widgets; + +use Piwik\Common; +use Piwik\Piwik; +use Piwik\Plugin; +use Piwik\Plugins\Marketplace\Api\Client; +use Piwik\Plugins\Marketplace\Input\PurchaseType; +use Piwik\Plugins\Marketplace\Input\Sort; +use Piwik\Widget\Widget; +use Piwik\Widget\WidgetConfig; + +class GetPremiumFeatures extends Widget +{ + /** + * @var Client + */ + private $marketplaceApiClient; + + public function __construct(Client $marketplaceApiClient) + { + $this->marketplaceApiClient = $marketplaceApiClient; + } + + public static function configure(WidgetConfig $config) + { + $config->setCategoryId('About Piwik'); + $config->setName(Piwik::translate('Marketplace_PaidPlugins')); + $config->setOrder(20); + } + + public function render() + { + $template = 'getPremiumFeatures'; + + $plugins = $this->marketplaceApiClient->searchForPlugins('', '', Sort::METHOD_LAST_UPDATED, PurchaseType::TYPE_PAID); + + if (empty($plugins)) { + $plugins = array(); + } else { + $plugins = array_splice($plugins, 0, 20); + } + + return $this->renderTemplate($template, array( + 'plugins' => $plugins + )); + } + +}
\ No newline at end of file diff --git a/plugins/Marketplace/stylesheets/marketplace-widget.less b/plugins/Marketplace/stylesheets/marketplace-widget.less index 3438983825..33508cdb24 100644 --- a/plugins/Marketplace/stylesheets/marketplace-widget.less +++ b/plugins/Marketplace/stylesheets/marketplace-widget.less @@ -4,6 +4,25 @@ } } +.getPremiumFeatures { + h3 { + margin-top: 0; + } + .pluginBody { + margin-bottom: 32px; + display: inline-block; + + .pluginMoreDetails { + line-height:3em; + } + } + + .row { + margin-left: -12px; + margin-right: -12px; + } +} + .getNewPlugins { .pluginName { cursor: pointer; diff --git a/plugins/Marketplace/templates/getNewPlugins.twig b/plugins/Marketplace/templates/getNewPlugins.twig index 0c68e552e3..9808a72ce6 100644 --- a/plugins/Marketplace/templates/getNewPlugins.twig +++ b/plugins/Marketplace/templates/getNewPlugins.twig @@ -3,7 +3,7 @@ {% for plugin in plugins %} <div class="col s12"> - <h3 class="pluginName" piwik-plugin-name="{{ plugin.name|e('html_attr') }}">{{ plugin.name }}</h3> + <h3 class="pluginName" piwik-plugin-name="{{ plugin.name|e('html_attr') }}">{{ plugin.displayName }}</h3> <span> {{ plugin.description }} <br /> @@ -16,7 +16,7 @@ </div> <div class="widgetBody"> - <a href="{{ linkTo({'module': 'CorePluginsAdmin', 'action': 'marketplace'}) }}" + <a href="{{ linkTo({'module': 'Marketplace', 'action': 'overview'}) }}" >{{ 'CorePluginsAdmin_ViewAllMarketplacePlugins'|translate }}</a> </div> </div>
\ No newline at end of file diff --git a/plugins/Marketplace/templates/getNewPluginsAdmin.twig b/plugins/Marketplace/templates/getNewPluginsAdmin.twig index b929a48430..1e3d60f647 100644 --- a/plugins/Marketplace/templates/getNewPluginsAdmin.twig +++ b/plugins/Marketplace/templates/getNewPluginsAdmin.twig @@ -5,7 +5,7 @@ <h3 class="pluginName" title="{{ plugin.description|e('html_attr') }}" - piwik-plugin-name="{{ plugin.name|e('html_attr') }}">{{ plugin.name }}</h3> + piwik-plugin-name="{{ plugin.name|e('html_attr') }}">{{ plugin.displayName }}</h3> <p class="description" title="{{ plugin.description|e('html_attr') }}">{{ plugin.description }}</p> @@ -20,7 +20,7 @@ </div> <div class="widgetBody"> - <a href="{{ linkTo({'module': 'CorePluginsAdmin', 'action': 'marketplace'}) }}" + <a href="{{ linkTo({'module': 'Marketplace', 'action': 'overview'}) }}" >{{ 'CorePluginsAdmin_ViewAllMarketplacePlugins'|translate }}</a> </div> diff --git a/plugins/Marketplace/templates/getPremiumFeatures.twig b/plugins/Marketplace/templates/getPremiumFeatures.twig new file mode 100644 index 0000000000..fa0fe83744 --- /dev/null +++ b/plugins/Marketplace/templates/getPremiumFeatures.twig @@ -0,0 +1,23 @@ +<div class="getNewPlugins getPremiumFeatures widgetBody"> + <div class="row"> + {% for plugin in plugins %} + <div class="col s12 m4"> + + <h3 class="pluginName" piwik-plugin-name="{{ plugin.name|e('html_attr') }}">{{ plugin.displayName }}</h3> + <span class="pluginBody"> + {{ plugin.description }} + <br /> + <a href="javascript:;" class="pluginMoreDetails" piwik-plugin-name="{{ plugin.name|e('html_attr') }}">{{ 'General_MoreDetails'|translate }}</a> + </span> + </div> + {% if loop.index % 3 == 0 %} + </div><div class="row"> + {% endif %} + {% endfor %} + </div> + + <div class="widgetBody"> + <a href="{{ linkTo({'module': 'Marketplace', 'action': 'overview', 'show': 'premium'}) }}" + >{{ 'CorePluginsAdmin_ViewAllMarketplacePlugins'|translate }}</a> + </div> +</div>
\ No newline at end of file diff --git a/plugins/SegmentEditor/javascripts/Segmentation.js b/plugins/SegmentEditor/javascripts/Segmentation.js index 28280a1a5d..7930ae8c0e 100644 --- a/plugins/SegmentEditor/javascripts/Segmentation.js +++ b/plugins/SegmentEditor/javascripts/Segmentation.js @@ -1278,28 +1278,7 @@ $(document).ready(function() { segmentDefinition = cleanupSegmentDefinition(segmentDefinition); segmentDefinition = encodeURIComponent(segmentDefinition); - if (piwikHelper.isAngularRenderingThePage()) { - - angular.element(document).injector().invoke(function ($location, $rootScope) { - var $search = $location.search(); - - if (segmentDefinition !== $search.segment) { - // eg when using back button the date might be actually already changed in the URL and we do not - // want to change the URL again - $search.segment = segmentDefinition.replace(/%$/, '%25').replace(/%([^\d].)/g, "%25$1"); - $location.search($search); - setTimeout(function () { - try { - $rootScope.$apply(); - } catch (e) {} - }, 1); - } - - }); - return false; - } else { - return broadcast.propagateNewPage('segment=' + segmentDefinition, true); - } + return broadcast.propagateNewPage('segment=' + segmentDefinition, true); }; this.changeSegmentList = function () {}; diff --git a/plugins/UsersManager/templates/userSettings.twig b/plugins/UsersManager/templates/userSettings.twig index 2824262acd..34a2b5a75a 100644 --- a/plugins/UsersManager/templates/userSettings.twig +++ b/plugins/UsersManager/templates/userSettings.twig @@ -109,7 +109,7 @@ <div piwik-content-block content-title="{{ 'UsersManager_TokenAuth'|translate|e('html_attr') }}"> - <pre piwik-select-on-focus id="token_auth_user">{{ userTokenAuth }}</pre> + <pre piwik-select-on-focus id="token_auth_user" piwik-show-sensitive-data="{{ userTokenAuth }}"></pre> <p>{{ 'UsersManager_TokenRegenerateLogoutWarning'|translate }}</p> <button class="btn btn-link" diff --git a/plugins/Widgetize/tests/System/WidgetTest.php b/plugins/Widgetize/tests/System/WidgetTest.php index af99759c77..e0ff947bf7 100644 --- a/plugins/Widgetize/tests/System/WidgetTest.php +++ b/plugins/Widgetize/tests/System/WidgetTest.php @@ -12,7 +12,6 @@ use Piwik\Container\StaticContainer; use Piwik\Http\ControllerResolver; use Piwik\Piwik; use Piwik\Plugins\API; -use Piwik\Plugins\Goals; use Piwik\Plugins\Widgetize\tests\Fixtures\WidgetizeFixture; use Piwik\Tests\Framework\TestCase\SystemTestCase; use Piwik\Widget\WidgetsList; @@ -993,6 +992,14 @@ class WidgetTest extends SystemTestCase 'action' => 'getNewPlugins', ), ), array ( + 'name' => 'Premium Features', + 'uniqueId' => 'widgetMarketplacegetPremiumFeatures', + 'parameters' => + array ( + 'module' => 'Marketplace', + 'action' => 'getPremiumFeatures', + ), + ), array ( 'name' => 'System Check', 'uniqueId' => 'widgetInstallationgetSystemCheck', 'parameters' => |