PodsAPI::export_pod_item_level PHP Method

export_pod_item_level() private method

Export a pod item by depth level
Since: 2.3
private export_pod_item_level ( Pods $pod, array $fields, integer $depth, boolean $flatten = false, integer $current_depth = 1 ) : array
$pod Pods Pods object
$fields array Fields to export
$depth integer Depth limit
$flatten boolean Whether to flatten arrays for display
$current_depth integer Current depth level
return array Data array
    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;
    }