PluginProbe
WooCommerce / 11.1.0-beta.1
WooCommerce v11.1.0-beta.1
11.1.0 11.1.0-rc.2 11.1.0-rc.1 11.1.0-beta.2 11.1.0-beta.1 11.0.1 11.0.0 11.0.0-rc.3 11.0.0-rc.2 11.0.0-rc.1 11.0.0-beta.2 11.0.0-beta.1 10.9.4 10.9.3 10.9.2 10.9.1 10.9.0 10.9.0-rc.1 10.9.0-beta.2 10.9.0-beta.1 10.8.1 10.8.0 10.8.0-rc.1 10.8.0-beta.2 10.8.0-beta.1 All 648 releases
woocommerce / src / Admin / API / Experiments.php
Experiments.php
86 lines 1.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * REST API Experiment Controller
4 *
5 * Handles requests to /experiment
6 */
7
8 namespace Automattic\WooCommerce\Admin\API;
9
10 defined( 'ABSPATH' ) || exit;
11
12 /**
13 * Data controller.
14 *
15 * @extends WC_REST_Data_Controller
16 */
17 class Experiments extends \WC_REST_Data_Controller {
18
19 /**
20 * Endpoint namespace.
21 *
22 * @var string
23 */
24 protected $namespace = 'wc-admin';
25
26 /**
27 * Route base.
28 *
29 * @var string
30 */
31 protected $rest_base = 'experiments';
32
33 /**
34 * Register routes.
35 */
36 public function register_routes() {
37 register_rest_route(
38 $this->namespace,
39 '/' . $this->rest_base . '/assignment',
40 array(
41 array(
42 'methods' => \WP_REST_Server::READABLE,
43 'callback' => array( $this, 'get_assignment' ),
44 'permission_callback' => array( $this, 'get_item_permissions_check' ),
45 ),
46 'schema' => array( $this, 'get_public_item_schema' ),
47 )
48 );
49 }
50
51
52 /**
53 * Forward the experiment request to WP.com and return the WP.com response.
54 *
55 * @param \WP_REST_Request $request Request data.
56 *
57 * @return \WP_Error|\WP_REST_Response
58 */
59 public function get_assignment( $request ) {
60 $args = $request->get_query_params();
61
62 if ( ! isset( $args['experiment_name'] ) ) {
63 return new \WP_Error(
64 'woocommerce_rest_experiment_name_required',
65 __( 'Sorry, experiment_name is required.', 'woocommerce' ),
66 array( 'status' => 400 )
67 );
68 }
69
70 unset( $args['rest_route'] );
71
72 $abtest = new \WooCommerce\Admin\Experimental_Abtest(
73 $request->get_param( 'anon_id' ) ?? '',
74 'woocommerce',
75 true, // set consent to true here since frontend has checked it already.
76 true // set true to send request as auth user.
77 );
78 $response = $abtest->request_assignment( $args );
79 if ( is_wp_error( $response ) ) {
80 return $response;
81 }
82
83 return json_decode( $response['body'], true );
84 }
85 }
86