Seditio Source
Root |
./othercms/xenForo 2.2.8/src/vendor/braintree/braintree_php/lib/Braintree/Customer.php
<?php
namespace Braintree;

/**
 * Braintree Customer module
 * Creates and manages Customers
 *
 * <b>== More information ==</b>
 *
 * For more detailed information on Customers, see {@link https://developers.braintreepayments.com/reference/response/customer/php https://developers.braintreepayments.com/reference/response/customer/php}
 *
 * @package    Braintree
 * @category   Resources
 *
 * @property-read \Braintree\Address[] $addresses
 * @property-read \Braintree\AndroidPayCard[] $androidPayCards
 * @property-read \Braintree\AmexExpressCheckoutCard[] $amexExpressCheckoutCards
 * @property-read \Braintree\ApplePayCard[] $applePayCards
 * @property-read \Braintree\CoinbaseAccount[] $coinbaseAccounts
 * @property-read string $company
 * @property-read \DateTime $createdAt
 * @property-read \Braintree\CreditCard[] $creditCards
 * @property-read array  $customFields custom fields passed with the request
 * @property-read string $email
 * @property-read string $fax
 * @property-read string $firstName
 * @property-read string $id
 * @property-read string $lastName
 * @property-read \Braintree\MasterpassCard[] $masterpassCards
 * @property-read \Braintree\PaymentMethod[] $paymentMethods
 * @property-read \Braintree\PayPalAccount[] $paypalAccounts
 * @property-read string $phone
 * @property-read \Braintree\SamsungPayCard[] $samsungPayCards
 * @property-read \DateTime $updatedAt
 * @property-read \Braintree\UsBankAccount[] $usBankAccounts
 * @property-read \Braintree\VenmoAccount[] $venmoAccounts
 * @property-read \Braintree\VisaCheckoutCard[] $visaCheckoutCards
 * @property-read string $website
 */
class Customer extends Base
{
   
/**
     *
     * @return Customer[]
     */
   
public static function all()
    {
        return
Configuration::gateway()->customer()->all();
    }

   
/**
     *
     * @param string $query
     * @param int[] $ids
     * @return Customer|Customer[]
     */
   
public static function fetch($query, $ids)
    {
        return
Configuration::gateway()->customer()->fetch($query, $ids);
    }

   
/**
     *
     * @param array $attribs
     * @return Result\Successful|Result\Error
     */
   
public static function create($attribs = [])
    {
        return
Configuration::gateway()->customer()->create($attribs);
    }

   
/**
     *
     * @param array $attribs
     * @return Customer
     */
   
public static function createNoValidate($attribs = [])
    {
        return
Configuration::gateway()->customer()->createNoValidate($attribs);
    }

   
/**
     * @deprecated since version 2.3.0
     * @param string $queryString
     * @return Result\Successful
     */
   
public static function createFromTransparentRedirect($queryString)
    {
        return
Configuration::gateway()->customer()->createFromTransparentRedirect($queryString);
    }

   
/**
     * @deprecated since version 2.3.0
     * @return string
     */
   
public static function createCustomerUrl()
    {
        return
Configuration::gateway()->customer()->createCustomerUrl();
    }

   
/**
     *
     * @throws Exception\NotFound
     * @param string $id customer id
     * @return Customer
     */
   
public static function find($id, $associationFilterId = null)
    {
        return
Configuration::gateway()->customer()->find($id, $associationFilterId);
    }

   
/**
     *
     * @param int $customerId
     * @param array $transactionAttribs
     * @return Result\Successful|Result\Error
     */
   
public static function credit($customerId, $transactionAttribs)
    {
        return
Configuration::gateway()->customer()->credit($customerId, $transactionAttribs);
    }

   
/**
     *
     * @throws Exception\ValidationError
     * @param type $customerId
     * @param type $transactionAttribs
     * @return Transaction
     */
   
public static function creditNoValidate($customerId, $transactionAttribs)
    {
        return
Configuration::gateway()->customer()->creditNoValidate($customerId, $transactionAttribs);
    }

   
/**
     *
     * @throws Exception on invalid id or non-200 http response code
     * @param int $customerId
     * @return Result\Successful
     */
   
public static function delete($customerId)
    {
        return
Configuration::gateway()->customer()->delete($customerId);
    }

   
/**
     *
     * @param int $customerId
     * @param array $transactionAttribs
     * @return Transaction
     */
   
public static function sale($customerId, $transactionAttribs)
    {
        return
Configuration::gateway()->customer()->sale($customerId, $transactionAttribs);
    }

   
/**
     *
     * @param int $customerId
     * @param array $transactionAttribs
     * @return Transaction
     */
   
public static function saleNoValidate($customerId, $transactionAttribs)
    {
        return
Configuration::gateway()->customer()->saleNoValidate($customerId, $transactionAttribs);
    }

   
/**
     *
     * @throws InvalidArgumentException
     * @param string $query
     * @return ResourceCollection
     */
   
public static function search($query)
    {
        return
Configuration::gateway()->customer()->search($query);
    }

   
/**
     *
     * @throws Exception\Unexpected
     * @param int $customerId
     * @param array $attributes
     * @return Result\Successful|Result\Error
     */
   
public static function update($customerId, $attributes)
    {
        return
Configuration::gateway()->customer()->update($customerId, $attributes);
    }

   
/**
     *
     * @throws Exception\Unexpected
     * @param int $customerId
     * @param array $attributes
     * @return CustomerGateway
     */
   
public static function updateNoValidate($customerId, $attributes)
    {
        return
Configuration::gateway()->customer()->updateNoValidate($customerId, $attributes);
    }

   
/**
     *
     * @deprecated since version 2.3.0
     * @return string
     */
   
public static function updateCustomerUrl()
    {
        return
Configuration::gateway()->customer()->updateCustomerUrl();
    }

   
/**
     *
     * @deprecated since version 2.3.0
     * @param string $queryString
     * @return Result\Successful|Result\Error
     */
   
public static function updateFromTransparentRedirect($queryString)
    {
        return
Configuration::gateway()->customer()->updateFromTransparentRedirect($queryString);
    }

   
/* instance methods */

