38217-vm/wp-content/plugins/fusion-builder/inc/class-fusion-form-db-fields.php
2026-02-05 17:08:59 +03:00

92 lines
2.8 KiB
PHP

<?php
/**
* Form Submission Handler.
*
* @package fusion-builder
* @since 3.1
*/
/**
* Form Submission.
*
* @since 3.1
*/
class Fusion_Form_DB_Fields extends Fusion_Form_DB_Items {
/**
* The table name.
*
* @access protected
* @since 3.1
* @var string
*/
protected $table_name = 'fusion_form_fields';
/**
* Get form fields for the form id given.
*
* @since 3.4
* @access public
* @param int $form_id Form ID to get fields for.
* @return array
*/
public function get_form_fields( $form_id ) {
global $wpdb;
$form_fields = [];
$fields_db = [];
$field_labels = [];
$field_names = [];
$query = "SELECT p.post_content FROM $wpdb->posts AS p INNER JOIN {$wpdb->prefix}fusion_forms AS ff ON p.ID = ff.form_id WHERE ff.id = %d";
$results = $wpdb->get_results( $wpdb->prepare( $query, (int) $form_id ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL
$form_post_content = $results && isset( $results[0] ) ? $results[0]->post_content : '';
// Get labels and names for all fields / inputs.
if ( '' !== $form_post_content ) {
// Get form field names.
preg_match_all( '/\[fusion_form_[^\]]*\sname=\"([^\"]*)\"/', $form_post_content, $matches );
$field_names = isset( $matches[1] ) ? $matches[1] : [];
// Get form field labels.
preg_match_all( '/\[fusion_form_[^\]]*\slabel=\"([^\"]*)\"/', $form_post_content, $matches );
$field_labels = isset( $matches[1] ) ? $matches[1] : [];
// If (some) labels are missing or empty use name instead.
if ( count( $field_names ) !== count( array_filter( $field_labels ) ) ) {
$field_labels = map_deep( $field_names, 'Fusion_Builder_Form_Helper::fusion_name_to_label' );
}
// Fetch field_id and field_name.
$query = "SELECT id AS field_id, field_name AS field_name FROM {$wpdb->prefix}fusion_form_fields AS fff WHERE fff.form_id = %d";
$results = $wpdb->get_results( $wpdb->prepare( $query, (int) $form_id ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL
// Reformat results as field_name => field_id array.
if ( $results && is_array( $results ) ) {
foreach ( $results as $result ) {
$fields_db[ $result->field_name ] = $result->field_id;
}
}
$count = count( $field_names );
// Loop through matched names & labels and create field_id => { field_label, field_name } array.
for ( $i = 0; $i < $count; $i++ ) {
// Field names in DB are lowercased.
if ( isset( $fields_db[ strtolower( $field_names[ $i ] ) ] ) ) {
$obj = new stdClass();
$obj->field_label = $field_labels[ $i ];
$obj->field_name = $field_names[ $i ];
// Field names in DB are lowercased.
$form_fields[ $fields_db[ strtolower( $field_names[ $i ] ) ] ] = $obj;
}
}
}
return $form_fields;
}
}