/**
  * @param array $options
  * @param Attribute[]|Collection $attributes
  * @param string $owner
  * @param string $ownerName
  * @return array
  * @throws InvalidParameterException
  */
 public function assemble(array $options, $attributes, $owner, $ownerName)
 {
     $this->setAttributes($attributes);
     $attributeFields = $this->getOption($options, 'attribute_fields', array());
     if (!is_array($attributeFields)) {
         throw new InvalidParameterException(sprintf('Option "form_options.attribute_fields" at %s "%s" must be an array.', $owner, $ownerName));
     }
     foreach (array_keys($attributeFields) as $attributeName) {
         $this->assertAttributeExists($attributeName, $owner, $ownerName);
     }
     if (!empty($options['attribute_default_values'])) {
         $value = $options['attribute_default_values'];
         if (!is_array($value)) {
             throw new InvalidParameterException(sprintf('Option "form_options.attribute_default_values" of %s "%s" must be an array.', $owner, $ownerName));
         }
         foreach (array_keys($value) as $attributeName) {
             $this->assertAttributeExists($attributeName, $owner, $ownerName);
             if (!isset($attributeFields[$attributeName])) {
                 throw new InvalidParameterException(sprintf('Form options of %s "%s" doesn\'t have attribute "%s" which is referenced in ' . '"attribute_default_values" option.', $owner, $ownerName, $attributeName));
             }
         }
         $options['attribute_default_values'] = $this->passConfiguration($value);
     }
     if (!empty($options['init_actions'])) {
         $options['init_actions'] = $this->actionFactory->create(ConfigurableAction::ALIAS, $options['init_actions']);
     }
     return $options;
 }
Example #2
0
 /**
  * Allowed formats:
  *
  * array(
  *     'conditions' => array(<condition_data>),
  *     'post_actions' => array(
  *         array(<first_post_action_data>),
  *         array(<second_post_action_data>),
  *         ...
  *     )
  * )
  *
  * or
  *
  * array(
  *     array(<first_post_action_data>),
  *     array(<second_post_action_data>),
  *     ...
  * )
  *
  * @param array $configuration
  * @return ActionInterface
  */
 public function assemble(array $configuration)
 {
     /** @var TreeExecutor $treeAction */
     $treeAction = $this->actionFactory->create(TreeExecutor::ALIAS, array(), $this->createConfigurableCondition($configuration));
     $actionsConfiguration = $this->getOption($configuration, self::ACTIONS_KEY, $configuration);
     foreach ($actionsConfiguration as $actionConfiguration) {
         if ($this->isService($actionConfiguration)) {
             $options = (array) $this->getEntityParameters($actionConfiguration);
             $breakOnFailure = $this->getOption($options, self::BREAK_ON_FAILURE_KEY, true);
             $actionType = $this->getEntityType($actionConfiguration);
             $serviceName = $this->getServiceName($actionType);
             if ($serviceName == TreeExecutor::ALIAS) {
                 $action = $this->assemble($options);
             } else {
                 $actionParameters = $this->getOption($options, self::PARAMETERS_KEY, $options);
                 $passedActionParameters = $this->passConfiguration($actionParameters);
                 $action = $this->actionFactory->create($serviceName, $passedActionParameters, $this->createConfigurableCondition($options));
             }
             $treeAction->addAction($action, $breakOnFailure);
         }
     }
     return $treeAction;
 }
 /**
  * @param string $name
  * @param array $options
  * @param array $definition
  * @param Step[]|ArrayCollection $steps
  * @param Attribute[]|Collection $attributes
  * @return Transition
  * @throws AssemblerException
  */
 protected function assembleTransition($name, array $options, array $definition, $steps, $attributes)
 {
     $this->assertOptions($options, array('step_to', 'label'));
     $stepToName = $options['step_to'];
     if (empty($steps[$stepToName])) {
         throw new AssemblerException(sprintf('Step "%s" not found', $stepToName));
     }
     $transition = new Transition();
     $transition->setName($name)->setLabel($options['label'])->setStepTo($steps[$stepToName])->setMessage($this->getOption($options, 'message', null))->setStart($this->getOption($options, 'is_start', false))->setHidden($this->getOption($options, 'is_hidden', false))->setUnavailableHidden($this->getOption($options, 'is_unavailable_hidden', false))->setFormType($this->getOption($options, 'form_type', WorkflowTransitionType::NAME))->setFormOptions($this->assembleFormOptions($options, $attributes, $name))->setFrontendOptions($this->getOption($options, 'frontend_options', array()));
     if (!empty($definition['pre_conditions'])) {
         $condition = $this->conditionFactory->create(ConfigurableCondition::ALIAS, $definition['pre_conditions']);
         $transition->setPreCondition($condition);
     }
     if (!empty($definition['conditions'])) {
         $condition = $this->conditionFactory->create(ConfigurableCondition::ALIAS, $definition['conditions']);
         $transition->setCondition($condition);
     }
     if (!empty($definition['post_actions'])) {
         $postAction = $this->actionFactory->create(ConfigurableAction::ALIAS, $definition['post_actions']);
         $transition->setPostAction($postAction);
     }
     return $transition;
 }