diff options
Diffstat (limited to 'src/NXP/RutilsBundle')
-rw-r--r-- | src/NXP/RutilsBundle/DependencyInjection/Configuration.php | 20 | ||||
-rw-r--r-- | src/NXP/RutilsBundle/DependencyInjection/nxpRutilsExtension.php | 28 | ||||
-rw-r--r-- | src/NXP/RutilsBundle/Resources/config/services.yml | 5 | ||||
-rw-r--r-- | src/NXP/RutilsBundle/Resources/doc/index.rst | 41 | ||||
-rw-r--r-- | src/NXP/RutilsBundle/Twig/RutilsExtension.php | 170 | ||||
-rw-r--r-- | src/NXP/RutilsBundle/nxpRutilsBundle.php | 9 |
6 files changed, 273 insertions, 0 deletions
diff --git a/src/NXP/RutilsBundle/DependencyInjection/Configuration.php b/src/NXP/RutilsBundle/DependencyInjection/Configuration.php new file mode 100644 index 0000000..45b3ca8 --- /dev/null +++ b/src/NXP/RutilsBundle/DependencyInjection/Configuration.php @@ -0,0 +1,20 @@ +<?php + +namespace nxp\RutilsBundle\DependencyInjection; + +use Symfony\Component\Config\Definition\Builder\TreeBuilder; +use Symfony\Component\Config\Definition\ConfigurationInterface; + +class Configuration implements ConfigurationInterface +{ + /** + * {@inheritDoc} + */ + public function getConfigTreeBuilder() + { + $treeBuilder = new TreeBuilder(); + $rootNode = $treeBuilder->root('rutils'); + + return $treeBuilder; + } +} diff --git a/src/NXP/RutilsBundle/DependencyInjection/nxpRutilsExtension.php b/src/NXP/RutilsBundle/DependencyInjection/nxpRutilsExtension.php new file mode 100644 index 0000000..2b2a39b --- /dev/null +++ b/src/NXP/RutilsBundle/DependencyInjection/nxpRutilsExtension.php @@ -0,0 +1,28 @@ +<?php + +namespace nxp\RutilsBundle\DependencyInjection; + +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\Config\FileLocator; +use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\DependencyInjection\Loader; + +/** + * This is the class that loads and manages your bundle configuration + * + * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} + */ +class nxpRutilsExtension extends Extension +{ + /** + * {@inheritDoc} + */ + public function load(array $configs, ContainerBuilder $container) + { + $configuration = new Configuration(); + $config = $this->processConfiguration($configuration, $configs); + + $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.yml'); + } +} diff --git a/src/NXP/RutilsBundle/Resources/config/services.yml b/src/NXP/RutilsBundle/Resources/config/services.yml new file mode 100644 index 0000000..431641b --- /dev/null +++ b/src/NXP/RutilsBundle/Resources/config/services.yml @@ -0,0 +1,5 @@ +services: + nxp.twig.rutils_extension: + class: nxp\RutilsBundle\Twig\RutilsExtension + tags: + - { name: twig.extension }
\ No newline at end of file diff --git a/src/NXP/RutilsBundle/Resources/doc/index.rst b/src/NXP/RutilsBundle/Resources/doc/index.rst new file mode 100644 index 0000000..4b94f4d --- /dev/null +++ b/src/NXP/RutilsBundle/Resources/doc/index.rst @@ -0,0 +1,41 @@ +Rutils Symfony 2 Bundle +======================= + +Простой бандл для Symfony 2 содержащий в себе расширение для Twig, позволяющее использовать функции из библиотеки RUtils_ в шаблонах. + +Допускается как вызов в стиле функций:: + + {{ getPlural(10, ['гвоздь', 'гвоздя', 'гвоздей']) }} + +так и в стиле фильтров:: + + {{ 10 | getPlural(['гвоздь', 'гвоздя', 'гвоздей']) }} + +Поддерживаются все методы библиотеки: + +Числительные:: + getInWords\2 - вывод числа прописью + getInWordsInt\2 - вывод числа прописью + getInWordsFloat\2 - вывод числа прописью + getPlural\3 - выбор формы множественного числа и вывод вместе с числом + choosePlural\2 - выбор только формы множественного числа + sumString\3 - выбор формы и вывод прописью + getRubles\2 - вывод суммы денег в рублях + +Даты:: + ruStrFTime\6 - вывод даты строкой + distanceOfTimeInWords\3 - временной период + getAge\1 - возраст + +Транслитерация:: + translify\1 - транслитерация + detranslify\1 - обратное преобразование + slugify\1 - подготовка для использования в URL'ях или путях + +Типографика:: + typography\2 + +TODO:: + написать нормальную документацию + +.. _RUtils: https://github.com/Andre-487/php_rutils/
\ No newline at end of file diff --git a/src/NXP/RutilsBundle/Twig/RutilsExtension.php b/src/NXP/RutilsBundle/Twig/RutilsExtension.php new file mode 100644 index 0000000..d4cf8c2 --- /dev/null +++ b/src/NXP/RutilsBundle/Twig/RutilsExtension.php @@ -0,0 +1,170 @@ +<?php +/** + * @author Alexander NeonXP Kiryukhin <frei@neonxp.info> + */ + +namespace nxp\RutilsBundle\Twig; + +use php_rutils\RUtils; +use php_rutils\struct\TimeParams; + +class RutilsExtension extends \Twig_Extension +{ + public function getFilters() + { + $numeral = RUtils::numeral(); + $date = RUtils::dt(); + $translit = RUtils::translit(); + $typography = RUtils::typo(); + return [ + new \Twig_SimpleFilter('getInWords', function ($amount, $gender = RUtils::MALE) use ($numeral) { + return $numeral->getInWords($amount, $gender); + }), + new \Twig_SimpleFilter('getInWordsInt', function ($amount, $gender = RUtils::MALE) use ($numeral) { + return $numeral->getInWordsInt($amount, $gender); + }), + new \Twig_SimpleFilter('getInWordsFloat', function ($amount, $gender = RUtils::MALE) use ($numeral) { + return $numeral->getInWordsFloat($amount, $gender); + }), + new \Twig_SimpleFilter('getPlural', function ($amount, array $variants, $absence = null) use ($numeral) { + return $numeral->getPlural($amount, $variants, $absence); + }), + new \Twig_SimpleFilter('choosePlural', function ($amount, array $variants) use ($numeral) { + return $numeral->choosePlural($amount, $variants); + }), + new \Twig_SimpleFilter('sumString', function ($amount, $gender, array $variants = null) use ($numeral) { + return $numeral->sumString($amount, $gender, $variants); + }), + new \Twig_SimpleFilter('getRubles', function ($amount, $zeroForKopeck = false) use ($numeral) { + return $numeral->getRubles($amount, $zeroForKopeck); + }), + new \Twig_SimpleFilter('ruStrFTime', function ( + \DateTime $dateTime, + $format = 'd F Y', + $monthInflected = false, + $dayInflected = false, + $preposition = false, + $timezone = null + ) use ($date) { + $params = TimeParams::create( + [ + 'date' => $dateTime, + 'format' => $format, + 'monthInflected' => $monthInflected, + 'dayInflected' => $dayInflected, + 'preposition' => $preposition, + 'timezone' => $timezone + ] + ); + return $date->ruStrFTime($params); + }), + new \Twig_SimpleFilter('distanceOfTimeInWords', function ( + $toTime, + $fromTime = null, + $accuracy = RUtils::ACCURACY_YEAR + ) use ($date) { + return $date->distanceOfTimeInWords($toTime, $fromTime, $accuracy); + }), + new \Twig_SimpleFilter('getAge', function ($birthDate) use ($date) { + return $date->getAge($birthDate); + }), + new \Twig_SimpleFilter('translify', function ($inString) use ($translit) { + return $translit->translify($inString); + }), + new \Twig_SimpleFilter('detranslify', function ($inString) use ($translit) { + return $translit->detranslify($inString); + }), + new \Twig_SimpleFilter('slugify', function ($inString) use ($translit) { + return $translit->slugify($inString); + }), + new \Twig_SimpleFilter('typography', function ($text, array $rules = null) use ($typography) { + return $typography->typography($text, $rules); + }) + ]; + } + + + public function getFunctions() + { + $numeral = RUtils::numeral(); + $date = RUtils::dt(); + $translit = RUtils::translit(); + $typography = RUtils::typo(); + return [ + new \Twig_SimpleFunction('getInWords', function ($amount, $gender = RUtils::MALE) use ($numeral) { + return $numeral->getInWords($amount, $gender); + }), + new \Twig_SimpleFunction('getInWordsInt', function ($amount, $gender = RUtils::MALE) use ($numeral) { + return $numeral->getInWordsInt($amount, $gender); + }), + new \Twig_SimpleFunction('getInWordsFloat', function ($amount, $gender = RUtils::MALE) use ($numeral) { + return $numeral->getInWordsFloat($amount, $gender); + }), + new \Twig_SimpleFunction('getPlural', function ($amount, array $variants, $absence = null) use ($numeral) { + return $numeral->getPlural($amount, $variants, $absence); + }), + new \Twig_SimpleFunction('choosePlural', function ($amount, array $variants) use ($numeral) { + return $numeral->choosePlural($amount, $variants); + }), + new \Twig_SimpleFunction('sumString', function ($amount, $gender, array $variants = null) use ($numeral) { + return $numeral->sumString($amount, $gender, $variants); + }), + new \Twig_SimpleFunction('getRubles', function ($amount, $zeroForKopeck = false) use ($numeral) { + return $numeral->getRubles($amount, $zeroForKopeck); + }), + new \Twig_SimpleFunction('ruStrFTime', function ( + \DateTime $dateTime, + $format = 'd F Y', + $monthInflected = false, + $dayInflected = false, + $preposition = false, + $timezone = null + ) use ($date) { + $params = TimeParams::create( + [ + 'date' => $dateTime, + 'format' => $format, + 'monthInflected' => $monthInflected, + 'dayInflected' => $dayInflected, + 'preposition' => $preposition, + 'timezone' => $timezone + ] + ); + return $date->ruStrFTime($params); + }), + new \Twig_SimpleFunction('distanceOfTimeInWords', function ( + $toTime, + $fromTime = null, + $accuracy = RUtils::ACCURACY_YEAR + ) use ($date) { + return $date->distanceOfTimeInWords($toTime, $fromTime, $accuracy); + }), + new \Twig_SimpleFunction('getAge', function ($birthDate) use ($date) { + return $date->getAge($birthDate); + }), + new \Twig_SimpleFunction('translify', function ($inString) use ($translit) { + return $translit->translify($inString); + }), + new \Twig_SimpleFunction('detranslify', function ($inString) use ($translit) { + return $translit->detranslify($inString); + }), + new \Twig_SimpleFunction('slugify', function ($inString) use ($translit) { + return $translit->slugify($inString); + }), + new \Twig_SimpleFunction('typography', function ($text, array $rules = null) use ($typography) { + return $typography->typography($text, $rules); + }) + ]; + } + + /** + * Returns the name of the extension. + * + * @return string The extension name + */ + public function getName() + { + return 'rutils_extension'; + } + +}
\ No newline at end of file diff --git a/src/NXP/RutilsBundle/nxpRutilsBundle.php b/src/NXP/RutilsBundle/nxpRutilsBundle.php new file mode 100644 index 0000000..a46734f --- /dev/null +++ b/src/NXP/RutilsBundle/nxpRutilsBundle.php @@ -0,0 +1,9 @@ +<?php + +namespace nxp\RutilsBundle; + +use Symfony\Component\HttpKernel\Bundle\Bundle; + +class nxpRutilsBundle extends Bundle +{ +} |