/** * Create field elements for all field on the entity type to update. * * @param \Drupal\Core\Form\FormStateInterface $form_state * * @return array */ protected function createFieldsElements(FormStateInterface $form_state) { $base_options = []; /** @var FieldStorageDefinitionInterface[] $config_fields */ $config_fields = []; $entity_type = $this->entity->getUpdateEntityType(); $target_entity_label = $this->targetTypeLabel($this->entity); $target_bundle_label = $this->targetTypeBundleLabel($this->entity); $elements = ['#type' => 'container']; $destination_fields = $this->getDestinationFields(); $map = $this->entity->getFieldMap(); foreach ($destination_fields as $destination_field) { $field_name = $destination_field->getName(); if (!in_array($field_name, $map)) { if ($destination_field->isBaseField()) { $base_options[$field_name] = $destination_field->getLabel(); } else { $config_fields[] = $destination_field; } } } $elements['base_fields'] = ['#type' => 'checkboxes', '#title' => $this->t('Base Fields'), '#options' => $base_options, '#description' => $this->t('These fields are available on all @label entities and may not be configurable.', ['@label' => $target_entity_label])]; $elements['config_fields'] = ['#tree' => TRUE, '#type' => 'fieldset', '#title' => $this->t('Configurable Fields')]; if ($this->targetSupportBundles($this->entity)) { $elements['config_fields']['#description'] = $this->t('These fields have been added to different @bundle_label bundles of @entity_label. They may not be on all @entity_label entities.', ['@entity_label' => $target_entity_label, '@bundle_label' => $target_bundle_label]); } else { $elements['config_fields']['#description'] = $this->t('These fields have been added to @entity_label entities.', ['@entity_label' => $target_entity_label]); } foreach ($config_fields as $config_field) { $instances = $this->fieldManager->getAllFieldConfigsForField($config_field, $entity_type); if ($instances) { $instance_options = ['' => $this->t('(Don\'t clone)')]; foreach ($instances as $bundle => $instance) { $instance_options[$instance->id()] = $this->t('As it is configured in @bundle as @label', ['@bundle' => $bundle, '@label' => $instance->getLabel()]); } $elements['config_fields'][$config_field->getName()] = ['#type' => 'select', '#title' => $config_field->getLabel(), '#options' => $instance_options]; } } //$this->entity_field_manager->getFieldDefinitions(); return $elements; }