function _relation_add_field_instance_settings_form in Relation add 7
Process callback for relation_add_field_instance_settings_form().
1 string reference to '_relation_add_field_instance_settings_form'
File
- ./
relation_add.module, line 389 - Relation Add module file.
Code
function _relation_add_field_instance_settings_form($form, $form_state) {
$field = isset($form_state['relation_add']['field']) ? $form_state['relation_add']['field'] : $form['#field'];
$instance = isset($form_state['relation_add']['instance']) ? $form_state['relation_add']['instance'] : $form['#instance'];
$relation_types = relation_get_types();
$bundle_key = $instance['entity_type'] . ':' . $instance['bundle'];
$bundle_wildcard_key = $instance['entity_type'] . ':*';
$options = array();
foreach ($relation_types as $relation_type => $relation_type_data) {
foreach ($relation_type_data->source_bundles as $relation_bundle_key) {
if ($bundle_key == $relation_bundle_key || $bundle_wildcard_key == $relation_bundle_key) {
$options[$relation_type] = $relation_type_data->label;
}
}
foreach ($relation_type_data->target_bundles as $relation_bundle_key) {
if ($bundle_key == $relation_bundle_key || $bundle_wildcard_key == $relation_bundle_key) {
$options[$relation_type . ':reverse'] = t('@relation_label (reverse)', array(
'@relation_label' => $relation_type_data->label,
));
}
}
}
ksort($options);
$form['relation_type'] = array(
'#type' => 'select',
'#title' => t('Relation types'),
'#description' => t('Select all the relation types you want to display in the relation add field. Only relation types applicable to this entity bundle are shown here. If no relation_types are selected, relations of all types will be displayed.'),
'#default_value' => $instance['settings']['relation_type'],
'#options' => $options,
'#multiple' => TRUE,
'#ajax' => array(
'event' => 'change',
'callback' => 'relation_add_settings_ajax',
'wrapper' => 'relation_target_bundles',
),
);
$relation_selected_types = !empty($instance['settings']['relation_type']) ? $instance['settings']['relation_type'] : array();
$relation_relevant_bundles = array();
foreach ($relation_selected_types as $rel_type) {
$type_array = explode(':', $rel_type);
$relation_type = relation_type_load($type_array[0]);
if (isset($type_array[1]) && $type_array[1] == 'reverse') {
foreach ($relation_type->source_bundles as $source_bundle) {
$relation_relevant_bundles[$source_bundle] = $source_bundle;
}
}
else {
foreach ($relation_type->target_bundles as $target_bundles) {
$relation_relevant_bundles[$target_bundles] = $target_bundles;
}
}
}
$entity_infos = entity_get_info();
$relation_bundles = array();
$counter = 0;
foreach ($relation_relevant_bundles as $relation_bundle) {
list($entity_type, $bundle) = explode(':', $relation_bundle);
if ('*' == $bundle) {
foreach ($entity_infos[$entity_type]['bundles'] as $bundle_name => $bundle) {
$relation_bundles[$entity_infos[$entity_type]['label']][$entity_type . ':' . $bundle_name] = $bundle['label'];
++$counter;
}
}
else {
if (isset($entity_infos[$entity_type]['bundles'][$bundle])) {
$relation_bundles[$entity_infos[$entity_type]['label']][$entity_type . ':' . $bundle] = $entity_infos[$entity_type]['bundles'][$bundle]['label'];
++$counter;
}
}
}
$form['relation_target_bundles'] = array(
'#type' => 'select',
'#title' => t('Target bundles'),
'#options' => $relation_bundles,
'#size' => max(5, $counter),
'#default_value' => isset($instance['settings']['relation_target_bundles']) ? $instance['settings']['relation_target_bundles'] : '',
'#multiple' => TRUE,
'#description' => t("Select the target bundle's type. Useful if you want to create separate fields for different possible target bundles."),
'#prefix' => '<div id="relation-add-target-bundles">',
'#suffix' => '</div>',
);
if (count($instance['settings']['relation_type']) > 1) {
// The default value can only be set
// if there are more than 1 relation types.
$form['fieldset'] = array(
'#type' => 'fieldset',
'#title' => t('Default value'),
'#collapsible' => FALSE,
);
$form['fieldset']['content'] = array(
'#pre' => '<p>',
'#markup' => t('The default value for this field, used when creating new content.'),
'#suffix' => '</p>',
);
foreach ($instance['settings']['relation_type'] as $rel_type) {
$type_array = explode(':', $rel_type);
$relation_type = relation_type_load($type_array[0]);
$types[$rel_type] = isset($type_array[1]) ? $relation_type->reverse_label : $relation_type->label;
}
$form['fieldset']['default_value'] = array(
'#type' => 'select',
'#title' => t('Relation type'),
'#options' => $types,
'#default_value' => isset($instance['settings']['fieldset']['default_value']) ? $instance['settings']['fieldset']['default_value'] : '',
'#empty_value' => '',
'#empty_option' => t('Select a relation type'),
);
}
return $form;
}