/** * Process Get Stats API Request * * @author Daniel J Griffiths * @since 1.5 * * @global object $wpdb Used to query the database using the WordPress * * @param array $args Arguments provided by API Request * * @return array */ public function get_stats($args = array()) { $defaults = array('type' => null, 'product' => null, 'date' => null, 'startdate' => null, 'enddate' => null); $args = wp_parse_args($args, $defaults); $dates = $this->get_dates($args); $stats = array(); $earnings = array('earnings' => array()); $sales = array('sales' => array()); $error = array(); if (!user_can($this->user_id, 'view_shop_reports') && !$this->override) { return $stats; } if ($args['type'] == 'sales') { if ($args['product'] == null) { if ($args['date'] == null) { $sales = $this->get_default_sales_stats(); } elseif ($args['date'] === 'range') { // Return sales for a date range // Ensure the end date is later than the start date if ($args['enddate'] < $args['startdate']) { $error['error'] = __('The end date must be later than the start date!', 'easy-digital-downloads'); } // Ensure both the start and end date are specified if (empty($args['startdate']) || empty($args['enddate'])) { $error['error'] = __('Invalid or no date range specified!', 'easy-digital-downloads'); } $total = 0; // Loop through the years $y = $dates['year']; while ($y <= $dates['year_end']) { if ($dates['year'] == $dates['year_end']) { $month_start = $dates['m_start']; $month_end = $dates['m_end']; } elseif ($y == $dates['year'] && $dates['year_end'] > $dates['year']) { $month_start = $dates['m_start']; $month_end = 12; } elseif ($y == $dates['year_end']) { $month_start = 1; $month_end = $dates['m_end']; } else { $month_start = 1; $month_end = 12; } $i = $month_start; while ($i <= $month_end) { if ($i == $dates['m_start']) { $d = $dates['day_start']; } else { $d = 1; } if ($i == $dates['m_end']) { $num_of_days = $dates['day_end']; } else { $num_of_days = cal_days_in_month(CAL_GREGORIAN, $i, $y); } while ($d <= $num_of_days) { $sale_count = edd_get_sales_by_date($d, $i, $y); $date_key = date('Ymd', strtotime($y . '/' . $i . '/' . $d)); if (!isset($sales['sales'][$date_key])) { $sales['sales'][$date_key] = 0; } $sales['sales'][$date_key] += $sale_count; $total += $sale_count; $d++; } $i++; } $y++; } $sales['totals'] = $total; } else { if ($args['date'] == 'this_quarter' || $args['date'] == 'last_quarter') { $sales_count = 0; // Loop through the months $month = $dates['m_start']; while ($month <= $dates['m_end']) { $sales_count += edd_get_sales_by_date(null, $month, $dates['year']); $month++; } $sales['sales'][$args['date']] = $sales_count; } else { $sales['sales'][$args['date']] = edd_get_sales_by_date($dates['day'], $dates['m_start'], $dates['year']); } } } elseif ($args['product'] == 'all') { $products = get_posts(array('post_type' => 'download', 'nopaging' => true)); $i = 0; foreach ($products as $product_info) { $sales['sales'][$i] = array($product_info->post_name => edd_get_download_sales_stats($product_info->ID)); $i++; } } else { if (get_post_type($args['product']) == 'download') { $product_info = get_post($args['product']); $sales['sales'][0] = array($product_info->post_name => edd_get_download_sales_stats($args['product'])); } else { $error['error'] = sprintf(__('Product %s not found!', 'easy-digital-downloads'), $args['product']); } } if (!empty($error)) { return $error; } return $sales; } elseif ($args['type'] == 'earnings') { if ($args['product'] == null) { if ($args['date'] == null) { $earnings = $this->get_default_earnings_stats(); } elseif ($args['date'] === 'range') { // Return sales for a date range // Ensure the end date is later than the start date if ($args['enddate'] < $args['startdate']) { $error['error'] = __('The end date must be later than the start date!', 'easy-digital-downloads'); } // Ensure both the start and end date are specified if (empty($args['startdate']) || empty($args['enddate'])) { $error['error'] = __('Invalid or no date range specified!', 'easy-digital-downloads'); } $total = (double) 0.0; // Loop through the years $y = $dates['year']; if (!isset($earnings['earnings'])) { $earnings['earnings'] = array(); } while ($y <= $dates['year_end']) { if ($dates['year'] == $dates['year_end']) { $month_start = $dates['m_start']; $month_end = $dates['m_end']; } elseif ($y == $dates['year'] && $dates['year_end'] > $dates['year']) { $month_start = $dates['m_start']; $month_end = 12; } elseif ($y == $dates['year_end']) { $month_start = 1; $month_end = $dates['m_end']; } else { $month_start = 1; $month_end = 12; } $i = $month_start; while ($i <= $month_end) { if ($i == $dates['m_start']) { $d = $dates['day_start']; } else { $d = 1; } if ($i == $dates['m_end']) { $num_of_days = $dates['day_end']; } else { $num_of_days = cal_days_in_month(CAL_GREGORIAN, $i, $y); } while ($d <= $num_of_days) { $earnings_stat = edd_get_earnings_by_date($d, $i, $y); $date_key = date('Ymd', strtotime($y . '/' . $i . '/' . $d)); if (!isset($earnings['earnings'][$date_key])) { $earnings['earnings'][$date_key] = 0; } $earnings['earnings'][$date_key] += $earnings_stat; $total += $earnings_stat; $d++; } $i++; } $y++; } $earnings['totals'] = $total; } else { if ($args['date'] == 'this_quarter' || $args['date'] == 'last_quarter') { $earnings_count = (double) 0.0; // Loop through the months $month = $dates['m_start']; while ($month <= $dates['m_end']) { $earnings_count += edd_get_earnings_by_date(null, $month, $dates['year']); $month++; } $earnings['earnings'][$args['date']] = $earnings_count; } else { $earnings['earnings'][$args['date']] = edd_get_earnings_by_date($dates['day'], $dates['m_start'], $dates['year']); } } } elseif ($args['product'] == 'all') { $products = get_posts(array('post_type' => 'download', 'nopaging' => true)); $i = 0; foreach ($products as $product_info) { $earnings['earnings'][$i] = array($product_info->post_name => edd_get_download_earnings_stats($product_info->ID)); $i++; } } else { if (get_post_type($args['product']) == 'download') { $product_info = get_post($args['product']); $earnings['earnings'][0] = array($product_info->post_name => edd_get_download_earnings_stats($args['product'])); } else { $error['error'] = sprintf(__('Product %s not found!', 'easy-digital-downloads'), $args['product']); } } if (!empty($error)) { return $error; } return $earnings; } elseif ($args['type'] == 'customers') { if (version_compare($edd_version, '2.3', '<') || !edd_has_upgrade_completed('upgrade_customer_payments_association')) { global $wpdb; $stats = array(); $count = $wpdb->get_col("SELECT COUNT(DISTINCT meta_value) FROM {$wpdb->postmeta} WHERE meta_key = '_edd_payment_user_email'"); $stats['customers']['total_customers'] = $count[0]; return $stats; } else { $customers = new EDD_DB_Customers(); $stats['customers']['total_customers'] = $customers->count(); return $stats; } } elseif (empty($args['type'])) { $stats = array_merge($stats, $this->get_default_sales_stats()); $stats = array_merge($stats, $this->get_default_earnings_stats()); return array('stats' => $stats); } }
/** * Drop our custom tables when a mu site is deleted * * @since 2.5 * @param array $tables The tables to drop * @param int $blog_id The Blog ID being deleted * @return array The tables to drop */ function edd_wpmu_drop_tables($tables, $blog_id) { switch_to_blog($blog_id); $customers_db = new EDD_DB_Customers(); if ($customers_db->installed()) { $tables[] = $customers_db->table_name; } restore_current_blog(); return $tables; }