public function lookup_related_items_from($field_id, $pod_id, $id, $field = null, $pod = null)
{
$related_ids = false;
$id = (int) $id;
$tableless_field_types = PodsForm::tableless_field_types();
if (empty($id) || !in_array(pods_v('type', $field), $tableless_field_types)) {
return false;
}
$related_pick_limit = 0;
if (!empty($field)) {
$options = (array) pods_var_raw('options', $field, $field, null, true);
$related_pick_limit = (int) pods_v('pick_limit', $options, 0);
if ('single' == pods_var_raw('pick_format_type', $options)) {
$related_pick_limit = 1;
}
}
if (!pods_tableless()) {
$field_id = (int) $field_id;
$sister_id = (int) pods_var_raw('sister_id', $field, 0);
$related_where = "\n `field_id` = {$field_id}\n AND `related_item_id` = {$id}\n ";
$sql = "\n SELECT *\n FROM `@wp_podsrel`\n WHERE\n {$related_where}\n ORDER BY `weight`\n ";
$relationships = pods_query($sql);
if (!empty($relationships)) {
$related_ids = array();
foreach ($relationships as $relation) {
if ($field_id == $relation->field_id && !in_array($relation->item_id, $related_ids)) {
$related_ids[] = (int) $relation->item_id;
} elseif (0 < $sister_id && $field_id == $relation->related_field_id && !in_array($relation->related_item_id, $related_ids)) {
$related_ids[] = (int) $relation->related_item_id;
}
}
}
} else {
// @todo handle meta-based lookups
return false;
if (!is_array($pod)) {
$pod = $this->load_pod(array('id' => $pod_id, 'table_info' => false), false);
}
if (!empty($pod) && in_array($pod['type'], array('post_type', 'media', 'taxonomy', 'user', 'comment', 'settings'))) {
$related_ids = array();
$meta_type = $pod['type'];
if (in_array($meta_type, array('post_type', 'media'))) {
$meta_type = 'post';
} elseif ('taxonomy' == $meta_type) {
$meta_type = 'term';
}
$no_conflict = pods_no_conflict_check('term' == $meta_type ? 'taxonomy' : $meta_type);
if (!$no_conflict) {
pods_no_conflict_on('term' == $meta_type ? 'taxonomy' : $meta_type);
}
if ('settings' == $meta_type) {
$related_id = get_option('_pods_' . $pod['name'] . '_' . $field['name']);
if (empty($related_id)) {
$related_id = get_option($pod['name'] . '_' . $field['name']);
}
if (is_array($related_id) && !empty($related_id)) {
foreach ($related_id as $related) {
if (is_array($related) && !empty($related)) {
if (isset($related['id'])) {
$related_ids[] = (int) $related['id'];
} else {
foreach ($related as $r) {
$related_ids[] = (int) $r;
}
}
} else {
$related_ids[] = (int) $related;
}
}
}
} else {
$related_id = get_metadata($meta_type, $id, '_pods_' . $field['name'], true);
if (empty($related_id)) {
$related_id = get_metadata($meta_type, $id, $field['name']);
}
if (is_array($related_id) && !empty($related_id)) {
foreach ($related_id as $related) {
if (is_array($related) && !empty($related)) {
if (isset($related['id'])) {
$related_ids[] = (int) $related['id'];
} else {
foreach ($related as $r) {
if (isset($related['id'])) {
$related_ids[] = (int) $r['id'];
} else {
$related_ids[] = (int) $r;
}
}
}
} else {
$related_ids[] = (int) $related;
}
}
}
}
if (!$no_conflict) {
pods_no_conflict_off('term' == $meta_type ? 'taxonomy' : $meta_type);
}
}
}
if (is_array($related_ids)) {
$related_ids = array_unique(array_filter($related_ids));
}
return $related_ids;
}