File "class-wc-rest-legacy-coupons-controller.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

if (!defined('ABSPATH')) {
    exit;
}
class WC_REST_Legacy_Coupons_Controller extends WC_REST_CRUD_Controller
{
    public function query_args($args, $request)
    {
        if (!empty($request['code'])) {
            $id = wc_get_coupon_id_by_code($request['code']);
            $args['post__in'] = array($id);
        }
        return $args;
    }
    public function prepare_item_for_response($post, $request)
    {
        $coupon = new WC_Coupon((int) $post->ID);
        $data = $coupon->get_data();
        $format_decimal = array('amount', 'minimum_amount', 'maximum_amount');
        $format_date = array('date_created', 'date_modified', 'date_expires');
        $format_null = array('usage_limit', 'usage_limit_per_user', 'limit_usage_to_x_items');
        foreach ($format_decimal as $key) {
            $data[$key] = wc_format_decimal($data[$key], 2);
        }
        foreach ($format_date as $key) {
            $data[$key] = $data[$key] ? wc_rest_prepare_date_response(get_gmt_from_date(date('Y-m-d H:i:s', $data[$key]))) : null;
        }
        foreach ($format_null as $key) {
            $data[$key] = $data[$key] ? $data[$key] : null;
        }
        $context = !empty($request['context']) ? $request['context'] : 'view';
        $data = $this->add_additional_fields_to_object($data, $request);
        $data = $this->filter_response_by_context($data, $context);
        $response = rest_ensure_response($data);
        $response->add_links($this->prepare_links($post, $request));
        return apply_filters("woocommerce_rest_prepare_{$this->post_type}", $response, $post, $request);
    }
    protected function prepare_item_for_database($request)
    {
        global $wpdb;
        $id = isset($request['id']) ? absint($request['id']) : 0;
        $coupon = new WC_Coupon($id);
        $schema = $this->get_item_schema();
        $data_keys = array_keys(array_filter($schema['properties'], array($this, 'filter_writable_props')));
        if ('POST' === $request->get_method() && 0 === $coupon->get_id()) {
            if (empty($request['code'])) {
                return new WP_Error('woocommerce_rest_empty_coupon_code', sprintf(__('The coupon code cannot be empty.', 'woocommerce'), 'code'), array('status' => 400));
            }
        }
        foreach ($data_keys as $key) {
            $value = $request[$key];
            if (!is_null($value)) {
                switch ($key) {
                    case 'code':
                        $coupon_code = wc_format_coupon_code($value);
                        $id = $coupon->get_id() ? $coupon->get_id() : 0;
                        $id_from_code = wc_get_coupon_id_by_code($coupon_code, $id);
                        if ($id_from_code) {
                            return new WP_Error('woocommerce_rest_coupon_code_already_exists', __('The coupon code already exists', 'woocommerce'), array('status' => 400));
                        }
                        $coupon->set_code($coupon_code);
                        break;
                    case 'meta_data':
                        if (is_array($value)) {
                            foreach ($value as $meta) {
                                $coupon->update_meta_data($meta['key'], $meta['value'], isset($meta['id']) ? $meta['id'] : '');
                            }
                        }
                        break;
                    case 'description':
                        $coupon->set_description(wp_filter_post_kses($value));
                        break;
                    default:
                        if (is_callable(array($coupon, "set_{$key}"))) {
                            $coupon->{"set_{$key}"}($value);
                        }
                        break;
                }
            }
        }
        return apply_filters("woocommerce_rest_pre_insert_{$this->post_type}", $coupon, $request);
    }
}