diff --git a/plugins/access/entity_field_value.inc b/plugins/access/entity_field_value.inc index e5857d8..6bc0ece 100644 --- a/plugins/access/entity_field_value.inc +++ b/plugins/access/entity_field_value.inc @@ -103,8 +103,13 @@ function ctools_entity_field_value_ctools_access_settings($form, &$form_state, $ foreach ($columns as $column) { if (isset($conf[$column]) && is_array($conf[$column])) { foreach ($conf[$column] as $delta => $conf_value) { - if (is_numeric($delta) && is_array($conf_value)) { - $form['settings'][$field_name][LANGUAGE_NONE][$delta]['value']['#default_value'] = $conf_value['value']; + if (is_numeric($delta)) { + if (is_array($conf_value)) { + $form['settings'][$field_name][LANGUAGE_NONE][$delta]['value']['#default_value'] = $conf_value['value']; + } + else { + $form['settings'][$field_name][LANGUAGE_NONE]['#default_value'][] = $conf_value; + } } } } @@ -131,8 +136,33 @@ function ctools_entity_field_value_ctools_access_settings_submit($form, &$form_s $columns[] = _field_sql_storage_columnname($field_name, $column); } foreach ($columns as $column) { + $form_state['input']['settings'][$field_name][$langcode] = _ctools_entity_field_value_filter_items($field, $form_state['input']['settings'][$field_name][$langcode]); $form_state['values']['settings'][$column] = $form_state['input']['settings'][$field_name][$langcode]; } + if (isset($form_state['input']['settings'][$field['field_name']][$langcode])) { + $form_state['input']['settings'][$field['field_name']][$langcode] = _ctools_entity_field_value_filter_items($field, $form_state['input']['settings'][$field['field_name']][$langcode]); + $form_state['values']['settings'][$field['field_name']][$langcode] = $form_state['input']['settings'][$field['field_name']][$langcode]; + } +} + +function _ctools_entity_field_value_filter_items($field, $items) { + if (!is_array($items)) { + // Single value item, no processing is possible. + return $items; + } + foreach ($items as $key => $value) { + if (!is_array($value)) { + // Scalar values, no processing is possible. + return $items; + } + //Remove _weight column. + if (isset($value['_weight'])) { + unset($items[$key]['_weight']); + } + } + // Remove empty values. + $items = _field_filter_items($field, $items); + return $items; } /** @@ -211,7 +241,19 @@ function ctools_entity_field_value_ctools_access_summary($conf, $context, $plugi } else { if (isset($conf[$conf_key])) { - $entity->{$field_name}[LANGUAGE_NONE][] = array($column => $conf[$conf_key]); + if (is_array($conf[$conf_key])) { + foreach ($conf[$conf_key] as $delta => $conf_value) { + if (!is_array($conf_value)) { + $entity->{$field_name}[LANGUAGE_NONE][] = array($column => $conf_value); + } + elseif (isset($conf_value['value'])) { + $entity->{$field_name}[LANGUAGE_NONE][] = array($column => $conf_value['value']); + } + } + } + else { + $entity->{$field_name}[LANGUAGE_NONE][] = array($column => $conf[$conf_key]); + } } } $string .= " @{$column} equals @{$column}_value"; @@ -224,15 +266,58 @@ function ctools_entity_field_value_ctools_access_summary($conf, $context, $plugi ctools_include('fields'); $display = field_get_display($instance, $view_mode, $entity); if (isset($display['module'])) { - $display['type'] = 'list_default'; + + // Choose simple formatter for well known cases. + switch ($display['module']) { + case 'list': + $display['type'] = 'list_default'; + break; + + case 'taxonomy': + $display['type'] = 'taxonomy_term_reference_plain'; + break; + + case 'entityreference': + $display['type'] = 'entityreference_label'; + break; + + default : + // Use field instance formatter setting. + break; + } + $function = $display['module'] . '_field_formatter_view'; $items = isset($entity->{$field_name}[LANGUAGE_NONE]) ? $entity->{$field_name}[LANGUAGE_NONE] : array(); if (function_exists($function)) { - $elements = $function($entity_type, $entity, $field, $instance, LANGUAGE_NONE, $items, $display); + $entity_group = array(0 => $entity); + $item_group = array(0 => $items); + $instance_group = array(0 => $instance); + field_default_prepare_view($entity_type, $entity_group, $field, $instance_group, LANGUAGE_NONE, $item_group, $display); + $elements = $function($entity_type, $entity, $field, $instance, LANGUAGE_NONE, $item_group[0], $display); + } + + foreach ($field['columns'] as $column => $attributes) { + $keyed_elements["@{$column}_value"] = array(); + if (count($field['columns']) > 1) { + // Add some sort of handling for compound fields + } + else { + $keyed_elements["@{$column}_value"] = $elements; + } } $value_keys = array_keys($values); - foreach ($value_keys as $key => $value) { - $values[$value] = isset($elements[$key]['#markup']) ? $elements[$key]['#markup'] : ''; + foreach ($value_keys as $key) { + $output = array(); + $elements = $keyed_elements[$key]; + if (is_array($elements)) { + foreach ($elements as $element) { + $output[] = strip_tags(drupal_render($element)); + } + } + else { + $output[] = strip_tags(drupal_render($elements)); + } + $values[$key] = implode(', ', $output); } } $values = array_merge($keys, $values);