Skip to content

Instantly share code, notes, and snippets.

Created October 11, 2011 14:19
Show Gist options
  • Save anonymous/1278196 to your computer and use it in GitHub Desktop.
Save anonymous/1278196 to your computer and use it in GitHub Desktop.
<?php
// Internal recursive views data mapping function
private function mapViewsDataRecurse(&$response, &$view, $key, $filter_fields) {
if (is_array($response)) {
foreach($response as $field => $definition) {
if (!empty($filter_fields) && !in_array($field, $filter_fields)) {
unset($response[$field]);
}
elseif ($definition['#type'] == 'group') {
$response[$field] = $this->mapViewsDataRecurse($response[$field]['#content'], &$view, $key, $fields);
}
elseif (!empty($definition['#views_field'])) {
if (method_exists($view->field[$definition['#views_field']], 'render') &&
$value = $view->field[$definition['#views_field']]->get_value($view->result[$key])) {
if (is_array($value) && empty($definition['#multiple']) && empty($value[$definition['#views_result_field']])) {
$value = $value[0];
}
if (isset($definition['#views_result_field'])) {
$response[$field] = $value[$definition['#views_result_field']];
} else {
$response[$field] = $value;
}
}
elseif (!empty($definition['#views_field_alias'])) {
$alias = $view->field[$definition['#views_field']]->aliases[$definition['#views_field_alias']];
$response[$field] = $view->result[$key]->$alias;
}
elseif (isset($view->result[$key]->{$view->field[$definition['#views_field']]->field_alias})) {
$response[$field] = $view->result[$key]->{$view->field[$definition['#views_field']]->field_alias};
}
else {
unset($response[$field]);
}
}
elseif (!empty($definition['#views_alias'])) {
$response[$field] = $view->result[$key]->{$definition['#views_alias']};
}
}
}
return $response;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment