168 lines
3.9 KiB
PHP
168 lines
3.9 KiB
PHP
<?php
|
|
/**
|
|
* @package Freemius
|
|
* @copyright Copyright (c) 2016, Freemius, Inc.
|
|
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
|
* @since 1.0.0
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
class FS_Payment extends FS_Entity {
|
|
|
|
#region Properties
|
|
|
|
/**
|
|
* @var number
|
|
*/
|
|
public $plugin_id;
|
|
/**
|
|
* @var number
|
|
*/
|
|
public $user_id;
|
|
/**
|
|
* @var number
|
|
*/
|
|
public $install_id;
|
|
/**
|
|
* @var number
|
|
*/
|
|
public $subscription_id;
|
|
/**
|
|
* @var number
|
|
*/
|
|
public $plan_id;
|
|
/**
|
|
* @var number
|
|
*/
|
|
public $license_id;
|
|
/**
|
|
* @var float
|
|
*/
|
|
public $gross;
|
|
/**
|
|
* @author Leo Fajardo (@leorw)
|
|
* @since 2.3.0
|
|
*
|
|
* @var string One of the following: `usd`, `gbp`, `eur`.
|
|
*/
|
|
public $currency;
|
|
/**
|
|
* @var number
|
|
*/
|
|
public $bound_payment_id;
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $external_id;
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $gateway;
|
|
/**
|
|
* @var string ISO 3166-1 alpha-2 - two-letter country code.
|
|
*
|
|
* @link http://www.wikiwand.com/en/ISO_3166-1_alpha-2
|
|
*/
|
|
public $country_code;
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $vat_id;
|
|
/**
|
|
* @var float Actual Tax / VAT in $$$
|
|
*/
|
|
public $vat;
|
|
/**
|
|
* @var int Payment source.
|
|
*/
|
|
public $source = 0;
|
|
|
|
#endregion Properties
|
|
|
|
const CURRENCY_USD = 'usd';
|
|
const CURRENCY_GBP = 'gbp';
|
|
const CURRENCY_EUR = 'eur';
|
|
|
|
/**
|
|
* @param object|bool $payment
|
|
*/
|
|
function __construct( $payment = false ) {
|
|
parent::__construct( $payment );
|
|
}
|
|
|
|
static function get_type() {
|
|
return 'payment';
|
|
}
|
|
|
|
/**
|
|
* @author Vova Feldman (@svovaf)
|
|
* @since 1.0.0
|
|
*
|
|
* @return bool
|
|
*/
|
|
function is_refund() {
|
|
return ( parent::is_valid_id( $this->bound_payment_id ) && 0 > $this->gross );
|
|
}
|
|
|
|
/**
|
|
* Checks if the payment was migrated from another platform.
|
|
*
|
|
* @author Vova Feldman (@svovaf)
|
|
* @since 2.0.2
|
|
*
|
|
* @return bool
|
|
*/
|
|
function is_migrated() {
|
|
return ( 0 != $this->source );
|
|
}
|
|
|
|
/**
|
|
* Returns the gross in this format:
|
|
* `{symbol}{amount | 2 decimal digits} {currency | uppercase}`
|
|
*
|
|
* Examples: £9.99 GBP, -£9.99 GBP.
|
|
*
|
|
* @author Leo Fajardo (@leorw)
|
|
* @since 2.3.0
|
|
*
|
|
* @return string
|
|
*/
|
|
function formatted_gross()
|
|
{
|
|
return (
|
|
( $this->gross < 0 ? '-' : '' ) .
|
|
$this->get_symbol() .
|
|
number_format( abs( $this->gross ), 2, '.', ',' ) . ' ' .
|
|
strtoupper( $this->currency )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* A map between supported currencies with their symbols.
|
|
*
|
|
* @var array<string,string>
|
|
*/
|
|
static $CURRENCY_2_SYMBOL;
|
|
|
|
/**
|
|
* @author Leo Fajardo (@leorw)
|
|
* @since 2.3.0
|
|
*
|
|
* @return string
|
|
*/
|
|
private function get_symbol() {
|
|
if ( ! isset( self::$CURRENCY_2_SYMBOL ) ) {
|
|
// Lazy load.
|
|
self::$CURRENCY_2_SYMBOL = array(
|
|
self::CURRENCY_USD => '$',
|
|
self::CURRENCY_GBP => '£',
|
|
self::CURRENCY_EUR => '€',
|
|
);
|
|
}
|
|
|
|
return self::$CURRENCY_2_SYMBOL[ $this->currency ];
|
|
}
|
|
} |