diff --git a/includes/og.field.inc b/includes/og.field.inc index 504de97..cdf02bc 100644 --- a/includes/og.field.inc +++ b/includes/og.field.inc @@ -137,7 +137,6 @@ function og_field_widget_form(&$form, &$form_state, $field, $instance, $langcode $new_element = ctools_field_invoke_field($mocked_instance, 'form', $entity_type, $dummy_entity, $form, $dummy_form_state, array('default' => TRUE)); $element[$field_mode] = $new_element[$field_name][LANGUAGE_NONE]; - if (in_array($mocked_instance['widget']['type'], array('entityreference_autocomplete', 'entityreference_autocomplete_tags'))) { // Change the "Add more" button name so it adds only the needed // element. @@ -145,30 +144,21 @@ function og_field_widget_form(&$form, &$form_state, $field, $instance, $langcode $element[$field_mode]['add_more']['#name'] .= '__' . $field_mode; } - foreach (array_keys($element[$field_mode]) as $delta) { - if (!is_numeric($delta)) { - continue; - } - - $sub_element = &$element[$field_mode][$delta]['target_id']; - - // Rebuild the autocomplete path. - $path = explode('/', $sub_element['#autocomplete_path']); - $sub_element['#autocomplete_path'] = 'og/autocomplete'; + if ($mocked_instance['widget']['type'] == 'entityreference_autocomplete') { + foreach (array_keys($element[$field_mode]) as $delta) { + if (!is_numeric($delta)) { + continue; + } - // Add autocomplete type - $sub_element['#autocomplete_path'] .= "/$path[2]/$path[3]/$path[4]/$path[5]"; + $sub_element = &$element[$field_mode][$delta]['target_id']; + _og_field_widget_replace_autocomplete_path($sub_element, $field_mode); - // Add field mode. - $sub_element['#autocomplete_path'] .= "/$field_mode"; - - // Add the entity ID. - $sub_element['#autocomplete_path'] .= "/$path[6]"; - if (!empty($path[7])) { - // Add the text. - $sub_element['#autocomplete_path'] .= "/$path[7]"; } } + else { + // Tags widget, there's no delta, we can pass the element itself. + _og_field_widget_replace_autocomplete_path($element[$field_mode], $field_mode); + } } } @@ -178,6 +168,34 @@ function og_field_widget_form(&$form, &$form_state, $field, $instance, $langcode } /** + * Replace Entity-reference's autocomplete path with our own. + * + * @param $element + * The form element, passed by reference. + * @param $field_mode + * The field mode. + * + */ +function _og_field_widget_replace_autocomplete_path(&$element, $field_mode) { + // Rebuild the autocomplete path. + $path = explode('/', $element['#autocomplete_path']); + $element['#autocomplete_path'] = 'og/autocomplete'; + + // Add autocomplete type + $element['#autocomplete_path'] .= "/$path[2]/$path[3]/$path[4]/$path[5]"; + + // Add field mode. + $element['#autocomplete_path'] .= "/$field_mode"; + + // Add the entity ID. + $element['#autocomplete_path'] .= "/$path[6]"; + if (!empty($path[7])) { + // Add the text. + $element['#autocomplete_path'] .= "/$path[7]"; + } +} + +/** * Property info alter; Change mocked field to be non-required. */ function og_property_info_alter($wrapper, $info) {