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

/**
 * Braintree Subscription module
 *
 * <b>== More information ==</b>
 *
 * For more detailed information on Subscriptions, see {@link https://developers.braintreepayments.com/reference/response/subscription/php https://developers.braintreepayments.com/reference/response/subscription/php}
 *
 * PHP Version 5
 *
 * @package   Braintree
 *
 * @property-read \Braintree\Addon[] $addOns
 * @property-read string $balance
 * @property-read int $billingDayOfMonth
 * @property-read \DateTime $billingPeriodEndDate
 * @property-read \DateTime $billingPeriodStartDate
 * @property-read \DateTime $createdAt
 * @property-read int $currentBillingCycle
 * @property-read int|null $daysPastDue
 * @property-read string|null $description
 * @property-read \Braintree\Descriptor|null $descriptor
 * @property-read \Braintree\Discount[] $discounts
 * @property-read int $failureCount
 * @property-read \DateTime $firstBillingDate
 * @property-read string $id
 * @property-read string $merchantAccountId
 * @property-read boolean $neverExpires
 * @property-read string $nextBillingPeriodAmount
 * @property-read \DateTime $nextBillingDate
 * @property-read int|null $numberOfBillingCycles
 * @property-read \DateTime|null $paidThroughDate
 * @property-read string $paymentMethodToken
 * @property-read string $planId
 * @property-read string $price
 * @property-read string $status
 * @property-read \Braintree\Subscription\StatusDetails[] $statusHistory
 * @property-read \Braintree\Transaction[] $transactions
 * @property-read int $trialDuration
 * @property-read string $trialDurationUnit
 * @property-read boolean $trialPeriod
 * @property-read \DateTime $updatedAt
 */
class Subscription extends Base
{
    const
ACTIVE = 'Active';
    const
CANCELED = 'Canceled';
    const
EXPIRED = 'Expired';
    const
PAST_DUE = 'Past Due';
    const
PENDING = 'Pending';

   
// Subscription Sources
   
const API           = 'api';
    const
CONTROL_PANEL = 'control_panel';
    const
RECURRING     = 'recurring';

   
/**
     * @ignore
     */
   
public static function factory($attributes)
    {
       
$instance = new self();
       
$instance->_initialize($attributes);

        return
$instance;
    }

   
/**
     * @ignore
     */
   
protected function _initialize($attributes)
    {
       
$this->_attributes = $attributes;

       
$addOnArray = [];
        if (isset(
$attributes['addOns'])) {
            foreach (
$attributes['addOns'] AS $addOn) {
               
$addOnArray[] = AddOn::factory($addOn);
            }
        }
       
$this->_attributes['addOns'] = $addOnArray;

       
$discountArray = [];
        if (isset(
$attributes['discounts'])) {
            foreach (
$attributes['discounts'] AS $discount) {
               
$discountArray[] = Discount::factory($discount);
            }
        }
       
$this->_attributes['discounts'] = $discountArray;

        if (isset(
$attributes['descriptor'])) {
           
$this->_set('descriptor', new Descriptor($attributes['descriptor']));
        }

        if (isset(
$attributes['description'])) {
           
$this->_set('description', $attributes['description']);
        }

       
$statusHistory = [];
        if (isset(
$attributes['statusHistory'])) {
            foreach (
$attributes['statusHistory'] AS $history) {
               
$statusHistory[] = new Subscription\StatusDetails($history);
            }
        }
       
$this->_attributes['statusHistory'] = $statusHistory;

       
$transactionArray = [];
        if (isset(
$attributes['transactions'])) {
            foreach (
$attributes['transactions'] AS $transaction) {
               
$transactionArray[] = Transaction::factory($transaction);
            }
        }
       
$this->_attributes['transactions'] = $transactionArray;
    }

   
/**
     * returns a string representation of the customer
     * @return string
     */
   
public function  __toString()
    {
       
$excludedAttributes = ['statusHistory'];

       
$displayAttributes = [];
        foreach(
$this->_attributes as $key => $val) {
            if (!
in_array($key, $excludedAttributes)) {
               
$displayAttributes[$key] = $val;
            }
        }

        return
__CLASS__ . '[' .
               
Util::attributesToString($displayAttributes) .']';
    }


   
// static methods redirecting to gateway

   
public static function create($attributes)
    {
        return
Configuration::gateway()->subscription()->create($attributes);
    }

    public static function
find($id)
    {
        return
Configuration::gateway()->subscription()->find($id);
    }

    public static function
search($query)
    {
        return
Configuration::gateway()->subscription()->search($query);
    }

    public static function
fetch($query, $ids)
    {
        return
Configuration::gateway()->subscription()->fetch($query, $ids);
    }

    public static function
update($subscriptionId, $attributes)
    {
        return
Configuration::gateway()->subscription()->update($subscriptionId, $attributes);
    }

    public static function
retryCharge($subscriptionId, $amount = null, $submitForSettlement = false)
    {
        return
Configuration::gateway()->subscription()->retryCharge($subscriptionId, $amount, $submitForSettlement);
    }

    public static function
cancel($subscriptionId)
    {
        return
Configuration::gateway()->subscription()->cancel($subscriptionId);
    }
}
class_alias('Braintree\Subscription', 'Braintree_Subscription');