woocommerce/includes/data-stores/class-wc-customer-data-stor...

176 lines
3.9 KiB
PHP
Raw Normal View History

2016-11-14 18:18:08 +00:00
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* WC Customer Data Store which stores the data in session.
*
* @version 2.7.0
* @category Class
* @author WooThemes
*/
class WC_Customer_Data_Store_Session implements WC_Customer_Data_Store_Interface, WC_Object_Data_Store {
/**
* Keys which are also stored in a session (so we can make sure they get updated...)
* @var array
*/
protected $session_keys = array(
'billing_postcode',
'billing_city',
'billing_address_1',
'billing_address',
'billing_address_2',
'billing_state',
'billing_country',
'shipping_postcode',
'shipping_city',
'shipping_address_1',
'shipping_address',
'shipping_address_2',
'shipping_state',
'shipping_country',
'is_vat_exempt',
'calculated_shipping',
'billing_first_name',
'billing_last_name',
'billing_company',
'billing_phone',
'billing_email',
'shipping_first_name',
'shipping_last_name',
'shipping_company',
);
/**
* Simply update the session.
*
* @param WC_Customer
*/
public function create( &$customer ) {
$this->save_to_session( $customer );
}
/**
* Simply update the session.
*
* @param WC_Customer
*/
public function update( &$customer ) {
$this->save_to_session( $customer );
}
/**
* Saves all customer data to the session.
*
* @param WC_Customer
*/
public function save_to_session( $customer ) {
$data = array();
foreach ( $this->session_keys as $session_key ) {
$function_key = $session_key;
if ( 'billing_' === substr( $session_key, 0, 8 ) ) {
$session_key = str_replace( 'billing_', '', $session_key );
}
$data[ $session_key ] = $customer->{"get_$function_key"}( 'edit' );
}
if ( WC()->session->get( 'customer' ) !== $data ) {
WC()->session->set( 'customer', $data );
}
}
/**
* Read customer data from the session.
*
* @since 2.7.0
* @param WC_Customer
*/
public function read( &$customer ) {
$data = (array) WC()->session->get( 'customer' );
if ( ! empty( $data ) ) {
foreach ( $this->session_keys as $session_key ) {
$function_key = $session_key;
if ( 'billing_' === substr( $session_key, 0, 8 ) ) {
$session_key = str_replace( 'billing_', '', $session_key );
}
if ( ! empty( $data[ $session_key ] ) && is_callable( array( $customer, "set_{$function_key}" ) ) ) {
$customer->{"set_{$function_key}"}( $data[ $session_key ] );
}
}
}
$this->set_defaults( $customer );
$customer->set_object_read( true );
}
/**
* Load default values if props are unset.
*
* @param WC_Customer
*/
protected function set_defaults( &$customer ) {
$default = wc_get_customer_default_location();
// Set some defaults if some of our values are still not set.
if ( ! $customer->get_billing_country() ) {
$customer->set_billing_country( $default['country'] );
}
if ( ! $customer->get_shipping_country() ) {
$customer->set_shipping_country( $customer->get_billing_country() );
}
if ( ! $customer->get_billing_state() ) {
$customer->set_billing_state( $default['state'] );
}
if ( ! $customer->get_shipping_state() ) {
$customer->set_shipping_state( $customer->get_billing_state() );
}
}
/**
* Deletes a customer from the database.
*
* @since 2.7.0
* @param WC_Customer
2016-11-15 18:11:25 +00:00
* @param array $args Array of args to pass to the delete method.
2016-11-14 18:18:08 +00:00
*/
2016-11-15 18:11:25 +00:00
public function delete( &$customer, $args = array() ) {
2016-11-14 18:18:08 +00:00
WC()->session->set( 'customer', null );
}
/**
* Gets the customers last order.
*
* @since 2.7.0
* @param WC_Customer
* @return WC_Order|false
*/
public function get_last_order( &$customer ) {
return false;
}
/**
* Return the number of orders this customer has.
*
* @since 2.7.0
* @param WC_Customer
* @return integer
*/
public function get_order_count( &$customer ) {
return 0;
}
/**
* Return how much money this customer has spent.
*
* @since 2.7.0
* @param WC_Customer
* @return float
*/
public function get_total_spent( &$customer ) {
return 0;
}
}