Files
roi-theme/wp-content/plugins/wp-marketing-automations-pro/includes/class-bwfan-divi-forms-common.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

135 lines
3.9 KiB
PHP
Executable File

<?php
/**
* BWFAN_Divi_Forms_Common
*/
class BWFAN_Divi_Forms_Common {
/**
* Extract form info from the Divi shortcode from wp post
*
* @return array
*/
public static function extract_forms_and_fields() {
global $wpdb;
$query = $wpdb->prepare( "SELECT `ID`, `post_content`, `post_title` FROM $wpdb->posts WHERE post_status NOT IN('trash', 'inherit', 'auto-draft') AND post_type IS NOT NULL AND post_type NOT LIKE %s AND post_content LIKE %s", 'revision', '%%et_pb_contact_form%%' );
$form_posts = $wpdb->get_results( $query ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$data = array();
if ( empty( $form_posts ) ) {
return $data;
}
foreach ( $form_posts as $form_post ) {
// Get forms
$pattern_regex = '/\[et_pb_contact_form(.*?)](.+?)\[\/et_pb_contact_form]/';
preg_match_all( $pattern_regex, $form_post->post_content, $forms, PREG_SET_ORDER );
if ( empty( $forms ) ) {
continue;
}
foreach ( $forms as $form_number => $form ) {
$pattern_form = get_shortcode_regex( array( 'et_pb_contact_form' ) );
preg_match_all( "/$pattern_form/", $form[0], $forms_extracted, PREG_SET_ORDER );
if ( empty( $forms_extracted ) ) {
continue;
}
foreach ( $forms_extracted as $form_extracted ) {
$form_attrs = shortcode_parse_atts( $form_extracted[3] );
$form_id = isset( $form_attrs['_unique_id'] ) ? $form_attrs['_unique_id'] : '';
if ( empty( $form_id ) ) {
continue;
}
$form_id = sprintf( '%d-%s', $form_post->ID, $form_id ) . "-$form_number";
$form_title = isset( $form_attrs['title'] ) ? $form_attrs['title'] : __( 'No form title', 'wp-marketing-automations-pro' );
$form_title = sprintf( '%s - %s', $form_post->post_title, $form_title );
// extracting form fields from each form
$fields = self::extract_form_fields( $form[0] );
$data[ $form_id ]['title'] = $form_title;
$data[ $form_id ]['fields'] = $fields;
}
}
}
return $data;
}
/**
* Extracting fields from the form shortcode
*
* @param $content_shortcode
*
* @return array
*/
public static function extract_form_fields( $content_shortcode ) {
$fields = array();
$pattern = get_shortcode_regex( array( 'et_pb_contact_field' ) );
preg_match_all( "/$pattern/", $content_shortcode, $contact_fields, PREG_SET_ORDER );
if ( empty( $contact_fields ) ) {
return $fields;
}
foreach ( $contact_fields as $contact_field ) {
$contact_field_attrs = shortcode_parse_atts( $contact_field[3] );
$field_id = strtolower( self::array_get( $contact_field_attrs, 'field_id' ) );
$fields[] = array(
'field_title' => self::array_get( $contact_field_attrs, 'field_title', __( 'No title', 'wp-marketing-automations-pro' ) ),
'field_id' => $field_id,
'field_type' => self::array_get( $contact_field_attrs, 'field_type', 'text' )
);
}
return $fields;
}
/**
* @param $array
* @param $address
* @param $default
* extract each field from fields array
*
* @return mixed|string
*/
public static function array_get( $array, $address, $default = '' ) {
$keys = is_array( $address ) ? $address : explode( '.', $address );
$value = $array;
foreach ( $keys as $key ) {
if ( ! empty( $key ) && isset( $key[0] ) && '[' === $key[0] ) {
$index = substr( $key, 1, - 1 );
if ( is_numeric( $index ) ) {
$key = (int) $index;
}
}
if ( ! isset( $value[ $key ] ) ) {
return $default;
}
$value = $value[ $key ];
}
return $value;
}
public static function extract_unique_form_id( $form_id ) {
if ( strpos( $form_id, '-' ) === false ) {
return $form_id;
}
$form_unique_id = explode( '-', $form_id );
/** Remove form number */
array_pop( $form_unique_id );
/** Remove post id */
array_shift( $form_unique_id );
return implode( '-', $form_unique_id );
}
}