You are here

protected function RelatedProperties::getConfigurationOptions in Salesforce Suite 5.0.x

Same name and namespace in other branches
  1. 8.4 modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedProperties.php \Drupal\salesforce_mapping\Plugin\SalesforceMappingField\RelatedProperties::getConfigurationOptions()
  2. 8.3 modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedProperties.php \Drupal\salesforce_mapping\Plugin\SalesforceMappingField\RelatedProperties::getConfigurationOptions()

Form options helper.

1 call to RelatedProperties::getConfigurationOptions()
RelatedProperties::buildConfigurationForm in modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedProperties.php
Form constructor.

File

modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedProperties.php, line 138

Class

RelatedProperties
Adapter for entity Reference and fields.

Namespace

Drupal\salesforce_mapping\Plugin\SalesforceMappingField

Code

protected function getConfigurationOptions($mapping) {
  $instances = $this->entityFieldManager
    ->getFieldDefinitions($mapping
    ->get('drupal_entity_type'), $mapping
    ->get('drupal_bundle'));
  if (empty($instances)) {
    return;
  }
  $options = [];

  // Loop over every field on the mapped entity. For reference fields, expose
  // all properties of the referenced entity.
  foreach ($instances as $instance) {
    if (!$this
      ->instanceOfEntityReference($instance)) {
      continue;
    }
    $settings = $instance
      ->getSettings();
    $entity_type_id = $settings['target_type'];
    $properties = [];
    $entity_type = $this->entityTypeManager
      ->getDefinition($entity_type_id);

    // exclude non-fieldables
    if ($entity_type
      ->entityClassImplements(FieldableEntityInterface::class)) {
      foreach ($this->entityTypeBundleInfo
        ->getBundleInfo($entity_type_id) as $bundle => $bundle_info) {

        // If target bundles is specified, limit which bundles are visible.
        if (!empty($settings['handler_settings']['target_bundles']) && !in_array($bundle, $settings['handler_settings']['target_bundles'])) {
          continue;
        }
        $properties += $this->entityFieldManager
          ->getFieldDefinitions($entity_type_id, $bundle);
      }
    }
    foreach ($properties as $key => $property) {
      $options[(string) $instance
        ->getLabel()][$instance
        ->getName() . ':' . $key] = $property
        ->getLabel();
    }
  }
  if (empty($options)) {
    return;
  }

  // Alphabetize options for UI.
  foreach ($options as $group => &$option_set) {
    asort($option_set);
  }
  asort($options);
  return $options;
}