diff --git a/fivestar.module b/fivestar.module index 1b9db2c..21fe97f 100644 --- a/fivestar.module +++ b/fivestar.module @@ -771,6 +771,22 @@ function fivestar_fivestar_target_info($field, $instance) { } } + // Add entityreference support. + if (module_exists('entityreference')) { + $field_names = array_keys(field_read_fields(array('module' => 'entityreference'))); + if (!empty($field_names)) { + $field_instances = field_read_instances(array('entity_type' => $entity_type, 'bundle' => $bundle, 'field_name' => $field_names)); + if (!empty($field_instances)) { + foreach ($field_instances as $field_instance) { + $options[$field_instance['field_name']] = array( + 'title' => t('Entity reference: @field', array('@field' => $field_instance['field_name'])), + 'callback' => '_fivestar_target_entityreference' + ); + } + } + } + } + // Add comment module support. if ($instance['entity_type'] == 'comment') { $options['parent_node'] = array( @@ -798,6 +814,25 @@ function _fivestar_target_node_reference($entity, $field, $instance, $langcode) return $target; } +/** + * @return (array) array('entity_type', 'entity_id') + */ +function _fivestar_target_entityreference($entity, $field, $instance, $langcode) { + $target = array(); + + $entityreference = $instance['settings']['target']; + + // Retrieve entity settings for the referenced field. + $field_info = field_info_field($entityreference); + + if (isset($entity->{$entityreference}[$langcode][0]) && isset($entity->{$entityreference}[$langcode][0]['target_id']) && is_numeric($entity->{$entityreference}[$langcode][0]['target_id'])) { + $target['entity_id'] = $entity->{$entityreference}[$langcode][0]['target_id']; + $target['entity_type'] = $field_info['settings']['target_type']; + } + + return $target; +} + function _fivestar_target_comment_parent_node($entity, $field, $instance, $langcode) { return array( 'entity_id' => $entity->nid,