Easy Digital Downloads
  • Package
  • Function
  • Tree

Packages

  • EDD
    • Admin
      • Actions
      • Add-ons
      • Dashboard
      • Discounts
      • Downloads
      • Export
      • Notices
      • Pages
      • Payments
      • Reports
      • Settings
      • System
      • Upgrades
      • Upload
      • Welcome
    • Cart
    • Checkout
    • Classes
      • API
      • Fees
      • HTML
      • Roles
      • Session
    • Emails
    • Functions
      • AJAX
      • Compatibility
      • Errors
      • Formatting
      • Install
      • Login
      • Taxes
      • Templates
    • Gateways
    • Logging
    • Payments
    • Shortcodes
    • Widgets

Functions

  • _edd_deprecated_function
  • edd_admin_downloads_icon
  • edd_allowed_mime_types
  • edd_block_attachments
  • edd_cart_discounts_html
  • edd_cart_has_discounts
  • edd_change_default_title
  • edd_cleanup_file_symlinks
  • edd_count_file_downloads_of_user
  • edd_count_purchases_of_customer
  • edd_decrease_earnings
  • edd_decrease_purchase_count
  • edd_deliver_download
  • edd_discount_exists
  • edd_discount_is_min_met
  • edd_discount_is_single_use
  • edd_discount_product_reqs_met
  • edd_display_cart_discount
  • edd_format_discount_rate
  • edd_get_actions
  • edd_get_average_monthly_download_earnings
  • edd_get_average_monthly_download_sales
  • edd_get_bundled_products
  • edd_get_cart_discounted_amount
  • edd_get_cart_discounts
  • edd_get_cart_discounts_html
  • edd_get_country_list
  • edd_get_currencies
  • edd_get_current_page_url
  • edd_get_default_labels
  • edd_get_discount
  • edd_get_discount_amount
  • edd_get_discount_by_code
  • edd_get_discount_code
  • edd_get_discount_expiration
  • edd_get_discount_id_by_code
  • edd_get_discount_max_uses
  • edd_get_discount_min_price
  • edd_get_discount_product_condition
  • edd_get_discount_product_reqs
  • edd_get_discount_start_date
  • edd_get_discount_type
  • edd_get_discount_uses
  • edd_get_discounted_amount
  • edd_get_discounts
  • edd_get_download
  • edd_get_download_earnings_stats
  • edd_get_download_file_url
  • edd_get_download_files
  • edd_get_download_final_price
  • edd_get_download_price
  • edd_get_download_sales_stats
  • edd_get_download_type
  • edd_get_file_ctype
  • edd_get_file_download_limit
  • edd_get_file_download_limit_override
  • edd_get_file_extension
  • edd_get_file_price_condition
  • edd_get_highest_price_option
  • edd_get_ip
  • edd_get_label_plural
  • edd_get_label_singular
  • edd_get_lowest_price_option
  • edd_get_php_arg_separator_output
  • edd_get_price_option_name
  • edd_get_product_notes
  • edd_get_provinces_list
  • edd_get_purchase_cc_info
  • edd_get_purchase_form_user
  • edd_get_states_list
  • edd_get_success_page_url
  • edd_get_symlink_dir
  • edd_get_symlink_url
  • edd_get_users_purchases
  • edd_get_variable_prices
  • edd_has_active_discounts
  • edd_has_purchases
  • edd_has_user_purchased
  • edd_has_variable_prices
  • edd_increase_discount_usage
  • edd_increase_earnings
  • edd_increase_purchase_count
  • edd_is_cc_verify_enabled
  • edd_is_discount_active
  • edd_is_discount_expired
  • edd_is_discount_maxed_out
  • edd_is_discount_not_global
  • edd_is_discount_started
  • edd_is_discount_used
  • edd_is_discount_valid
  • edd_is_file_at_download_limit
  • edd_is_func_disabled
  • edd_is_odd
  • edd_is_test_mode
  • edd_let_to_num
  • edd_load_admin_scripts
  • edd_load_scripts
  • edd_logged_in_only
  • edd_month_num_to_name
  • edd_no_guest_checkout
  • edd_no_redownload
  • edd_post_actions
  • edd_presstrends
  • edd_price
  • edd_price_range
  • edd_process_download
  • edd_process_purchase_form
  • edd_purchase_form_required_fields
  • edd_purchase_form_validate_agree_to_terms
  • edd_purchase_form_validate_cc
  • edd_purchase_form_validate_cc_zip
  • edd_purchase_form_validate_discounts
  • edd_purchase_form_validate_fields
  • edd_purchase_form_validate_gateway
  • edd_purchase_form_validate_guest_user
  • edd_purchase_form_validate_logged_in_user
  • edd_purchase_form_validate_new_user
  • edd_purchase_form_validate_user_login
  • edd_purchase_total_of_user
  • edd_query_vars
  • edd_readfile_chunked
  • edd_record_download_in_log
  • edd_record_sale_in_log
  • edd_register_and_login_new_user
  • edd_register_post_type_statuses
  • edd_register_styles
  • edd_remove_cart_discount
  • edd_remove_discount
  • edd_remove_download_logs_on_delete
  • edd_send_back_to_checkout
  • edd_send_to_success_page
  • edd_set_cart_discount
  • edd_set_file_download_limit_override
  • edd_setup_download_taxonomies
  • edd_setup_edd_post_types
  • edd_single_price_option_mode
  • edd_store_discount
  • edd_straight_to_checkout
  • edd_string_is_image_url
  • edd_unset_all_cart_discounts
  • edd_unset_cart_discount
  • edd_update_discount_status
  • edd_updated_messages
  • edd_validate_username
  • edd_verify_download_link
  • edd_version_in_header
  1 <?php
  2 /**
  3  * User Functions
  4  *
  5  * Functions related to users / customers
  6  *
  7  * @package     EDD
  8  * @subpackage  Functions
  9  * @copyright   Copyright (c) 2013, Pippin Williamson
 10  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 11  * @since       1.0.8.6
 12  */
 13 
 14 // Exit if accessed directly
 15 if ( ! defined( 'ABSPATH' ) ) exit;
 16 
 17 /**
 18  * Get Users Purchases
 19  *
 20  * Retrieves a list of all purchases by a specific user.
 21  *
 22  * @access public
 23  * @since  1.0
 24  * @param  int|string $user   User ID or email address
 25  * @param  int $number        Number of purchases to retrieve
 26  *
 27  * @return array List of all user purchases
 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     // No purchases
 62     if ( ! $purchases )
 63         return false;
 64 
 65     return $purchases;
 66 }
 67 
 68 /**
 69  * Has User Purchased
 70  *
 71  * Checks to see if a user has purchased a download.
 72  *
 73  * @access      public
 74  * @since       1.0
 75  * @param       int $user_id - the ID of the user to check
 76  * @param       array $downloads - Array of IDs to check if purchased. If an int is passed, it will be converted to an array
 77  * @param       int $variable_price_id - the variable price ID to check for
 78  * @return      boolean - true if has purchased, false otherwise
 79  */
 80 function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null ) {
 81     if ( ! is_user_logged_in() )
 82         return false; // At some point this should support email checking
 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  * Has Purchases
121  *
122  * Checks to see if a user has purchased at least one item.
123  *
124  * @access      public
125  * @since       1.0
126  * @param       $user_id int - the ID of the user to check
127  * @return      bool - true if has purchased, false other wise.
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; // User has at least one purchase
137     }
138     return false; // User has never purchased anything
139 }
140 
141 /**
142  * Count number of purchases of a customer
143  *
144  * Returns total number of purchases a customer has made
145  *
146  * @access      public
147  * @since       1.3
148  * @param       $user mixed - ID or email
149  * @return      int - the total number of purchases
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  * Calculates the total amount spent by a user
170  *
171  * @access      public
172  * @since       1.3
173  * @param       $user mixed - ID or email
174  * @return      float - the total amount the user has spent
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  * Counts the total number of files a customer has downloaded
203  *
204  * @access      public
205  * @since       1.3
206  * @param       $user mixed - ID or email
207  * @return      int - The total number of files the user has downloaded
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  * Validate a potential username
234  *
235  * @access      public
236  * @since       1.3.4
237  * @param       $username string - the username to validate
238  * @return      bool
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 }
Easy Digital Downloads API documentation generated by ApiGen 2.8.0