1 <?php
2 3 4 5 6 7 8 9 10 11 12
13
14
15 if ( ! defined( 'ABSPATH' ) ) exit;
16
17 18 19 20 21 22 23 24 25 26 27 28
29 function edd_get_users_purchases( $user = 0, $number = 20, $pagination = false ) {
30 if ( empty( $user ) ) {
31 global $user_ID;
32
33 $user = $user_ID;
34 }
35
36 $mode = edd_is_test_mode() ? 'test' : 'live';
37
38 if ( $pagination ) {
39 if ( get_query_var( 'paged' ) )
40 $paged = get_query_var('paged');
41 else if ( get_query_var( 'page' ) )
42 $paged = get_query_var( 'page' );
43 else
44 $paged = 1;
45 }
46
47 $args = apply_filters( 'edd_get_users_purchases_args', array(
48 'mode' => $mode,
49 'user' => $user,
50 'number' => $number,
51 'status' => 'publish'
52 ) );
53
54 if ( $pagination )
55 $args['page'] = $paged;
56 else
57 $args['nopaging'] = true;
58
59 $purchases = edd_get_payments( $args );
60
61
62 if ( ! $purchases )
63 return false;
64
65 return $purchases;
66 }
67
68 69 70 71 72 73 74 75 76 77 78 79
80 function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null ) {
81 if ( ! is_user_logged_in() )
82 return false;
83
84 $users_purchases = edd_get_users_purchases( $user_id );
85
86 $return = false;
87
88 if ( ! is_array( $downloads ) ) {
89 $downloads = array( $downloads );
90 }
91
92 if ( $users_purchases ) {
93 foreach ( $users_purchases as $purchase ) {
94
95 $purchased_files = edd_get_payment_meta_downloads( $purchase->ID );
96
97 if ( is_array( $purchased_files ) ) {
98 foreach ( $purchased_files as $download ) {
99 if ( in_array( $download['id'], $downloads ) ) {
100 $variable_prices = edd_has_variable_prices( $download['id'] );
101 if ( $variable_prices && ! is_null( $variable_price_id ) && $variable_price_id !== false ) {
102 if ( isset( $download['options']['price_id'] ) && $variable_price_id == $download['options']['price_id'] ) {
103 return true;
104 } else {
105 $return = false;
106 }
107 } else {
108 $return = true;
109 }
110 }
111 }
112 }
113 }
114 }
115
116 return $return;
117 }
118
119 120 121 122 123 124 125 126 127 128
129 function edd_has_purchases( $user_id = null ) {
130 if ( is_null( $user_id ) ) {
131 global $user_ID;
132 $user_id = $user_ID;
133 }
134
135 if ( edd_get_users_purchases( $user_id, 1 ) ) {
136 return true;
137 }
138 return false;
139 }
140
141 142 143 144 145 146 147 148 149 150
151 function edd_count_purchases_of_customer( $user = null ) {
152 if ( empty( $user ) )
153 $user = get_current_user_id();
154
155 $args = array(
156 'number' => -1,
157 'mode' => 'live',
158 'user' => $user,
159 'status' => 'publish'
160 );
161
162 $customer_purchases = edd_get_payments( $args );
163 if ( $customer_purchases )
164 return count( $customer_purchases );
165 return 0;
166 }
167
168 169 170 171 172 173 174 175
176 function edd_purchase_total_of_user( $user = null ) {
177 $args = array(
178 'number' => -1,
179 'mode' => 'live',
180 'user' => $user,
181 'status' => 'publish'
182 );
183
184 $customer_purchases = edd_get_payments( $args );
185
186 $amount = get_transient( md5( 'edd_customer_total_' . $user ) );
187 if ( false === $amount ) {
188 $amount = 0;
189
190 if ( $customer_purchases ) :
191 foreach ( $customer_purchases as $purchase ) :
192 $amount += edd_get_payment_amount( $purchase->ID );
193 endforeach;
194 endif;
195 set_transient( md5( 'edd_customer_total_' . $user ), $amount );
196 }
197
198 return round( $amount, 2 );
199 }
200
201 202 203 204 205 206 207 208
209 function edd_count_file_downloads_of_user( $user ) {
210 global $edd_logs;
211
212 if ( is_email( $user ) ) {
213 $meta_query = array(
214 array(
215 'key' => '_edd_log_user_info',
216 'value' => $user,
217 'compare' => 'LIKE'
218 )
219 );
220 } else {
221 $meta_query = array(
222 array(
223 'key' => '_edd_log_user_id',
224 'value' => $user
225 )
226 );
227 }
228
229 return $edd_logs->get_log_count( null, 'file_download', $meta_query );
230 }
231
232 233 234 235 236 237 238 239
240 function edd_validate_username( $username ) {
241 $sanitized = sanitize_user( $username, false );
242 $valid = ( $sanitized == $username );
243 return (bool) apply_filters( 'edd_validate_username', $valid, $username );
244 }