function ConditionContainerForm::form

Overrides ExpressionFormInterface::form

File

src/Form/Expression/ConditionContainerForm.php, line 30

Class

ConditionContainerForm
Form view structure for Rules condition containers.

Namespace

Drupal\rules\Form\Expression

Code

public function form(array $form, FormStateInterface $form_state) {
    $form['conditions-table'] = [
        '#type' => 'container',
        '#attributes' => [
            'class' => [
                'edit-conditions-table',
            ],
        ],
    ];
    $form['conditions-table']['conditions'] = [
        '#type' => 'table',
        '#header' => [
            'element' => $this->t('Conditions'),
            'operations' => $this->t('Operations'),
            'weight' => [
                'data' => $this->t('List position'),
                'class' => [
                    'tabledrag-hide',
                ],
            ],
        ],
        '#tabledrag' => [
            [
                'action' => 'order',
                'relationship' => 'sibling',
                'group' => 'table-sort-weight',
            ],
        ],
        '#empty' => $this->t('None'),
    ];
    
    /** @var \Drupal\rules\Engine\ExpressionInterface $condition */
    foreach ($this->conditionContainer as $condition) {
        $uuid = $condition->getUuid();
        $configuration = $condition->getConfiguration();
        $description = $this->getParameterDescription($configuration);
        $form['conditions-table']['conditions'][$uuid] = [
            'element' => [
                'data' => [
                    '#type' => 'item',
                    '#plain_text' => $condition->getLabel(),
                    '#suffix' => '<div class="description">' . $description . '</div>',
                ],
                // So that the full parameter description will show on hover.
'#wrapper_attributes' => [
                    'title' => [
                        $description,
                    ],
                ],
            ],
            'operations' => [
                'data' => [
                    '#type' => 'operations',
                    '#links' => [
                        'edit' => [
                            'title' => $this->t('Edit'),
                            'url' => $this->getRulesUiHandler()
                                ->getUrlFromRoute('expression.edit', [
                                'uuid' => $uuid,
                            ]),
                        ],
                        'delete' => [
                            'title' => $this->t('Delete'),
                            'url' => $this->getRulesUiHandler()
                                ->getUrlFromRoute('expression.delete', [
                                'uuid' => $uuid,
                            ]),
                        ],
                    ],
                ],
            ],
            'weight' => [
                '#type' => 'weight',
                '#delta' => 50,
                '#attributes' => [
                    'class' => [
                        'table-sort-weight',
                    ],
                ],
                '#default_value' => $condition->getWeight(),
            ],
            '#attributes' => [
                'class' => [
                    'draggable',
                ],
            ],
            '#weight' => $condition->getWeight(),
        ];
    }
    // Put action buttons in the table footer.
    $links['add-condition'] = [
        '#theme' => 'menu_local_action',
        '#link' => [
            'title' => $this->t('Add condition'),
            'url' => $this->getRulesUiHandler()
                ->getUrlFromRoute('expression.add', [
                'expression_id' => 'rules_condition',
            ]),
        ],
    ];
    $form['conditions-table']['conditions']['#footer'][] = [
        [
            'data' => [
                '#prefix' => '<ul class="action-links">',
                'local-action-links' => $links,
                '#suffix' => '</ul>',
            ],
            'colspan' => 3,
        ],
    ];
    return $form;
}