File "class-wc-api-coupons.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/legacy/api/v1/class-wc-api-coupons.php
File size: 4.96 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

if (!defined('ABSPATH')) {
    exit;
}
class WC_API_Coupons extends WC_API_Resource
{
    protected $base = '/coupons';
    public function register_routes($routes)
    {
        $routes[$this->base] = array(array(array($this, 'get_coupons'), WC_API_Server::READABLE));
        $routes[$this->base . '/count'] = array(array(array($this, 'get_coupons_count'), WC_API_Server::READABLE));
        $routes[$this->base . '/(?P<id>\\d+)'] = array(array(array($this, 'get_coupon'), WC_API_Server::READABLE));
        $routes[$this->base . '/code/(?P<code>\\w[\\w\\s\\-]*)'] = array(array(array($this, 'get_coupon_by_code'), WC_API_Server::READABLE));
        return $routes;
    }
    public function get_coupons($fields = null, $filter = array(), $page = 1)
    {
        $filter['page'] = $page;
        $query = $this->query_coupons($filter);
        $coupons = array();
        foreach ($query->posts as $coupon_id) {
            if (!$this->is_readable($coupon_id)) {
                continue;
            }
            $coupons[] = current($this->get_coupon($coupon_id, $fields));
        }
        $this->server->add_pagination_headers($query);
        return array('coupons' => $coupons);
    }
    public function get_coupon($id, $fields = null)
    {
        $id = $this->validate_request($id, 'shop_coupon', 'read');
        if (is_wp_error($id)) {
            return $id;
        }
        $coupon = new WC_Coupon($id);
        if (0 === $coupon->get_id()) {
            throw new WC_API_Exception('woocommerce_api_invalid_coupon_id', __('Invalid coupon ID', 'woocommerce'), 404);
        }
        $coupon_data = array('id' => $coupon->get_id(), 'code' => $coupon->get_code(), 'type' => $coupon->get_discount_type(), 'created_at' => $this->server->format_datetime($coupon->get_date_created() ? $coupon->get_date_created()->getTimestamp() : 0), 'updated_at' => $this->server->format_datetime($coupon->get_date_modified() ? $coupon->get_date_modified()->getTimestamp() : 0), 'amount' => wc_format_decimal($coupon->get_amount(), 2), 'individual_use' => $coupon->get_individual_use(), 'product_ids' => array_map('absint', (array) $coupon->get_product_ids()), 'exclude_product_ids' => array_map('absint', (array) $coupon->get_excluded_product_ids()), 'usage_limit' => $coupon->get_usage_limit() ? $coupon->get_usage_limit() : null, 'usage_limit_per_user' => $coupon->get_usage_limit_per_user() ? $coupon->get_usage_limit_per_user() : null, 'limit_usage_to_x_items' => (int) $coupon->get_limit_usage_to_x_items(), 'usage_count' => (int) $coupon->get_usage_count(), 'expiry_date' => $this->server->format_datetime($coupon->get_date_expires() ? $coupon->get_date_expires()->getTimestamp() : 0), 'enable_free_shipping' => $coupon->get_free_shipping(), 'product_category_ids' => array_map('absint', (array) $coupon->get_product_categories()), 'exclude_product_category_ids' => array_map('absint', (array) $coupon->get_excluded_product_categories()), 'exclude_sale_items' => $coupon->get_exclude_sale_items(), 'minimum_amount' => wc_format_decimal($coupon->get_minimum_amount(), 2), 'customer_emails' => $coupon->get_email_restrictions());
        return array('coupon' => apply_filters('woocommerce_api_coupon_response', $coupon_data, $coupon, $fields, $this->server));
    }
    public function get_coupons_count($filter = array())
    {
        $query = $this->query_coupons($filter);
        if (!current_user_can('read_private_shop_coupons')) {
            return new WP_Error('woocommerce_api_user_cannot_read_coupons_count', __('You do not have permission to read the coupons count', 'woocommerce'), array('status' => 401));
        }
        return array('count' => (int) $query->found_posts);
    }
    public function get_coupon_by_code($code, $fields = null)
    {
        global $wpdb;
        $id = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->posts} WHERE post_title = %s AND post_type = 'shop_coupon' AND post_status = 'publish' ORDER BY post_date DESC LIMIT 1;", $code));
        if (is_null($id)) {
            return new WP_Error('woocommerce_api_invalid_coupon_code', __('Invalid coupon code', 'woocommerce'), array('status' => 404));
        }
        return $this->get_coupon($id, $fields);
    }
    public function create_coupon($data)
    {
        return array();
    }
    public function edit_coupon($id, $data)
    {
        $id = $this->validate_request($id, 'shop_coupon', 'edit');
        if (is_wp_error($id)) {
            return $id;
        }
        return $this->get_coupon($id);
    }
    public function delete_coupon($id, $force = false)
    {
        $id = $this->validate_request($id, 'shop_coupon', 'delete');
        if (is_wp_error($id)) {
            return $id;
        }
        return $this->delete($id, 'shop_coupon', 'true' === $force);
    }
    private function query_coupons($args)
    {
        $query_args = array('fields' => 'ids', 'post_type' => 'shop_coupon', 'post_status' => 'publish');
        $query_args = $this->merge_query_args($query_args, $args);
        return new WP_Query($query_args);
    }
}