function ContextConfigure::buildForm

Same name in other branches
  1. 8.x-3.x src/Form/ContextConfigure.php \Drupal\ctools\Form\ContextConfigure::buildForm()

Overrides FormInterface::buildForm

File

src/Form/ContextConfigure.php, line 85

Class

ContextConfigure
Configure Context Form.

Namespace

Drupal\ctools\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, $context_id = NULL, $tempstore_id = NULL, $machine_name = NULL) {
    $this->tempstore_id = $tempstore_id;
    $this->machine_name = $machine_name;
    $cached_values = $this->tempstore
        ->get($this->tempstore_id)
        ->get($this->machine_name);
    $contexts = $this->getContexts($cached_values);
    $edit = FALSE;
    if (!empty($contexts[$context_id])) {
        $context = $contexts[$context_id];
        $machine_name = $context_id;
        $edit = TRUE;
    }
    else {
        if (strpos($context_id, 'entity:') === 0) {
            $context_definition = new EntityContextDefinition($context_id);
        }
        else {
            $context_definition = new ContextDefinition($context_id);
        }
        $context = new Context($context_definition);
        $machine_name = '';
    }
    $label = $context->getContextDefinition()
        ->getLabel();
    $description = $context->getContextDefinition()
        ->getDescription();
    $data_type = $context->getContextDefinition()
        ->getDataType();
    $form['#attached']['library'][] = 'core/drupal.dialog.ajax';
    $form['context_id'] = [
        '#type' => 'value',
        '#value' => $context_id,
    ];
    $form['label'] = [
        '#type' => 'textfield',
        '#title' => $this->t('Label'),
        '#default_value' => $label,
        '#required' => TRUE,
    ];
    $form['machine_name'] = [
        '#type' => 'machine_name',
        '#title' => $this->t('Machine Name'),
        '#default_value' => $machine_name,
        '#required' => TRUE,
        '#maxlength' => 128,
        '#machine_name' => [
            'source' => [
                'label',
            ],
            'exists' => [
                $this,
                'contextExists',
            ],
        ],
        '#disabled' => $this->disableMachineName($cached_values, $machine_name),
    ];
    $form['description'] = [
        '#type' => 'textarea',
        '#title' => $this->t('Description'),
        '#default_value' => $description,
    ];
    if (strpos($data_type, 'entity:') === 0) {
        [
            ,
            $entity_type,
        ] = explode(':', $data_type);
        
        /** @var \Drupal\Core\Entity\Plugin\DataType\EntityAdapter $entity */
        $entity = $edit ? $context->getContextValue() : NULL;
        $form['context_value'] = [
            '#type' => 'entity_autocomplete',
            '#required' => TRUE,
            '#target_type' => $entity_type,
            '#default_value' => $entity,
            '#title' => $this->t('Select entity'),
        ];
    }
    else {
        $value = $context->getContextData()
            ->getValue();
        $form['context_value'] = [
            '#title' => $this->t('Set a context value'),
            '#type' => 'textfield',
            '#required' => TRUE,
            '#default_value' => $value,
        ];
    }
    $form['submit'] = [
        '#type' => 'submit',
        '#value' => $this->t('Save'),
        '#ajax' => [
            'callback' => [
                $this,
                'ajaxSave',
            ],
        ],
    ];
    return $form;
}