private function export_pod_item_level($pod, $fields, $depth, $flatten = false, $current_depth = 1)
{
$tableless_field_types = PodsForm::tableless_field_types();
$simple_tableless_objects = PodsForm::simple_tableless_objects();
$object_fields = (array) pods_var_raw('object_fields', $pod->pod_data, array(), null, true);
$export_fields = array();
foreach ($fields as $k => $field) {
if (!is_array($field)) {
$field = array('id' => 0, 'name' => $field);
}
if (isset($pod->fields[$field['name']])) {
$field = $pod->fields[$field['name']];
$field['lookup_name'] = $field['name'];
if (in_array($field['type'], $tableless_field_types) && !in_array(pods_var('pick_object', $field), $simple_tableless_objects)) {
if ('pick' == $field['type']) {
if (empty($field['table_info'])) {
$field['table_info'] = $this->get_table_info(pods_var_raw('pick_object', $field), pods_var_raw('pick_val', $field), null, null, $field);
}
if (!empty($field['table_info'])) {
$field['lookup_name'] .= '.' . $field['table_info']['field_id'];
}
} elseif (in_array($field['type'], PodsForm::file_field_types())) {
$field['lookup_name'] .= '.guid';
}
}
$export_fields[$field['name']] = $field;
} elseif (isset($object_fields[$field['name']])) {
$field = $object_fields[$field['name']];
$field['lookup_name'] = $field['name'];
$export_fields[$field['name']] = $field;
} elseif ($field['name'] == $pod->pod_data['field_id']) {
$field['type'] = 'number';
$field['lookup_name'] = $field['name'];
$export_fields[$field['name']] = $field;
}
}
$data = array();
foreach ($export_fields as $field) {
// Return IDs (or guid for files) if only one level deep
if (1 == $depth) {
$data[$field['name']] = $pod->field(array('name' => $field['lookup_name'], 'output' => 'arrays'));
} elseif ((-1 == $depth || $current_depth < $depth) && 'pick' == $field['type'] && !in_array(pods_var('pick_object', $field), $simple_tableless_objects)) {
$related_data = array();
$related_ids = $pod->field(array('name' => $field['name'], 'output' => 'ids'));
if (!empty($related_ids)) {
$related_ids = (array) $related_ids;
$pick_object = pods_var_raw('pick_object', $field);
$related_pod = pods(pods_var_raw('pick_val', $field), null, false);
// If this isn't a Pod, return data exactly as Pods does normally
if (empty($related_pod) || 'pod' != $pick_object && $pick_object != $related_pod->pod_data['type'] || $related_pod->pod == $pod->pod) {
$related_data = $pod->field(array('name' => $field['name'], 'output' => 'arrays'));
} else {
$related_object_fields = (array) pods_var_raw('object_fields', $related_pod->pod_data, array(), null, true);
$related_fields = array_merge($related_pod->fields, $related_object_fields);
foreach ($related_ids as $related_id) {
if ($related_pod->fetch($related_id)) {
$related_item = $this->export_pod_item_level($related_pod, $related_fields, $depth, $flatten, $current_depth + 1);
$related_data[$related_id] = $this->do_hook('export_pod_item_level', $related_item, $related_pod->pod, $related_pod->id(), $related_pod, $related_fields, $depth, $flatten, $current_depth + 1);
}
}
if ($flatten && !empty($related_data)) {
$related_data = pods_serial_comma(array_values($related_data), array('and' => '', 'field_index' => $related_pod->pod_data['field_index']));
}
}
}
$data[$field['name']] = $related_data;
} else {
$data[$field['name']] = $pod->field(array('name' => $field['name'], 'output' => 'arrays'));
}
if ($flatten && is_array($data[$field['name']])) {
$data[$field['name']] = pods_serial_comma($data[$field['name']], array('field' => $field['name'], 'fields' => $export_fields, 'and' => ''));
}
}
$data['id'] = (int) $pod->id();
return $data;
}