HEX
Server: Apache
System: Linux webd004.cluster130.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User: frenchy (106757)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/f/r/e/frenchy/www/_trash/wp-content/plugins/advanced-forms/api/api-forms.php
<?php


/**
 * The main function used to output a form
 * 
 *
 * @since 1.0.0
 *
 */
function advanced_form( $form_id, $args = array() ) {
	
	// Render form and catch output
	ob_start();
	
	do_action( 'af/form/render', $form_id, $args );
	
	$output = ob_get_clean();
	
	
	if ( ! isset( $args['echo'] ) || $args['echo'] ) {
		echo $output;
	}
	
	
	return $output;
	
}


/**
 * Helepr function to extract a specific field value from submitted fields
 *
 * @since 1.0.0
 *
 */
function af_get_field( $field_key_or_name, $fields = false ) {
	// Get fields from the global submission object if fields weren't passed
	if ( ! $fields && af_has_submission() ) {
		
		$fields = AF()->submission['fields'];
		
	}
	
	foreach( $fields as $field ) {
		if ( $field['key'] == $field_key_or_name || $field['name'] == $field_key_or_name ) {
			return $field['value'];
		}
		
		// Also search sub fields
		if ( isset( $field['sub_fields'] ) && is_array( $field['value'] ) ) {
			foreach ( $field['value'] as $sub_field_name => $sub_field_value ) {
				if ( $sub_field_name == $field_key_or_name ) {
					return $sub_field_value;
				}
			}
		}
	}
	
	return false;
	
}


/**
 * Save submitted field directly to post
 *
 * @since 1.1.1
 * @deprecated 1.3.0 Use af_save_field()
 * @see af_save_field()
 *
 */
function af_save_field_to_post( $field_key_or_name, $post_id ) {
	
	_deprecated_function( __FUNCTION__, '1.3.0', 'af_save_field()' );
    af_save_field( $field_key_or_name, $post_id );
	
}


/**
 * Save submitted field directly to an object (post, user, term) with ACF naming
 *
 * @since 1.3.0
 *
 */
function af_save_field( $field_key_or_name, $object_id ) {
	
	// Make sure we have a submission to work with
	if ( ! af_has_submission() ) {
		
		return false;
		
	}
	
	
	$field = af_get_field_object( $field_key_or_name );
	
	/**
	 * We save the field directly to the post using acf_update_value.
	 * This ensures that clone fields, repeaters etc. work as intended.
	 * $field['_input'] should match the raw $_POST value.
	 */
	if ( $field ) {
		
		$value = $field['_input'];
		
		acf_update_value( $value, $object_id, $field );
		
		return true;
		
	}
	
	
	return false;
	
}


/**
 * Save all submitted fields directly to an object (post, user, term) with ACF naming
 *
 * @since 1.3.0
 *
 */
function af_save_all_fields( $object_id, $excluded_fields = array() ) {
	// Make sure we have a submission to work with
	if ( ! af_has_submission() ) {
		return false;
	}
	
	$fields = AF()->submission['fields'];
	
	/**
	 * We save the fields directly to the post using acf_update_value.
	 * This ensures that clone fields, repeaters etc. work as intended.
	 * $field['_input'] should match the raw $_POST value.
	 */
	foreach ( $fields as $field ) {
		if ( in_array( $field['key'], $excluded_fields ) ) {
			continue;
		}
		
		$value = $field['_input'];
		acf_update_value( $value, $object_id, $field );
	}
	
	return true;
}


/**
 * Helper function to extract a full field object from submitted fields
 *
 * @since 1.2.0
 *
 */
function af_get_field_object( $field_key_or_name, $fields = false ) {
	
	// Get fields from the global submission object if fields weren't passed
	if ( ! $fields && af_has_submission() ) {
		
		$fields = AF()->submission['fields'];
		
	}
	
	
	foreach( $fields as $field ) {
		
		// Save submitted value to post using ACFs acf_update_value
		if ( $field['key'] == $field_key_or_name || $field['name'] == $field_key_or_name ) {
			
			return $field;
			
		}
		
	}
	
	
	return false;
	
}


