1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
<?php
namespace Automattic\WooCommerce\StoreApi\Routes\V1;
use Automattic\WooCommerce\Blocks\BlockPatterns; use Automattic\WooCommerce\Blocks\Package; use Automattic\WooCommerce\Blocks\Patterns\PTKClient; use Automattic\WooCommerce\Blocks\Patterns\PTKPatternsStore; use Automattic\WooCommerce\StoreApi\Exceptions\RouteException; use Exception; use WP_Error; use WP_REST_Request; use WP_REST_Response;
/** * Patterns class. */ class Patterns extends AbstractRoute { /** * The route identifier. * * @var string */ const IDENTIFIER = 'patterns';
/** * The schema item identifier. * * @var string */ const SCHEMA_TYPE = 'patterns';
/** * Get the path of this REST route. * * @return string */ public function get_path() { return self::get_path_regex(); }
/** * Get the path of this rest route. * * @return string */ public static function get_path_regex() { return '/patterns'; }
/** * Get method arguments for this REST route. * * @return array An array of endpoints. */ public function get_args() { return [ [ 'methods' => \WP_REST_Server::READABLE, 'callback' => [ $this, 'get_response' ], 'permission_callback' => function () { return is_user_logged_in(); }, ], [ 'methods' => \WP_REST_Server::CREATABLE, 'callback' => [ $this, 'get_response' ], 'permission_callback' => function () { return is_user_logged_in(); }, ], 'schema' => [ $this->schema, 'get_public_item_schema' ], ]; }
/** * Fetch a single pattern from the PTK to ensure the API is available. * * @param WP_REST_Request $request Request object. * * @return WP_Error|\WP_HTTP_Response|WP_REST_Response * @throws RouteException If the patterns cannot be fetched. */ protected function get_route_response( WP_REST_Request $request ) { $ptk_client = Package::container()->get( PTKClient::class );
$response = $ptk_client->fetch_patterns( array( 'per_page' => 1, ) );
if ( is_wp_error( $response ) ) { throw new RouteException( wp_kses( $response->get_error_message(), array() ), wp_kses( $response->get_error_code(), array() ) ); }
return rest_ensure_response( array( 'success' => true, ) ); }
/** * Fetch the patterns from the PTK and update the transient. * * @param WP_REST_Request $request Request object. * * @return WP_REST_Response * @throws Exception If the patterns cannot be fetched. */ protected function get_route_post_response( WP_REST_Request $request ) { $ptk_patterns_store = Package::container()->get( PTKPatternsStore::class );
$patterns = $ptk_patterns_store->fetch_patterns();
$block_patterns = Package::container()->get( BlockPatterns::class );
$block_patterns->register_ptk_patterns( $patterns );
return rest_ensure_response( array( 'success' => true, ) ); } }
|