diff --git a/views/link_views_handler_field_linkfield.inc b/views/link_views_handler_field_linkfield.inc index 88643ac..d91f7db 100644 --- a/views/link_views_handler_field_linkfield.inc +++ b/views/link_views_handler_field_linkfield.inc @@ -9,6 +9,10 @@ class LinkfieldHandlerFieldLinkfield extends views_handler_field_field { * Add additional tokens */ function add_self_tokens(&$tokens, $item) { + $field = $this->field_info; + foreach ($field['columns'] as $id => $column) { + $tokens['[' . $this->options['id'] . '-' . $id . ']'] = t('Raw @column', array('@column' => $id)); + } $value = $item['raw']['link']; $tokens['[' . $this->options['id'] . '-target' . ']'] = $value['target']; } @@ -19,6 +23,25 @@ class LinkfieldHandlerFieldLinkfield extends views_handler_field_field { * @see add_self_tokens() for details. */ function document_self_tokens(&$tokens) { + $field = $this->field_info; + foreach ($field['columns'] as $id => $column) { + // Use filter_xss_admin because it's user data and we can't be sure it is safe. + // We know nothing about the data, though, so we can't really do much else. + + if (isset($item['raw'])) { + // If $item['raw'] is an array then we can use as is, if it's an object + // we cast it to an array, if it's neither, we can't use it. + $raw = is_array($item['raw']) ? $item['raw'] : + (is_object($item['raw']) ? (array)$item['raw'] : NULL); + } + if (isset($raw) && isset($raw[$id]) && is_scalar($raw[$id])) { + $tokens['[' . $this->options['id'] . '-' . $id . ']'] = filter_xss_admin($raw[$id]); + } + else { + // Take sure that empty values are replaced as well. + $tokens['[' . $this->options['id'] . '-' . $id . ']'] = ''; + } + } $tokens['[' . $this->options['id'] . '-target' . ']'] = t('Link Target.'); }