From 73f6d31089909cdbf4a3007d9a8bc3a0b67c7bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Prudil?= Date: Fri, 11 Jan 2019 09:17:05 +0100 Subject: [PATCH 01/13] Upgrade to Nette 3.0 --- composer.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index a616b2bf..d837de10 100644 --- a/composer.json +++ b/composer.json @@ -17,17 +17,17 @@ "issues": "https://github.com/kdyby/translation/issues" }, "require": { - "php": "^5.6 || ^7.0", + "php": ">=7.0", "kdyby/strict-objects": "^1.0", - "latte/latte": "^2.4.6@dev", - "nette/caching": "^2.5@dev", - "nette/di": "^2.4.10@dev", - "nette/finder": "^2.4.1@dev", - "nette/http": "^2.4.7@dev", - "nette/neon": "^2.4.2@dev", - "nette/php-generator": "^2.6.3@dev || ^3.0.1@dev", + "latte/latte": "^3.0@dev", + "nette/caching": "^3.0@dev", + "nette/di": "^3.0@dev", + "nette/finder": "^3.0@dev", + "nette/http": "^3.0@dev", + "nette/neon": "^3.0@dev", + "nette/php-generator": "^3.0.1@dev", "nette/reflection": "^2.4.2@dev", - "nette/utils": "^2.4.5@dev || ^3.0@dev", + "nette/utils": "^3.0@dev", "psr/log": "^1.0", "symfony/translation": "^3.4 || ^4.0", "symfony/config": "^3.4 || ^4.0" @@ -40,10 +40,10 @@ "symfony/yaml": "If you wanna store translations in YAML format - supports multiline strings." }, "require-dev": { - "nette/application": "^2.4.9@dev", - "nette/bootstrap": "^2.4.5@dev", - "nette/forms": "^2.4.6@dev", - "tracy/tracy": "^2.4.9@dev", + "nette/application": "^3.0@dev", + "nette/bootstrap": "^3.0@dev", + "nette/forms": "^3.0@dev", + "tracy/tracy": "^3.0@dev", "kdyby/console": "^2.7.1@dev", "kdyby/monolog": "^1.3.2@dev", "symfony/yaml": "^3.4 || ^4.0", From 58cedf5e6d7a224e252cebe54f7d731110a5b72d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Prudil?= Date: Fri, 11 Jan 2019 11:04:26 +0100 Subject: [PATCH 02/13] use current version of strict objects for testing --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d837de10..957bf655 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ }, "require": { "php": ">=7.0", - "kdyby/strict-objects": "^1.0", + "kdyby/strict-objects": "dev-master", "latte/latte": "^3.0@dev", "nette/caching": "^3.0@dev", "nette/di": "^3.0@dev", From 8dde4ab85b664929423a228e0537f5fef0d6f4fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Prudil?= Date: Fri, 11 Jan 2019 11:11:26 +0100 Subject: [PATCH 03/13] update: compatibility with nette 3 dependencies --- src/Caching/PhpFileStorage.php | 7 ++++- src/DI/TranslationExtension.php | 45 ++++++++++++++++++++------------- src/Diagnostics/Panel.php | 4 +-- src/Translator.php | 20 ++++++++------- 4 files changed, 46 insertions(+), 30 deletions(-) diff --git a/src/Caching/PhpFileStorage.php b/src/Caching/PhpFileStorage.php index e4b08013..4534d9ed 100644 --- a/src/Caching/PhpFileStorage.php +++ b/src/Caching/PhpFileStorage.php @@ -23,6 +23,11 @@ class PhpFileStorage extends \Nette\Caching\Storages\FileStorage implements \Net */ public $hint; + /** additional cache structure */ + private const + FILE = 'file', + HANDLE = 'handle'; + /** * Reads cache data from disk. * @@ -43,7 +48,7 @@ protected function readData($meta) * @param string $key * @return string */ - protected function getCacheFile($key) + protected function getCacheFile(string $key): string { $cacheKey = substr_replace( $key, diff --git a/src/DI/TranslationExtension.php b/src/DI/TranslationExtension.php index 929a8edc..bb832652 100644 --- a/src/DI/TranslationExtension.php +++ b/src/DI/TranslationExtension.php @@ -32,13 +32,13 @@ use Nette\Bridges\ApplicationLatte\ILatteFactory; use Nette\Configurator; use Nette\DI\Compiler; +use Nette\DI\Definitions\Definition; +use Nette\DI\Definitions\FactoryDefinition; use Nette\DI\Helpers; -use Nette\DI\ServiceDefinition; use Nette\DI\Statement; use Nette\PhpGenerator\ClassType as ClassTypeGenerator; use Nette\PhpGenerator\PhpLiteral; use Nette\Reflection\ClassType as ReflectionClassType; -use Nette\Utils\Callback; use Nette\Utils\Finder; use Nette\Utils\Validators; use Symfony\Component\Translation\Extractor\ChainExtractor; @@ -98,18 +98,22 @@ class TranslationExtension extends \Nette\DI\CompilerExtension public function __construct() { - $this->defaults['cache'] = new Statement($this->defaults['cache'], ['%tempDir%/cache']); + } public function loadConfiguration() { $this->loaders = []; - $builder = $this->getContainerBuilder(); + + $cacheDir = Helpers::expand('%tempDir%/cache', $builder->parameters); + $this->defaults['cache'] = new Statement($this->defaults['cache'], [dirname($cacheDir)]); + + $this->setConfig($this->defaults); $config = $this->getConfig(); $translator = $builder->addDefinition($this->prefix('default')) - ->setClass(KdybyTranslator::class, [$this->prefix('@userLocaleResolver')]) + ->setFactory(KdybyTranslator::class, [$this->prefix('@userLocaleResolver')]) ->addSetup('?->setTranslator(?)', [$this->prefix('@userLocaleResolver.param'), '@self']) ->addSetup('setDefaultLocale', [$config['default']]) ->addSetup('setLocaleWhitelist', [$config['whitelist']]); @@ -118,11 +122,12 @@ public function loadConfiguration() $translator->addSetup('setFallbackLocales', [$config['fallback']]); $catalogueCompiler = $builder->addDefinition($this->prefix('catalogueCompiler')) - ->setClass(CatalogueCompiler::class, self::filterArgs($config['cache'])); + ->setFactory(CatalogueCompiler::class, self::filterArgs($config['cache'])); if ($config['debugger'] && interface_exists(IBarPanel::class)) { + $appDir = Helpers::expand('%appDir%', $builder->parameters); $builder->addDefinition($this->prefix('panel')) - ->setClass(Panel::class, [dirname($builder->expand('%appDir%'))]) + ->setFactory(Panel::class, [dirname($appDir)]) ->addSetup('setLocaleWhitelist', [$config['whitelist']]); $translator->addSetup('?->register(?)', [$this->prefix('@panel'), '@self']); @@ -269,19 +274,22 @@ public function beforeCompile() $this->beforeCompileLogging($config); - $registerToLatte = function (ServiceDefinition $def) { - $def->addSetup('?->onCompile[] = function($engine) { ?::install($engine->getCompiler()); }', ['@self', new PhpLiteral(TranslateMacros::class)]); + /** @var Definition|FactoryDefinition $def */ + $registerToLatte = function (Definition $def) { + $def->getResultDefinition() + ->addSetup('?->onCompile[] = function($engine) { ?::install($engine->getCompiler()); }', ['@self', new PhpLiteral(TranslateMacros::class)]); - $def->addSetup('addProvider', ['translator', $this->prefix('@default')]) + $def->getResultDefinition() + ->addSetup('addProvider', ['translator', $this->prefix('@default')]) ->addSetup('addFilter', ['translate', [$this->prefix('@helpers'), 'translateFilterAware']]); }; $latteFactoryService = $builder->getByType(ILatteFactory::class); - if (!$latteFactoryService || !self::isOfType($builder->getDefinition($latteFactoryService)->getClass(), LatteEngine::class)) { + if (!$latteFactoryService || !self::isOfType($builder->getDefinition($latteFactoryService)->getType(), LatteEngine::class)) { $latteFactoryService = 'nette.latteFactory'; } - if ($builder->hasDefinition($latteFactoryService) && self::isOfType($builder->getDefinition($latteFactoryService)->getClass(), LatteEngine::class)) { + if ($builder->hasDefinition($latteFactoryService) && self::isOfType($builder->getDefinition($latteFactoryService)->getType(), ILatteFactory::class)) { $registerToLatte($builder->getDefinition($latteFactoryService)); } @@ -341,11 +349,12 @@ public function beforeCompile() $config['dirs'] = array_merge($config['dirs'], array_values($extension->getTranslationResources())); } - $config['dirs'] = array_map(function ($dir) { - return str_replace((DIRECTORY_SEPARATOR === '/') ? '\\' : '/', DIRECTORY_SEPARATOR, $dir); + $config['dirs'] = array_map(function ($dir) use ($builder) { + $path = Helpers::expand($dir, $builder->parameters); + return str_replace((DIRECTORY_SEPARATOR === '/') ? '\\' : '/', DIRECTORY_SEPARATOR, $path); }, $config['dirs']); - $dirs = array_values(array_filter($config['dirs'], Callback::closure('is_dir'))); + $dirs = array_values(array_filter($config['dirs'], \Closure::fromCallable('is_dir'))); if (count($dirs) > 0) { foreach ($dirs as $dir) { $builder->addDependency($dir); @@ -420,7 +429,7 @@ protected function validateResource($format, $file, $locale, $domain) try { $def = $builder->getDefinition($this->loaders[$format]); - $refl = ReflectionClassType::from($def->getEntity() ?: $def->getClass()); + $refl = ReflectionClassType::from($def->getEntity() ?: $def->getType()); $method = $refl->getConstructor(); if ($method !== NULL && $method->getNumberOfRequiredParameters() > 1) { return; @@ -454,9 +463,9 @@ public function afterCompile(ClassTypeGenerator $class) /** * {@inheritdoc} */ - public function getConfig(array $defaults = NULL, $expand = TRUE) + public function getConfig(): array { - return parent::getConfig($this->defaults) + ['fallback' => ['en_US']]; + return parent::getConfig() + ['fallback' => ['en_US']]; } private function isRegisteredConsoleExtension() diff --git a/src/Diagnostics/Panel.php b/src/Diagnostics/Panel.php index b10afbdf..29060028 100644 --- a/src/Diagnostics/Panel.php +++ b/src/Diagnostics/Panel.php @@ -80,7 +80,7 @@ public function __construct($rootDir) * * @return string */ - public function getTab() + public function getTab(): ?string { return '' . $this->translator->getLocale() . ($this->untranslated ? ' (' . count(array_unique($this->untranslated, SORT_REGULAR)) . ' errors)' : '') @@ -92,7 +92,7 @@ public function getTab() * * @return string */ - public function getPanel() + public function getPanel(): ?string { $h = 'htmlSpecialChars'; diff --git a/src/Translator.php b/src/Translator.php index d7ff0e84..f15d8793 100644 --- a/src/Translator.php +++ b/src/Translator.php @@ -121,23 +121,25 @@ public function injectPsrLogger(LoggerInterface $logger = NULL) * Translates the given string. * * @param string|\Kdyby\Translation\Phrase|mixed $message The message id - * @param int|array|NULL $count The number to use to find the indice of the message * @param string|array|NULL $parameters An array of parameters for the message - * @param string|NULL $domain The domain for the message - * @param string|NULL $locale The locale * @throws \InvalidArgumentException * @return string|\Nette\Utils\IHtmlString|\Latte\Runtime\IHtmlString */ - public function translate($message, $count = NULL, $parameters = [], $domain = NULL, $locale = NULL) + public function translate($message, ...$parameters): string { if ($message instanceof Phrase) { return $message->translate($this); } + $count = isset($parameters[0]) ? $parameters[0] : NULL; + $params = isset($parameters[1]) ? $parameters[1] : []; + $domain = isset($parameters[2]) ? $parameters[2] : NULL; + $locale = isset($parameters[3]) ? $parameters[3] : NULL; + if (is_array($count)) { $locale = ($domain !== NULL) ? (string) $domain : NULL; $domain = ($parameters !== NULL && !empty($parameters)) ? (string) $parameters : NULL; - $parameters = $count; + $params = $count; $count = NULL; } @@ -168,16 +170,16 @@ public function translate($message, $count = NULL, $parameters = [], $domain = N } $tmp = []; - foreach ($parameters as $key => $val) { + foreach ($params as $key => $val) { $tmp['%' . trim($key, '%') . '%'] = $val; } - $parameters = $tmp; + $params = $tmp; if ($count !== NULL && is_scalar($count)) { - return $this->transChoice($message, $count, $parameters + ['%count%' => $count], $domain, $locale); + return $this->transChoice($message, $count, $params + ['%count%' => $count], $domain, $locale); } - return $this->trans($message, $parameters, $domain, $locale); + return $this->trans($message, $params, $domain, $locale); } /** From 9a9c955fb83c29905ab7b3faa3f6d208cf3d21fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Mon, 11 Mar 2019 15:04:35 +0100 Subject: [PATCH 04/13] Update .travis.yml --- .travis.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index a0316f49..0a4bf62e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,10 +7,9 @@ cache: - $HOME/.composer/cache php: - - 5.6 - - 7.0 - 7.1 - 7.2 + - 7.3 env: - # dev @@ -20,14 +19,14 @@ env: matrix: fast_finish: true include: - - php: 7.2 + - php: 7.3 env: COMPOSER_EXTRA_ARGS="--prefer-stable" COVERAGE="--coverage ./coverage.xml --coverage-src ./src" TESTER_RUNTIME="phpdbg" - - php: 7.2 + - php: 7.3 env: COMPOSER_EXTRA_ARGS="--prefer-stable" PHPSTAN=1 - - php: 7.2 + - php: 7.3 env: COMPOSER_EXTRA_ARGS="--prefer-stable" CODING_STANDARD=1 exclude: - - php: 7.2 + - php: 7.3 env: COMPOSER_EXTRA_ARGS="--prefer-stable" allow_failures: - env: From b8b7db406d7d1c54ac6280c2997dbeab2485b1f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Mon, 11 Mar 2019 15:08:14 +0100 Subject: [PATCH 05/13] increase minimal PHP version --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 957bf655..56ea90d9 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "issues": "https://github.com/kdyby/translation/issues" }, "require": { - "php": ">=7.0", + "php": ">=7.1", "kdyby/strict-objects": "dev-master", "latte/latte": "^3.0@dev", "nette/caching": "^3.0@dev", From 9ba61f094112683bd8cef5bdaf0fb2da25131667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Mon, 11 Mar 2019 15:11:23 +0100 Subject: [PATCH 06/13] Update composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 56ea90d9..8d637e22 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ }, "require": { "php": ">=7.1", - "kdyby/strict-objects": "dev-master", + "kdyby/strict-objects": "^1.0@dev", "latte/latte": "^3.0@dev", "nette/caching": "^3.0@dev", "nette/di": "^3.0@dev", From 60745e11b7449ca03ebb089c2fd9898fe503bae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Mon, 11 Mar 2019 15:15:45 +0100 Subject: [PATCH 07/13] Update composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 8d637e22..d1632cae 100644 --- a/composer.json +++ b/composer.json @@ -43,7 +43,7 @@ "nette/application": "^3.0@dev", "nette/bootstrap": "^3.0@dev", "nette/forms": "^3.0@dev", - "tracy/tracy": "^3.0@dev", + "tracy/tracy": "^2.4@dev", "kdyby/console": "^2.7.1@dev", "kdyby/monolog": "^1.3.2@dev", "symfony/yaml": "^3.4 || ^4.0", From 03df96d5c40ec3ee9ff8225f4fd843b889a79c19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Mon, 11 Mar 2019 15:24:32 +0100 Subject: [PATCH 08/13] Update composer.json --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index d1632cae..c92a447f 100644 --- a/composer.json +++ b/composer.json @@ -45,7 +45,6 @@ "nette/forms": "^3.0@dev", "tracy/tracy": "^2.4@dev", "kdyby/console": "^2.7.1@dev", - "kdyby/monolog": "^1.3.2@dev", "symfony/yaml": "^3.4 || ^4.0", "symfony/console": "^3.4 || ^4.0", "nette/tester": "^2.0", From 3f5464c047661d9b061fb9a23bd8f9838fba12e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Mon, 11 Mar 2019 15:27:08 +0100 Subject: [PATCH 09/13] Update composer.json --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index c92a447f..17248d8a 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,6 @@ "nette/bootstrap": "^3.0@dev", "nette/forms": "^3.0@dev", "tracy/tracy": "^2.4@dev", - "kdyby/console": "^2.7.1@dev", "symfony/yaml": "^3.4 || ^4.0", "symfony/console": "^3.4 || ^4.0", "nette/tester": "^2.0", From f3a7fccac7cdea1231e403fac8314171dce4c4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Fri, 22 Mar 2019 08:56:58 +0100 Subject: [PATCH 10/13] Revert "Update composer.json" This reverts commit 3f5464c047661d9b061fb9a23bd8f9838fba12e8. --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index 17248d8a..c92a447f 100644 --- a/composer.json +++ b/composer.json @@ -44,6 +44,7 @@ "nette/bootstrap": "^3.0@dev", "nette/forms": "^3.0@dev", "tracy/tracy": "^2.4@dev", + "kdyby/console": "^2.7.1@dev", "symfony/yaml": "^3.4 || ^4.0", "symfony/console": "^3.4 || ^4.0", "nette/tester": "^2.0", From 31840e239d164148145d711a75109af89e35593d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Fri, 22 Mar 2019 08:57:09 +0100 Subject: [PATCH 11/13] Revert "Update composer.json" This reverts commit 03df96d5c40ec3ee9ff8225f4fd843b889a79c19. --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index c92a447f..d1632cae 100644 --- a/composer.json +++ b/composer.json @@ -45,6 +45,7 @@ "nette/forms": "^3.0@dev", "tracy/tracy": "^2.4@dev", "kdyby/console": "^2.7.1@dev", + "kdyby/monolog": "^1.3.2@dev", "symfony/yaml": "^3.4 || ^4.0", "symfony/console": "^3.4 || ^4.0", "nette/tester": "^2.0", From 0e45b9f4bb8ba0d122a7b06dd0eec4cc090d6bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Fri, 22 Mar 2019 08:57:19 +0100 Subject: [PATCH 12/13] Revert "Update composer.json" This reverts commit 60745e11b7449ca03ebb089c2fd9898fe503bae0. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d1632cae..8d637e22 100644 --- a/composer.json +++ b/composer.json @@ -43,7 +43,7 @@ "nette/application": "^3.0@dev", "nette/bootstrap": "^3.0@dev", "nette/forms": "^3.0@dev", - "tracy/tracy": "^2.4@dev", + "tracy/tracy": "^3.0@dev", "kdyby/console": "^2.7.1@dev", "kdyby/monolog": "^1.3.2@dev", "symfony/yaml": "^3.4 || ^4.0", From ee46dbb033e3ad3f921de84a97b3551db73b1973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Fri, 22 Mar 2019 08:57:59 +0100 Subject: [PATCH 13/13] Revert "Update composer.json" This reverts commit 9ba61f094112683bd8cef5bdaf0fb2da25131667. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 8d637e22..56ea90d9 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ }, "require": { "php": ">=7.1", - "kdyby/strict-objects": "^1.0@dev", + "kdyby/strict-objects": "dev-master", "latte/latte": "^3.0@dev", "nette/caching": "^3.0@dev", "nette/di": "^3.0@dev",