function entityreference_autocreate_get_entity_by_title in Entityreference Autocreate 7
Fetch the named entity for the field, create it if not found.
Parameters
array $field_info: As loaded from field_info_field()
string $title: Title to search for.
Return value
object|NULL Pre-existing or new entity. is_new should be set on it if it is fresh. Returns NULL on unexpected failure. A failure should probably be caught.
3 calls to entityreference_autocreate_get_entity_by_title()
- entityreference_autocreate_feeds_set_target in ./
entityreference_autocreate.feeds.inc - Entity reference callback for mapping.
- entityreference_autocreate_validate in ./
entityreference_autocreate.module - Make a missing target if asked for by name.
- entityreference_autocreate_validate_tags in ./
entityreference_autocreate.module - Validate handler that makes things up on the fly if needed.
File
- ./
entityreference_autocreate.module, line 242 - Intercepts entityreference autocomplete submission validation and creates a target node on the fly if it doesn't yet exist.
Code
function entityreference_autocreate_get_entity_by_title($field_info, $title) {
$title = trim($title);
if (empty($title)) {
return NULL;
}
// Take "label (entity id)', match the id from parenthesis.
if (preg_match("/.+\\((\\d+)\\)/", $title, $matches)) {
return $matches[1];
}
// Try to get a match from the input string when the user didn't use the
// autocomplete but filled in a value manually.
$handler = entityreference_get_selection_handler($field_info);
// Search for matches (exact), limit to 2 so we can detect if there is a
// potential conflict.
$entities = $handler
->getReferencableEntities($title, '=', 2);
// Case where $entities looks like $entities[BUNDLE][ETID] = HTML.
if (is_array(reset($entities))) {
// Extract items from results. The return is keyed by bundle.
$target_bundle = entityreference_autocreate_get_target_bundle($field_info);
if (!empty($target_bundle)) {
$entities = $entities[$target_bundle];
}
}
if (count($entities) == 1) {
// Exact match, no confusion, use that.
return key($entities);
}
if (count($entities) > 1) {
// More than one match.
// This is a genuine form validation error I can't automate.
return NULL;
}
// By now we've eliminated the options. There is no match.
if (count($entities) == 0) {
// Now make one of the named things.
return entityreference_autocreate_new_entity($field_info, $title);
}
return NULL;
}