public function PoolAssignmentForm::buildForm in CMS Content Sync 2.1.x
Same name and namespace in other branches
- 8 src/Form/PoolAssignmentForm.php \Drupal\cms_content_sync\Form\PoolAssignmentForm::buildForm()
- 2.0.x src/Form/PoolAssignmentForm.php \Drupal\cms_content_sync\Form\PoolAssignmentForm::buildForm()
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides FormInterface::buildForm
File
- src/
Form/ PoolAssignmentForm.php, line 30
Class
Namespace
Drupal\cms_content_sync\FormCode
public function buildForm(array $form, FormStateInterface $form_state) {
$form['description'] = [
'#type' => 'item',
'#markup' => $this
->t('This form allows you to change a pool assignment within a Flow. You can change per Pool per Flow whether the assignment should be Allow, Force or Forbid across all entity types to make changing pool assignments faster than having to go through every entity type individually via the Flow edit form.'),
];
$form['wrapper'] = [
'#type' => 'container',
'#attributes' => [
'id' => 'form-wrapper',
],
];
$flow_id = $form_state
->getValue('flow');
$pool_id = $form_state
->getValue('pool');
$next_step = null;
$flows = Flow::getAll(false);
$options = [];
foreach ($flows as $flow) {
if (Flow::TYPE_BOTH === $flow->type) {
continue;
}
if (Flow::VARIANT_PER_BUNDLE !== $flow->variant) {
continue;
}
$options[$flow->id] = $flow->name;
}
$form['wrapper']['flow'] = [
'#type' => 'select',
'#options' => $options,
'#title' => $this
->t('Flow'),
'#required' => true,
'#default_value' => $flow_id,
'#disabled' => self::STEP_SELECT_FLOW !== $this->step,
'#description' => $this
->t('Please note that this only works for Flows that are either pulling or pushing but not both.'),
];
if (self::STEP_SELECT_FLOW === $this->step) {
$next_step = self::STEP_SELECT_POOL;
}
else {
$pools = Pool::getAll();
$options = [];
foreach ($pools as $pool) {
$options[$pool->id] = $pool->label;
}
$form['wrapper']['pool'] = [
'#type' => 'select',
'#options' => $options,
'#title' => $this
->t('Pool'),
'#required' => true,
'#default_value' => $pool_id,
'#disabled' => self::STEP_SELECT_POOL !== $this->step,
];
if (self::STEP_SELECT_POOL === $this->step) {
$next_step = self::STEP_SELECT_ASSIGNMENT;
}
else {
$flow = $flows[$flow_id];
$type = $flow->type;
$pool_index = Flow::TYPE_PUSH === $type ? 'export_pools' : 'import_pools';
$usages = [];
foreach ($flow
->getController()
->getEntityTypeConfig() as $bundles) {
foreach ($bundles as $config) {
if (!isset($config[$pool_index][$pool_id])) {
continue;
}
$usage = $config[$pool_index][$pool_id];
if (in_array($usage, $usages)) {
continue;
}
$usages[] = $usage;
}
}
$options = [
Pool::POOL_USAGE_ALLOW => 'allow',
Pool::POOL_USAGE_FORCE => 'force',
Pool::POOL_USAGE_FORBID => 'forbid',
];
if (!count($usages)) {
$empty = 'Currently: Unassigned';
}
elseif (1 === count($usages)) {
$empty = 'Currently: ' . $usages[0];
// No need to apply the same value.
unset($options[$usages[0]]);
}
else {
$empty = 'Currently: mixed (' . implode(', ', $usages) . ')';
}
$form['wrapper']['assignment'] = [
'#empty_option' => $empty,
'#type' => 'select',
'#options' => $options,
'#title' => $this
->t('Assignment (' . $type . ')'),
'#required' => true,
'#default_value' => null,
];
}
}
$is_simple = $flow->variant === Flow::VARIANT_SIMPLE;
if ($is_simple) {
\Drupal::messenger()
->addWarning("This is only useful for per-bundle configurations. To edit the Pools of this Flow, please open the Flow form instead.");
}
if ($next_step) {
$form['wrapper']['actions'] = [
'#type' => 'actions',
];
$form['wrapper']['actions']['continue'] = [
'#type' => 'submit',
'#next_step' => $next_step,
'#value' => $this
->t('Continue'),
'#disabled' => $is_simple,
'#ajax' => [
'callback' => [
$this,
'loadStep',
],
'wrapper' => 'form-wrapper',
'effect' => 'fade',
],
];
}
else {
$form['wrapper']['actions'] = [
'#type' => 'actions',
];
$form['wrapper']['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Change assignment'),
'#submit' => [
'::submitValues',
],
'#disabled' => $is_simple,
];
}
return $form;
}