/**
 * Used to register a form programmatically
 *
 * @since 1.0.0
 *
 */
function af_register_form( $form ) {
	
	global $af_registered_forms;
	
	if ( ! $af_registered_forms || ! is_array( $af_registered_forms ) ) {
		
		$af_registered_forms = array();
		
	}
	
	$form = af_get_valid_form( $form );

	if ( $form ) {
		
		$af_registered_forms[ $form['key'] ] = $form;

	}
	
	
	return $form;
	
}


/**
 * Checks if the passed key is a valid form key (begins with form_)
 *
 * @since 1.0.1
 *
 */
function af_is_valid_form_key( $key ) {
	
	if ( ! is_string( $key ) ) {
		
		return false;
		
	}
	
	
	if ( 'form_' == substr( $key, 0, 5 ) ) {
		
		return true;
		
	}
	
	
	return false;
	
}


/**
 * Validates and fills a form array with default values
 *
 * @since 1.0.0
 *
 */
function af_get_valid_form( $form ) {
	
	// A form key is always required
	if ( ! isset( $form['key'] ) ) {
		return false;
	}
	
	$args = array(
		'key'			=> '',
		'post_id' 		=> false,
		'title' 		=> '',
		'display' 		=> array(
			'description' 				=> '',
			'success_message' 			=> '',
		),
		'create_entries' => false,
	);
	
	$args = apply_filters( 'af/form/valid_form', $args );
	
	$form = wp_parse_args( $form, $args );
	
	return $form;
	
}


/**
 * Generates a form array from a form post object
 *
 * @since 1.0.0
 *
 */
function af_form_from_post( $form_post ) {
	
	// Get post object if ID has been passed
	if ( is_numeric( $form_post ) ) {
		$form_post = get_post( $form_post );
	}
	
	// Make sure we have a post and that it's a form
	if ( ! $form_post || 'af_form' != $form_post->post_type ) {
		return false;
	}
	
	
	$form = af_get_valid_form(array(
		'post_id' 		=> $form_post->ID,
		'title' 		=> $form_post->post_title,
		'key'			=> get_post_meta( $form_post->ID, 'form_key', true ),
		'display' 		=> array(
			'description' 				=> get_field( 'form_description', $form_post->ID ),
			'success_message' 			=> get_field( 'form_success_message', $form_post->ID ),
		),
		'create_entries' => get_field( 'form_create_entries', $form_post->ID ),
	));
	
	
	$form = apply_filters( 'af/form/from_post', $form, $form_post );
	$form = apply_filters( 'af/form/from_post/id=' . $form['post_id'], $form, $form_post );
	$form = apply_filters( 'af/form/from_post/key=' . $form['key'], $form, $form_post );
	
	return $form;
	
}


/**
 * Save a form array to a form post.
 * 
 * @since 1.7.0
 *
 */
function af_form_to_post( $form, $post ) {
	// Get post object if ID has been passed
	if ( is_numeric( $post ) ) {
		$post = get_post( $post );
	}

	wp_update_post(array(
		'ID' => $post->ID,
		'post_title' => $form['title'],
	));

	$form = af_get_valid_form( $form );

	update_post_meta( $post->ID, 'form_key', $form['key'] );

	update_field( 'field_form_description', $form['display']['description'], $post->ID );
	update_field( 'field_form_success_message', $form['display']['success_message'], $post->ID );

	update_field( 'field_form_create_entries', $form['create_entries'], $post->ID );

	$form = do_action( 'af/form/to_post', $form, $post );
	$form = do_action( 'af/form/to_post/id=' . $post->ID, $form, $post );
	$form = do_action( 'af/form/to_post/key=' . $form['key'], $form, $post );

	return $post;
}


/**
 * Retrieves a form either 
 *
 * @since 1.0.0
 *
 */
function af_form_from_key( $key ) {
	global $af_registered_forms;
	
	if ( $af_registered_forms && isset( $af_registered_forms[ $key ] ) ) {
		return af_get_valid_form( $af_registered_forms[ $key ] );
	}
	
	// Form not a registered one, search posts by key meta
	$post = af_form_post_from_key( $key );
	if ( $post ) {
		return af_form_from_post( $post );
	}

	return false;
}


