class-learndash-pricing-dto.php
3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<?php
/**
* This class provides the easy way to operate data.
*
* @since 4.5.0
*
* @package LearnDash
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Learndash_Pricing_DTO' ) && class_exists( 'Learndash_DTO' ) ) {
/**
* Pricing DTO class. Used for the product and transaction pricing.
*
* @since 4.5.0
*/
class Learndash_Pricing_DTO extends Learndash_DTO {
private const VALID_DURATION_VALUES = array( 'Y', 'M', 'W', 'D' );
/**
* Properties are being cast to the specified type on construction.
*
* @since 4.5.0
*
* @var array<string, string>
*/
protected $cast = array(
'currency' => 'string',
'price' => 'float',
'discount' => 'float',
'discounted_price' => 'float',
'recurring_times' => 'int',
'duration_value' => 'int',
'duration_length' => 'string',
'trial_price' => 'float',
'trial_duration_value' => 'int',
'trial_duration_length' => 'string',
);
/**
* Currency.
*
* @since 4.5.0
*
* @var string
*/
public $currency = '';
/**
* Price.
*
* @since 4.5.0
*
* @var float
*/
public $price = 0.0;
/**
* Discount.
*
* @since 4.5.0
*
* @var float
*/
public $discount = 0.0;
/**
* Discounted price.
*
* @since 4.5.0
*
* @var float
*/
public $discounted_price = 0.0;
/**
* Recurring times (for subscriptions).
*
* @since 4.5.0
*
* @var int
*/
public $recurring_times = 0;
/**
* Duration value (for subscriptions).
*
* @since 4.5.0
*
* @var int
*/
public $duration_value = 0;
/**
* Duration length (for subscriptions). Valid values: Y, M, W, D.
*
* @since 4.5.0
*
* @var string
*/
public $duration_length = '';
/**
* Trial price.
*
* @since 4.5.0
*
* @var float
*/
public $trial_price = 0.0;
/**
* Trial duration value (for subscriptions).
*
* @since 4.5.0
*
* @var int
*/
public $trial_duration_value = 0;
/**
* Trial duration length (for subscriptions). Valid values: Y, M, W, D.
*
* @since 4.5.0
*
* @var string
*/
public $trial_duration_length = '';
/**
* Validates properties on construction based on validators.
* Key is a property name, value is an array of validator objects.
*
* @since 4.5.0
*
* @return array<string,mixed>
*/
protected function get_validators(): array {
$validators = parent::get_validators();
if ( ! empty( $this->currency ) ) {
$validators['currency'] = array(
Learndash_DTO_Property_Validator_String_Case::uppercase(),
);
}
if ( ! empty( $this->duration_length ) ) {
$validators['duration_length'] = array(
new Learndash_DTO_Property_Validator_Possible_Values( self::VALID_DURATION_VALUES ),
);
}
if ( ! empty( $this->trial_duration_length ) ) {
$validators['trial_duration_length'] = array(
new Learndash_DTO_Property_Validator_Possible_Values( self::VALID_DURATION_VALUES ),
);
}
return $validators;
}
}
}