%PDF- %PDF-
| Direktori : /home/opti/public_html/stlc/wp-content/plugins/omnisend/includes/Internal/ |
| Current File : /home/opti/public_html/stlc/wp-content/plugins/omnisend/includes/Internal/class-sync.php |
<?php
/**
* Omnisend Contact Utils
*
* @package OmnisendClient
*/
namespace Omnisend\Internal;
use Omnisend\SDK\V1\Contact;
use Omnisend\SDK\V1\Omnisend;
! defined( 'ABSPATH' ) && die( 'no direct access' );
class Sync {
/**
* Sync and sets omnisend contact id for user
*
* @param $user_id
* @return void
*/
public static function identify_user_by_id( $user_id ): void {
$user = get_userdata( $user_id );
if ( $user ) {
$omnisend_contact_id = self::sync_contact( $user );
if ( $omnisend_contact_id ) {
Snippet::set_contact_cookie_id( $omnisend_contact_id );
}
}
}
/**
* @param int $limit number of users to sync
*/
public static function sync_contacts( int $limit = 100 ): void {
$wp_user_query = new \WP_User_Query(
array(
'number' => $limit,
// meta_query is required to work as sync information is stored in contact metadata.
'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
'relation' => 'OR',
array(
'key' => UserMetaData::LAST_SYNC,
'compare' => 'NOT EXISTS',
'value' => '',
),
),
)
);
$users = $wp_user_query->get_results();
if ( empty( $users ) ) {
wp_clear_scheduled_hook( OMNISEND_CORE_CRON_SYNC_CONTACT );
return;
}
foreach ( $users as $user ) {
self::sync_contact( $user );
}
}
/**
* @param \WP_User $user
* @return string
*/
private static function sync_contact( $user ): string {
$contact = new Contact();
$contact->add_tag( 'WordPress' );
if ( ! filter_var( $user->user_email, FILTER_VALIDATE_EMAIL ) ) {
UserMetaData::mark_sync_skipped( $user->ID );
return '';
}
$contact->set_email( $user->user_email );
$first_name = get_user_meta( $user->ID, 'first_name', true );
if ( $first_name ) {
$contact->set_first_name( $first_name );
}
$last_name = get_user_meta( $user->ID, 'last_name', true );
if ( $last_name ) {
$contact->set_last_name( $last_name );
}
$roles = get_user_meta( $user->ID, 'wp_capabilities', true );
$parsed_roles = array();
if ( is_array( $roles ) ) {
foreach ( $roles as $role => $active ) {
if ( $active ) {
$parsed_roles[] = $role;
}
}
if ( ! empty( $parsed_roles ) ) {
$contact->add_custom_property( 'wordpress_roles', array_unique( $parsed_roles ) );
}
}
$response = Omnisend::get_client( OMNISEND_CORE_PLUGIN_NAME, OMNISEND_CORE_PLUGIN_VERSION )->create_contact( $contact );
if ( $response->get_contact_id() ) {
UserMetaData::mark_synced( $user->ID );
} else {
UserMetaData::mark_sync_error( $user->ID );
}
return $response->get_contact_id();
}
}