| Server IP : 78.24.162.143 / Your IP : 216.73.216.17 Web Server : Apache System : Linux hosting.cormo.systems 5.15.0-179-generic #189-Ubuntu SMP Tue May 5 18:20:56 UTC 2026 x86_64 User : web63 ( 5058) PHP Version : 7.4.33 Disable Function : create_functions,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/clients/client34/web63/web/wp-content/plugins/pods/src/Pods/Data/ |
Upload File : |
<?php
namespace Pods\Data;
use Pods;
use Pods\Whatsit\Field;
use Pods\Whatsit\Object_Field;
/**
* Map_Field_Values class.
*
* @since 2.8.0
*/
class Map_Field_Values {
/**
* Map the matching image field value.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of all fields in the path.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching image field value or null if there was no match.
*/
public function map_value( $field, $traverse, $field_data, $obj = null ) {
// Remove the first field from $traverse.
if ( $field === reset( $traverse ) ) {
array_shift( $traverse );
}
/**
* Allow filtering the field mapping ahead of running all other method checks.
*
* @since 2.8.0
*
* @param null|mixed $value The matching field value or null if there was no match.
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*/
$value = apply_filters( 'pods_data_map_field_values_map_value_pre_check', null, $field, $traverse, $field_data, $obj );
if ( null !== $value ) {
return $value;
}
$methods = [
'custom',
'pod_info',
'field_info',
'display_fields',
'context_info',
'calculation',
'image_fields',
'avatar',
];
$method = false;
// Go through all of the support mappings and check for a field value.
while ( null === $value && $method = array_shift( $methods ) ) {
$value = $this->$method( $field, $traverse, $field_data, $obj );
}
// If no value was found, set $method to false.
if ( null === $value ) {
$method = false;
}
/**
* Allow filtering the field mapping.
*
* @since 2.8.0
*
* @param null|mixed $value The matching field value or null if there was no match.
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
* @param string|false $method The matching mapping method or false if there was no match.
*/
return apply_filters( 'pods_data_map_field_values_map_value', $value, $field, $traverse, $field_data, $obj, $method );
}
/**
* Handle custom field mapping.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching field value or null if there was no match.
*/
public function custom( $field, $traverse, $field_data, $obj ) {
/**
* Allow filtering for a custom field mapping.
*
* @since 2.8.0
*
* @param null|mixed $value The matching field value or null if there was no match.
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*/
return apply_filters( 'pods_data_map_field_values_custom', null, $field, $traverse, $field_data, $obj );
}
/**
* Map the matching pod info value.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching pod info value or null if there was no match.
*/
public function pod_info( $field, $traverse, $field_data, $obj ) {
// Skip if the field exists.
if ( $field_data ) {
return null;
}
// Skip if not the field we are looking for.
if ( '_pod' !== $field ) {
return null;
}
// Skip if there is no Pods object.
if ( ! $obj ) {
return null;
}
$pod_option = ! empty( $traverse[0] ) ? $traverse[0] : 'name';
return $obj->pod_data->get_arg( $pod_option );
}
/**
* Map the matching field info value.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching field info value or null if there was no match.
*/
public function field_info( $field, $traverse, $field_data, $obj ) {
// Skip if the field exists.
if ( $field_data ) {
return null;
}
// Skip if not the field we are looking for.
if ( '_field' !== $field ) {
return null;
}
// Skip if there is no Pods object.
if ( ! $obj ) {
return null;
}
// Skip if no field was set.
if ( empty( $traverse[0] ) ) {
return null;
}
$field_match = $traverse[0];
$field_option = ! empty( $traverse[1] ) ? $traverse[1] : 'label';
return $obj->fields( $field_match, $field_option );
}
/**
* Map the matching _display_fields value.
*
* @since 2.9.4
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching _display_fields value or null if there was no match.
*/
public function display_fields( $field, $traverse, $field_data, $obj ) {
// Skip if the field exists.
if ( $field_data ) {
return null;
}
$is_all_fields = '_all_fields' === $field;
// Skip if not the field we are looking for.
if ( '_display_fields' !== $field && ! $is_all_fields ) {
return null;
}
// Skip if there is no Pods object.
if ( ! $obj ) {
return null;
}
$item_id = $obj->id();
// Skip if there is no item data.
if ( empty( $item_id ) ) {
return null;
}
$output_type = ! empty( $traverse[0] ) ? $traverse[0] : 'ul';
$fields_to_display = '_all';
if ( ! $is_all_fields ) {
$fields_to_display = ( ! empty( $traverse[1] ) ? $traverse[1] : '_all' );
}
$pod = $obj->pod_data;
$are_fields_excluded = 0 === strpos( $fields_to_display, 'exclude=' );
if ( '_all' === $fields_to_display || $are_fields_excluded ) {
$display_fields = $pod->get_fields();
// @todo For post types -- handle checking if the post type supported title / editor, include them only if they are enabled.
if ( ! empty( $obj->data->field_index ) ) {
$display_field = $pod->get_field( $obj->data->field_index );
if ( $display_field ) {
$display_fields = array_merge( [
$display_field->get_name() => $display_field,
], $display_fields );
}
}
if ( $are_fields_excluded ) {
// Handle excluded fields.
$fields_to_exclude = substr( $fields_to_display, strlen( 'exclude=' ) );
$fields_to_exclude = explode( '|', $fields_to_exclude );
$fields_to_exclude = array_filter( array_unique( $fields_to_exclude ) );
foreach ( $fields_to_exclude as $field_to_exclude ) {
$field_to_exclude = str_replace( ':', '.', $field_to_exclude );
$field_name = explode( '.', $field_to_exclude );
$field_name = $field_name[0];
if ( isset( $display_fields[ $field_name ] ) ) {
unset( $display_fields[ $field_name ] );
}
}
}
} else {
$display_fields = [];
// Handle included fields.
$fields_to_display = explode( '|', $fields_to_display );
$fields_to_display = array_filter( array_unique( $fields_to_display ) );
foreach ( $fields_to_display as $field_to_display ) {
$field_to_display = str_replace( ':', '.', $field_to_display );
$field_name = explode( '.', $field_to_display );
$field_name = $field_name[0];
$display_field = $pod->get_field( $field_name );
if ( $display_field ) {
$display_fields[ $field_to_display ] = $display_field;
}
}
}
if ( 'div' === $output_type ) {
$display_file = 'list.php';
$list_type = 'div';
$tag_name = 'div';
$sub_tag_name = 'div';
} elseif ( 'p' === $output_type ) {
$display_file = 'list.php';
$list_type = 'p';
$tag_name = 'div';
$sub_tag_name = 'p';
} elseif ( 'table' === $output_type ) {
$display_file = 'table.php';
$list_type = 'table';
$tag_name = 'table';
$sub_tag_name = 'td';
} elseif ( 'ol' === $output_type ) {
$display_file = 'list.php';
$list_type = 'ol';
$tag_name = 'ol';
$sub_tag_name = 'li';
} elseif ( 'dl' === $output_type ) {
$display_file = 'dl.php';
$list_type = 'dl';
$tag_name = 'dl';
$sub_tag_name = 'dd';
} else {
// Default to ul / li list.
$display_file = 'list.php';
$list_type = 'ul';
$tag_name = 'ul';
$sub_tag_name = 'li';
}
$bypass_map_field_values = true;
return pods_view( PODS_DIR . 'ui/front/display/' . $display_file, compact( array_keys( get_defined_vars() ) ), false, 'cache', true );
}
/**
* Map the matching context info value.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching context info value or null if there was no match.
*/
public function context_info( $field, $traverse, $field_data, $obj ) {
// Skip if the field exists.
if ( $field_data ) {
return null;
}
// Skip if not the field we are looking for.
if ( '_context' !== $field ) {
return null;
}
// Skip if no field was set.
if ( empty( $traverse[0] ) ) {
return null;
}
$context_type = $traverse[0];
$supported_contexts = [
'get',
'post',
'request',
'query',
'url',
'uri',
'url-relative',
'template-url',
'stylesheet-url',
'site-url',
'home-url',
'admin-url',
'includes-url',
'content-url',
'plugins-url',
'network-site-url',
'network-home-url',
'network-admin-url',
'user-admin-url',
'prefix',
'user',
'option',
'site-option',
'date',
'pods',
'pods_display',
'post_id',
];
if ( ! in_array( $context_type, $supported_contexts, true ) ) {
return null;
}
$context_var = isset( $traverse[1] ) ? $traverse[1] : null;
$raw = isset( $traverse[2] ) && 'raw' === $traverse[2];
if ( 'user' === $context_type && 'user_pass' === $context_var ) {
return null;
}
$value = pods_v( $context_var, $context_type );
// Maybe return the raw value.
if ( $raw ) {
return $value;
}
// Sanitize the field with some basic protections.
return sanitize_text_field( $value );
}
/**
* Map the matching calculation value.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching calculation value or null if there was no match.
*/
public function calculation( $field, $traverse, $field_data, $obj ) {
// Skip if the field exists.
if ( $field_data ) {
return null;
}
// Skip if there is no Pods object.
if ( ! $obj ) {
return null;
}
$supported_calculations = [
'_zebra',
'_position',
'_total',
'_total_found',
'_total_all_rows',
'_total_pages',
'_current_page',
];
// Skip if not the field we are looking for.
if ( ! in_array( $field, $supported_calculations, true ) ) {
return null;
}
$value = null;
switch ( $field ) {
case '_zebra':
$value = (int) $obj->zebra();
break;
case '_position':
$value = $obj->position();
break;
case '_total':
$value = $obj->total();
break;
case '_total_found':
$value = $obj->total_found();
break;
case '_total_all_rows':
$value = $obj->total_all_rows();
break;
case '_total_pages':
$value = $obj->total_pages();
break;
case '_current_page':
$value = (int) $obj->page;
break;
}
return $value;
}
/**
* Map the matching image field value.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching image field value or null if there was no match.
*/
public function image_fields( $field, $traverse, $field_data, $obj ) {
// Skip if the field exists.
if ( $field_data ) {
return null;
}
// Default image field handlers.
$image_fields = [
'image_attachment',
'image_attachment_url',
'image_attachment_src',
];
$object_type = $obj ? $obj->pod_data->get_type() : null;
if ( 'post_type' === $object_type ) {
$image_fields[] = 'post_thumbnail';
$image_fields[] = 'post_thumbnail_url';
$image_fields[] = 'post_thumbnail_src';
} elseif ( 'media' === $object_type ) {
$image_fields[] = '_img';
$image_fields[] = '_url';
$image_fields[] = '_src';
}
// Handle special field tags.
if ( ! in_array( $field, $image_fields, true ) ) {
return null;
}
$item_id = $obj ? $obj->id() : 0;
// Handle the odd ._src and ._url variations with dot-notation too.
if ( 'post_thumbnail' === $field ) {
$first_traverse = ! empty( $traverse[0] ) ? $traverse[0] : null;
if ( '_src' === $first_traverse || '_url' === $first_traverse ) {
// Append the first traverse to the field name used.
$field .= $first_traverse;
// Remove the first traverse from the list.
array_shift( $traverse );
}
}
// Copy for further modification.
$image_field = $field;
$traverse_params = $traverse;
// Is it a URL request?
if ( '_url' === $image_field || '_src' === $image_field ) {
// This is a _url or _src field itself.
$url = true;
} else {
$url = '_url' === substr( $image_field, - 4 ) || '_src' === substr( $image_field, - 4 );
if ( $url ) {
// This is a image_field._url or a image_field._src field.
$image_field = substr( $image_field, 0, - 4 );
}
}
$attachment_id = 0;
switch ( $image_field ) {
// Media pods.
case '_img':
case '_url':
case '_src':
$attachment_id = $item_id;
break;
// All other pods.
case 'post_thumbnail':
if ( $item_id ) {
$attachment_id = get_post_thumbnail_id( $item_id );
}
break;
case 'image_attachment':
if ( isset( $traverse_params[0] ) ) {
$attachment_id = $traverse_params[0];
array_shift( $traverse_params );
}
break;
}
if ( ! $attachment_id ) {
return null;
}
$is_image = wp_attachment_is_image( $attachment_id );
$size = 'thumbnail';
if ( isset( $traverse_params[0] ) ) {
$size = $traverse_params[0];
array_shift( $traverse_params );
if ( pods_is_image_size( $size ) ) {
// Force image request since a valid size parameter is passed.
$is_image = true;
} else {
// No valid image size found.
$size = false;
}
}
if ( $url ) {
if ( $is_image ) {
return pods_image_url( $attachment_id, $size, 0, true );
}
return wp_get_attachment_url( $attachment_id );
}
if ( $size ) {
// Pods will auto-get the thumbnail ID if this isn't an attachment.
return pods_image( $attachment_id, $size, 0, null, true );
}
if ( 'media' !== $object_type ) {
// Fallback to attachment Post object to look for other image properties.
$media = pods( 'media', $attachment_id, false );
if ( $media && $media->valid() && $media->exists() ) {
return $media->field( [
'name' => implode( '.', $traverse_params ),
'bypass_map_field_values' => true,
] );
}
// Fallback to default attachment object.
$attachment = get_post( $attachment_id );
} else {
$attachment = $obj->row();
}
$value = pods_v( implode( '.', $traverse_params ), $attachment );
if ( null !== $value ) {
return $value;
}
// Start traversal though object property or metadata.
$name_key = array_shift( $traverse_params );
$value = pods_v( $name_key, $attachment );
if ( null !== $value ) {
return $value;
}
$value = get_post_meta( $attachment_id, $name_key, true );
return pods_traverse( $traverse_params, $value );
}
/**
* Map the matching avatar field value.
*
* @since 2.8.0
*
* @param string $field The first field name in the path.
* @param string[] $traverse The list of fields in the path excluding the first field name.
* @param null|Field|Object_Field $field_data The field data or null if not a field.
* @param Pods|null $obj The Pods object or null if not set.
*
* @return null|mixed The matching avatar field value or null if there was no match.
*/
public function avatar( $field, $traverse, $field_data, $obj ) {
// Skip if not the field we are looking for.
if ( 'avatar' !== $field ) {
return null;
}
// Skip if there is no Pods object.
if ( ! $obj ) {
return null;
}
global $wpdb;
// Skip if not on the supported pod type.
if ( 'user' !== $obj->pod_data->get_type() && $wpdb->users !== $obj->pod_data->get_table_name() ) {
return null;
}
$size = 0;
$item_id = $obj->id();
// Skip if the item ID is not set.
if ( empty( $item_id ) ) {
return null;
}
// Copy for further modification.
$image_field = $field;
$traverse_params = $traverse;
$url = '_url' === substr( $image_field, - 4 ) || '_src' === substr( $image_field, - 4 );
if ( isset( $traverse_params[0] ) ) {
// Check if there is a numeric size, bail if not because it needs normal relationship traversal.
if ( $field_data && ! is_numeric( $traverse_params[0] ) ) {
return null;
}
$size = absint( $traverse_params[0] );
}
if ( $url ) {
if ( 0 < $size ) {
$avatar_url = get_avatar_url( $item_id, $size );
} else {
$avatar_url = get_avatar_url( $item_id );
}
if ( ! $avatar_url ) {
return '';
}
}
if ( 0 < $size ) {
$avatar = get_avatar( $item_id, $size );
} else {
$avatar = get_avatar( $item_id );
}
if ( ! $avatar ) {
return '';
}
return $avatar;
}
}