    /**
     * sets instance properties from an array of values
     *
     * @ignore
     * @access protected
     * @param array $customerAttribs array of customer data
     */
   
protected function _initialize($customerAttribs)
    {
       
$this->_attributes = $customerAttribs;

       
$addressArray = [];
        if (isset(
$customerAttribs['addresses'])) {

            foreach (
$customerAttribs['addresses'] AS $address) {
               
$addressArray[] = Address::factory($address);
            }
        }
       
$this->_set('addresses', $addressArray);

       
$creditCardArray = [];
        if (isset(
$customerAttribs['creditCards'])) {
            foreach (
$customerAttribs['creditCards'] AS $creditCard) {
               
$creditCardArray[] = CreditCard::factory($creditCard);
            }
        }
       
$this->_set('creditCards', $creditCardArray);

       
$coinbaseAccountArray = [];
        if (isset(
$customerAttribs['coinbaseAccounts'])) {
            foreach (
$customerAttribs['coinbaseAccounts'] AS $coinbaseAccount) {
               
$coinbaseAccountArray[] = CoinbaseAccount::factory($coinbaseAccount);
            }
        }
       
$this->_set('coinbaseAccounts', $coinbaseAccountArray);

       
$paypalAccountArray = [];
        if (isset(
$customerAttribs['paypalAccounts'])) {
            foreach (
$customerAttribs['paypalAccounts'] AS $paypalAccount) {
               
$paypalAccountArray[] = PayPalAccount::factory($paypalAccount);
            }
        }
       
$this->_set('paypalAccounts', $paypalAccountArray);

       
$applePayCardArray = [];
        if (isset(
$customerAttribs['applePayCards'])) {
            foreach (
$customerAttribs['applePayCards'] AS $applePayCard) {
               
$applePayCardArray[] = ApplePayCard::factory($applePayCard);
            }
        }
       
$this->_set('applePayCards', $applePayCardArray);

       
$androidPayCardArray = [];
        if (isset(
$customerAttribs['androidPayCards'])) {
            foreach (
$customerAttribs['androidPayCards'] AS $androidPayCard) {
               
$androidPayCardArray[] = AndroidPayCard::factory($androidPayCard);
            }
        }
       
$this->_set('androidPayCards', $androidPayCardArray);

       
$amexExpressCheckoutCardArray = [];
        if (isset(
$customerAttribs['amexExpressCheckoutCards'])) {
            foreach (
$customerAttribs['amexExpressCheckoutCards'] AS $amexExpressCheckoutCard) {
               
$amexExpressCheckoutCardArray[] = AmexExpressCheckoutCard::factory($amexExpressCheckoutCard);
            }
        }
       
$this->_set('amexExpressCheckoutCards', $amexExpressCheckoutCardArray);

       
$venmoAccountArray = array();
        if (isset(
$customerAttribs['venmoAccounts'])) {
            foreach (
$customerAttribs['venmoAccounts'] AS $venmoAccount) {
               
$venmoAccountArray[] = VenmoAccount::factory($venmoAccount);
            }
        }
       
$this->_set('venmoAccounts', $venmoAccountArray);

       
$visaCheckoutCardArray = [];
        if (isset(
$customerAttribs['visaCheckoutCards'])) {
            foreach (
$customerAttribs['visaCheckoutCards'] AS $visaCheckoutCard) {
               
$visaCheckoutCardArray[] = VisaCheckoutCard::factory($visaCheckoutCard);
            }
        }
       
$this->_set('visaCheckoutCards', $visaCheckoutCardArray);

       
$masterpassCardArray = [];
        if (isset(
$customerAttribs['masterpassCards'])) {
            foreach (
$customerAttribs['masterpassCards'] AS $masterpassCard) {
               
$masterpassCardArray[] = MasterpassCard::factory($masterpassCard);
            }
        }
       
$this->_set('masterpassCards', $masterpassCardArray);

       
$samsungPayCardArray = [];
        if (isset(
$customerAttribs['samsungPayCards'])) {
            foreach (
$customerAttribs['samsungPayCards'] AS $samsungPayCard) {
               
$samsungPayCardArray[] = SamsungPayCard::factory($samsungPayCard);
            }
        }
       
$this->_set('samsungPayCards', $samsungPayCardArray);

       
$usBankAccountArray = array();
        if (isset(
$customerAttribs['usBankAccounts'])) {
            foreach (
$customerAttribs['usBankAccounts'] AS $usBankAccount) {
               
$usBankAccountArray[] = UsBankAccount::factory($usBankAccount);
            }
        }
       
$this->_set('usBankAccounts', $usBankAccountArray);

       
$this->_set('paymentMethods', array_merge(
           
$this->creditCards,
           
$this->paypalAccounts,
           
$this->applePayCards,
           
$this->coinbaseAccounts,
           
$this->androidPayCards,
           
$this->amexExpressCheckoutCards,
           
$this->venmoAccounts,
           
$this->visaCheckoutCards,
           
$this->masterpassCards,
           
$this->samsungPayCards,
           
$this->usBankAccounts
       
));
    }

   
/**
     * returns a string representation of the customer
     * @return string
     */
   
public function  __toString()
    {
        return
__CLASS__ . '[' .
               
Util::attributesToString($this->_attributes) .']';
    }

   
/**
     * returns false if comparing object is not a Customer,
     * or is a Customer with a different id
     *
     * @param object $otherCust customer to compare against
     * @return boolean
     */
   
public function isEqual($otherCust)
    {
        return !(
$otherCust instanceof Customer) ? false : $this->id === $otherCust->id;
    }

   
/**
     * returns an array containt all of the customer's payment methods
     *
     * @deprecated since version 3.1.0 - use the paymentMethods property directly
     *
     * @return array
     */
   
public function paymentMethods()
    {
        return
$this->paymentMethods;
    }

   
/**
     * returns the customer's default payment method
     *
     * @return CreditCard|PayPalAccount
     */
   
public function defaultPaymentMethod()
    {
       
$defaultPaymentMethods = array_filter($this->paymentMethods, 'Braintree\Customer::_defaultPaymentMethodFilter');
        return
current($defaultPaymentMethods);
    }

    public static function
_defaultPaymentMethodFilter($paymentMethod)
    {
        return
$paymentMethod->isDefault();
    }

   
/* private class properties  */

    /**
     * @access protected
     * @var array registry of customer data
     */
   
protected $_attributes = [
       
'addresses'   => '',
       
'company'     => '',
       
'creditCards' => '',
       
'email'       => '',
       
'fax'         => '',
       
'firstName'   => '',
       
'id'          => '',
       
'lastName'    => '',
       
'phone'       => '',
       
'createdAt'   => '',
       
'updatedAt'   => '',
       
'website'     => '',
        ];

   
/**
     *  factory method: returns an instance of Customer
     *  to the requesting method, with populated properties
     *
     * @ignore
     * @param array $attributes
     * @return Customer
     */
   
public static function factory($attributes)
    {
       
$instance = new Customer();
       
$instance->_initialize($attributes);
        return
$instance;
    }
}
class_alias('Braintree\Customer', 'Braintree_Customer');