/** * @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; }
/** * 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; }