vendor/wearemarketing/ecommercebundle/DependencyInjection/Configuration.php line 221

Open in your IDE?
  1. <?php
  2. namespace WAM\Bundle\EcommerceBundle\DependencyInjection;
  3. use Symfony\Component\Config\Definition\Builder\TreeBuilder;
  4. use Symfony\Component\Config\Definition\ConfigurationInterface;
  5. use Symfony\Component\Config\Definition\NodeInterface;
  6. use WAM\Bundle\EcommerceBundle\Form\Type\CheckoutType;
  7. use WAM\Bundle\EcommerceBundle\Validator\PromocodeValidator;
  8. /**
  9.  * Class Configuration.
  10.  *
  11.  * @author Germán Figna <gfigna@wearemarketing.com>
  12.  */
  13. class Configuration implements ConfigurationInterface
  14. {
  15.     const ECOMMERCE_MAILING_TEMPLATE_NEW_CUSTOMER 'WAMEcommerceBundle:Mailing:newCustomer.email.twig';
  16.     const ECOMMERCE_MAILING_TEMPLATE_ORDER_PAID 'WAMEcommerceBundle:Mailing:order_paid.email.twig';
  17.     const ECOMMERCE_CART_SESSION_FIELD_NAME 'cart_id';
  18.     const ECOMMERCE_MODEL_MANAGER_NAME 'default';
  19.     const ECOMMERCE_ORM_ENABLED true;
  20.     const ECOMMERCE_PAYMENT_METHODS_FILTER 'wam_ecommerce.payment_methods_filter.service';
  21.     const ECOMMERCE_CHECKOUT_FORM CheckoutType::class;
  22.     const ECOMMERCE_PRICE_INCLUDE_TAXES_PARAM_NAME 'store.price_include_taxes';
  23.     const ECOMMERCE_PRICE_INCLUDES_TAXES true;
  24.     const ECOMMERCE_DEFAULT_TAX_PERCENT_PARAM_NAME 'store.default_tax_percent';
  25.     const ECOMMERCE_DEFAULT_TAX_PERCENT 21;
  26.     const ECOMMERCE_CURRENCY_PARAM_NAME 'store.currency';
  27.     const ECOMMERCE_CURRENCY 'EUR';
  28.     const ECOMMERCE_ORDER_NUMBER_DEFAULT 'ecommerce_order';
  29.     const WAM_PROMOCODE_VALIDATOR_CLASS PromocodeValidator::class;
  30.     /**
  31.      * Generates the configuration tree.
  32.      *
  33.      * @return NodeInterface
  34.      */
  35.     public function getConfigTreeBuilder()
  36.     {
  37.         $treeBuilder = new TreeBuilder('wam_ecommerce');
  38.         $treeBuilder->getRootNode()
  39.             ->children()
  40.                 ->scalarNode('order_number_sequence_name')
  41.                     ->cannotBeEmpty()
  42.                     ->defaultValue(self::ECOMMERCE_ORDER_NUMBER_DEFAULT)
  43.                 ->end()
  44.                 ->arrayNode('class')
  45.                     ->isRequired()
  46.                     ->children()
  47.                         ->scalarNode('customer')->isRequired()->cannotBeEmpty()->end()
  48.                         ->scalarNode('cart')->isRequired()->cannotBeEmpty()->end()
  49.                         ->scalarNode('cart_line')->isRequired()->cannotBeEmpty()->end()
  50.                         ->scalarNode('order')->isRequired()->cannotBeEmpty()->end()
  51.                         ->scalarNode('order_line')->isRequired()->cannotBeEmpty()->end()
  52.                         ->scalarNode('invoice')->isRequired()->cannotBeEmpty()->end()
  53.                         ->scalarNode('voucher')->isRequired()->cannotBeEmpty()->end()
  54.                         ->scalarNode('voucher_rule')->isRequired()->cannotBeEmpty()->end()
  55.                         ->scalarNode('address_billable')->isRequired()->cannotBeEmpty()->end()
  56.                         ->scalarNode('address_shippable')->isRequired()->cannotBeEmpty()->end()
  57.                         ->scalarNode('shipping_cost_rule')->isRequired()->cannotBeEmpty()->end()
  58.                         ->scalarNode('promocode')->isRequired()->cannotBeEmpty()->end()
  59.                         ->scalarNode('purchasable')->isRequired()->cannotBeEmpty()->end()
  60.                     ->end()
  61.                 ->end()
  62.                 ->append($this->addExtraFieldsNode())
  63.                 ->arrayNode('validator')
  64.                 ->addDefaultsIfNotSet()
  65.                     ->children()
  66.                         ->scalarNode('promocode')->cannotBeEmpty()->defaultValue(static::WAM_PROMOCODE_VALIDATOR_CLASS)->end()
  67.                     ->end()
  68.                 ->end()
  69.                 ->arrayNode('voucher_rules')
  70.                     ->prototype('array')
  71.                         ->children()
  72.                             ->scalarNode('key')->end()
  73.                             ->scalarNode('name')->end()
  74.                             ->scalarNode('class')->end()
  75.                         ->end()
  76.                     ->end()
  77.                 ->end()
  78.                 ->arrayNode('mailing')
  79.                     ->addDefaultsIfNotSet()
  80.                     ->children()
  81.                         ->scalarNode('from')
  82.                             ->defaultValue('develop@wearemarketing.com')
  83.                         ->end()
  84.                         ->arrayNode('notify')
  85.                             ->addDefaultsIfNotSet()
  86.                             ->children()
  87.                                 ->scalarNode('order_paid')->cannotBeEmpty()->defaultValue(false)->end()
  88.                                 ->scalarNode('new_customer')->cannotBeEmpty()->defaultValue(false)->end()
  89.                             ->end()
  90.                         ->end()
  91.                         ->arrayNode('template')
  92.                             ->addDefaultsIfNotSet()
  93.                             ->children()
  94.                                 ->scalarNode('order_paid')->cannotBeEmpty()->defaultValue(self::ECOMMERCE_MAILING_TEMPLATE_ORDER_PAID)->end()
  95.                                 ->scalarNode('new_customer')->cannotBeEmpty()->defaultValue(self::ECOMMERCE_MAILING_TEMPLATE_NEW_CUSTOMER)->end()
  96.                             ->end()
  97.                         ->end()
  98.                     ->end()
  99.                 ->end()
  100.                 ->scalarNode('model_manager_name')->cannotBeEmpty()->defaultValue(self::ECOMMERCE_MODEL_MANAGER_NAME)->end()
  101.                 ->scalarNode('payment_methods_filter')->cannotBeEmpty()->defaultValue(self::ECOMMERCE_PAYMENT_METHODS_FILTER)->end()
  102.                 ->arrayNode('excluded_cart_calculators')
  103.                     ->defaultValue([])
  104.                     ->prototype('scalar')->end()
  105.                 ->end()
  106.                 ->booleanNode('orm_enabled')->defaultValue(self::ECOMMERCE_ORM_ENABLED)->end()
  107.                 ->arrayNode('checkout')
  108.                     ->addDefaultsIfNotSet()
  109.                     ->children()
  110.                         ->scalarNode('form_type')->cannotBeEmpty()->defaultValue(self::ECOMMERCE_CHECKOUT_FORM)->end()
  111.                     ->end()
  112.                 ->end()
  113.             ->end()
  114.             ->children()
  115.                 ->arrayNode('cart')
  116.                     ->addDefaultsIfNotSet()
  117.                         ->children()
  118.                             ->scalarNode('save_in_session')
  119.                             ->defaultTrue()
  120.                         ->end()
  121.                             ->scalarNode('session_field_name')
  122.                             ->defaultValue(self::ECOMMERCE_CART_SESSION_FIELD_NAME)
  123.                         ->end()
  124.                     ->end()
  125.                 ->end()
  126.             ->end()
  127.             ->children()
  128.                 ->arrayNode('order_state_machine')
  129.                     ->addDefaultsIfNotSet()
  130.                     ->children()
  131.                         ->arrayNode('states')
  132.                             ->defaultValue(['pending_payment''paid''refunded'])
  133.                             ->prototype('scalar')->end()
  134.                         ->end()
  135.                     ->end()
  136.                     ->children()
  137.                         ->scalarNode('class')->end()
  138.                         ->arrayNode('transitions')
  139.                             ->useAttributeAsKey('name')
  140.                             ->prototype('array')
  141.                                 ->children()
  142.                                     ->arrayNode('from')
  143.                                         ->prototype('scalar')->end()
  144.                                     ->end()
  145.                                     ->scalarNode('to')->end()
  146.                                 ->end()
  147.                             ->end()
  148.                         ->end()
  149.                     ->end()
  150.                     ->children()
  151.                         ->arrayNode('callbacks')
  152.                         ->addDefaultsIfNotSet()
  153.                             ->children()
  154.                                 ->arrayNode('before')
  155.                                 ->useAttributeAsKey('name')
  156.                                     ->prototype('array')
  157.                                         ->children()
  158.                                             ->variableNode('on')->end()
  159.                                             ->variableNode('from')->end()
  160.                                             ->variableNode('to')->end()
  161.                                             ->variableNode('excluded_on')->end()
  162.                                             ->variableNode('excluded_from')->end()
  163.                                             ->variableNode('excluded_to')->end()
  164.                                             ->variableNode('do')->end()
  165.                                             ->scalarNode('disabled')->defaultValue(false)->end()
  166.                                             ->scalarNode('priority')->defaultValue(0)->end()
  167.                                             ->arrayNode('args')->performNoDeepMerging()->prototype('scalar')->end()
  168.                                         ->end()
  169.                                     ->end()
  170.                                 ->end()
  171.                             ->end()
  172.                             ->arrayNode('after')
  173.                                 ->useAttributeAsKey('name')
  174.                                     ->prototype('array')
  175.                                         ->children()
  176.                                             ->variableNode('on')->end()
  177.                                             ->variableNode('from')->end()
  178.                                             ->variableNode('to')->end()
  179.                                             ->variableNode('excluded_on')->end()
  180.                                             ->variableNode('excluded_from')->end()
  181.                                             ->variableNode('excluded_to')->end()
  182.                                             ->variableNode('do')->end()
  183.                                             ->scalarNode('disabled')->defaultValue(false)->end()
  184.                                             ->scalarNode('priority')->defaultValue(0)->end()
  185.                                             ->arrayNode('args')->performNoDeepMerging()->prototype('scalar')->end()
  186.                                         ->end()
  187.                                     ->end()
  188.                                 ->end()
  189.                             ->end()
  190.                         ->end()
  191.                     ->end()
  192.                 ->end()
  193.             ->end()
  194.         ->end();
  195.         return $treeBuilder;
  196.     }
  197.     /**
  198.      * Returns extra fields cofiguration's definition.
  199.      *
  200.      * @return \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition|\Symfony\Component\Config\Definition\Builder\NodeDefinition
  201.      */
  202.     private function addExtraFieldsNode()
  203.     {
  204.         $builder = new TreeBuilder();
  205.         $node $builder->root('extra_fields');
  206.         $node
  207.             ->useAttributeAsKey('name')
  208.             ->prototype('array')
  209.                 ->prototype('scalar')->end()
  210.             ->end()
  211.             ->end();
  212.         return $node;
  213.     }
  214. }