get_posted_data(); $options = get_option( 'odoo_crm_settings' ); $default_team = isset( $options['default_team_id'] ) ? absint( $options['default_team_id'] ) : 0; $payload = array( 'name' => sanitize_text_field( $data['your-name'] ?? '' ), 'email' => sanitize_email( $data['your-email'] ?? '' ), 'phone' => sanitize_text_field( $data['your-phone'] ?? '' ), 'message' => sanitize_textarea_field( $data['your-message'] ?? '' ), 'form_source' => 'Contact Form 7', ); if ( $default_team > 0 ) { $payload['team_id'] = $default_team; } self::schedule_event( $payload ); } public static function handle_wpforms( $fields, $entry, $form_data, $entry_id ) { $options = get_option( 'odoo_crm_settings' ); $mappings = isset( $options['wpforms_mappings'] ) && is_array( $options['wpforms_mappings'] ) ? $options['wpforms_mappings'] : array(); $form_id = absint( $form_data['id'] ); $mapping = null; foreach ( $mappings as $m ) { if ( $m['form_id'] === $form_id ) { $mapping = $m; break; } } if ( ! $mapping ) { return; // This form is not mapped to Odoo } $name_id = $mapping['name_id']; $email_id = $mapping['email_id']; $phone_id = $mapping['phone_id']; $message_id = $mapping['message_id']; $team_id = ! empty( $mapping['team_id'] ) ? absint( $mapping['team_id'] ) : ( isset( $options['default_team_id'] ) ? absint( $options['default_team_id'] ) : 0 ); $payload = array( 'name' => sanitize_text_field( $fields[$name_id]['value'] ?? '' ), 'email' => sanitize_email( $fields[$email_id]['value'] ?? '' ), 'phone' => sanitize_text_field( $fields[$phone_id]['value'] ?? '' ), 'message' => sanitize_textarea_field( $fields[$message_id]['value'] ?? '' ), ); $form_title = !empty( $form_data['settings']['form_title'] ) ? $form_data['settings']['form_title'] : 'WPForms'; $payload['form_source'] = 'WPForms: ' . sanitize_text_field( $form_title ); if ( $team_id > 0 ) { $payload['team_id'] = $team_id; } self::schedule_event( $payload ); } private static function schedule_event( $payload ) { // Only schedule if we have at least a name or email if ( empty( $payload['name'] ) && empty( $payload['email'] ) ) { return; } global $wpdb; $table_name = $wpdb->prefix . 'odoo_crm_logs'; $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'email' => isset($payload['email']) ? $payload['email'] : '', 'payload' => wp_json_encode($payload), 'response_msg' => '', 'status' => 'pending', 'retry_count' => 0 ), array('%s', '%s', '%s', '%s', '%s', '%d') ); $log_id = $wpdb->insert_id; wp_schedule_single_event( time(), 'odoo_crm_process_queue_event', array( $payload, 0, $log_id ) ); } }