X-Git-Url: https://git.rapsys.eu/.gitweb.cgi/packbundle/blobdiff_plain/17776777b454b6f000537267d327bdc28f8e2cd2..HEAD:/DependencyInjection/Configuration.php diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index d9b1b51..2f29209 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -11,19 +11,19 @@ namespace Rapsys\PackBundle\DependencyInjection; +use Rapsys\PackBundle\RapsysPackBundle; + use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\DependencyInjection\Container; use Symfony\Component\Process\ExecutableFinder; -use Rapsys\PackBundle\RapsysPackBundle; - /** - * This is the class that validates and merges configuration from your app/config files. + * {@inheritdoc} * - * @link http://symfony.com/doc/current/cookbook/bundles/configuration.html} + * This is the class that validates and merges configuration from your app/config files. * - * {@inheritdoc} + * @link http://symfony.com/doc/current/cookbook/bundles/configuration.html */ class Configuration implements ConfigurationInterface { /** @@ -38,19 +38,37 @@ class Configuration implements ConfigurationInterface { //The bundle default values $defaults = [ - 'config' => [ - 'name' => 'asset_url', - 'scheme' => 'https://', - 'timeout' => (int)ini_get('default_socket_timeout'), - 'agent' => (string)ini_get('user_agent')?:'rapsys_pack/0.2.0', - 'redirect' => 5 + //XXX: use a path relative to __DIR__ as console and index do not have the same execution directory + //XXX: use realpath on var/cache only as alias subdirectory may not yet exists + 'cache' => realpath(dirname(__DIR__).'/../../../var/cache').'/'.$alias, + 'captcha' => [ + 'background' => 'white', + 'fill' => '#cff', + 'format' => 'jpeg', + 'height' => 52, + 'size' => 45, + 'border' => '#00c3f9', + 'thickness' => 2, + 'width' => 192 + ], + 'context' => [ + 'http' => [ + 'max_redirects' => $_ENV['RAPSYSPACK_REDIRECT'] ?? 20, + 'timeout' => $_ENV['RAPSYSPACK_TIMEOUT'] ?? (($timeout = ini_get('default_socket_timeout')) !== false && $timeout !== '' ? (float)$timeout : 60), + 'user_agent' => $_ENV['RAPSYSPACK_AGENT'] ?? (($agent = ini_get('user_agent')) !== false && $agent !== '' ? (string)$agent : $alias.'/'.($version = RapsysPackBundle::getVersion())) + ] ], - #TODO: migrate to public.path, public.url and router->generateUrl ? - #XXX: that would means dropping the PathPackage stuff and use static route like rapsys_pack_facebook - 'output' => [ - 'css' => '@RapsysPack/css/*.pack.css', - 'js' => '@RapsysPack/js/*.pack.js', - 'img' => '@RapsysPack/img/*.pack.jpg' + 'facebook' => [ + 'align' => 'center', + 'fill' => 'white', + 'font' => 'default', + 'format' => 'jpeg', + 'height' => 630, + 'size' => 60, + 'source' => dirname(__DIR__).'/public/facebook/source.png', + 'border' => '#00c3f9', + 'thickness' => 15, + 'width' => 1200 ], 'filters' => [ 'css' => [ @@ -62,6 +80,12 @@ class Configuration implements ConfigurationInterface { ] ] ], + 'img' => [ + 0 => [ + 'class' => 'Rapsys\PackBundle\Filter\IPackFilter', + 'args' => [] + ] + ], 'js' => [ 0 => [ 'class' => 'Rapsys\PackBundle\Filter\JPackFilter', @@ -70,17 +94,85 @@ class Configuration implements ConfigurationInterface { 'best' ] ] - ], - 'img' => [ - 0 => [ - 'class' => 'Rapsys\PackBundle\Filter\IPackFilter', - 'args' => [] - ] - ], + ] + ], + 'fonts' => [ + 'default' => '/usr/share/fonts/TTF/dejavu/DejaVuSans.ttf', + #TODO: move these in veranda config ? with *: %rapsyspack.public%/woff2/*.woff2 ? + 'droidsans' => dirname(__DIR__).'/public/woff2/droidsans.regular.woff2', + 'droidsansb' => dirname(__DIR__).'/public/woff2/droidsans.bold.woff2', + 'droidsansi' => dirname(__DIR__).'/public/woff2/droidserif.italic.woff2', + 'droidsansm' => dirname(__DIR__).'/public/woff2/droidsansmono.regular.woff2', + 'droidserif' => dirname(__DIR__).'/public/woff2/droidserif.regular.woff2', + 'droidserifb' => dirname(__DIR__).'/public/woff2/droidserif.bold.woff2', + 'droidserifbi' => dirname(__DIR__).'/public/woff2/droidserif.bolditalic.woff2', + 'irishgrover' => dirname(__DIR__).'/public/woff2/irishgrover.v10.woff2', + 'lemon' => dirname(__DIR__).'/public/woff2/lemon.woff2', + 'notoemoji' => dirname(__DIR__).'/public/woff2/notoemoji.woff2' + ], + 'map' => [ + 'border' => '#00c3f9', + 'fill' => '#cff', + 'format' => 'jpeg', + 'height' => 640, + 'quality' => 70, + 'radius' => 5, + 'server' => 'osm', + 'thickness' => 2, + 'tz' => 256, + 'width' => 640, + 'zoom' => 17 + ], + 'multi' => [ + 'border' => '#00c3f9', + 'fill' => '#cff', + 'format' => 'jpeg', + 'height' => 640, + 'highborder' => '#3333c3', + 'highfill' => '#c3c3f9', + 'highradius' => 6, + 'highsize' => 30, + 'highthickness' => 4, + 'quality' => 70, + 'radius' => 5, + 'server' => 'osm', + 'size' => 20, + 'thickness' => 2, + 'tz' => 256, + 'width' => 640, + 'zoom' => 17 ], - 'public' => [ - 'path' => dirname(__DIR__).'/Resources/public', - 'url' => '/bundles/'.str_replace('_', '', $alias) + 'prefixes' => [ + 'captcha' => 'captcha', + 'css' => 'css', + 'facebook' => 'facebook', + 'img' => 'img', + 'map' => 'map', + 'multi' => 'multi', + 'pack' => 'pack', + 'thumb' => 'thumb', + 'js' => 'js' + ], + //XXX: use a path relative to __DIR__ as console and index do not have the same execution directory + 'public' => dirname(__DIR__).'/public', + 'routes' => [ + 'css' => 'rapsyspack_css', + 'img' => 'rapsyspack_img', + 'js' => 'rapsyspack_js' + ], + 'servers' => [ + 'cycle' => 'http://a.tile.thunderforest.com/cycle/{Z}/{X}/{Y}.png', + 'osm' => 'https://tile.openstreetmap.org/{Z}/{X}/{Y}.png', + 'transport' => 'http://a.tile.thunderforest.com/transport/{Z}/{X}/{Y}.png' + ], + 'thumb' => [ + 'height' => 128, + 'width' => 128 + ], + 'tokens' => [ + 'css' => 'asset', + 'img' => 'asset', + 'js' => 'asset' ] ]; @@ -91,30 +183,54 @@ class Configuration implements ConfigurationInterface { * @link http://symfony.com/doc/current/components/config/definition.html * @link https://github.com/symfony/assetic-bundle/blob/master/DependencyInjection/Configuration.php#L63 * - * @see php bin/console config:dump-reference rapsys_pack to dump default config - * @see php bin/console debug:config rapsys_pack to dump config + * @see bin/console config:dump-reference rapsyspack to dump default config + * @see bin/console debug:config rapsyspack to dump config */ $treeBuilder //Parameters ->getRootNode() ->addDefaultsIfNotSet() ->children() - ->arrayNode('config') + ->scalarNode('cache')->cannotBeEmpty()->defaultValue($defaults['cache'])->end() + ->arrayNode('captcha') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('background')->cannotBeEmpty()->defaultValue($defaults['captcha']['background'])->end() + ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['captcha']['fill'])->end() + ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['captcha']['format'])->end() + ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['captcha']['height'])->end() + ->scalarNode('size')->cannotBeEmpty()->defaultValue($defaults['captcha']['size'])->end() + ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['captcha']['border'])->end() + ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['captcha']['thickness'])->end() + ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['captcha']['width'])->end() + ->end() + ->end() + ->arrayNode('context') ->addDefaultsIfNotSet() ->children() - ->scalarNode('name')->cannotBeEmpty()->defaultValue($defaults['config']['name'])->end() - ->scalarNode('scheme')->cannotBeEmpty()->defaultValue($defaults['config']['scheme'])->end() - ->integerNode('timeout')->min(0)->max(300)->defaultValue($defaults['config']['timeout'])->end() - ->scalarNode('agent')->cannotBeEmpty()->defaultValue($defaults['config']['agent'])->end() - ->integerNode('redirect')->min(1)->max(30)->defaultValue($defaults['config']['redirect'])->end() + ->arrayNode('http') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('max_redirects')->defaultValue($defaults['context']['http']['max_redirects'])->end() + ->scalarNode('timeout')->defaultValue($defaults['context']['http']['timeout'])->end() + ->scalarNode('user_agent')->cannotBeEmpty()->defaultValue($defaults['context']['http']['user_agent'])->end() + ->end() + ->end() ->end() ->end() - ->arrayNode('output') + ->arrayNode('facebook') ->addDefaultsIfNotSet() ->children() - ->scalarNode('css')->cannotBeEmpty()->defaultValue($defaults['output']['css'])->end() - ->scalarNode('js')->cannotBeEmpty()->defaultValue($defaults['output']['js'])->end() - ->scalarNode('img')->cannotBeEmpty()->defaultValue($defaults['output']['img'])->end() + ->scalarNode('align')->cannotBeEmpty()->defaultValue($defaults['facebook']['align'])->end() + ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['facebook']['fill'])->end() + ->scalarNode('font')->cannotBeEmpty()->defaultValue($defaults['facebook']['font'])->end() + ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['facebook']['format'])->end() + ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['facebook']['height'])->end() + ->scalarNode('size')->cannotBeEmpty()->defaultValue($defaults['facebook']['size'])->end() + ->scalarNode('source')->cannotBeEmpty()->defaultValue($defaults['facebook']['source'])->end() + ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['facebook']['border'])->end() + ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['facebook']['thickness'])->end() + ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['facebook']['width'])->end() ->end() ->end() ->arrayNode('filters') @@ -143,7 +259,7 @@ class Configuration implements ConfigurationInterface { ->end() ->end() ->end() - ->arrayNode('js') + ->arrayNode('img') /** * Undocumented * @@ -155,17 +271,17 @@ class Configuration implements ConfigurationInterface { ->scalarNode('class') ->isRequired() ->cannotBeEmpty() - ->defaultValue($defaults['filters']['js'][0]['class']) + ->defaultValue($defaults['filters']['img'][0]['class']) ->end() ->arrayNode('args') ->treatNullLike([]) - ->defaultValue($defaults['filters']['js'][0]['args']) + ->defaultValue($defaults['filters']['img'][0]['args']) ->scalarPrototype()->end() ->end() ->end() ->end() ->end() - ->arrayNode('img') + ->arrayNode('js') /** * Undocumented * @@ -177,11 +293,11 @@ class Configuration implements ConfigurationInterface { ->scalarNode('class') ->isRequired() ->cannotBeEmpty() - ->defaultValue($defaults['filters']['img'][0]['class']) + ->defaultValue($defaults['filters']['js'][0]['class']) ->end() ->arrayNode('args') ->treatNullLike([]) - ->defaultValue($defaults['filters']['img'][0]['args']) + ->defaultValue($defaults['filters']['js'][0]['args']) ->scalarPrototype()->end() ->end() ->end() @@ -189,11 +305,81 @@ class Configuration implements ConfigurationInterface { ->end() ->end() ->end() - ->arrayNode('public') + ->arrayNode('fonts') + ->treatNullLike([]) + ->defaultValue($defaults['fonts']) + ->scalarPrototype()->end() + ->end() + ->arrayNode('map') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['map']['border'])->end() + ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['map']['fill'])->end() + ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['facebook']['format'])->end() + ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['map']['height'])->end() + ->scalarNode('quality')->cannotBeEmpty()->defaultValue($defaults['map']['quality'])->end() + ->scalarNode('radius')->cannotBeEmpty()->defaultValue($defaults['map']['radius'])->end() + ->scalarNode('server')->cannotBeEmpty()->defaultValue($defaults['map']['server'])->end() + ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['map']['thickness'])->end() + ->scalarNode('tz')->cannotBeEmpty()->defaultValue($defaults['map']['tz'])->end() + ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['map']['width'])->end() + ->scalarNode('zoom')->cannotBeEmpty()->defaultValue($defaults['map']['zoom'])->end() + ->end() + ->end() + ->arrayNode('multi') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['multi']['border'])->end() + ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['multi']['fill'])->end() + ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['facebook']['format'])->end() + ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['multi']['height'])->end() + ->scalarNode('highborder')->cannotBeEmpty()->defaultValue($defaults['multi']['highborder'])->end() + ->scalarNode('highfill')->cannotBeEmpty()->defaultValue($defaults['multi']['highfill'])->end() + ->scalarNode('highradius')->cannotBeEmpty()->defaultValue($defaults['multi']['highradius'])->end() + ->scalarNode('highsize')->cannotBeEmpty()->defaultValue($defaults['multi']['highsize'])->end() + ->scalarNode('highthickness')->cannotBeEmpty()->defaultValue($defaults['multi']['highthickness'])->end() + ->scalarNode('quality')->cannotBeEmpty()->defaultValue($defaults['multi']['quality'])->end() + ->scalarNode('radius')->cannotBeEmpty()->defaultValue($defaults['multi']['radius'])->end() + ->scalarNode('server')->cannotBeEmpty()->defaultValue($defaults['multi']['server'])->end() + ->scalarNode('size')->cannotBeEmpty()->defaultValue($defaults['multi']['size'])->end() + ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['multi']['thickness'])->end() + ->scalarNode('tz')->cannotBeEmpty()->defaultValue($defaults['multi']['tz'])->end() + ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['multi']['width'])->end() + ->scalarNode('zoom')->cannotBeEmpty()->defaultValue($defaults['multi']['zoom'])->end() + ->end() + ->end() + ->arrayNode('prefixes') + ->treatNullLike([]) + ->defaultValue($defaults['prefixes']) + ->scalarPrototype()->end() + ->end() + ->scalarNode('public')->cannotBeEmpty()->defaultValue($defaults['public'])->end() + ->arrayNode('routes') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('css')->cannotBeEmpty()->defaultValue($defaults['routes']['css'])->end() + ->scalarNode('img')->cannotBeEmpty()->defaultValue($defaults['routes']['img'])->end() + ->scalarNode('js')->cannotBeEmpty()->defaultValue($defaults['routes']['js'])->end() + ->end() + ->end() + ->arrayNode('servers') + ->treatNullLike([]) + ->defaultValue($defaults['servers']) + ->scalarPrototype()->end() + ->end() + ->arrayNode('thumb') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['thumb']['height'])->end() + ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['thumb']['width'])->end() + ->end() + ->end() + ->arrayNode('tokens') ->addDefaultsIfNotSet() ->children() - ->scalarNode('path')->cannotBeEmpty()->defaultValue($defaults['public']['path'])->end() - ->scalarNode('url')->cannotBeEmpty()->defaultValue($defaults['public']['url'])->end() + ->scalarNode('css')->cannotBeEmpty()->defaultValue($defaults['tokens']['css'])->end() + ->scalarNode('img')->cannotBeEmpty()->defaultValue($defaults['tokens']['img'])->end() + ->scalarNode('js')->cannotBeEmpty()->defaultValue($defaults['tokens']['js'])->end() ->end() ->end() ->end()