File: //home/plan4ev/public_html/wp-content/plugins/caldera-forms/includes/field_processors.php
<?php
add_filter('caldera_forms_view_field_checkbox', 'cf_handle_multi_view', 10, 3);
function cf_handle_multi_view( $data, $field ){
if( empty( $data ) || !is_array( $data ) ){
return $data;
}
// Remove the json total of checked options
array_pop($data);
// can put in the value as well.
$viewer = array();
foreach( $data as $key=>$value ){
foreach( $field['config']['option'] as $option_key=>$option ){
if( $value == $option['value'] ){
$viewer[$key] = $option['label'] . ' (' . $option['value'] . ')';
}
}
if( !isset( $viewer[$key] ) ){
$viewer[$key] = $value;
}
}
return implode( ', ', $viewer );
}
add_filter('caldera_forms_process_field_file', 'cf_handle_file_upload', 10, 3);
add_filter('caldera_forms_process_field_advanced_file', 'cf_handle_file_upload', 10, 3);
/**
* Handle uploading of files from file fields
*
* @since unknown
*
* @param $entry
* @param $field
* @param $form
*
* @return bool|mixed
*/
function cf_handle_file_upload( $entry, $field, $form ){
if( ! Caldera_Forms_Field_Util::is_file_field( $field, $form ) ){
return false;
}
// check transdata if string based entry
if( is_string( $entry ) ){
$transdata = Caldera_Forms_Transient::get_transient( $entry );
if( !empty( $transdata ) ){
Caldera_Forms_Transient::delete_at_submission_complete( $entry );
return $transdata;
}
}
if( isset($_POST[ '_cf_frm_edt' ] ) ) {
if ( ! isset( $_FILES )
|| ( isset( $_FILES[ $field[ 'ID' ] ][ 'size' ][0] ) && 0 == $_FILES[ $field[ 'ID' ] ][ 'size' ][0] )
|| ( isset( $_FILES[ $field[ 'ID' ] ][ 'size' ] ) && 0 == $_FILES[ $field[ 'ID' ] ][ 'size' ] )
) {
$entry = Caldera_Forms::get_field_data( $field[ 'ID' ], $form, absint( $_POST[ '_cf_frm_edt' ] ) );
return $entry;
}
}
$required = false;
if ( isset( $field[ 'required' ] ) && $field[ 'required' ] ){
$required = true;
}
if(!empty($_FILES[$field['ID']]['size'])){
// build wp allowed types
$allowed = get_allowed_mime_types();
$wp_allowed = array();
foreach( $allowed as $ext=>$mime ){
$exts = explode('|', $ext );
foreach( $exts as $ext ){
$wp_allowed[ strtolower( $ext ) ] = true;
}
}
// check if user set allowed types
if(!empty($field['config']['allowed'])){
$allowed = array_map('trim', explode(',', trim( $field['config']['allowed'] ) ) );
$field['config']['allowed'] = array();
foreach( $allowed as $ext ){
$ext = strtolower( trim( $ext, '.' ) );
if( in_array($ext, $wp_allowed ) ){
$field['config']['allowed'][ $ext ] = true;
}
}
}else{
//set allowed to only what wp allows
$field['config']['allowed'] = $wp_allowed;
}
// check each file now
foreach( (array) $_FILES[$field['ID']]['name'] as $file_name ){
if( empty( $file_name ) ){
return $entry;
}
$filetype = wp_check_filetype( basename( $file_name ), null );
if( empty( $field['config']['allowed'][ strtolower( $filetype['ext'] ) ] ) ){
return new WP_Error( 'fail', __('This file type is not allowed. Please try another.', 'caldera-forms') );
}
}
if ( ! function_exists( 'wp_handle_upload' ) ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
}
$files = array();
foreach( (array) $_FILES[$field['ID']] as $file_key=>$file_parts ){
foreach( (array) $file_parts as $part_index=>$part_value ){
$files[ $part_index ][ $file_key ] = $part_value;
}
}
$uploads = array();
foreach( $files as $file ){
if( ! $required && 0 == $file[ 'size' ] ){
continue;
}
if( ! Caldera_Forms_Files::is_private( $field ) ){
$upload_args = array(
'private' => false,
'field_id' => $field['ID'],
'form_id' => $form['ID']
);
}else{
$upload_args = array(
'private' => true,
'field_id' => $field['ID'],
'form_id' => $form['ID']
);
}
$uploader = Caldera_Forms_Files::get_upload_handler( $form, $field );
if( is_callable( $uploader) ){
$upload = call_user_func( $uploader, $file, $upload_args );
}else{
return new WP_Error( 'invalid-upload-handler', sprintf( __( 'Invalid file upload handler. See %s', 'caldera-forms'), 'https://calderaforms.com/doc/alternative-file-upload-directory/') );
}
if( !empty( $upload['error'] ) ){
return new WP_Error( 'fail', $upload['error'] );
}
$uploads[] = $upload['url'];
// check media handler
if( !empty( $field['config']['media_lib'] ) ){
Caldera_Forms_Files::add_to_media_library( $upload, $field );
}
}
if( count( $uploads ) > 1 ){
return $uploads;
}
if( empty( $uploads ) ){
return array();
}
return $uploads[0];
}else{
// for multiples
if( is_array( $entry ) ){
foreach( $entry as $index => $line ){
if( !filter_var( $line, FILTER_VALIDATE_URL ) ){
unset( $entry[ $index ] );
}
}
return $entry;
}else{
if( filter_var( $entry, FILTER_VALIDATE_URL ) ){
return $entry;
}
}
}
}
add_filter( 'caldera_forms_render_get_field_type-hidden', 'caldera_forms_allow_edit_hidden_fields' );
/**
* When editing a form from entry viewer, convert hidden fields to text fields to so they too can be edited.
*
* @since 1.4.3
*
* @uses "caldera_forms_render_get_field_type-hidden" filter
*
* @param array $field Field config
*
* @return mixed
*/
function caldera_forms_allow_edit_hidden_fields( $field ){
if( ( ! empty( $_GET[ 'modal' ] ) && 'view_entry' == $_GET[ 'modal' ] ) || ( ! empty( $_POST[ '_cf_frm_edt' ] ) ) ){
$field[ 'type' ] = 'text';
}
return $field;
};
add_filter( 'caldera_forms_validate_field_phone_better', 'caldera_forms_validate_phone_better', 10, 3 );
/**
* Prevent phone number fields submitted with country code only from being considered valid.
*
* @uses "caldera_forms_validate_field_phone_better" filter
*
* @since 1.5.2
*
* @param string|mixed $entry
* @param array $field
* @param array $form
*
* @return WP_Error|string
*/
function caldera_forms_validate_phone_better( $entry, $field, $form ){
if( empty( $field[ 'required' ] ) ){
return $entry;
}
if( false !== strpos( $entry, '+' ) && 4 >= strlen( $entry ) ){
return new WP_Error( 400, __( 'Country code is required', 'caldera-forms' ) );
}
return $entry;
}
add_filter( 'caldera_forms_validate_field_star_rating', 'caldera_forms_validate_field_star_rating', 10, 3 );
/**
* Validate star rating fields
*
* Makes 0 an invalid entry for a required star rating field
*
* @since 1.5.5
*
* @uses "caldera_forms_validate_field_star_rating" filter
*
* @param int|string $entry Entyre value
* @param array $field
* @param array $form
* @return WP_Error|string|int
*/
function caldera_forms_validate_field_star_rating( $entry, $field, $form ){
if( ! empty( $field[ 'required' ] ) && empty( $entry ) ){
return new WP_Error( 400, __( 'Value is required', 'caldera-forms' ) );
}
return $entry;
}
add_filter( 'caldera_forms_validate_field_email', 'caldera_forms_validate_field_email', 10, 3 );
/**
* Reject field value if ! is_email() on email fields
*
* @uses "caldera_forms_validate_field_email" filter
*
* @since 1.7.2
*
* @param string|mixed $entry
* @param array $field
* @param array $form
*
* @return WP_Error|string
*/
function caldera_forms_validate_field_email( $entry, $field, $form ){
if( empty( $entry ) ){
return $entry;
}
if( ! is_email( $entry ) ){
return new WP_Error( 400, __( 'Not a valid email address', 'caldera-forms' ) );
}
return $entry;
}
add_filter( 'caldera_forms_validate_field_number', 'caldera_forms_validate_field_number', 10, 3 );
/**
* Reject field value if ! is_numeric() on number fields
*
* @uses "caldera_forms_validate_field_number" filter
*
* @since 1.7.2
*
* @param string|mixed $entry
* @param array $field
* @param array $form
*
* @return WP_Error|string
*/
function caldera_forms_validate_field_number( $entry, $field, $form ){
if( empty( $entry ) ){
return $entry;
}
if( ! is_numeric( $entry ) ){
return new WP_Error( 400, __( 'Not a number', 'caldera-forms' ) );
}
return $entry;
}