You are here

public function DeveloperAttributesSettingsForm::buildForm in Apigee Edge 8

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 ConfigFormBase::buildForm

File

src/Form/DeveloperAttributesSettingsForm.php, line 104

Class

DeveloperAttributesSettingsForm
Provides a form for changing the developer attribute related settings.

Namespace

Drupal\apigee_edge\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('apigee_edge.sync');
  $form['#attached']['library'][] = 'apigee_edge/apigee_edge.admin';
  $form['developer_attributes'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('Developer attributes'),
    '#open' => TRUE,
  ];
  $form['developer_attributes']['instructions'] = [
    '#markup' => $this
      ->t('Select the <a href=":url_manage">user fields</a> that have to be synced to the Apigee Edge server.<br>You can also add a <a href=":url_new">new field</a> to users.', [
      ':url_manage' => Url::fromRoute('entity.user.field_ui_fields')
        ->toString(),
      ':url_new' => Url::fromRoute('field_ui.field_storage_config_add_user')
        ->toString(),
    ]),
  ];
  $fields = array_filter($this->entityFieldManager
    ->getFieldDefinitions('user', 'user'), function ($field_definition) {
    return $field_definition instanceof FieldConfigInterface;
  });
  uasort($fields, [
    FieldConfig::class,
    'sort',
  ]);
  $options = $default_values = [];

  /** @var \Drupal\field\FieldConfigInterface $field */
  foreach ($fields as $field) {
    $options[$field
      ->getName()] = [
      'field_label' => $field
        ->getLabel(),
      'field_name' => $field
        ->getName(),
      'field_type' => $field
        ->getType(),
      'attribute_name' => $this->fieldAttributeConverter
        ->getAttributeName($field
        ->getName()),
    ];
    $formatter = $this->fieldStorageFormatManager
      ->lookupPluginForFieldType($field
      ->getType());
    if (isset($formatter)) {
      $rc = new \ReflectionClass($this->fieldStorageFormatManager
        ->lookupPluginForFieldType($field
        ->getType()));
      $short_name = $rc
        ->getShortName();
      $options[$field
        ->getName()]['field_storage_formatter'] = $short_name;
    }
    else {
      $options[$field
        ->getName()]['field_storage_formatter'] = $this
        ->t('- None -');
    }
    if (in_array($field
      ->getName(), $config
      ->get('user_fields_to_sync'))) {
      $default_values[$field
        ->getName()] = TRUE;
    }
  }
  $form['developer_attributes']['attributes'] = [
    '#type' => 'tableselect',
    '#header' => [
      'field_label' => $this
        ->t('User field label'),
      'field_name' => $this
        ->t('User field name'),
      'field_type' => $this
        ->t('User field type'),
      'field_storage_formatter' => $this
        ->t('Storage formatter'),
      'attribute_name' => $this
        ->t('Developer attribute name'),
    ],
    '#options' => $options,
    '#default_value' => $default_values,
    '#empty' => $this
      ->t('No user fields found.'),
    '#attributes' => [
      'class' => [
        'table--developer-attributes',
      ],
    ],
  ];
  return parent::buildForm($form, $form_state);
}