|
@@ -61,22 +61,65 @@ class tripal_views_handler_field_element extends tripal_views_handler_field {
|
|
|
$element_name = preg_replace('/__/', ':', $element_name);
|
|
|
}
|
|
|
|
|
|
- $value = $this->get_value($values);
|
|
|
+ // Get the items for this field.
|
|
|
+ $items = $this->get_value($values);
|
|
|
+
|
|
|
+ // Is this a nested element? If not make sure we have an array of element
|
|
|
+ // names to make it easier to deal with the name below.
|
|
|
+ $elements = explode('.', $element_name);
|
|
|
+ if (count($elements) == 0) {
|
|
|
+ $elements[] = $element_name;
|
|
|
+ }
|
|
|
|
|
|
// Handle single value fields:
|
|
|
- if (count($value) == 0) {
|
|
|
+ if (count($items) == 0) {
|
|
|
return '';
|
|
|
}
|
|
|
- if (count($value) == 1) {
|
|
|
- return $this->sanitize_value($value[0]['value'][$element_name], 'xss');
|
|
|
+ else if (count($items) == 1) {
|
|
|
+ $item = $items[0];
|
|
|
+ $element = array_shift($elements);
|
|
|
+ if (is_array($item['value'][$element])) {
|
|
|
+ return $this->_get_element_value($elements, $item['value'][$element]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return $this->sanitize_value($item['value'][$element_name], 'xss');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (count($items) <= 10) {
|
|
|
+ $element = array_shift($elements);
|
|
|
+ $element_values = array();
|
|
|
+ foreach ($items as $index => $item) {
|
|
|
+ if (is_array($item['value'][$element])) {
|
|
|
+ $element_values[] = $this->_get_element_value($elements, $item['value'][$element]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $element_values[] = $this->sanitize_value($item['value'][$element], 'xss');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO: theming this way should probably be handled by a sepcial
|
|
|
+ // field handler that the user can tweak. But for now we'll just do this.
|
|
|
+ return theme_item_list(array(
|
|
|
+ 'items' => $element_values,
|
|
|
+ 'title' => NULL,
|
|
|
+ 'type' => 'ul',
|
|
|
+ 'attributes' => array(),
|
|
|
+ ));
|
|
|
}
|
|
|
else {
|
|
|
- dpm($value);
|
|
|
return t('Too many values to show.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected function get_element_value($value, $element_name) {
|
|
|
-
|
|
|
+ /**
|
|
|
+ * A recursive function for retrieving a nested element value.
|
|
|
+ */
|
|
|
+ private function _get_element_value($elements, $item_values) {
|
|
|
+ $element = array_shift($elements);
|
|
|
+ if (is_array($item_values[$element])) {
|
|
|
+ return $this->_get_element_value($elements, $item_values[$element]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return $this->sanitize_value($item_values[$element], 'xss');
|
|
|
+ }
|
|
|
}
|
|
|
}
|