field_alias = 'customfield_phpcode_'. $this->position;
}
function option_definition() {
$options = parent::option_definition();
$options['value'] = array('default' => '');
return $options;
}
/**
* Provide link to node option
*/
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['value'] = array(
'#type' => 'textarea',
'#title' => t('Value'),
'#default_value' => $this->options['value'],
'#rows' => 5,
'#description' =>
t('The text that should be displayed.')
.' '.t('Include <?php ?> delimiters when using PHP code.')
.' '.t('Available variables:').'
'
.t('$data: contains the retrieved record from the database (e.g. $data->nid).').'
'
.t('$static: can be used to store reusable data per row.')
,
);
}
/**
* Enter description here...
*
* @param stdClass $values
* @return string
*/
function render($values) {
$d = $this->view->display[$this->view->current_display];
$field_handlers = $d->handler->handlers['field'];
foreach ($field_handlers as $h) {
// Handle grouped fields
if (is_a($h, 'content_handler_field_multiple') && $h->defer_query) {
// content_handler_field_multiple stores its query results in $obj->field_values
$tmp = array();
if(!empty($h->field_values[$values->{$h->field_alias}])) {
foreach ($h->field_values[$values->{$h->field_alias}] as $k => $v) {
$tmp[$k] = $v;
// clean up a bit
unset($tmp[$k]['#delta']);
unset($tmp[$k]['_nid']);
}
}
$values->{$h->table.'_'.$h->field} = $tmp;
}
}
return $this->render_phpcode($this->options['value'], $this->static, $values);
}
/**
* Prepare and evaluate of a string of PHP code.
*
* This method and eval_phpcode are mostly a copy of drupal_eval().
*
* @param string $code
* @param mixed $static
* @param array $data
* @return string
*/
function render_phpcode($code, &$static, $data) {
global $theme_path, $theme_info, $conf;
// Store current theme path.
$old_theme_path = $theme_path;
// Restore theme_path to the theme, as long as drupal_eval() executes,
// so code evaluted will not see the caller module as the current theme.
// If theme info is not initialized get the path from theme_default.
if (!isset($theme_info)) {
$theme_path = drupal_get_path('theme', $conf['theme_default']);
}
else {
$theme_path = dirname($theme_info->filename);
}
$output = $this->eval_phpcode($code, $static, $data);
// Recover original theme path.
$theme_path = $old_theme_path;
return $output;
}
/**
* Evaluate a string of PHP code.
*
* @param string $code
* @param mixed $static
* @param array $data
* @return string
*/
function eval_phpcode($code, &$static, $data) {
ob_start();
print eval('?>'. $code);
return ob_get_clean();
}
}