Files
roi-theme/wp-content/plugins/wp-marketing-automations/woofunnels/connector/class-wfco-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

640 lines
16 KiB
PHP
Executable File

<?php
if ( ! class_exists( 'WFCO_Common' ) ) {
#[AllowDynamicProperties]
class WFCO_Common {
public static $ins = null;
public static $http;
public static $connectors_saved_data = array();
public static $saved_data = false;
public static function init() {
add_filter( 'bwf_add_db_table_schema', [ __CLASS__, 'create_db_tables' ], 10, 2 );
}
public static function get_instance() {
if ( null === self::$ins ) {
self::$ins = new self;
}
return self::$ins;
}
/**
* Create required tables
*/
public static function create_db_tables( $args, $tables ) {
$max_index_length = 191;
if ( $tables['version'] !== BWF_DB_VERSION || ! in_array( 'wfco_connectors', $tables['tables'], true ) ) {
$args[] = [
'name' => 'wfco_connectors',
'schema' => "CREATE TABLE `{table_prefix}wfco_connectors` (
ID bigint(20) unsigned NOT NULL auto_increment,
last_sync datetime NOT NULL default '0000-00-00 00:00:00',
slug varchar(255) default NULL,
status tinyint(1) not null default 0 COMMENT '1 - Active 2 - Inactive',
PRIMARY KEY (ID),
KEY slug (slug($max_index_length)),
KEY status (status)
) {table_collate};",
];
}
if ( $tables['version'] !== BWF_DB_VERSION || ! in_array( 'wfco_connectormeta', $tables['tables'], true ) ) {
$args[] = [
'name' => 'wfco_connectormeta',
'schema' => "CREATE TABLE `{table_prefix}wfco_connectormeta` (
ID bigint(20) unsigned NOT NULL auto_increment,
connector_id bigint(20) unsigned NOT NULL default '0',
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (ID),
KEY connector_id (connector_id),
KEY meta_key (meta_key($max_index_length))
) {table_collate};",
];
}
return $args;
}
/**
* Send remote call
*
* @param $api_url
* @param $data
* @param string $method_type
*
* @return array|mixed|null|object|string
*/
public static function send_remote_call( $api_url, $data, $method_type = 'post' ) {
if ( 'get' === $method_type ) {
$httpPostRequest = self::http()->get( $api_url, array(
'body' => $data,
'sslverify' => false,
'timeout' => 30,
) );
} else {
$httpPostRequest = self::http()->post( $api_url, array(
'body' => $data,
'sslverify' => false,
'timeout' => 30,
) );
}
if ( isset( $httpPostRequest->errors ) ) {
$response = null;
} elseif ( isset( $httpPostRequest['body'] ) && '' !== $httpPostRequest['body'] ) {
$body = $httpPostRequest['body'];
$response = json_decode( $body, true );
} else {
$response = 'No result';
}
return $response;
}
public static function http() {
if ( self::$http === null ) {
self::$http = new WP_Http();
}
return self::$http;
}
/**
* Save connector data
*
* @param $data
* @param $slug
* @param $status
*
* @return int
*/
public static function save_connector_data( $data, $slug, $status ) {
$settings = array();
$settings['last_sync'] = current_time( 'mysql', 1 );
$settings['slug'] = $slug;
$settings['status'] = $status;
WFCO_Model_Connectors::insert( $settings );
$connector_id = WFCO_Model_Connectors::insert_id();
foreach ( $data as $key => $val ) {
$meta_data = array();
$meta_data['connector_id'] = $connector_id;
$meta_data['meta_key'] = $key;
$meta_data['meta_value'] = maybe_serialize( $val );
WFCO_Model_ConnectorMeta::insert( $meta_data );
}
return $connector_id;
}
/**
* get all connectors saved data for global access
*/
public static function get_connectors_data() {
$temp = array();
$temp_arr = array();
if ( false === self::$saved_data ) {
$response = WFCO_Model_Connectors::get_results( 'SELECT * FROM {table_name}' );
if ( is_array( $response ) && count( $response ) > 0 ) {
$connector_ids = array_column( $response, 'ID' );
$meta = WFCO_Model_ConnectorMeta::get_connectors_meta( $connector_ids );
foreach ( $response as $connector ) {
$temp[ $connector['slug'] ]['id'] = $connector['ID'];
$temp[ $connector['slug'] ]['last_sync'] = $connector['last_sync'];
$temp[ $connector['slug'] ]['status'] = $connector['status'];
$settings_meta = isset( $meta[ $connector['ID'] ] ) ? $meta[ $connector['ID'] ] : [];
$temp_arr[ $connector['slug'] ] = array_merge( $temp[ $connector['slug'] ], $settings_meta );
}
}
self::$saved_data = $temp_arr;
} else {
$temp_arr = self::$saved_data;
}
self::$connectors_saved_data = $temp_arr;
}
public static function get_metakey_value( $all_meta, $meta_key, $primary_id = null, $primary_key_name = null ) {
$value = null;
foreach ( $all_meta as $value1 ) {
if ( ! is_null( $primary_id ) ) {
if ( $value1[ $primary_key_name ] == $primary_id ) {
if ( $meta_key === $value1['meta_key'] ) {
$value = maybe_unserialize( $value1[ $meta_key ] );
break;
}
}
}
if ( $meta_key === $value1['meta_key'] ) {
$value = maybe_unserialize( $value1['meta_value'] );
break;
}
}
return $value;
}
/**
* update connector data
*
* @param array $new_data
*/
public static function update_connector_data( $new_data = array(), $connector_id = 0 ) {
global $wpdb;
$data = array();
$data['last_sync'] = current_time( 'mysql', 1 );
$where['ID'] = $connector_id;
WFCO_Model_Connectors::update( $data, $where );
$sql_query = 'DELETE from {table_name} where connector_id = %d';
$sql_query = $wpdb->prepare( $sql_query, $connector_id ); //phpcs:ignore WordPress.DB.PreparedSQL
WFCO_Model_ConnectorMeta::delete_multiple( $sql_query );
foreach ( $new_data as $key => $val ) {
$meta_data = array();
$meta_data['connector_id'] = $connector_id;
$meta_data['meta_key'] = $key;
$meta_data['meta_value'] = maybe_serialize( $val );
WFCO_Model_ConnectorMeta::insert( $meta_data );
}
}
public static function is_load_admin_assets( $screen_type = 'all' ) {
$screen = get_current_screen();
if ( 'all' === $screen_type ) {
if ( filter_input( INPUT_GET, 'page' ) === 'autonami' ) {
return true;
}
} elseif ( 'all' === $screen_type || 'settings' === $screen_type ) {
if ( filter_input( INPUT_GET, 'page' ) === 'autonami' && filter_input( INPUT_GET, 'tab' ) === 'settings' ) {
return true;
}
}
return apply_filters( 'wfco_enqueue_scripts', false, $screen_type, $screen );
}
public static function array_flatten( $array ) {
if ( ! is_array( $array ) ) {
return false;
}
$result = iterator_to_array( new RecursiveIteratorIterator( new RecursiveArrayIterator( $array ) ), false );
return $result;
}
public static function pr( $arr ) {
echo '<pre>';
print_r( $arr );
echo '</pre>';
}
public static function slugify_classname( $class_name ) {
$new_class_name = self::custom_sanitize_title( $class_name );
$new_class_name = str_replace( '_', '-', $new_class_name );
return $new_class_name;
}
/**
* Custom sanitize title method to avoid conflicts with WordPress hooks on sanitize_title
*
* @param string $title The title to sanitize
* @return string The sanitized title
*/
private static function custom_sanitize_title( $title ) {
$title = remove_accents( $title );
$title = sanitize_title_with_dashes( $title );
return $title;
}
/**
* Recursive Un-serialization based on WP's is_serialized();
*
* @param $val
*
* @return mixed|string
* @see is_serialized()
*/
public static function unserialize_recursive( $val ) {
/**$pattern = "/.*\{(.*)\}/";*/
if ( is_serialized( $val ) ) {
$val = trim( $val );
$ret = maybe_unserialize( $val );
if ( is_array( $ret ) ) {
foreach ( $ret as &$r ) {
$r = self::unserialize_recursive( $r );
}
}
return $ret;
} elseif ( is_array( $val ) ) {
foreach ( $val as &$r ) {
$r = self::unserialize_recursive( $r );
}
return $val;
} else {
return $val;
}
}
public static function get_option() {
return;
}
public static function active_class( $trigger_slug ) {
if ( self::get_current_trigger() === $trigger_slug ) {
return 'current';
}
return '';
}
public static function get_current_trigger() {
if ( 'autonami' === filter_input( INPUT_GET, 'page', FILTER_UNSAFE_RAW ) && filter_input( INPUT_GET, 'status', FILTER_UNSAFE_RAW ) ) {
return filter_input( INPUT_GET, 'status', FILTER_UNSAFE_RAW );
}
return 'all';
}
public static function string2hex( $string ) {
$hex = '';
for ( $i = 0; $i < strlen( $string ); $i ++ ) {
$hex .= dechex( ord( $string[ $i ] ) );
}
return $hex;
}
public static function maybe_filter_boolean_strings( $options ) {
$cloned_option = $options;
foreach ( $options as $key => $value ) {
if ( is_object( $options ) ) {
if ( $value === 'true' || $value === true ) {
$cloned_option->$key = true;
}
if ( $value === 'false' || $value === false ) {
$cloned_option->$key = false;
}
} elseif ( is_array( $options ) ) {
if ( $value === 'true' || $value === true ) {
$cloned_option[ $key ] = true;
}
if ( $value === 'false' || $value === false ) {
$cloned_option[ $key ] = false;
}
}
}
return $cloned_option;
}
public static function is_add_on_exist( $add_on = 'MultiProduct' ) {
$status = false;
if ( class_exists( 'WFCO_' . $add_on ) ) {
$status = true;
}
return $status;
}
public static function get_date_format() {
return get_option( 'date_format', '' ) . ' ' . get_option( 'time_format', '' );
}
public static function between( $needle, $that, $inthat ) {
return self::before( $that, self::after( $needle, $inthat ) );
}
public static function before( $needle, $inthat ) {
return substr( $inthat, 0, strpos( $inthat, $needle ) );
}
public static function after( $needle, $inthat ) {
if ( ! is_bool( strpos( $inthat, $needle ) ) ) {
return substr( $inthat, strpos( $inthat, $needle ) + strlen( $needle ) );
}
}
public static function clean_ascii_characters( $content ) {
if ( '' === $content ) {
return $content;
}
$content = str_replace( '%', '_', $content );
$content = str_replace( '!', '_', $content );
$content = str_replace( '\"', '_', $content );
$content = str_replace( '#', '_', $content );
$content = str_replace( '$', '_', $content );
$content = str_replace( '&', '_', $content );
$content = str_replace( '(', '_', $content );
$content = str_replace( ')', '_', $content );
$content = str_replace( '(', '_', $content );
$content = str_replace( '*', '_', $content );
$content = str_replace( ',', '_', $content );
$content = str_replace( '', '_', $content );
$content = str_replace( '.', '_', $content );
$content = str_replace( '/', '_', $content );
return $content;
}
/**
* Function to get timezone string by checking WordPress timezone settings
* @return mixed|string|void
*/
public static function wc_timezone_string() {
// if site timezone string exists, return it
if ( $timezone = get_option( 'timezone_string' ) ) {
return $timezone;
}
// get UTC offset, if it isn't set then return UTC
if ( 0 === ( $utc_offset = get_option( 'gmt_offset', 0 ) ) ) {
return 'UTC';
}
// get timezone using offset manual
return self::get_timezone_by_offset( $utc_offset );
}
/**
* Function to get timezone string based on specified offset
*
* @param $offset
*
* @return string
*/
public static function get_timezone_by_offset( $offset ) {
switch ( $offset ) {
case '-12':
return 'GMT-12';
break;
case '-11.5':
return 'Pacific/Niue'; // 30 mins wrong
break;
case '-11':
return 'Pacific/Niue';
break;
case '-10.5':
return 'Pacific/Honolulu'; // 30 mins wrong
break;
case '-10':
return 'Pacific/Tahiti';
break;
case '-9.5':
return 'Pacific/Marquesas';
break;
case '-9':
return 'Pacific/Gambier';
break;
case '-8.5':
return 'Pacific/Pitcairn'; // 30 mins wrong
break;
case '-8':
return 'Pacific/Pitcairn';
break;
case '-7.5':
return 'America/Hermosillo'; // 30 mins wrong
break;
case '-7':
return 'America/Hermosillo';
break;
case '-6.5':
case '-6':
return 'America/Belize';
break;
case '-5.5':
return 'America/Belize'; // 30 mins wrong
break;
case '-5':
return 'America/Panama';
break;
case '-4.5':
return 'America/Lower_Princes'; // 30 mins wrong
break;
case '-4':
return 'America/Curacao';
break;
case '-3.5':
return 'America/Paramaribo'; // 30 mins wrong
break;
case '-3':
return 'America/Recife';
break;
case '-2.5':
return 'America/St_Johns';
break;
case '-2':
return 'America/Noronha';
break;
case '-1.5':
return 'Atlantic/Cape_Verde'; // 30 mins wrong
break;
case '-1':
return 'Atlantic/Cape_Verde';
break;
case '+1':
return 'Africa/Luanda';
break;
case '+1.5':
return 'Africa/Mbabane'; // 30 mins wrong
break;
case '+2':
return 'Africa/Harare';
break;
case '+2.5':
return 'Indian/Comoro'; // 30 mins wrong
break;
case '+3':
return 'Asia/Baghdad';
break;
case '+3.5':
return 'Indian/Mauritius'; // 30 mins wrong
break;
case '+4':
return 'Indian/Mauritius';
break;
case '+4.5':
return 'Asia/Kabul';
break;
case '+5':
return 'Indian/Maldives';
break;
case '+5.5':
return 'Asia/Kolkata';
break;
case '+5.75':
return 'Asia/Kathmandu';
break;
case '+6':
return 'Asia/Urumqi';
break;
case '+6.5':
return 'Asia/Yangon';
break;
case '+7':
return 'Antarctica/Davis';
break;
case '+7.5':
return 'Asia/Jakarta'; // 30 mins wrong
break;
case '+8':
return 'Asia/Manila';
break;
case '+8.5':
return 'Asia/Pyongyang';
break;
case '+8.75':
return 'Australia/Eucla';
break;
case '+9':
return 'Asia/Tokyo';
break;
case '+9.5':
return 'Australia/Darwin';
break;
case '+10':
return 'Australia/Brisbane';
break;
case '+10.5':
return 'Australia/Lord_Howe';
break;
case '+11':
return 'Antarctica/Casey';
break;
case '+11.5':
return 'Pacific/Auckland'; // 30 mins wrong
break;
case '+12':
return 'Pacific/Wallis';
break;
case '+12.75':
return 'Pacific/Chatham';
break;
case '+13':
return 'Pacific/Fakaofo';
break;
case '+13.75':
return 'Pacific/Chatham'; // 1 hr wrong
break;
case '+14':
return 'Pacific/Kiritimati';
break;
default:
return 'UTC';
break;
}
}
/**
* Generate random string
*
* @param int $length
*
* @return string
*/
public static function generateRandomString( $length = 5 ) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen( $characters );
$randomString = '';
for ( $i = 0; $i < $length; $i ++ ) {
$randomString .= $characters[ rand( 0, $charactersLength - 1 ) ];
}
return $randomString;
}
/**
* Get all merge tags from string
*
* @param $text
*
* @return array|null
*/
public static function get_merge_tags_from_text( $text ) {
$merge_tags = null;
preg_match_all( '/\{{(.*?)\}}/', $text, $more_merge_tags );
if ( is_array( $more_merge_tags[1] ) && count( $more_merge_tags[1] ) > 0 ) {
$merge_tags = $more_merge_tags[1];
}
return $merge_tags;
}
public static function get_single_connector_data( $connector_slug, $meta_key = null ) {
$data_to_return = [];
if ( is_null( $meta_key ) ) {
if ( isset( WFCO_Common::$connectors_saved_data[ $connector_slug ] ) ) {
$data_to_return = WFCO_Common::$connectors_saved_data[ $connector_slug ];
return $data_to_return;
}
}
if ( isset( WFCO_Common::$connectors_saved_data[ $connector_slug ][ $meta_key ] ) ) {
$data_to_return = WFCO_Common::$connectors_saved_data[ $connector_slug ][ $meta_key ];
}
return $data_to_return;
}
public static function get_call_object( $connector_slug, $call_slug ) {
$all_connectors = WFCO_Load_Connectors::get_all_connectors();
return $all_connectors[ $connector_slug ][ $call_slug ];
}
}
}