data = 'session' === $id ? \WC()->customer : new WC_Customer( absint( $id ), $is_session ); $allowed_restricted_fields = [ 'isRestricted', 'isPrivate', 'isPublic', 'id', 'databaseId', ]; // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound $restricted_cap = apply_filters( 'customer_restricted_cap', 'session' === $id ? '' : 'list_users' ); parent::__construct( $restricted_cap, $allowed_restricted_fields, $this->data->get_id() ); } /** * Forwards function calls to WC_Data sub-class instance. * * @param string $method - function name. * @param array $args - function call arguments. * @return mixed */ public function __call( $method, $args ) { return $this->data->$method( ...$args ); } /** * Initializes the Customer field resolvers. */ protected function init() { if ( empty( $this->fields ) ) { $this->fields = [ 'ID' => function () { return ( ! empty( $this->data->get_id() ) ) ? $this->data->get_id() : \WC()->session->get_customer_id(); }, 'id' => function () { return ! empty( $this->data->get_id() ) ? Relay::toGlobalId( 'user', $this->data->get_id() ) : 'guest'; }, 'databaseId' => function () { return ! empty( $this->ID ) ? $this->ID : null; }, 'isVatExempt' => function () { return ! is_null( $this->data->get_is_vat_exempt() ) ? $this->data->get_is_vat_exempt() : null; }, 'hasCalculatedShipping' => function () { return ! is_null( $this->data->has_calculated_shipping() ) ? $this->data->has_calculated_shipping() : null; }, 'calculatedShipping' => function () { return ! is_null( $this->data->get_calculated_shipping() ) ? $this->data->get_calculated_shipping() : null; }, 'orderCount' => function () { return ! is_null( $this->data->get_order_count() ) ? $this->data->get_order_count() : null; }, 'totalSpent' => function () { return ! is_null( $this->data->get_total_spent() ) ? $this->data->get_total_spent() : null; }, 'username' => function () { return ( ! empty( $this->data->get_username() ) ) ? $this->data->get_username() : null; }, 'email' => function () { return ( ! empty( $this->data->get_email() ) ) ? $this->data->get_email() : null; }, 'firstName' => function () { return ( ! empty( $this->data->get_first_name() ) ) ? $this->data->get_first_name() : null; }, 'lastName' => function () { return ( ! empty( $this->data->get_last_name() ) ) ? $this->data->get_last_name() : null; }, 'displayName' => function () { return ( ! empty( $this->data->get_display_name() ) ) ? $this->data->get_display_name() : null; }, 'role' => function () { return ( ! empty( $this->data->get_role() ) ) ? $this->data->get_role() : null; }, 'date' => function () { return ( ! empty( $this->data->get_date_created() ) ) ? $this->data->get_date_created() : null; }, 'modified' => function () { return ( ! empty( $this->data->get_date_modified() ) ) ? $this->data->get_date_modified() : null; }, 'billing' => function () { return ( ! empty( $this->data->get_billing() ) ) ? $this->data->get_billing() : null; }, 'shipping' => function () { return ( ! empty( $this->data->get_shipping() ) ) ? $this->data->get_shipping() : null; }, 'isPayingCustomer' => function () { return ( ! is_null( $this->data->get_is_paying_customer() ) ) ? $this->data->get_is_paying_customer() : null; }, /** * Connection resolvers fields * * These field resolvers are used in connection resolvers to define WP_Query argument * Note: underscore naming style is used as a quick identifier */ 'last_order_id' => function () { return ( ! empty( $this->data->get_last_order() ) ) ? $this->data->get_last_order()->get_id() : null; }, ]; }//end if parent::prepare_fields(); } }