You are here

function relation_form_views_ui_add_item_form_alter in Relation 8

Same name and namespace in other branches
  1. 8.2 relation.views.inc \relation_form_views_ui_add_item_form_alter()
  2. 7 views/relation.views.inc \relation_form_views_ui_add_item_form_alter()

Implements hook_form_views_ui_add_item_form_alter().

File

./relation.views.inc, line 357

Code

function relation_form_views_ui_add_item_form_alter(&$form, $form_state) {
  if ($form_state['type'] == 'relationship' && $form_state['view']->base_table != 'relation') {
    foreach (RelationType::loadMultiple() as $relation_type) {
      foreach (array(
        'source_bundles',
        'target_bundles',
      ) as $endpoint_bundles) {
        foreach ($relation_type->{$endpoint_bundles} as $relation_bundle) {
          if (substr($relation_bundle, 0, 9) == 'relation:') {
            return;
          }
        }
      }
    }

    // Collect the relation types already added as a relationship.
    $preg_pieces = array();
    foreach ($form_state['view']->display_handler
      ->get_handlers('relationship') as $relationship) {
      if (get_class($relationship) == 'relation_handler_relationship') {
        $preg_pieces[] = '^relation\\.relation_base_' . $relationship->definition['relation_type'];
      }
    }
    if ($preg_pieces) {

      // Filter out impossible Views relationships.
      $relation_type_preg = '/' . implode('|', array_unique($preg_pieces)) . '/';
      foreach (Element::children($form['options']['name']) as $name) {
        if (substr($name, 0, 9) == 'relation.' && !preg_match($relation_type_preg, $name)) {
          $form['options']['name'][$name]['#access'] = FALSE;
        }
      }
    }
  }
}