You are here

public function RelationsImportSettingsBase::getAvailableRelations in CRM Core 7

Build a list of available relations relevant to current settings.

2 calls to RelationsImportSettingsBase::getAvailableRelations()
RelationsCiviCrmImportSettings::configForm in modules/crm_core_data_import/plugins/settings/RelationsCiviCrmImportSettings.inc
Configuration form for settings plugin.
RelationsImportSettingsBase::configForm in modules/crm_core_data_import/plugins/settings/RelationsImportSettingsBase.inc
Configuration form for settings plugin.

File

modules/crm_core_data_import/plugins/settings/RelationsImportSettingsBase.inc, line 166
Base relations settings handler for CRM Core Data Import.

Class

RelationsImportSettingsBase
@file Base relations settings handler for CRM Core Data Import.

Code

public function getAvailableRelations($settings) {

  // @TODO inversion.
  $relations = array();
  $entities = $this
    ->entityList($settings);
  $entities_names = array();

  // A list with entity info.
  foreach ($entities as $entity_info) {
    $entities_names[] = $entity_info['entity_type'] . ':' . $entity_info['bundle'];
  }
  $relation_types = relation_get_types();
  foreach ($relation_types as $relation_type) {
    $available_source = FALSE;
    $available_destination = FALSE;

    // If empty, available for all bundles.
    if (empty($relation_type->source_bundles)) {
      $available_source = TRUE;
    }
    foreach ($relation_type->source_bundles as $source) {
      if (in_array($source, $entities_names) || $source == 'crm_core_contact:*') {
        $available_source = TRUE;
      }
    }

    // If empty, available for all bundles.
    if (empty($relation_type->target_bundles)) {
      $available_destination = TRUE;
    }
    foreach ($relation_type->target_bundles as $destination) {
      if (in_array($destination, $entities_names) || $destination == 'crm_core_contact:*') {
        $available_destination = TRUE;
      }
    }

    // If both relations exist in the settings.
    if ($available_source && $available_destination) {
      $relations[$relation_type->relation_type] = $relation_type->label;
    }
  }
  if (empty($relations)) {
    $relations[] = t('No available relations');
  }
  return $relations;
}