File "class-wc-cli-runner.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-runner.php
File size: 6.55 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

if (!defined('ABSPATH')) {
    exit;
}
class WC_CLI_Runner
{
    private static $disabled_endpoints = array('settings', 'settings/(?P<group_id>[\\w-]+)', 'settings/(?P<group_id>[\\w-]+)/batch', 'settings/(?P<group_id>[\\w-]+)/(?P<id>[\\w-]+)', 'system_status', 'system_status/tools', 'system_status/tools/(?P<id>[\\w-]+)', 'reports', 'reports/sales', 'reports/top_sellers');
    private static $target_rest_version = 'v2';
    public static function after_wp_load()
    {
        global $wp_rest_server;
        $wp_rest_server = new WP_REST_Server();
        do_action('rest_api_init', $wp_rest_server);
        $request = new WP_REST_Request('GET', '/');
        $request->set_param('context', 'help');
        $response = $wp_rest_server->dispatch($request);
        $response_data = $response->get_data();
        if (empty($response_data)) {
            return;
        }
        foreach ($response_data['routes'] as $route => $route_data) {
            if (substr($route, 0, 4 + strlen(self::$target_rest_version)) !== '/wc/' . self::$target_rest_version) {
                continue;
            }
            if (empty($route_data['schema']['title'])) {
                WP_CLI::debug(sprintf(__('No schema title found for %s, skipping REST command registration.', 'woocommerce'), $route), 'wc');
                continue;
            }
            if ('batch' === $route_data['schema']['title']) {
                continue;
            }
            $route_pieces = explode('/', $route);
            $endpoint_piece = str_replace('/wc/' . $route_pieces[2] . '/', '', $route);
            if (in_array($endpoint_piece, self::$disabled_endpoints, true)) {
                continue;
            }
            self::register_route_commands(new WC_CLI_REST_Command($route_data['schema']['title'], $route, $route_data['schema']), $route, $route_data);
        }
    }
    private static function register_route_commands($rest_command, $route, $route_data, $command_args = array())
    {
        $supported_ids = array('product_id' => __('Product ID.', 'woocommerce'), 'customer_id' => __('Customer ID.', 'woocommerce'), 'order_id' => __('Order ID.', 'woocommerce'), 'refund_id' => __('Refund ID.', 'woocommerce'), 'attribute_id' => __('Attribute ID.', 'woocommerce'), 'zone_id' => __('Zone ID.', 'woocommerce'), 'instance_id' => __('Instance ID.', 'woocommerce'), 'id' => __('The ID for the resource.', 'woocommerce'), 'slug' => __('The slug for the resource.', 'woocommerce'));
        $rest_command->set_supported_ids($supported_ids);
        $positional_args = array_keys($supported_ids);
        $parent = "wc {$route_data['schema']['title']}";
        $supported_commands = array();
        foreach ($route_data['endpoints'] as $endpoint) {
            preg_match_all('#\\([^\\)]+\\)#', $route, $matches);
            $resource_id = !empty($matches[0]) ? array_pop($matches[0]) : null;
            $trimmed_route = rtrim($route);
            $is_singular = substr($trimmed_route, -strlen($resource_id)) === $resource_id;
            if (array('GET') === $endpoint['methods'] && !$is_singular) {
                $supported_commands['list'] = !empty($endpoint['args']) ? $endpoint['args'] : array();
            }
            if (array('POST') === $endpoint['methods'] && !$is_singular) {
                $supported_commands['create'] = !empty($endpoint['args']) ? $endpoint['args'] : array();
            }
            if (array('GET') === $endpoint['methods'] && $is_singular) {
                $supported_commands['get'] = !empty($endpoint['args']) ? $endpoint['args'] : array();
            }
            if (in_array('POST', $endpoint['methods'], true) && $is_singular) {
                $supported_commands['update'] = !empty($endpoint['args']) ? $endpoint['args'] : array();
            }
            if (array('DELETE') === $endpoint['methods'] && $is_singular) {
                $supported_commands['delete'] = !empty($endpoint['args']) ? $endpoint['args'] : array();
            }
        }
        foreach ($supported_commands as $command => $endpoint_args) {
            $synopsis = array();
            $arg_regs = array();
            $ids = array();
            foreach ($supported_ids as $id_name => $id_desc) {
                if (strpos($route, '<' . $id_name . '>') !== false) {
                    $synopsis[] = array('name' => $id_name, 'type' => 'positional', 'description' => $id_desc, 'optional' => false);
                    $ids[] = $id_name;
                }
            }
            foreach ($endpoint_args as $name => $args) {
                if (!in_array($name, $positional_args, true) || strpos($route, '<' . $id_name . '>') === false) {
                    $arg_regs[] = array('name' => $name, 'type' => 'assoc', 'description' => !empty($args['description']) ? $args['description'] : '', 'optional' => empty($args['required']));
                }
            }
            foreach ($arg_regs as $arg_reg) {
                $synopsis[] = $arg_reg;
            }
            if (in_array($command, array('list', 'get'), true)) {
                $synopsis[] = array('name' => 'fields', 'type' => 'assoc', 'description' => __('Limit response to specific fields. Defaults to all fields.', 'woocommerce'), 'optional' => true);
                $synopsis[] = array('name' => 'field', 'type' => 'assoc', 'description' => __('Get the value of an individual field.', 'woocommerce'), 'optional' => true);
                $synopsis[] = array('name' => 'format', 'type' => 'assoc', 'description' => __('Render response in a particular format.', 'woocommerce'), 'optional' => true, 'default' => 'table', 'options' => array('table', 'json', 'csv', 'ids', 'yaml', 'count', 'headers', 'body', 'envelope'));
            }
            if (in_array($command, array('create', 'update', 'delete'), true)) {
                $synopsis[] = array('name' => 'porcelain', 'type' => 'flag', 'description' => __('Output just the id when the operation is successful.', 'woocommerce'), 'optional' => true);
            }
            $methods = array('list' => 'list_items', 'create' => 'create_item', 'delete' => 'delete_item', 'get' => 'get_item', 'update' => 'update_item');
            $before_invoke = null;
            if (empty($command_args['when']) && \WP_CLI::get_config('debug')) {
                $before_invoke = function () {
                    wc_maybe_define_constant('SAVEQUERIES', true);
                };
            }
            WP_CLI::add_command("{$parent} {$command}", array($rest_command, $methods[$command]), array('synopsis' => $synopsis, 'when' => !empty($command_args['when']) ? $command_args['when'] : '', 'before_invoke' => $before_invoke));
        }
    }
}