public function CerEntityReferenceField::getTargetBundles in Corresponding Entity References 7.3
@override CerField::getTargetBundles().
Overrides CerField::getTargetBundles
File
- includes/
fields/ entity_reference.inc, line 20 - Contains the CER plugin for Entity Reference fields.
Class
- CerEntityReferenceField
- @file Contains the CER plugin for Entity Reference fields.
Code
public function getTargetBundles() {
$bundles = array();
// If the reference field is using a view, load the view and see if it's filtering by the entity
// type's bundle filter. If it is, the filter values are the target bundles. Otherwise,
// assume that all bundles can be referenced.
//
// @todo Support contextual filters?
//
// NOTE: Selection handlers (i.e., $field['settings']['handler']) are plugins owned by
// Entity Reference. There is no method defined to get an array of referenceable
// bundles, but hopefully, if CER gains enough traction in the community, such a
// method can be added to the EntityReference_SelectionHandler interface. This
// function could then be deprecated, which would be a more flexible, future-proof
// method of finding a field's target bundles.
//
if ($this->settings['handler'] == 'views') {
$view = views_get_view($this->settings['handler_settings']['view']['view_name']);
$view
->set_display($this->settings['handler_settings']['view']['display_name']);
$info = entity_get_info($this
->getTargetType());
if (isset($info['entity keys']['bundle'])) {
$handler = $view->display_handler
->get_handler('filter', $info['entity keys']['bundle']);
if ($handler) {
$bundles = $handler->value;
}
}
}
else {
$bundles = $this->settings['handler_settings']['target_bundles'];
}
return $bundles ? $bundles : parent::getTargetBundles();
}