You are here

public function ContextConfigure::buildForm in Chaos Tool Suite (ctools) 8.3

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/ContextConfigure.php, line 70

Class

ContextConfigure

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) {
    list(, $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;
}