PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.29.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.29.4
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 All 281 releases
surecart / app / src / Models / Purchase.php
Purchase.php
163 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SureCart\Models;
4
5 use SureCart\Models\Order;
6 use SureCart\Models\Traits\HasCustomer;
7 use SureCart\Models\Traits\HasLicense;
8 use SureCart\Models\Traits\HasProduct;
9 use SureCart\Models\Traits\HasRefund;
10 use SureCart\Models\Traits\HasSubscription;
11
12 /**
13 * Purchase model.
14 */
15 class Purchase extends Model {
16 use HasCustomer, HasProduct, HasSubscription, HasRefund, HasLicense;
17
18 /**
19 * Rest API endpoint
20 *
21 * @var string
22 */
23 protected $endpoint = 'purchases';
24
25 /**
26 * Object name
27 *
28 * @var string
29 */
30 protected $object_name = 'purchase';
31
32 /**
33 * Set the product attribute
34 *
35 * @param string $value Product properties.
36 * @return void
37 */
38 public function setInitialOrderAttribute( $value ) {
39 $this->setRelation( 'initial_order', $value, Order::class );
40 }
41
42 /**
43 * Revoke the purchase.
44 *
45 * @param string $id Model id.
46 *
47 * @return $this|\WP_Error
48 */
49 protected function revoke( $id = 0 ) {
50 $id = $id ? $id : $this->id;
51
52 if ( $this->fireModelEvent( 'revoking' ) === false ) {
53 return false;
54 }
55
56 if ( empty( $id ) ) {
57 return new \WP_Error( 'not_saved', 'You can only revoke an existing purchase.' );
58 }
59
60 $model = $this->makeRequest(
61 [
62 'method' => 'PATCH',
63 'query' => $this->query,
64 ],
65 $this->endpoint . '/' . $id . '/revoke/',
66 );
67
68 if ( is_wp_error( $model ) ) {
69 return $model;
70 }
71
72 $this->resetAttributes();
73
74 $this->fill( $model );
75
76 $this->fireModelEvent( 'revoked' );
77
78 // purchase revoked event.
79 do_action( 'surecart/purchase_revoked', $this );
80
81 return $this;
82 }
83
84 /**
85 * Invoke the purchase.
86 *
87 * @param string $id Model id.
88 *
89 * @return $this|\WP_Error
90 */
91 protected function invoke( $id = 0 ) {
92 $id = $id ? $id : $this->id;
93
94 if ( $this->fireModelEvent( 'invoking' ) === false ) {
95 return false;
96 }
97
98 if ( empty( $id ) ) {
99 return new \WP_Error( 'not_saved', 'You can only invoke an existing purchase.' );
100 }
101
102 $model = $this->makeRequest(
103 [
104 'method' => 'PATCH',
105 'query' => $this->getQuery(),
106 ],
107 $this->endpoint . '/' . $id . '/invoke/',
108 );
109
110 if ( is_wp_error( $model ) ) {
111 return $model;
112 }
113
114 $this->resetAttributes();
115
116 $this->fill( $model );
117
118 $this->fireModelEvent( 'invoked' );
119
120 // purchase invoked event.
121 do_action( 'surecart/purchase_invoked', $this );
122
123 return $this;
124 }
125
126 /**
127 * Has the product changed?
128 */
129 protected function getHasProductChangedAttribute() {
130 return (bool) $this->getPreviousProductIdAttribute();
131 }
132
133 /**
134 * Get the previous product ID.
135 *
136 * @return string
137 */
138 protected function getPreviousProductIdAttribute() {
139 if ( empty( $this->attributes['previous_attributes']['product'] ) ) {
140 return false;
141 }
142 if ( is_string( $this->attributes['previous_attributes']['product'] ) ) {
143 return $this->attributes['previous_attributes']['product'];
144 }
145 if ( ! empty( $this->attributes['previous_attributes']['product']['id'] ) ) {
146 return $this->attributes['previous_attributes']['product']['id'];
147 }
148 return false;
149 }
150
151 /**
152 * Get the previous quantity
153 *
154 * @return integer
155 */
156 protected function getPreviousQuantityAttribute() {
157 if ( empty( $this->attributes['previous_attributes']['quantity'] ) ) {
158 return false;
159 }
160 return $this->attributes['previous_attributes']['quantity'];
161 }
162 }
163