/**
 * Retrieves a form post by key if one exists.
 *
 * @since 1.7.0
 *
 */
function af_form_post_from_key( $key ) {
	$args = array(
		'post_type' => 'af_form',
		'posts_per_page' => '1',
		'meta_query' => array(
			array(
				'key' => 'form_key',
				'value' => $key,
			),
		),
	);
	
	$form_query = new WP_Query( $args );
	
	if ( $form_query->have_posts() ) {
		return $form_query->posts[0];
	}

	return false;
}


/**
 * Retrieves a form by form key or form ID
 *
 * @since 1.0.0
 *
 */
function af_get_form( $form_id_or_key ) {
	
	$form = false;
	
	
	if ( af_is_valid_form_key( $form_id_or_key ) ) {
		
		$form = af_form_from_key( $form_id_or_key );
		
	} elseif ( is_numeric( $form_id_or_key ) ) {
		
		$form = af_form_from_post( $form_id_or_key );

	}
	
	
	return $form;
	
}

	
/**
 * Returns all forms, both those saved as posts and those registered
 *
 * @since 1.0.0
 *
 */
function af_get_forms() {

	$forms = array();
	
	// Get all forms saved as posts
	$args = array(
		'post_type' => 'af_form',
		'posts_per_page' => -1,
	);
	$form_query = new WP_Query( $args );
	
	if ( $form_query->have_posts() ) {
		
		foreach( $form_query->posts as $form_post ) {
			
			$form = af_form_from_post( $form_post );
			
			$forms[] = $form;
			
		}
		
	}
	
	// Get all programmatically registered forms
	global $af_registered_forms;
	
	if ( $af_registered_forms && is_array( $af_registered_forms ) ) {
		
		foreach( $af_registered_forms as $registered_form ) {
			
			$forms[] = af_get_valid_form( $registered_form );
			
		}
		
	}
	
	return $forms;
	
}


/**
 * Returns all fields groups used by specified form
 *
 * @since 1.0.0
 *
 */
function af_get_form_field_groups( $form_key ) {
	
	// If a full form array is passed
	if ( is_array( $form_key ) ) {
		
		$form_key = $form_key['key'];
		
	}
	
	// Location rule filter
	$args = array(
		'af_form' => $form_key,
	);
	
	$field_groups = acf_get_field_groups( $args );

	return $field_groups;
		
}


/**
 * Returns all fields assigned to a form
 *
 * @since 1.0.1
 *
 */
function af_get_form_fields( $form_key, $type = 'all' ) {
	
	$exclude_types = array();
	
	// Only pick fields which can be properly stringified (not repeaters, flexible fields etc.)
	if ( 'regular' == $type ) {
		$exclude_types = array( 'repeater', 'clone', 'flexible_content' );
	}
	
	
	$form_fields = array();
	
	$field_groups = af_get_form_field_groups( $form_key );
	
	if ( $field_groups ) {
		
		foreach ( $field_groups as $field_group ) {
			
			$fields = acf_get_fields( $field_group );
			
			if ( ! empty ( $fields ) ) {

				foreach ( $fields as $field ) {
					
					if ( in_array( $field['type'], $exclude_types ) ) {
						continue;	
					}
					
					$form_fields[] = $field;
					
				}
				
			}
			
		}
		
	}
	
	return $form_fields;
	
}


/**
 * Renders the success message for a form. Requires that the submission has already been loaded.
 * 
 * @since 1.7.2
 * 
 */
function af_form_success_message( $form, $args ) {
  $success_message = $form['display']['success_message'];
  $success_message = apply_filters( 'af/form/success_message', $success_message, $form, $args );
  $success_message = apply_filters( 'af/form/success_message/id=' . $form['post_id'], $success_message, $form, $args );
  $success_message = apply_filters( 'af/form/success_message/key=' . $form['key'], $success_message, $form, $args );

  $success_message = af_resolve_merge_tags( $success_message );

  return sprintf( '<div class="af-success" aria-live="assertive" role="alert">%s</div>', $success_message );
}