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>2021-10-18 11:30:55 +0300
committerGitHub <noreply@github.com>2021-10-18 11:30:55 +0300
commit9826875e0eed5399d3512c6b65adcdc70c3dd600 (patch)
treea4397849acc1ca8455f592b462a3abf3bc379c90
parent76a120b95696545a2afc255f88e04b5530c5129e (diff)
Cache translated timezone name in enrichSite (#18168)
* Cache timezone name * fix tests * fix test
-rw-r--r--plugins/SitesManager/API.php43
-rw-r--r--plugins/SitesManager/tests/Integration/ApiTest.php6
2 files changed, 28 insertions, 21 deletions
diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php
index ba3a3c7362..666cada1cf 100644
--- a/plugins/SitesManager/API.php
+++ b/plugins/SitesManager/API.php
@@ -11,6 +11,7 @@ namespace Piwik\Plugins\SitesManager;
use DateTimeZone;
use Exception;
use Piwik\Access;
+use Piwik\CacheId;
use Piwik\Common;
use Piwik\Container\StaticContainer;
use Piwik\Date;
@@ -32,6 +33,7 @@ use Piwik\Tracker;
use Piwik\Tracker\Cache;
use Piwik\Tracker\TrackerCodeGenerator;
use Piwik\Measurable\Type;
+use Piwik\Translation\Translator;
use Piwik\Url;
use Piwik\UrlHelper;
use Piwik\DataAccess\Model as CoreModel;
@@ -75,15 +77,17 @@ class API extends \Piwik\Plugin\API
private $settingsMetadata;
/**
- * @var Type\TypeManager
+ * @var Translator
*/
- private $typeManager;
+ private $translator;
- public function __construct(SettingsProvider $provider, SettingsMetadata $settingsMetadata, Type\TypeManager $typeManager)
+ private $timezoneNameCache = [];
+
+ public function __construct(SettingsProvider $provider, SettingsMetadata $settingsMetadata, Translator $translator)
{
$this->settingsProvider = $provider;
$this->settingsMetadata = $settingsMetadata;
- $this->typeManager = $typeManager;
+ $this->translator = $translator;
}
/**
@@ -537,10 +541,15 @@ class API extends \Piwik\Plugin\API
private function enrichSite(&$site)
{
- $site['timezone_name'] = $this->getTimezoneName($site['timezone']);
+ $cacheKey = $site['timezone'] . $this->translator->getCurrentLanguage();
+ if (!isset($this->timezoneNameCache[$cacheKey])) {
+ //cached as this can be called VERY often and getTimezoneName is quite slow
+ $this->timezoneNameCache[$cacheKey] = $this->getTimezoneName($site['timezone']);
+ }
+ $site['timezone_name'] = $this->timezoneNameCache[$cacheKey];
$key = 'Intl_Currency_' . $site['currency'];
- $name = Piwik::translate($key);
+ $name = $this->translator->translate($key);
$site['currency_name'] = ($key === $name) ? $site['currency'] : $name;
@@ -788,7 +797,7 @@ class API extends \Piwik\Plugin\API
}
$nbSites = count($idSites);
if ($nbSites == 1) {
- throw new Exception(Piwik::translate("SitesManager_ExceptionDeleteSite"));
+ throw new Exception($this->translator->translate("SitesManager_ExceptionDeleteSite"));
}
$this->getModel()->deleteSite($idSite);
@@ -818,13 +827,13 @@ class API extends \Piwik\Plugin\API
}
}
}
- throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidTimezone', array($timezone)));
+ throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidTimezone', array($timezone)));
}
private function checkValidCurrency($currency)
{
if (!in_array($currency, array_keys($this->getCurrencyList()))) {
- throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidCurrency', array($currency, "USD, EUR, etc.")));
+ throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidCurrency', array($currency, "USD, EUR, etc.")));
}
}
@@ -861,7 +870,7 @@ class API extends \Piwik\Plugin\API
foreach ($ips as $ip) {
if (!$this->isValidIp($ip)) {
- throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidIPFormat', array($ip, "1.2.3.4, 1.2.3.*, or 1.2.3.4/5")));
+ throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidIPFormat', array($ip, "1.2.3.4, 1.2.3.*, or 1.2.3.4/5")));
}
}
@@ -1342,8 +1351,8 @@ class API extends \Piwik\Plugin\API
$return = array();
foreach (array_keys($currency) as $currencyCode) {
- $return[$currencyCode] = Piwik::translate('Intl_Currency_' . $currencyCode) .
- ' (' . Piwik::translate('Intl_CurrencySymbol_' . $currencyCode) . ')';
+ $return[$currencyCode] = $this->translator->translate('Intl_Currency_' . $currencyCode) .
+ ' (' . $this->translator->translate('Intl_CurrencySymbol_' . $currencyCode) . ')';
}
asort($return);
@@ -1399,7 +1408,7 @@ class API extends \Piwik\Plugin\API
$timezones = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $countryCode);
foreach ($timezones as $timezone) {
if (!isset($continents[$continentCode])) {
- $continents[$continentCode] = Piwik::translate('Intl_Continent_' . $continentCode);
+ $continents[$continentCode] = $this->translator->translate('Intl_Continent_' . $continentCode);
}
$continent = $continents[$continentCode];
@@ -1430,7 +1439,7 @@ class API extends \Piwik\Plugin\API
public function getTimezoneName($timezone, $countryCode = null, $multipleTimezonesInCountry = null)
{
if (substr($timezone, 0, 3) === 'UTC') {
- return Piwik::translate('SitesManager_Format_Utc', str_replace(array('.25', '.5', '.75'), array(':15', ':30', ':45'), substr($timezone, 3)));
+ return $this->translator->translate('SitesManager_Format_Utc', str_replace(array('.25', '.5', '.75'), array(':15', ':30', ':45'), substr($timezone, 3)));
}
if (!isset($countryCode)) {
@@ -1454,11 +1463,11 @@ class API extends \Piwik\Plugin\API
$multipleTimezonesInCountry = (count($timezonesInCountry) > 1);
}
- $return = Piwik::translate('Intl_Country_' . $countryCode);
+ $return = $this->translator->translate('Intl_Country_' . $countryCode);
if ($multipleTimezonesInCountry) {
$translationId = 'Intl_Timezone_' . str_replace(array('_', '/'), array('', '_'), $timezone);
- $city = Piwik::translate($translationId);
+ $city = $this->translator->translate($translationId);
// Fall back to English identifier, if translation is missing due to differences in tzdata in different PHP versions.
if ($city === $translationId) {
@@ -1555,7 +1564,7 @@ class API extends \Piwik\Plugin\API
private function checkName($siteName)
{
if (empty($siteName)) {
- throw new Exception(Piwik::translate("SitesManager_ExceptionEmptyName"));
+ throw new Exception($this->translator->translate("SitesManager_ExceptionEmptyName"));
}
}
diff --git a/plugins/SitesManager/tests/Integration/ApiTest.php b/plugins/SitesManager/tests/Integration/ApiTest.php
index d3ac952c09..3966c30c76 100644
--- a/plugins/SitesManager/tests/Integration/ApiTest.php
+++ b/plugins/SitesManager/tests/Integration/ApiTest.php
@@ -560,11 +560,9 @@ class ApiTest extends IntegrationTestCase
API::getInstance()->addSite("site2", array("http://piwik.com/test/"));
API::getInstance()->addSite("site3", array("http://piwik.org"), null, null, null, null, null, null, 'Asia/Tokyo');
- Fixture::loadAllTranslations();
-
$resultWanted = array(
- 0 => array("idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'UTC', 'timezone_name' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'US Dollar'),
- 1 => array("idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'Asia/Tokyo', 'timezone_name' => 'Japan', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'US Dollar'),
+ 0 => array("idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'UTC', 'timezone_name' => 'SitesManager_Format_Utc', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD'),
+ 1 => array("idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'Asia/Tokyo', 'timezone_name' => 'Intl_Country_JP', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD'),
);
FakeAccess::setIdSitesAdmin(array(1, 3));