public function load_field($params, $strict = false)
{
$params = (object) $params;
if (!isset($params->table_info)) {
$params->table_info = false;
}
$pod = array();
$field = array();
if (isset($params->post_title)) {
$_field = $params;
} elseif (isset($params->id) && !empty($params->id)) {
$_field = get_post($dumb = (int) $params->id);
} else {
if (!isset($params->pod)) {
$params->pod = '';
}
if (!isset($params->pod_id)) {
$params->pod_id = 0;
}
if (isset($params->pod_data)) {
$pod = $params->pod_data;
} else {
$pod = $this->load_pod(array('name' => $params->pod, 'id' => $params->pod_id, 'table_info' => false), false);
if (false === $pod) {
if ($strict) {
return pods_error(__('Pod not found', 'pods'), $this);
}
return false;
}
}
$params->pod_id = $pod['id'];
$params->pod = $pod['name'];
if (empty($params->name) && empty($params->pod) && empty($params->pod_id)) {
return pods_error(__('Either Field Name or Field ID / Pod ID are required', 'pods'), $this);
}
$params->name = pods_clean_name($params->name, true, 'meta' == $pod['storage'] ? false : true);
if (isset($pod['fields'][$params->name]) && isset($pod['fields'][$params->name]['id'])) {
return $pod['fields'][$params->name];
}
$field = false;
if (pods_api_cache()) {
$field = pods_transient_get('pods_field_' . $params->pod . '_' . $params->name);
}
if (empty($field)) {
$field = get_posts(array('name' => $params->name, 'post_type' => '_pods_field', 'posts_per_page' => 1, 'post_parent' => $params->pod_id));
if (empty($field)) {
if ($strict) {
return pods_error(__('Field not found', 'pods'), $this);
}
return false;
}
$_field = $field[0];
$field = array();
}
}
if (empty($_field)) {
if ($strict) {
return pods_error(__('Field not found', 'pods'), $this);
}
return false;
}
$_field = get_object_vars($_field);
if (!isset($pod['name']) && !isset($_field['pod'])) {
if (0 < $_field['post_parent']) {
$pod = $this->load_pod(array('id' => $_field['post_parent'], 'table_info' => false), false);
}
if (empty($pod)) {
if ($strict) {
return pods_error(__('Pod for field not found', 'pods'), $this);
}
return false;
}
}
if (empty($field)) {
if (pods_api_cache() && (isset($pod['name']) || isset($_field['pod']))) {
$field = pods_transient_get('pods_field_' . pods_var('name', $pod, pods_var('pod', $_field), null, true) . '_' . $_field['post_name']);
}
if (empty($field)) {
$defaults = array('type' => 'text');
$field = array('id' => $_field['ID'], 'name' => $_field['post_name'], 'label' => $_field['post_title'], 'description' => $_field['post_content'], 'weight' => $_field['menu_order'], 'pod_id' => $_field['post_parent'], 'pick_object' => '', 'pick_val' => '', 'sister_id' => '', 'table_info' => array());
if (isset($pod['name'])) {
$field['pod'] = $pod['name'];
} elseif (isset($_field['pod'])) {
$field['pod'] = $_field['pod'];
}
$field['options'] = get_post_meta($field['id']);
$options_ignore = array('method', 'table_info', 'attributes', 'group', 'grouped', 'developer_mode', 'dependency', 'depends-on', 'excludes-on');
foreach ($options_ignore as $ignore) {
if (isset($field['options'][$ignore])) {
unset($field['options'][$ignore]);
}
}
foreach ($field['options'] as $option => $value) {
if (is_array($value)) {
foreach ($value as $k => $v) {
if (!is_array($v)) {
$value[$k] = maybe_unserialize($v);
}
}
if (1 == count($value)) {
$value = current($value);
}
} else {
$value = maybe_unserialize($value);
}
$field['options'][$option] = $value;
}
$field['options'] = array_merge($defaults, $field['options']);
$field['type'] = $field['options']['type'];
unset($field['options']['type']);
if (isset($field['options']['pick_object'])) {
$field['pick_object'] = $field['options']['pick_object'];
unset($field['options']['pick_object']);
}
if (isset($field['options']['pick_val'])) {
$field['pick_val'] = $field['options']['pick_val'];
unset($field['options']['pick_val']);
}
if (isset($field['options']['sister_id'])) {
$field['sister_id'] = $field['options']['sister_id'];
unset($field['options']['sister_id']);
}
if (isset($field['options']['sister_field_id'])) {
unset($field['options']['sister_field_id']);
}
if (pods_api_cache() && (isset($pod['name']) || isset($_field['pod']))) {
pods_transient_set('pods_field_' . pods_var('name', $pod, pods_var('pod', $_field), null, true) . '_' . $field['name'], $field);
}
}
}
$field['table_info'] = array();
if ('pick' == $field['type'] && $params->table_info) {
$field['table_info'] = $this->get_table_info($field['pick_object'], $field['pick_val'], null, null, $field);
}
return $field;
}