Files
roi-theme/wp-content/plugins/wp-marketing-automations/woofunnels/contact/woofunnels-contact-functions.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

279 lines
8.0 KiB
PHP
Executable File

<?php
/**
* Contact functions
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Providing a contact object
*
* @param $email
* @param $wp_id
*
* @return WooFunnels_Contact|WooFunnels_Customer
*/
if ( ! function_exists( 'bwf_get_contact' ) ) {
function bwf_get_contact( $wp_id, $email ) {
return new WooFunnels_Contact( $wp_id, $email );
}
}
if ( ! function_exists( 'bwf_create_update_contact' ) ) {
/**
* Creating updating contact and customer table
* On offer accepted, on order status change and on order indexing
*
* @param $order_id
* @param $products
* @param $total
* @param false $force
*
* @return int|void
*/
function bwf_create_update_contact( $order_id, $products, $total, $force = false ) {
$order = wc_get_order( $order_id );
if ( ! $order instanceof WC_Order ) {
return;
}
$wp_id = $order->get_customer_id();
$wp_email = '';
if ( $wp_id > 0 ) {
$wp_user = get_user_by( 'id', $wp_id );
$wp_email = ( $wp_user instanceof WP_User ) ? $wp_user->user_email : '';
}
$email = empty( $wp_email ) ? $order->get_billing_email() : $wp_email;
if ( empty( $email ) ) {
return;
}
$bwf_contact = bwf_get_contact( $wp_id, $email );
$bwf_email = isset( $bwf_contact->db_contact->email ) ? $bwf_contact->db_contact->email : '';
$bwf_wpid = isset( $bwf_contact->db_contact->wpid ) ? $bwf_contact->db_contact->wpid : 0;
if ( $wp_id > 0 && ( $bwf_wpid !== $wp_id ) ) {
$bwf_contact->set_wpid( $wp_id );
}
if ( ( empty( $bwf_email ) && ! empty( $email ) ) || ( ! empty( $wp_email ) && ( $bwf_email !== $email ) ) ) {
$bwf_contact->set_email( $email );
}
if ( true === $force ) {
bwf_create_update_contact_object( $bwf_contact, $order );
}
bwf_contact_maybe_update_creation_date( $bwf_contact, $order );
bwf_create_update_customer( $bwf_contact, $order, $order_id, $products, $total );
if ( true === $force ) {
do_action( 'bwf_normalize_contact_meta_before_save', $bwf_contact, $order_id, $order );
}
$bwf_contact->save();
if ( true === $force ) {
do_action( 'bwf_normalize_contact_meta_after_save', $bwf_contact, $order_id, $order );
}
$cid = $bwf_contact->get_id();
$order->update_meta_data( '_woofunnel_cid', $cid );
$order->save_meta_data();
return $cid;
}
}
/**
* @param WooFunnels_Contact $bwf_contact
* @param WC_order $order
*/
if ( ! function_exists( 'bwf_contact_maybe_update_creation_date' ) ) {
function bwf_contact_maybe_update_creation_date( $bwf_contact, $order ) {
$get_creation_date = $bwf_contact->get_creation_date();
if ( empty( $get_creation_date ) || $get_creation_date === '0000-00-00' || ( ! empty( $get_creation_date ) && $order->get_date_created() instanceof DateTime && ( strtotime( $get_creation_date ) > $order->get_date_created()->getTimestamp() ) ) ) {
$bwf_contact->set_creation_date( $order->get_date_created()->format( 'Y-m-d H:i:s' ) );
}
}
}
if ( ! function_exists( 'bwf_create_update_contact_object' ) ) {
/**
* Called on login, & checkout order processed
*
* @param $bwf_contact WooFunnels_Contact
* @param $order WC_Order
*
* @return mixed
*/
function bwf_create_update_contact_object( $bwf_contact, $order ) {
$wp_id = $order->get_customer_id();
/** If false then update the fields only when empty */
$force = ( true === WooFunnels_DB_Updater::$indexing ) ? false : true;
$wp_f_name = '';
$wp_l_name = '';
if ( $wp_id > 0 ) {
$wp_user = get_user_by( 'id', $wp_id );
$wp_f_name = ( $wp_user instanceof WP_User ) ? $wp_user->user_firstname : '';
$wp_l_name = ( $wp_user instanceof WP_User ) ? $wp_user->user_lastname : '';
}
$f_name = $order->get_billing_first_name();
$l_name = $order->get_billing_last_name();
$f_name = empty( $f_name ) ? $wp_f_name : $f_name;
$l_name = empty( $l_name ) ? $wp_l_name : $l_name;
$update_name = apply_filters( 'bwf_update_contact_name', true, $bwf_contact );
if ( ! empty( $f_name ) ) {
$should_skip_update = ( false === $force || false === $update_name ) && ! empty( $bwf_contact->get_f_name() );
if ( ! $should_skip_update ) {
$bwf_contact->set_f_name( $f_name );
}
}
if ( ! empty( $l_name ) ) {
$should_skip_update = ( false === $force || false === $update_name ) && ! empty( $bwf_contact->get_l_name() );
if ( ! $should_skip_update ) {
$bwf_contact->set_l_name( $l_name );
}
}
/** New contact */
if ( '' === $bwf_contact->get_status() ) {
if ( class_exists( 'BWFAN_Core' ) ) {
/** Check if consent value is 1 */
$marketing_status = $order->get_meta( 'marketing_status' );
if ( 1 === intval( $marketing_status ) ) {
$bwf_contact->set_status( 1 );
} else {
$bwf_contact->set_status( 0 );
}
} else {
$bwf_contact->set_status( 1 );
}
}
$order_country = $order->get_billing_country();
if ( ! empty( $order_country ) && 2 === strlen( $order_country ) ) {
$order_country = ( false === $force && ! empty( $bwf_contact->get_country() ) ) ? '' : $order_country;
$bwf_contact->set_country( $order_country );
}
$order_state = $order->get_billing_state();
if ( ! empty( $order_country ) && ! empty( $order_state ) ) {
$state = bwf_get_states( $order_country, $order_state );
$state = ( false === $force && ! empty( $bwf_contact->get_state() ) ) ? '' : $state;
$bwf_contact->set_state( $state );
}
$bwf_contact->set_type( 'customer' );
$contact_no = $order->get_billing_phone();
if ( empty( $contact_no ) && method_exists( $order, 'get_shipping_phone' ) ) {
$contact_no = $order->get_shipping_phone();
}
$timezone = bwf_get_timezone_from_order( $order );
if ( ! empty( $contact_no ) ) {
$contact_no = ( false === $force && ! empty( $bwf_contact->get_contact_no() ) ) ? '' : $contact_no;
/** Appending country code in phone number if not added */
if ( class_exists( 'BWFAN_Phone_Numbers' ) && ! empty( $contact_no ) && ! empty( $bwf_contact->get_country() ) ) {
$contact_no = BWFAN_Phone_Numbers::add_country_code( $contact_no, $bwf_contact->get_country() );
}
$bwf_contact->set_contact_no( $contact_no );
}
if ( ! empty( $timezone ) ) {
$timezone = ( false === $force && ! empty( $bwf_contact->get_timezone() ) ) ? '' : $timezone;
$bwf_contact->set_timezone( $timezone );
}
if ( empty( $bwf_contact->get_source() ) ) {
$bwf_contact->set_source( 'wc_order' );
}
return $bwf_contact;
}
}
if ( ! function_exists( 'bwf_get_timezone_from_order' ) ) {
/**
* @param $order WC_Order
*
* @return array|mixed|string
*/
function bwf_get_timezone_from_order( $order ) {
if ( ! $order instanceof WC_Order ) {
return '';
}
$may_be_timezone = BWF_WC_Compatibility::get_order_data( $order, '_wfacp_timezone' );
/** If set in order meta */
if ( ! empty( $may_be_timezone ) && true === bwf_if_valid_timezone( $may_be_timezone ) ) {
return $may_be_timezone;
}
/** Check for country */
$country = $order->get_billing_country();
ob_start();
include dirname( __DIR__ ) . '/contact/data/contries-timzone.json'; //phpcs:ignore WordPressVIPMinimum.Files.IncludingNonPHPFile.IncludingNonPHPFile
$list = ob_get_clean();
$list = json_decode( $list, true );
if ( ! is_array( $list ) || ! array_key_exists( $country, $list ) ) {
return '';
}
if ( ! isset( $list[ $country ] ) || ! isset( $list[ $country ]['timezone'] ) || count( $list[ $country ]['timezone'] ) === 0 ) {
return '';
}
return $list[ $country ]['timezone'][0];
}
}
if ( ! function_exists( 'bwf_if_valid_timezone' ) ) {
/**
* @param $timezone
*
* @return bool
*/
function bwf_if_valid_timezone( $timezone ) {
if ( empty( $timezone ) ) {
return false;
}
$zones = timezone_identifiers_list();
return in_array( $timezone, $zones, true );
}
}
if ( ! function_exists( 'bwf_get_countries_data' ) ) {
/** countries data
* @return mixed|null
*/
function bwf_get_countries_data() {
ob_start();
include dirname( __DIR__ ) . '/contact/data/countries.json'; //phpcs:ignore WordPressVIPMinimum.Files.IncludingNonPHPFile.IncludingNonPHPFile
$countries_data = ob_get_clean();
$countries = json_decode( $countries_data, true );
return $countries;
}
}