public function load_pods($params = null)
{
$current_language = false;
// Get current language data
$lang_data = self::get_current_language();
if ($lang_data) {
if (!empty($lang_data['language'])) {
$current_language = $lang_data['language'];
}
}
$params = (object) pods_sanitize($params);
$order = 'ASC';
$orderby = 'menu_order title';
$limit = -1;
$ids = false;
$meta_query = array();
$cache_key = '';
if (isset($params->type) && !empty($params->type)) {
if (!is_array($params->type)) {
$params->type = array(trim($params->type));
}
sort($params->type);
$meta_query[] = array('key' => 'type', 'value' => $params->type, 'compare' => 'IN');
if (0 < count($params->type)) {
$cache_key .= '_type_' . trim(implode('_', $params->type));
}
}
if (isset($params->object) && !empty($params->object)) {
if (!is_array($params->object)) {
$params->object = array($params->object);
}
$params->object = pods_trim($params->object);
sort($params->object);
$meta_query[] = array('key' => 'object', 'value' => $params->object, 'compare' => 'IN');
if (1 == count($params->object)) {
$cache_key .= '_object_' . trim(implode('', $params->object));
}
}
if (isset($params->options) && !empty($params->options) && is_array($params->options)) {
foreach ($params->options as $option => $value) {
if (!is_array($value)) {
$value = array($value);
}
$value = pods_trim($value);
sort($value);
$meta_query[] = array('key' => $option, 'value' => pods_sanitize($value), 'compare' => 'IN');
}
$cache_key = '';
}
if (isset($params->where) && is_array($params->where)) {
$meta_query = array_merge($meta_query, (array) $params->where);
}
if (isset($params->order) && !empty($params->order) && in_array(strtoupper($params->order), array('ASC', 'DESC'))) {
$order = strtoupper($params->order);
}
if (isset($params->orderby) && !empty($params->orderby)) {
$orderby = strtoupper($params->orderby);
}
if (isset($params->limit) && !empty($params->limit)) {
$limit = pods_absint($params->limit);
}
if (isset($params->ids) && !empty($params->ids)) {
$ids = $params->ids;
if (!is_array($ids)) {
$ids = explode(',', $ids);
}
}
if (empty($ids)) {
$ids = false;
}
$pre_key = '';
if (!empty($current_language)) {
$pre_key .= '_' . $current_language;
}
if (isset($params->count) && $params->count) {
$pre_key .= '_count';
}
if (isset($params->ids) && $params->ids && !empty($ids)) {
$pre_key .= '_ids_' . implode('_', $ids);
}
if (isset($params->names) && $params->names) {
$pre_key .= '_names';
} elseif (isset($params->names_ids) && $params->names_ids) {
$pre_key .= '_names_ids';
}
if (isset($params->key_names) && $params->key_names) {
$pre_key .= '_namekeys';
}
if (isset($params->fields) && !$params->fields) {
$pre_key .= '_nofields';
}
if (isset($params->table_info) && $params->table_info) {
$pre_key .= '_tableinfo';
}
$pre_key .= '_get';
if (empty($cache_key)) {
$cache_key = 'pods' . $pre_key . '_all';
} else {
$cache_key = 'pods' . $pre_key . $cache_key;
}
if (pods_api_cache() && !empty($cache_key) && ('pods' . (!empty($current_language) ? '_' . $current_language : '') . '_get_all' != $cache_key || empty($meta_query)) && $limit < 1 && (empty($orderby) || 'menu_order title' == $orderby) && empty($ids)) {
$the_pods = pods_transient_get($cache_key);
if (false === $the_pods) {
$the_pods = pods_cache_get($cache_key, 'pods');
}
if (!is_array($the_pods) && 'none' == $the_pods) {
return array();
} elseif (false !== $the_pods) {
return $the_pods;
}
}
$the_pods = array();
$args = array('post_type' => '_pods_pod', 'nopaging' => true, 'posts_per_page' => $limit, 'order' => $order, 'orderby' => $orderby, 'meta_query' => $meta_query);
// Only set post__in if there are ids to filter (see https://core.trac.wordpress.org/ticket/28099)
if (false != $ids) {
$args['post__in'] = $ids;
}
$_pods = get_posts($args);
$export_ignore = array('object_type', 'object_name', 'table', 'meta_table', 'pod_table', 'field_id', 'field_index', 'field_slug', 'field_type', 'field_parent', 'field_parent_select', 'meta_field_id', 'meta_field_index', 'meta_field_value', 'pod_field_id', 'pod_field_index', 'object_fields', 'join', 'where', 'where_default', 'orderby', 'pod', 'recurse', 'table_info', 'attributes', 'group', 'grouped', 'developer_mode', 'dependency', 'depends-on', 'excludes-on');
$total_fields = 0;
if (isset($params->count) && $params->count) {
$the_pods = count($_pods);
} else {
foreach ($_pods as $pod) {
if (isset($params->names) && $params->names) {
$the_pods[$pod->post_name] = $pod->post_title;
} elseif (isset($params->names_ids) && $params->names_ids) {
$the_pods[$pod->ID] = $pod->post_name;
} else {
if (isset($params->fields) && !$params->fields) {
$pod->fields = false;
}
$pod = $this->load_pod(array('pod' => $pod, 'table_info' => !empty($params->table_info)));
// Remove extra data not needed
if (pods_var('export', $params, false) && (!isset($params->fields) || $params->fields)) {
foreach ($export_ignore as $ignore) {
if (isset($pod[$ignore])) {
unset($pod[$ignore]);
}
}
foreach ($pod['fields'] as $field => $field_data) {
if (isset($pod['fields'][$field]['table_info'])) {
unset($pod['fields'][$field]['table_info']);
}
}
}
$total_fields += count($pod['fields']);
if (isset($params->key_names) && $params->key_names) {
$the_pods[$pod['name']] = $pod;
} else {
$the_pods[$pod['id']] = $pod;
}
}
}
}
if ((!function_exists('pll_current_language') || isset($params->refresh) && $params->refresh) && !empty($cache_key) && ('pods' != $cache_key || empty($meta_query)) && $limit < 1 && (empty($orderby) || 'menu_order title' == $orderby) && empty($ids)) {
// Too many Pods can cause issues with the DB when caching is not enabled
if (15 < count($the_pods) || 75 < count($total_fields)) {
pods_transient_clear($cache_key);
if (pods_api_cache()) {
if (empty($the_pods) && (!isset($params->count) || !$params->count)) {
pods_cache_set($cache_key, 'none', 'pods');
} else {
pods_cache_set($cache_key, $the_pods, 'pods');
}
}
} else {
pods_cache_clear($cache_key, 'pods');
if (pods_api_cache()) {
if (empty($the_pods) && (!isset($params->count) || !$params->count)) {
pods_transient_set($cache_key, 'none');
} else {
pods_transient_set($cache_key, $the_pods);
}
}
}
}
return $the_pods;
}