2011-08-09 15:16:18 +00:00
< ? php
/**
* Customer
2012-08-14 19:42:38 +00:00
*
2011-12-08 19:45:24 +00:00
* The WooCommerce customer class handles storage of the current customer ' s data , such as location .
2011-08-09 15:16:18 +00:00
*
2012-01-27 16:38:39 +00:00
* @ class WC_Customer
2012-08-14 19:42:38 +00:00
* @ version 1.6 . 4
2012-08-14 22:43:48 +00:00
* @ package WooCommerce / Classes
2013-02-20 17:14:46 +00:00
* @ category Class
2012-08-14 19:42:38 +00:00
* @ author WooThemes
2011-08-09 15:16:18 +00:00
*/
2012-01-27 16:38:39 +00:00
class WC_Customer {
2012-11-27 16:22:47 +00:00
2012-09-07 18:28:27 +00:00
/** Stores customer data as an array */
2012-09-23 16:16:39 +00:00
protected $_data ;
2012-11-27 16:22:47 +00:00
2013-01-12 13:02:47 +00:00
/** Stores bool when data is changed */
2013-01-23 12:27:15 +00:00
private $_changed = false ;
2013-01-12 13:02:47 +00:00
2012-08-14 19:42:38 +00:00
/**
2012-09-07 18:28:27 +00:00
* Constructor for the customer class loads the customer data .
2012-08-14 19:42:38 +00:00
*
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function __construct () {
2012-11-27 16:22:47 +00:00
2013-11-25 14:01:32 +00:00
if ( empty ( WC () -> session -> customer ) ) {
2012-08-14 19:42:38 +00:00
2012-09-07 18:28:27 +00:00
$default = apply_filters ( 'woocommerce_customer_default_location' , get_option ( 'woocommerce_default_country' ) );
2012-08-14 19:42:38 +00:00
if ( strstr ( $default , ':' ) ) {
2012-09-07 18:28:27 +00:00
list ( $country , $state ) = explode ( ':' , $default );
2012-08-14 19:42:38 +00:00
} else {
2011-08-09 15:16:18 +00:00
$country = $default ;
2013-01-12 13:02:47 +00:00
$state = '' ;
2012-08-14 19:42:38 +00:00
}
2012-09-23 16:16:39 +00:00
$this -> _data = array (
2012-10-18 10:33:47 +00:00
'country' => esc_html ( $country ),
2012-09-07 18:28:27 +00:00
'state' => '' ,
'postcode' => '' ,
2012-09-23 16:16:39 +00:00
'city' => '' ,
2012-11-27 01:56:48 +00:00
'address' => '' ,
'address_2' => '' ,
2012-10-18 10:33:47 +00:00
'shipping_country' => esc_html ( $country ),
2012-09-07 18:28:27 +00:00
'shipping_state' => '' ,
'shipping_postcode' => '' ,
2012-09-23 16:16:39 +00:00
'shipping_city' => '' ,
2012-11-27 01:56:48 +00:00
'shipping_address' => '' ,
'shipping_address_2' => '' ,
2012-09-07 18:28:27 +00:00
'is_vat_exempt' => false ,
'calculated_shipping' => false
2012-08-14 19:42:38 +00:00
);
2012-11-27 16:22:47 +00:00
2012-09-07 18:28:27 +00:00
} else {
2013-01-12 13:02:47 +00:00
2013-11-25 14:01:32 +00:00
$this -> _data = WC () -> session -> customer ;
2013-01-12 13:02:47 +00:00
2012-08-14 19:42:38 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-07 18:28:27 +00:00
// When leaving or ending page load, store data
2012-12-15 11:53:32 +00:00
add_action ( 'shutdown' , array ( $this , 'save_data' ), 10 );
2012-09-07 18:28:27 +00:00
}
2012-09-23 16:16:39 +00:00
2013-01-12 13:02:47 +00:00
/**
* save_data function .
*
* @ access public
* @ return void
*/
public function save_data () {
if ( $this -> _changed )
$GLOBALS [ 'woocommerce' ] -> session -> customer = $this -> _data ;
}
/**
* __set function .
*
* @ access public
* @ param mixed $property
* @ param mixed $value
* @ return void
*/
public function __isset ( $property ) {
return isset ( $this -> _data [ $property ] );
}
2012-09-23 16:16:39 +00:00
/**
* __get function .
2012-11-27 16:22:47 +00:00
*
2012-09-23 16:16:39 +00:00
* @ access public
* @ param mixed $property
* @ return mixed
*/
public function __get ( $property ) {
return isset ( $this -> _data [ $property ] ) ? $this -> _data [ $property ] : null ;
}
2012-11-27 16:22:47 +00:00
2012-09-23 16:16:39 +00:00
/**
* __set function .
2012-11-27 16:22:47 +00:00
*
2012-09-23 16:16:39 +00:00
* @ access public
* @ param mixed $property
* @ param mixed $value
* @ return void
*/
public function __set ( $property , $value ) {
$this -> _data [ $property ] = $value ;
2013-01-12 13:02:47 +00:00
$this -> _changed = true ;
2012-09-23 16:16:39 +00:00
}
2012-11-27 16:22:47 +00:00
2012-05-09 17:29:22 +00:00
/**
* has_calculated_shipping function .
2012-08-14 19:42:38 +00:00
*
2012-05-09 17:29:22 +00:00
* @ access public
* @ return bool
*/
2012-12-14 21:43:45 +00:00
public function has_calculated_shipping () {
2013-01-12 13:02:47 +00:00
return ( ! empty ( $this -> calculated_shipping ) ) ? true : false ;
2012-05-09 17:29:22 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Set customer address to match shop base address .
*
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_to_base () {
2012-08-31 17:40:58 +00:00
$default = apply_filters ( 'woocommerce_customer_default_location' , get_option ( 'woocommerce_default_country' ) );
2012-09-07 18:28:27 +00:00
if ( strstr ( $default , ':' ) ) {
list ( $country , $state ) = explode ( ':' , $default );
} else {
2011-12-14 23:50:32 +00:00
$country = $default ;
$state = '' ;
2012-09-07 18:28:27 +00:00
}
2013-01-12 13:02:47 +00:00
$this -> country = $country ;
$this -> state = $state ;
$this -> postcode = '' ;
$this -> city = '' ;
2011-12-14 23:50:32 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Set customer shipping address to base address .
*
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_to_base () {
2011-12-14 23:50:32 +00:00
$default = get_option ( 'woocommerce_default_country' );
2012-09-07 18:28:27 +00:00
if ( strstr ( $default , ':' ) ) {
list ( $country , $state ) = explode ( ':' , $default );
} else {
2011-12-14 23:50:32 +00:00
$country = $default ;
$state = '' ;
2012-09-07 18:28:27 +00:00
}
2013-01-12 13:02:47 +00:00
$this -> shipping_country = $country ;
$this -> shipping_state = $state ;
$this -> shipping_postcode = '' ;
$this -> shipping_city = '' ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
2012-10-04 17:09:18 +00:00
* Is customer outside base country ( for tax purposes ) ?
2012-08-14 19:42:38 +00:00
*
* @ access public
* @ return bool
*/
2012-12-14 21:43:45 +00:00
public function is_customer_outside_base () {
2012-10-04 17:09:18 +00:00
list ( $country , $state , $postcode , $city ) = $this -> get_taxable_address ();
2012-11-27 16:22:47 +00:00
2012-10-04 17:09:18 +00:00
if ( $country ) {
2012-08-14 19:42:38 +00:00
2011-08-10 17:11:11 +00:00
$default = get_option ( 'woocommerce_default_country' );
2012-11-27 16:22:47 +00:00
2012-09-07 18:28:27 +00:00
if ( strstr ( $default , ':' ) ) {
2012-10-04 17:09:18 +00:00
list ( $default_country , $default_state ) = explode ( ':' , $default );
2012-09-07 18:28:27 +00:00
} else {
2012-10-04 17:09:18 +00:00
$default_country = $default ;
$default_state = '' ;
2012-09-07 18:28:27 +00:00
}
2012-08-14 19:42:38 +00:00
2012-10-04 17:09:18 +00:00
if ( $default_country !== $country ) return true ;
if ( $default_state && $default_state !== $state ) return true ;
2012-08-14 19:42:38 +00:00
2012-09-23 16:16:39 +00:00
}
2011-08-09 15:16:18 +00:00
return false ;
}
2012-08-14 19:42:38 +00:00
/**
* Is customer VAT exempt ?
*
* @ access public
* @ return bool
*/
2012-12-14 21:43:45 +00:00
public function is_vat_exempt () {
2013-01-12 13:02:47 +00:00
return ( ! empty ( $this -> is_vat_exempt ) ) ? true : false ;
2011-09-14 14:55:03 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Gets the state from the current session .
*
* @ access public
* @ return string
*/
2012-12-14 21:43:45 +00:00
public function get_state () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> state ) ) return $this -> state ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Gets the country from the current session
*
* @ access public
* @ return string
*/
2012-12-14 21:43:45 +00:00
public function get_country () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> country ) ) return $this -> country ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Gets the postcode from the current session .
*
* @ access public
* @ return string
*/
2012-12-14 21:43:45 +00:00
public function get_postcode () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> postcode ) && $this -> postcode !== false )
2013-09-12 13:41:02 +00:00
return wc_format_postcode ( $this -> postcode , $this -> get_country () );
2012-09-23 16:16:39 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-23 16:16:39 +00:00
/**
* Get the city from the current session .
2012-11-27 16:22:47 +00:00
*
2012-09-23 16:16:39 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function get_city () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> city ) ) return $this -> city ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
2012-11-27 01:56:48 +00:00
/**
* Gets the address from the current session .
2012-11-27 16:22:47 +00:00
*
2012-11-27 01:56:48 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function get_address () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> address ) ) return $this -> address ;
2012-11-27 01:56:48 +00:00
}
2012-11-27 16:22:47 +00:00
2012-11-27 01:56:48 +00:00
/**
* Gets the address_2 from the current session .
2012-11-27 16:22:47 +00:00
*
2012-11-27 01:56:48 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function get_address_2 () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> address_2 ) ) return $this -> address_2 ;
2012-11-27 01:56:48 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Gets the state from the current session .
*
* @ access public
* @ return string
*/
2012-12-14 21:43:45 +00:00
public function get_shipping_state () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> shipping_state ) ) return $this -> shipping_state ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Gets the country from the current session .
*
* @ access public
* @ return string
*/
2012-12-14 21:43:45 +00:00
public function get_shipping_country () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> shipping_country ) ) return $this -> shipping_country ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Gets the postcode from the current session .
*
* @ access public
* @ return string
*/
2012-12-14 21:43:45 +00:00
public function get_shipping_postcode () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> shipping_postcode ) )
2013-09-12 13:41:02 +00:00
return wc_format_postcode ( $this -> shipping_postcode , $this -> get_shipping_country () );
2012-09-23 16:16:39 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-23 16:16:39 +00:00
/**
* Gets the city from the current session .
2012-11-27 16:22:47 +00:00
*
2012-09-23 16:16:39 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function get_shipping_city () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> shipping_city ) ) return $this -> shipping_city ;
2011-08-09 15:16:18 +00:00
}
2012-11-27 16:22:47 +00:00
2012-11-27 01:56:48 +00:00
/**
* Gets the address from the current session .
2012-11-27 16:22:47 +00:00
*
2012-11-27 01:56:48 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function get_shipping_address () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> shipping_address ) ) return $this -> shipping_address ;
2012-11-27 01:56:48 +00:00
}
2012-11-27 16:22:47 +00:00
2012-11-27 01:56:48 +00:00
/**
* Gets the address_2 from the current session .
2012-11-27 16:22:47 +00:00
*
2012-11-27 01:56:48 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function get_shipping_address_2 () {
2013-01-12 13:02:47 +00:00
if ( isset ( $this -> shipping_address_2 ) ) return $this -> shipping_address_2 ;
2012-11-27 01:56:48 +00:00
}
2012-11-27 16:22:47 +00:00
2012-10-01 09:45:07 +00:00
/**
* get_taxable_address function .
2012-11-27 16:22:47 +00:00
*
2012-10-01 09:45:07 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function get_taxable_address () {
2012-12-03 15:13:59 +00:00
$tax_based_on = get_option ( 'woocommerce_tax_based_on' );
2013-09-03 15:26:02 +00:00
// Check shipping method at this point to see if we need special handling
2013-10-30 15:30:15 +00:00
if ( apply_filters ( 'woocommerce_apply_base_tax_for_local_pickup' , true ) == true && sizeof ( array_intersect ( WC () -> session -> get ( 'chosen_shipping_methods' , array ( get_option ( 'woocommerce_default_shipping_method' ) ) ), apply_filters ( 'woocommerce_local_pickup_methods' , array ( 'local_pickup' ) ) ) ) > 0 ) {
2013-09-03 15:26:02 +00:00
$tax_based_on = 'base' ;
}
2012-12-03 15:13:59 +00:00
if ( $tax_based_on == 'base' ) {
$default = get_option ( 'woocommerce_default_country' );
if ( strstr ( $default , ':' ) ) {
list ( $country , $state ) = explode ( ':' , $default );
} else {
$country = $default ;
$state = '' ;
}
$postcode = '' ;
$city = '' ;
} elseif ( $tax_based_on == 'billing' ) {
2012-10-01 09:45:07 +00:00
$country = $this -> get_country ();
$state = $this -> get_state ();
$postcode = $this -> get_postcode ();
$city = $this -> get_city ();
2012-12-03 15:13:59 +00:00
} else {
$country = $this -> get_shipping_country ();
$state = $this -> get_shipping_state ();
$postcode = $this -> get_shipping_postcode ();
$city = $this -> get_shipping_city ();
2012-10-01 09:45:07 +00:00
}
2012-12-03 15:13:59 +00:00
2012-10-01 09:45:07 +00:00
return apply_filters ( 'woocommerce_customer_taxable_address' , array ( $country , $state , $postcode , $city ) );
}
2012-08-14 19:42:38 +00:00
2012-11-27 16:22:47 +00:00
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the location .
2012-11-27 16:22:47 +00:00
*
2012-08-14 19:42:38 +00:00
* @ access public
* @ param mixed $country
* @ param mixed $state
* @ param string $postcode ( default : '' )
2012-09-23 16:16:39 +00:00
* @ param string $city ( default : '' )
2012-08-14 19:42:38 +00:00
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_location ( $country , $state , $postcode = '' , $city = '' ) {
2013-01-12 13:02:47 +00:00
$this -> country = $country ;
$this -> state = $state ;
$this -> postcode = $postcode ;
$this -> city = $city ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the country .
*
* @ access public
* @ param mixed $country
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_country ( $country ) {
2013-01-12 13:02:47 +00:00
$this -> country = $country ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the state .
*
* @ access public
* @ param mixed $state
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_state ( $state ) {
2013-01-12 13:02:47 +00:00
$this -> state = $state ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the postcode .
*
* @ access public
* @ param mixed $postcode
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_postcode ( $postcode ) {
2013-01-12 13:02:47 +00:00
$this -> postcode = $postcode ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
2012-09-23 16:16:39 +00:00
/**
* Sets session data for the city .
*
* @ access public
* @ param mixed $postcode
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_city ( $city ) {
2013-01-12 13:02:47 +00:00
$this -> city = $city ;
2012-09-23 16:16:39 +00:00
}
2012-11-27 01:56:48 +00:00
/**
* Sets session data for the address .
*
* @ access public
* @ param mixed $address
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_address ( $address ) {
2013-01-12 13:02:47 +00:00
$this -> address = $address ;
2012-11-27 01:56:48 +00:00
}
/**
* Sets session data for the address_2 .
*
* @ access public
* @ param mixed $address_2
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_address_2 ( $address_2 ) {
2013-01-12 13:02:47 +00:00
$this -> address_2 = $address_2 ;
2012-11-27 01:56:48 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the location .
*
* @ access public
* @ param mixed $country
* @ param string $state ( default : '' )
* @ param string $postcode ( default : '' )
2012-11-27 16:22:47 +00:00
* @ param string $city ( default : '' )
2012-08-14 19:42:38 +00:00
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_location ( $country , $state = '' , $postcode = '' , $city = '' ) {
2013-01-12 13:02:47 +00:00
$this -> shipping_country = $country ;
$this -> shipping_state = $state ;
$this -> shipping_postcode = $postcode ;
$this -> shipping_city = $city ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the country .
*
* @ access public
* @ param mixed $country
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_country ( $country ) {
2013-01-12 13:02:47 +00:00
$this -> shipping_country = $country ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the state .
*
* @ access public
* @ param mixed $state
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_state ( $state ) {
2013-01-12 13:02:47 +00:00
$this -> shipping_state = $state ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the postcode .
*
* @ access public
* @ param mixed $postcode
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_postcode ( $postcode ) {
2013-01-12 13:02:47 +00:00
$this -> shipping_postcode = $postcode ;
2012-09-23 16:16:39 +00:00
}
/**
* Sets session data for the city .
*
* @ access public
* @ param mixed $postcode
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_city ( $city ) {
2013-01-12 13:02:47 +00:00
$this -> shipping_city = $city ;
2011-08-09 15:16:18 +00:00
}
2012-08-14 19:42:38 +00:00
2012-11-27 01:56:48 +00:00
/**
* Sets session data for the address .
*
* @ access public
* @ param mixed $address
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_address ( $address ) {
2013-01-12 13:02:47 +00:00
$this -> shipping_address = $address ;
2012-11-27 01:56:48 +00:00
}
/**
* Sets session data for the address_2 .
*
* @ access public
* @ param mixed $address_2
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_shipping_address_2 ( $address_2 ) {
2013-01-12 13:02:47 +00:00
$this -> shipping_address_2 = $address_2 ;
2012-11-27 01:56:48 +00:00
}
2012-08-14 19:42:38 +00:00
/**
* Sets session data for the tax exemption .
*
* @ access public
* @ param mixed $is_vat_exempt
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function set_is_vat_exempt ( $is_vat_exempt ) {
2013-01-12 13:02:47 +00:00
$this -> is_vat_exempt = $is_vat_exempt ;
2011-09-14 14:55:03 +00:00
}
2012-08-14 19:42:38 +00:00
2012-09-07 18:28:27 +00:00
/**
* calculated_shipping function .
2012-11-27 16:22:47 +00:00
*
2012-09-07 18:28:27 +00:00
* @ access public
* @ param mixed $calculated
* @ return void
*/
2012-12-14 21:43:45 +00:00
public function calculated_shipping ( $calculated = true ) {
2013-01-12 13:02:47 +00:00
$this -> calculated_shipping = $calculated ;
2012-09-07 18:28:27 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-07 18:28:27 +00:00
2011-08-09 15:16:18 +00:00
/**
2012-08-14 19:42:38 +00:00
* Gets a user ' s downloadable products if they are logged in .
2011-08-09 15:16:18 +00:00
*
2012-08-14 19:42:38 +00:00
* @ access public
* @ return array Array of downloadable products
2011-08-09 15:16:18 +00:00
*/
2012-12-14 21:43:45 +00:00
public function get_downloadable_products () {
2012-09-07 18:28:27 +00:00
global $wpdb , $woocommerce ;
2012-08-14 19:42:38 +00:00
2011-08-09 15:16:18 +00:00
$downloads = array ();
2012-08-14 19:42:38 +00:00
2012-09-07 18:28:27 +00:00
if ( is_user_logged_in () ) :
2012-08-14 19:42:38 +00:00
2012-09-23 16:16:39 +00:00
$user_info = get_userdata ( get_current_user_id () );
2011-11-09 23:06:17 +00:00
2012-08-28 15:21:54 +00:00
$results = $wpdb -> get_results ( $wpdb -> prepare ( " SELECT * FROM " . $wpdb -> prefix . " woocommerce_downloadable_product_permissions WHERE user_id = '%s' ORDER BY order_id, product_id, download_id " , get_current_user_id ()) );
2012-11-27 16:22:47 +00:00
2012-08-28 15:21:54 +00:00
$_product = null ;
$order = null ;
$file_number = 0 ;
2011-11-16 12:15:41 +00:00
if ( $results ) foreach ( $results as $result ) :
2012-08-14 19:42:38 +00:00
2011-11-17 00:30:46 +00:00
if ( $result -> order_id > 0 ) :
2012-08-14 19:42:38 +00:00
2012-08-28 15:21:54 +00:00
if ( ! $order || $order -> id != $result -> order_id ) {
// new order
$order = new WC_Order ( $result -> order_id );
$_product = null ;
}
2012-08-14 19:42:38 +00:00
2012-08-28 15:21:54 +00:00
// order exists and downloads permitted?
2012-12-06 15:39:59 +00:00
if ( ! $order -> id || ! $order -> is_download_permitted () || $order -> post_status != 'publish' ) continue ;
2012-08-14 19:42:38 +00:00
2012-08-28 15:21:54 +00:00
if ( ! $_product || $_product -> id != $result -> product_id ) :
// new product
$file_number = 0 ;
2012-11-21 18:07:45 +00:00
$_product = get_product ( $result -> product_id );
2012-08-14 19:42:38 +00:00
endif ;
2012-11-30 15:12:11 +00:00
if ( ! $_product || ! $_product -> exists () ) continue ;
2012-11-27 16:22:47 +00:00
2012-08-28 15:21:54 +00:00
if ( ! $_product -> has_file ( $result -> download_id ) ) continue ;
// Download name will be 'Product Name' for products with a single downloadable file, and 'Product Name - File X' for products with multiple files
2012-12-07 11:51:07 +00:00
$download_name = apply_filters (
'woocommerce_downloadable_product_name' ,
$_product -> get_title () . ( $file_number > 0 ? ' — ' . sprintf ( __ ( 'File %d' , 'woocommerce' ), $file_number + 1 ) : '' ),
$_product ,
$result -> download_id ,
$file_number
);
// Rename previous download with file number if there are multiple files only
if ( $file_number == 1 ) {
2013-04-24 19:24:53 +00:00
$previous_result = & $downloads [ count ( $downloads ) - 1 ];
$previous_product = get_product ( $previous_result [ 'product_id' ]);
$previous_result [ 'download_name' ] = apply_filters (
'woocommerce_downloadable_product_name' ,
$previous_result [ 'download_name' ] . ' — ' . sprintf ( __ ( 'File %d' , 'woocommerce' ), $file_number ),
$previous_product ,
$previous_result [ 'download_id' ],
0
);
2012-12-07 11:51:07 +00:00
}
2012-08-14 19:42:38 +00:00
2011-11-16 12:15:41 +00:00
$downloads [] = array (
2013-04-04 17:07:54 +00:00
'download_url' => add_query_arg ( array ( 'download_file' => $result -> product_id , 'order' => $result -> order_key , 'email' => $result -> user_email , 'key' => $result -> download_id ), trailingslashit ( home_url ( '' , 'http' ) ) ),
2012-08-28 15:21:54 +00:00
'download_id' => $result -> download_id ,
2011-11-16 12:15:41 +00:00
'product_id' => $result -> product_id ,
'download_name' => $download_name ,
'order_id' => $order -> id ,
'order_key' => $order -> order_key ,
'downloads_remaining' => $result -> downloads_remaining
);
2012-08-14 19:42:38 +00:00
2012-08-28 15:21:54 +00:00
$file_number ++ ;
2011-11-16 12:15:41 +00:00
endif ;
2012-08-14 19:42:38 +00:00
2011-08-09 15:16:18 +00:00
endforeach ;
2012-08-14 19:42:38 +00:00
2011-08-09 15:16:18 +00:00
endif ;
2012-08-14 19:42:38 +00:00
2011-09-30 09:20:51 +00:00
return apply_filters ( 'woocommerce_customer_get_downloadable_products' , $downloads );
2012-08-14 19:42:38 +00:00
}
2011-08-09 15:16:18 +00:00
}