Since: 1.0
Inheritance: extends Give_DB
示例#1
0
 /**
  * Sanitize the data for update/create
  *
  * @since  1.0
  * @access private
  *
  * @param  array $data The data to sanitize.
  *
  * @return array       The sanitized data, based off column defaults.
  */
 private function sanitize_columns($data)
 {
     $columns = $this->db->get_columns();
     $default_values = $this->db->get_column_defaults();
     foreach ($columns as $key => $type) {
         // Only sanitize data that we were provided
         if (!array_key_exists($key, $data)) {
             continue;
         }
         switch ($type) {
             case '%s':
                 if ('email' == $key) {
                     $data[$key] = sanitize_email($data[$key]);
                 } elseif ('notes' == $key) {
                     $data[$key] = strip_tags($data[$key]);
                 } else {
                     $data[$key] = sanitize_text_field($data[$key]);
                 }
                 break;
             case '%d':
                 if (!is_numeric($data[$key]) || (int) $data[$key] !== absint($data[$key])) {
                     $data[$key] = $default_values[$key];
                 } else {
                     $data[$key] = absint($data[$key]);
                 }
                 break;
             case '%f':
                 // Convert what was given to a float
                 $value = floatval($data[$key]);
                 if (!is_float($value)) {
                     $data[$key] = $default_values[$key];
                 } else {
                     $data[$key] = $value;
                 }
                 break;
             default:
                 $data[$key] = sanitize_text_field($data[$key]);
                 break;
         }
     }
     return $data;
 }
示例#2
0
 /**
  * Process Get Stats API Request
  *
  * @since 1.1
  *
  * @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, 'form' => null, 'date' => null, 'startdate' => null, 'enddate' => null);
     $args = wp_parse_args($args, $defaults);
     $dates = $this->get_dates($args);
     $stats = array();
     $earnings = array('earnings' => array());
     $donations = array('donations' => array());
     $error = array();
     if (!user_can($this->user_id, 'view_give_reports') && !$this->override) {
         return $stats;
     }
     if ($args['type'] == 'donations') {
         if ($args['form'] == 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!', 'give');
                 }
                 // Ensure both the start and end date are specified
                 if (empty($args['startdate']) || empty($args['enddate'])) {
                     $error['error'] = __('Invalid or no date range specified!', 'give');
                 }
                 $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 = give_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 += give_get_sales_by_date(null, $month, $dates['year']);
                         $month++;
                     }
                     $sales['donations'][$args['date']] = $sales_count;
                 } else {
                     $sales['donations'][$args['date']] = give_get_sales_by_date($dates['day'], $dates['m_start'], $dates['year']);
                 }
             }
         } elseif ($args['form'] == 'all') {
             $forms = get_posts(array('post_type' => 'give_forms', 'nopaging' => true));
             $i = 0;
             foreach ($forms as $form_info) {
                 $sales['donations'][$i] = array($form_info->post_name => give_get_form_sales_stats($form_info->ID));
                 $i++;
             }
         } else {
             if (get_post_type($args['form']) == 'give_forms') {
                 $form_info = get_post($args['form']);
                 $sales['donations'][0] = array($form_info->post_name => give_get_form_sales_stats($args['form']));
             } else {
                 $error['error'] = sprintf(__('Product %s not found!', 'give'), $args['form']);
             }
         }
         if (!empty($error)) {
             return $error;
         }
         return $sales;
     } elseif ($args['type'] == 'earnings') {
         if ($args['form'] == 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!', 'give');
                 }
                 // Ensure both the start and end date are specified
                 if (empty($args['startdate']) || empty($args['enddate'])) {
                     $error['error'] = __('Invalid or no date range specified!', 'give');
                 }
                 $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 = give_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 += give_get_earnings_by_date(null, $month, $dates['year']);
                         $month++;
                     }
                     $earnings['earnings'][$args['date']] = $earnings_count;
                 } else {
                     $earnings['earnings'][$args['date']] = give_get_earnings_by_date($dates['day'], $dates['m_start'], $dates['year']);
                 }
             }
         } elseif ($args['form'] == 'all') {
             $forms = get_posts(array('post_type' => 'give_forms', 'nopaging' => true));
             $i = 0;
             foreach ($forms as $form_info) {
                 $earnings['earnings'][$i] = array($form_info->post_name => give_get_form_earnings_stats($form_info->ID));
                 $i++;
             }
         } else {
             if (get_post_type($args['form']) == 'give_forms') {
                 $form_info = get_post($args['form']);
                 $earnings['earnings'][0] = array($form_info->post_name => give_get_form_earnings_stats($args['form']));
             } else {
                 $error['error'] = sprintf(__('Form %s not found!', 'give'), $args['form']);
             }
         }
         if (!empty($error)) {
             return $error;
         }
         return $earnings;
     } elseif ($args['type'] == 'donors') {
         $customers = new Give_DB_Customers();
         $stats['donations']['total_donors'] = $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);
     }
 }
示例#3
0
/**
 * Drop Give's custom tables when a mu site is deleted.
 *
 * @since  1.4.3
 *
 * @param  array $tables The tables to drop.
 * @param  int   $blog_id The Blog ID being deleted.
 *
 * @return array          The tables to drop.
 */
function give_wpmu_drop_tables($tables, $blog_id)
{
    switch_to_blog($blog_id);
    $customers_db = new Give_DB_Customers();
    $customer_meta_db = new Give_DB_Customer_Meta();
    if ($customers_db->installed()) {
        $tables[] = $customers_db->table_name;
        $tables[] = $customer_meta_db->table_name;
    }
    restore_current_blog();
    return $tables;
}