Files
roi-theme/wp-content/plugins/thrive-ultimatum/thrive-dashboard/inc/ttw-account/classes/class-td-ttw-license.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

225 lines
3.9 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden
}
/**
* @property int id
* @property int status
* @property string name
* @property string state
* @property string expiration
* @property string refund_date
* @property array tags
* @property boolean can_update
* @property int grace_period_in_days
* @property boolean in_grace_period
* @property boolean complementary
*
* Representation of a single user license
* Class TD_TTW_License
*/
class TD_TTW_License {
use TD_Magic_Methods;
const MEMBERSHIP_TAG = 'all';
const REFUNDED_STATUS = 3;
private $_expected_fields = [
'id',
'status',
'name',
'state',
'tags',
'expiration',
'refund_date',
'can_update',
'mm_product_id',
'grace_period_in_days',
'in_grace_period',
'complementary',
];
public function __construct( $data ) {
foreach ( $this->_expected_fields as $field ) {
if ( isset( $data[ $field ] ) ) {
$this->_data[ $field ] = $data[ $field ];
}
}
}
/**
* Check if the license is active
*
* @return bool
*/
public function is_active() {
return in_array(
(int) $this->status,
array(
1, // active
9, // pending cancellation
),
true
) || $this->complementary === true;
}
/**
* Check if the license is expired
*
* @return bool
*/
public function is_expired() {
try {
return new DateTime( 'now' ) > $this->get_expiration_date();
} catch ( Exception $e ) {
return true;
}
}
/**
* @return DateTime
* @throws Exception
*/
public function get_expiration_date() {
return new DateTime( $this->expiration );
}
/**
* @return DateTime
* @throws Exception
*/
public function get_grace_period_date() {
return $this->get_expiration_date()->add( new DateInterval( 'P' . (int) $this->grace_period_in_days . 'D' ) );
}
/**
* Checks if a license is expired and expiration date + grace period in days in the future
*
* @return bool
*/
public function is_in_grace_period() {
if ( $this->is_active() ) {
return false;
}
try {
$date = $this->get_expiration_date();
$date->add( new DateInterval( 'P' . (int) $this->grace_period_in_days . 'D' ) );
return new DateTime( 'now' ) < $date;
} catch ( Exception $e ) {
return false;
}
}
/**
* @return bool
* @throws Exception
*/
public function is_out_of_grace_period() {
return $this->is_expired() && ! $this->is_in_grace_period();
}
/**
* @return string
*/
public function get_name() {
return $this->name;
}
/**
* @return string
*/
public function get_expiration() {
return $this->expiration;
}
/**
* Check if the user has access to updates on this license
*
* @return bool
*/
public function can_update() {
return true === $this->can_update;
}
/**
* @return bool
*/
public function is_membership() {
return in_array( self::MEMBERSHIP_TAG, $this->tags, true );
}
/**
* @return DateInterval
* @throws Exception
*/
public function get_remaining_grace_period() {
try {
return ( new DateTime( 'now' ) )->diff( $this->get_grace_period_date() );
} catch ( Exception $e ) {
return new DateInterval( 'P0D' );
}
}
/**
* @return string
*/
public function get_product_name() {
if ( $this->is_membership() ) {
return 'membership';
}
return implode( ',', $this->tags );
}
public function get_state() {
return $this->state;
}
public function is_refunded() {
return self::REFUNDED_STATUS === (int) $this->status;
}
public function get_refunded_date() {
return $this->refund_date;
}
/**
* Checks if tags list contains the $tag
*
* @param $tag
*
* @return bool
*/
public function has_tag( $tag ) {
return in_array( $tag, $this->tags, true );
}
/**
* License data
*
* @return array|mixed
*/
public function get_data() {
return $this->_data;
}
}