prefix}woocommerce_square_customers (square_id, email_address) VALUES "; foreach ( $customers as $customer ) { // skip any bad data if ( ! $customer instanceof \Square\Models\Customer ) { continue; } $placeholders[] = '(%s, %s)'; $values[] = wc_clean( $customer->getId() ); $values[] = wc_clean( $customer->getEmailAddress() ); } $query .= implode( ', ', $placeholders ); // update the Square ID value when duplicate email addresses are present $query .= " ON DUPLICATE KEY UPDATE email_address = VALUES(email_address)"; //phpcs:ignore Squiz.Strings.DoubleQuoteUsage.NotRequired $wpdb->query( $wpdb->prepare( $query, $values ) ); //phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared } /** * Adds a customer to the index. * * @since 2.0.0 * * @param string $square_id Square customer ID * @param string $email_address customer email address * @param int $user_id WordPress user ID */ public static function add_customer( $square_id, $email_address, $user_id = 0 ) { global $wpdb; if ( is_email( $email_address ) ) { $params = array( 'square_id' => wc_clean( $square_id ), 'email_address' => wc_clean( $email_address ), ); if ( $user_id && is_numeric( $user_id ) ) { $params['user_id'] = (int) $user_id; } $wpdb->insert( "{$wpdb->prefix}woocommerce_square_customers", $params ); } } /** * Gets a Square customer ID from an email address. * * @param string $email_address customer email address * @return string|null */ public static function get_square_id( $email_address ) { global $wpdb; $square_id = null; if ( is_email( $email_address ) ) { $square_id = $wpdb->get_var( $wpdb->prepare( "SELECT square_id FROM {$wpdb->prefix}woocommerce_square_customers WHERE email_address = %s", $email_address ) ); } return $square_id; } public static function get_customers_by_email( $email_address ) { global $wpdb; $square_ids = array(); if ( is_email( $email_address ) ) { $square_ids = $wpdb->get_col( $wpdb->prepare( "SELECT square_id FROM {$wpdb->prefix}woocommerce_square_customers WHERE email_address = %s", $email_address ) ); } return $square_ids; } /** * Determines if a customer exists in the index. * * @since 2.0.0 * * @param string $square_id Square customer ID * @return bool */ public static function is_customer_indexed( $square_id ) { global $wpdb; $result = $wpdb->get_var( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}woocommerce_square_customers WHERE square_id = %s", $square_id ) ); return (bool) $result; } /** * Creates the db table for the customer index. * * @since 2.0.0 */ public static function create_table() { global $wpdb; $wpdb->hide_errors(); $collate = ''; if ( $wpdb->has_cap( 'collation' ) ) { $collate = $wpdb->get_charset_collate(); } $schema = $wpdb->prepare( "CREATE TABLE {$wpdb->prefix}woocommerce_square_customers (`square_id` varchar(191) NOT NULL, `email_address` varchar(200) NOT NULL, `user_id` BIGINT UNSIGNED NOT NULL, PRIMARY KEY (`square_id`) ) %1s", $collate ); //phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $schema ); } }