diff --git a/common.php b/common.php index 8b8e7ca5b..2d3d5b457 100644 --- a/common.php +++ b/common.php @@ -32,6 +32,11 @@ require_once(BB_ROOT . 'library/config.php'); $di = new \TorrentPier\Di(); +// Todo: Need refactoring. Get locale from settings +$di['settings.locale'] = function($di) { + return 'ru'; +}; + $di->register(new \TorrentPier\ServiceProviders\ConfigServiceProvider, [ 'config.file.system.main' => __DIR__ . '/library/config.php', 'config.file.local.main' => __DIR__ . '/library/config.local.php', @@ -47,6 +52,19 @@ $di->register(new \TorrentPier\ServiceProviders\SphinxServiceProvider, [ $di->register(new \TorrentPier\ServiceProviders\RequestServiceProvider()); $di->register(new \TorrentPier\ServiceProviders\ResponseServiceProvider()); +$di->register(new \TorrentPier\ServiceProviders\ViewServiceProvider()); + +$di->register(new \TorrentPier\ServiceProviders\TranslationServiceProvider(), [ + 'config.debug' => $di->config->debug, + 'config.translator.dir_cache' => $di->config->translator->dir_cache, + 'config.translator.resources' => $di->config->translator->resources->toArray() +]); + +$di->register(new \TorrentPier\ServiceProviders\TwigServiceProvider, [ + 'config.debug' => $di->config->debug, + 'config.twig.dir_templates' => $di->config->twig->dir_templates, + 'config.twig.dir_cache' => $di->config->twig->dir_cache +]); $bb_cfg = $di->config->toArray(); $page_cfg = $di->config->page->toArray(); diff --git a/composer.json b/composer.json index a8f426b7e..1705735cd 100644 --- a/composer.json +++ b/composer.json @@ -41,7 +41,10 @@ "zendframework/zend-loader": "^2.5", "zendframework/zend-mail": "^2.5", "zendframework/zend-session": "^2.5", - "symfony/http-foundation": "^3.0" + "zendframework/zend-version": "^2.5", + "symfony/http-foundation": "^3.0", + "symfony/twig-bridge": "^3.0", + "symfony/translation": "^3.0" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 21e925000..a87e3263f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "89808e4ea1b75346cb4ffef6d5914f61", - "content-hash": "63ad8bc4e6a64502c06506b1a6c06eaf", + "hash": "55b301829d57b3e0fabb18338b01851a", + "content-hash": "644fde5761c162d141491f1a3c97513c", "packages": [ { "name": "container-interop/container-interop", @@ -293,6 +293,210 @@ "homepage": "https://symfony.com", "time": "2016-02-02 13:44:19" }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "1289d16209491b584839022f29257ad859b8532d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", + "reference": "1289d16209491b584839022f29257ad859b8532d", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-01-20 09:13:37" + }, + { + "name": "symfony/translation", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "2de0b6f7ebe43cffd8a06996ebec6aab79ea9e91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/2de0b6f7ebe43cffd8a06996ebec6aab79ea9e91", + "reference": "2de0b6f7ebe43cffd8a06996ebec6aab79ea9e91", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<2.8" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0", + "symfony/intl": "~2.8|~3.0", + "symfony/yaml": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2016-02-02 13:44:19" + }, + { + "name": "symfony/twig-bridge", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "9f25144b9dabd772bede30aaee3a27e52af05784" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/9f25144b9dabd772bede30aaee3a27e52af05784", + "reference": "9f25144b9dabd772bede30aaee3a27e52af05784", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "twig/twig": "~1.23|~2.0" + }, + "require-dev": { + "symfony/asset": "~2.8|~3.0", + "symfony/console": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/finder": "~2.8|~3.0", + "symfony/form": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "~2.8|~3.0", + "symfony/security": "~2.8|~3.0", + "symfony/security-acl": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0", + "symfony/templating": "~2.8|~3.0", + "symfony/translation": "~2.8|~3.0", + "symfony/var-dumper": "~2.8|~3.0", + "symfony/yaml": "~2.8|~3.0" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security": "For using the SecurityExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/templating": "For using the TwigEngine", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "time": "2016-01-30 16:03:33" + }, { "name": "twbs/bootstrap", "version": "v4.0.0-alpha.2", @@ -1390,6 +1594,56 @@ "zf2" ], "time": "2015-09-03 19:06:11" + }, + { + "name": "zendframework/zend-version", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-version.git", + "reference": "e30c55dc394eaf396f0347887af0a7bef471fe08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-version/zipball/e30c55dc394eaf396f0347887af0a7bef471fe08", + "reference": "e30c55dc394eaf396f0347887af0a7bef471fe08", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-json": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-http": "~2.5" + }, + "suggest": { + "zendframework/zend-http": "Allows use of Zend\\Http\\Client to check version information", + "zendframework/zend-json": "To check latest version hosted in GitHub" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Version\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-version", + "keywords": [ + "version", + "zf2" + ], + "time": "2015-06-04 15:41:05" } ], "packages-dev": [], diff --git a/library/config.php b/library/config.php index 8cc6ba3e5..c0e8da68f 100644 --- a/library/config.php +++ b/library/config.php @@ -7,6 +7,8 @@ $domain_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $do $config = [ + 'debug' => true, + // Increase number after changing js or css 'js_ver' => 1, 'css_ver' => 1, @@ -26,6 +28,7 @@ $config = [ 'charset' => 'utf8' ], + // Sphinx 'sphinx' => [ 'driver' => 'Pdo_Mysql', 'hostname' => 'localhost', @@ -35,6 +38,24 @@ $config = [ 'charset' => 'utf8' ], + // Twig + 'twig' => [ + 'dir_templates' => __DIR__ . '/../styles/templates/default', + 'dir_cache' => __DIR__ . '/../internal_data/cache', + ], + + // Translation + 'translator' => [ + 'dir_cache' => __DIR__ . '/../internal_data/cache', + 'resources' => [ + [ + 'resource' => __DIR__ . '/../messages/ru.php', + 'locale' => 'ru', + 'domain' => null, + ] + ] + ], + // Aliases // TODO: удалить 'db_alias' => [ @@ -496,4 +517,4 @@ else } } -return $config; \ No newline at end of file +return $config; diff --git a/messages/ru.php b/messages/ru.php new file mode 100644 index 000000000..f6cb1ae7a --- /dev/null +++ b/messages/ru.php @@ -0,0 +1,7 @@ + 'Гид по стилю', +// 'Send' => 'Отправить', + 'Hello %name%' => 'Bonjour %name%', +]; \ No newline at end of file diff --git a/src/ServiceProviders/TranslationServiceProvider.php b/src/ServiceProviders/TranslationServiceProvider.php new file mode 100644 index 000000000..b860d10c7 --- /dev/null +++ b/src/ServiceProviders/TranslationServiceProvider.php @@ -0,0 +1,31 @@ +addLoader('php', new PhpFileLoader()); + + foreach ($container['config.translator.resources'] as $item) { + $translator->addResource('php', $item['resource'], $item['locale'], $item['domain']); + } + + return $translator; + }; + } +} \ No newline at end of file diff --git a/src/ServiceProviders/TwigServiceProvider.php b/src/ServiceProviders/TwigServiceProvider.php new file mode 100644 index 000000000..8607b850f --- /dev/null +++ b/src/ServiceProviders/TwigServiceProvider.php @@ -0,0 +1,30 @@ + $container['config.debug'], + 'cache' => $container['config.twig.dir_cache'] + ]); + + $twig->addExtension(new \Twig_Extension_Core); + $twig->addExtension(new \Twig_Extension_Escaper); + $twig->addExtension(new \Twig_Extension_Optimizer); + $twig->addExtension(new \Twig_Extension_Debug); + + $twig->addExtension(new TranslationExtension($container['translator'])); + + return $twig; + }; + } +} \ No newline at end of file diff --git a/src/ServiceProviders/ViewServiceProvider.php b/src/ServiceProviders/ViewServiceProvider.php new file mode 100644 index 000000000..250a50e71 --- /dev/null +++ b/src/ServiceProviders/ViewServiceProvider.php @@ -0,0 +1,17 @@ +twig = $twig; + } + + /** + * @param $template + * @param array $params + * @return string + */ + public function make($template, $params = []) + { + return $this->twig->render($template . '.twig' , $params); + } +} \ No newline at end of file diff --git a/styleguide.php b/styleguide.php new file mode 100644 index 000000000..113c28a8b --- /dev/null +++ b/styleguide.php @@ -0,0 +1,21 @@ +session_start(); + +$di = \TorrentPier\Di::getInstance(); + +$content = $di->view->make('styleguide', [ + 'name' => $di->request->get('name', $user->data['username']) +]); + +/** @var \Symfony\Component\HttpFoundation\Response $response */ +$response = $di->response; + +$response->setContent($content); +$response->send(); diff --git a/styles/templates/default/styleguide.twig b/styles/templates/default/styleguide.twig new file mode 100644 index 000000000..34ebd3412 --- /dev/null +++ b/styles/templates/default/styleguide.twig @@ -0,0 +1,10 @@ +
{% trans with { '%name%': name|e } %}Hello %name%{% endtrans %}\ No newline at end of file