1 <?php 
declare(strict_types
=1); 
   4  * This file is part of the Rapsys PackBundle package. 
   6  * (c) Raphaël Gertz <symfony@rapsys.eu> 
   8  * For the full copyright and license information, please view the LICENSE 
   9  * file that was distributed with this source code. 
  12 namespace Rapsys\PackBundle\DependencyInjection
; 
  14 use Rapsys\PackBundle\RapsysPackBundle
; 
  16 use Symfony\Component\Config\Definition\Builder\TreeBuilder
; 
  17 use Symfony\Component\Config\Definition\ConfigurationInterface
; 
  18 use Symfony\Component\DependencyInjection\Container
; 
  19 use Symfony\Component\Process\ExecutableFinder
; 
  24  * This is the class that validates and merges configuration from your app/config files. 
  26  * @link http://symfony.com/doc/current/cookbook/bundles/configuration.html 
  28 class Configuration 
implements ConfigurationInterface 
{ 
  32         public function getConfigTreeBuilder(): TreeBuilder 
{ 
  33                 //Get TreeBuilder object 
  34                 $treeBuilder = new TreeBuilder($alias = RapsysPackBundle
::getAlias()); 
  36                 //Get ExecutableFinder object 
  37                 $finder = new ExecutableFinder(); 
  39                 //The bundle default values 
  41                         //XXX: use a path relative to __DIR__ as console and index do not have the same execution directory 
  42                         //XXX: use realpath on var/cache only as alias subdirectory may not yet exists 
  43                         'cache' => realpath(dirname(__DIR__
).'/../../../var/cache').'/'.$alias, 
  45                                 'background' => 'white', 
  50                                 'border' => '#00c3f9', 
  56                                         'max_redirects' => $_ENV['RAPSYSPACK_REDIRECT'] ?? 20, 
  57                                         'timeout' => $_ENV['RAPSYSPACK_TIMEOUT'] ?? (($timeout = ini_get('default_socket_timeout')) !== false && $timeout !== '' ? (float)$timeout : 60), 
  58                                         'user_agent' => $_ENV['RAPSYSPACK_AGENT'] ?? (($agent = ini_get('user_agent')) !== false && $agent !== '' ? (string)$agent : $alias.'/'.($version = RapsysPackBundle
::getVersion())) 
  68                                 'source' => dirname(__DIR__
).'/public/facebook/source.png', 
  69                                 'border' => '#00c3f9', 
  76                                                 'class' => 'Rapsys\PackBundle\Filter\CPackFilter', 
  78                                                         $finder->find('cpack', '/usr/local/bin/cpack'), 
  85                                                 'class' => 'Rapsys\PackBundle\Filter\IPackFilter', 
  91                                                 'class' => 'Rapsys\PackBundle\Filter\JPackFilter', 
  93                                                         $finder->find('jpack', '/usr/local/bin/jpack'), 
 100                                 'default' => '/usr/share/fonts/TTF/dejavu/DejaVuSans.ttf', 
 101                                 #TODO: move these in veranda config ? with *: %rapsyspack.public%/woff2/*.woff2 ? 
 102                                 'droidsans' => dirname(__DIR__
).'/public/woff2/droidsans.regular.woff2', 
 103                                 'droidsansb' => dirname(__DIR__
).'/public/woff2/droidsans.bold.woff2', 
 104                                 'droidsansi' => dirname(__DIR__
).'/public/woff2/droidserif.italic.woff2', 
 105                                 'droidsansm' => dirname(__DIR__
).'/public/woff2/droidsansmono.regular.woff2', 
 106                                 'droidserif' => dirname(__DIR__
).'/public/woff2/droidserif.regular.woff2', 
 107                                 'droidserifb' => dirname(__DIR__
).'/public/woff2/droidserif.bold.woff2', 
 108                                 'droidserifbi' => dirname(__DIR__
).'/public/woff2/droidserif.bolditalic.woff2', 
 109                                 'irishgrover' => dirname(__DIR__
).'/public/woff2/irishgrover.v10.woff2', 
 110                                 'lemon' => dirname(__DIR__
).'/public/woff2/lemon.woff2', 
 111                                 'notoemoji' => dirname(__DIR__
).'/public/woff2/notoemoji.woff2' 
 124                                 'border' => '#00c3f9', 
 137                                 'border' => '#00c3f9', 
 141                                 'highborder' => '#3333c3', 
 142                                 'highfill' => '#c3c3f9', 
 145                                 'highthickness' => 4, 
 156                                 'captcha' => 'captcha', 
 158                                 'facebook' => 'facebook', 
 166                         //XXX: use a path relative to __DIR__ as console and index do not have the same execution directory 
 167                         'public' => dirname(__DIR__
).'/public', 
 169                                 'css' => 'rapsyspack_css', 
 170                                 'img' => 'rapsyspack_img', 
 171                                 'js' => 'rapsyspack_js' 
 174                                 'cycle' => 'http://a.tile.thunderforest.com/cycle/{Z}/{X}/{Y}.png', 
 175                                 'osm' => 'https://tile.openstreetmap.org/{Z}/{X}/{Y}.png', 
 176                                 'transport' => 'http://a.tile.thunderforest.com/transport/{Z}/{X}/{Y}.png' 
 191                  * Defines parameters allowed to configure the bundle 
 193                  * @link https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php 
 194                  * @link http://symfony.com/doc/current/components/config/definition.html 
 195                  * @link https://github.com/symfony/assetic-bundle/blob/master/DependencyInjection/Configuration.php#L63 
 197                  * @see bin/console config:dump-reference rapsyspack to dump default config 
 198                  * @see bin/console debug:config rapsyspack to dump config 
 203                                 ->addDefaultsIfNotSet() 
 205                                         ->scalarNode('cache')->cannotBeEmpty()->defaultValue($defaults['cache'])->end() 
 206                                         ->arrayNode('captcha') 
 207                                                 ->addDefaultsIfNotSet() 
 209                                                         ->scalarNode('background')->cannotBeEmpty()->defaultValue($defaults['captcha']['background'])->end() 
 210                                                         ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['captcha']['fill'])->end() 
 211                                                         ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['captcha']['format'])->end() 
 212                                                         ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['captcha']['height'])->end() 
 213                                                         ->scalarNode('size')->cannotBeEmpty()->defaultValue($defaults['captcha']['size'])->end() 
 214                                                         ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['captcha']['border'])->end() 
 215                                                         ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['captcha']['thickness'])->end() 
 216                                                         ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['captcha']['width'])->end() 
 219                                         ->arrayNode('context') 
 220                                                 ->addDefaultsIfNotSet() 
 223                                                                 ->addDefaultsIfNotSet() 
 225                                                                         ->scalarNode('max_redirects')->defaultValue($defaults['context']['http']['max_redirects'])->end() 
 226                                                                         ->scalarNode('timeout')->defaultValue($defaults['context']['http']['timeout'])->end() 
 227                                                                         ->scalarNode('user_agent')->cannotBeEmpty()->defaultValue($defaults['context']['http']['user_agent'])->end() 
 232                                         ->arrayNode('facebook') 
 233                                                 ->addDefaultsIfNotSet() 
 235                                                         ->scalarNode('align')->cannotBeEmpty()->defaultValue($defaults['facebook']['align'])->end() 
 236                                                         ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['facebook']['fill'])->end() 
 237                                                         ->scalarNode('font')->cannotBeEmpty()->defaultValue($defaults['facebook']['font'])->end() 
 238                                                         ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['facebook']['format'])->end() 
 239                                                         ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['facebook']['height'])->end() 
 240                                                         ->scalarNode('size')->cannotBeEmpty()->defaultValue($defaults['facebook']['size'])->end() 
 241                                                         ->scalarNode('source')->cannotBeEmpty()->defaultValue($defaults['facebook']['source'])->end() 
 242                                                         ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['facebook']['border'])->end() 
 243                                                         ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['facebook']['thickness'])->end() 
 244                                                         ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['facebook']['width'])->end() 
 247                                         ->arrayNode('filters') 
 248                                                 ->addDefaultsIfNotSet() 
 254                                                                  * @see Symfony/Component/Config/Definition/Builder/ArrayNodeDefinition.php +513 
 256                                                                 ->addDefaultChildrenIfNoneSet() 
 259                                                                                 ->scalarNode('class') 
 262                                                                                         ->defaultValue($defaults['filters']['css'][0]['class']) 
 267                                                                                         ->defaultValue($defaults['filters']['css'][0]['args']) 
 268                                                                                         ->scalarPrototype()->end() 
 277                                                                  * @see Symfony/Component/Config/Definition/Builder/ArrayNodeDefinition.php +513 
 279                                                                 ->addDefaultChildrenIfNoneSet() 
 282                                                                                 ->scalarNode('class') 
 285                                                                                         ->defaultValue($defaults['filters']['img'][0]['class']) 
 289                                                                                         ->defaultValue($defaults['filters']['img'][0]['args']) 
 290                                                                                         ->scalarPrototype()->end() 
 299                                                                  * @see Symfony/Component/Config/Definition/Builder/ArrayNodeDefinition.php +513 
 301                                                                 ->addDefaultChildrenIfNoneSet() 
 304                                                                                 ->scalarNode('class') 
 307                                                                                         ->defaultValue($defaults['filters']['js'][0]['class']) 
 311                                                                                         ->defaultValue($defaults['filters']['js'][0]['args']) 
 312                                                                                         ->scalarPrototype()->end() 
 321                                                 ->defaultValue($defaults['fonts']) 
 322                                                 ->scalarPrototype()->end() 
 324                                         ->arrayNode('formats') 
 326                                                 ->defaultValue($defaults['formats']) 
 327                                                 ->scalarPrototype()->end() 
 330                                                 ->addDefaultsIfNotSet() 
 332                                                         ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['map']['border'])->end() 
 333                                                         ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['map']['fill'])->end() 
 334                                                         ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['facebook']['format'])->end() 
 335                                                         ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['map']['height'])->end() 
 336                                                         ->scalarNode('quality')->cannotBeEmpty()->defaultValue($defaults['map']['quality'])->end() 
 337                                                         ->scalarNode('radius')->cannotBeEmpty()->defaultValue($defaults['map']['radius'])->end() 
 338                                                         ->scalarNode('server')->cannotBeEmpty()->defaultValue($defaults['map']['server'])->end() 
 339                                                         ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['map']['thickness'])->end() 
 340                                                         ->scalarNode('tz')->cannotBeEmpty()->defaultValue($defaults['map']['tz'])->end() 
 341                                                         ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['map']['width'])->end() 
 342                                                         ->scalarNode('zoom')->cannotBeEmpty()->defaultValue($defaults['map']['zoom'])->end() 
 346                                                 ->addDefaultsIfNotSet() 
 348                                                         ->scalarNode('border')->cannotBeEmpty()->defaultValue($defaults['multi']['border'])->end() 
 349                                                         ->scalarNode('fill')->cannotBeEmpty()->defaultValue($defaults['multi']['fill'])->end() 
 350                                                         ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['facebook']['format'])->end() 
 351                                                         ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['multi']['height'])->end() 
 352                                                         ->scalarNode('highborder')->cannotBeEmpty()->defaultValue($defaults['multi']['highborder'])->end() 
 353                                                         ->scalarNode('highfill')->cannotBeEmpty()->defaultValue($defaults['multi']['highfill'])->end() 
 354                                                         ->scalarNode('highradius')->cannotBeEmpty()->defaultValue($defaults['multi']['highradius'])->end() 
 355                                                         ->scalarNode('highsize')->cannotBeEmpty()->defaultValue($defaults['multi']['highsize'])->end() 
 356                                                         ->scalarNode('highthickness')->cannotBeEmpty()->defaultValue($defaults['multi']['highthickness'])->end() 
 357                                                         ->scalarNode('quality')->cannotBeEmpty()->defaultValue($defaults['multi']['quality'])->end() 
 358                                                         ->scalarNode('radius')->cannotBeEmpty()->defaultValue($defaults['multi']['radius'])->end() 
 359                                                         ->scalarNode('server')->cannotBeEmpty()->defaultValue($defaults['multi']['server'])->end() 
 360                                                         ->scalarNode('size')->cannotBeEmpty()->defaultValue($defaults['multi']['size'])->end() 
 361                                                         ->scalarNode('thickness')->cannotBeEmpty()->defaultValue($defaults['multi']['thickness'])->end() 
 362                                                         ->scalarNode('tz')->cannotBeEmpty()->defaultValue($defaults['multi']['tz'])->end() 
 363                                                         ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['multi']['width'])->end() 
 364                                                         ->scalarNode('zoom')->cannotBeEmpty()->defaultValue($defaults['multi']['zoom'])->end() 
 367                                         ->arrayNode('prefixes') 
 369                                                 ->defaultValue($defaults['prefixes']) 
 370                                                 ->scalarPrototype()->end() 
 372                                         ->scalarNode('public')->cannotBeEmpty()->defaultValue($defaults['public'])->end() 
 373                                         ->arrayNode('routes') 
 374                                                 ->addDefaultsIfNotSet() 
 376                                                         ->scalarNode('css')->cannotBeEmpty()->defaultValue($defaults['routes']['css'])->end() 
 377                                                         ->scalarNode('img')->cannotBeEmpty()->defaultValue($defaults['routes']['img'])->end() 
 378                                                         ->scalarNode('js')->cannotBeEmpty()->defaultValue($defaults['routes']['js'])->end() 
 381                                         ->arrayNode('servers') 
 383                                                 ->defaultValue($defaults['servers']) 
 384                                                 ->scalarPrototype()->end() 
 387                                                 ->addDefaultsIfNotSet() 
 389                                                         ->scalarNode('height')->cannotBeEmpty()->defaultValue($defaults['thumb']['height'])->end() 
 390                                                         ->scalarNode('format')->cannotBeEmpty()->defaultValue($defaults['thumb']['format'])->end() 
 391                                                         ->scalarNode('width')->cannotBeEmpty()->defaultValue($defaults['thumb']['width'])->end() 
 394                                         ->arrayNode('tokens') 
 395                                                 ->addDefaultsIfNotSet() 
 397                                                         ->scalarNode('css')->cannotBeEmpty()->defaultValue($defaults['tokens']['css'])->end() 
 398                                                         ->scalarNode('img')->cannotBeEmpty()->defaultValue($defaults['tokens']['img'])->end() 
 399                                                         ->scalarNode('js')->cannotBeEmpty()->defaultValue($defaults['tokens']['js'])->end()