PluginProbe ʕ •ᴥ•ʔ
Site Kit by Google – Analytics, Search Console, AdSense, Speed / 1.180.0
Site Kit by Google – Analytics, Search Console, AdSense, Speed v1.180.0
1.180.0 1.179.0 1.178.0 1.177.0 1.0.4 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.10.0 1.101.0 1.102.0 1.103.0 1.104.0 1.105.0 1.106.0 1.107.0 1.108.0 1.109.0 1.11.0 1.11.1 1.110.0 1.111.0 1.111.1 1.113.0 1.114.0 1.115.0 1.116.0 1.118.0 1.119.0 1.12.0 1.120.0 1.121.0 1.122.0 1.123.0 1.123.1 1.124.0 1.125.0 1.126.0 1.127.0 1.128.0 1.128.1 1.129.0 1.129.1 1.13.0 1.13.1 1.130.0 1.131.0 1.132.0 1.133.0 1.134.0 1.135.0 1.136.0 1.137.0 1.138.0 1.139.0 1.14.0 1.140.0 1.141.0 1.142.0 1.144.0 1.145.0 1.146.0 1.147.0 1.148.0 1.149.0 1.149.1 1.15.0 1.150.0 1.151.0 1.152.0 1.152.1 1.153.0 1.154.0 1.155.0 1.156.0 1.157.0 1.158.0 1.159.0 1.16.0 1.160.0 1.160.1 1.161.0 1.162.0 1.162.1 1.163.0 1.164.0 1.165.0 1.166.0 1.167.0 1.168.0 1.17.0 1.170.0 1.171.0 1.172.0 1.173.0 1.174.0 1.175.0 1.176.0 1.18.0 1.19.0 1.2.0 1.20.0 1.21.0 1.22.0 1.23.0 1.24.0 1.25.0 1.26.0 1.27.0 1.28.0 1.29.0 1.3.0 1.3.1 1.30.0 1.31.0 1.32.0 1.33.0 1.34.0 1.34.1 1.35.0 1.36.0 1.37.0 1.38.0 1.38.1 1.39.0 1.4.0 1.40.0 1.41.0 1.42.0 1.43.0 1.44.0 1.45.0 1.46.0 1.47.0 1.48.0 1.48.1 1.49.0 1.49.1 1.5.0 1.5.1 1.50.0 1.6.0 1.68.0 1.69.0 1.7.0 1.7.1 1.70.0 1.71.0 1.72.0 1.73.0 1.74.0 1.75.0 1.77.0 1.78.0 1.79.0 1.79.1 1.8.0 1.8.1 1.80.0 1.81.0 1.82.0 1.83.0 1.84.0 1.85.0 1.86.0 1.87.0 1.88.0 1.89.0 1.9.0 1.90.0 1.90.1 1.92.0 1.93.0 1.94.0 1.95.0 1.96.0 1.98.0 1.99.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3
google-site-kit / includes / Core / Expirables / REST_Expirable_Items_Controller.php
google-site-kit / includes / Core / Expirables Last commit date
Expirable_Items.php 1 year ago Expirables.php 9 months ago REST_Expirable_Items_Controller.php 1 year ago
REST_Expirable_Items_Controller.php
170 lines
1 <?php
2 /**
3 * Class Google\Site_Kit\Core\Expirables\REST_Expirable_Items_Controller
4 *
5 * @package Google\Site_Kit\Core\Expirables
6 * @copyright 2024 Google LLC
7 * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
8 * @link https://sitekit.withgoogle.com
9 */
10
11 namespace Google\Site_Kit\Core\Expirables;
12
13 use Google\Site_Kit\Core\Expirables\Expirable_Items;
14 use Google\Site_Kit\Core\Permissions\Permissions;
15 use Google\Site_Kit\Core\REST_API\REST_Route;
16 use Google\Site_Kit\Core\REST_API\REST_Routes;
17 use WP_Error;
18 use WP_REST_Request;
19 use WP_REST_Response;
20 use WP_REST_Server;
21
22 /**
23 * Class for handling expirable items rest routes.
24 *
25 * @since 1.128.0
26 * @access private
27 * @ignore
28 */
29 class REST_Expirable_Items_Controller {
30
31 /**
32 * Expirable_Items instance.
33 *
34 * @since 1.128.0
35 * @var Expirable_Items
36 */
37 protected $expirable_items;
38
39 /**
40 * Constructor.
41 *
42 * @since 1.128.0
43 *
44 * @param Expirable_Items $expirable_items Expirable items instance.
45 */
46 public function __construct( Expirable_Items $expirable_items ) {
47 $this->expirable_items = $expirable_items;
48 }
49
50 /**
51 * Registers functionality through WordPress hooks.
52 *
53 * @since 1.128.0
54 */
55 public function register() {
56 add_filter(
57 'googlesitekit_rest_routes',
58 function ( $routes ) {
59 return array_merge( $routes, $this->get_rest_routes() );
60 }
61 );
62
63 add_filter(
64 'googlesitekit_apifetch_preload_paths',
65 function ( $paths ) {
66 return array_merge(
67 $paths,
68 array(
69 '/' . REST_Routes::REST_ROOT . '/core/user/data/expirable-items',
70 )
71 );
72 }
73 );
74 }
75
76 /**
77 * Gets REST route instances.
78 *
79 * @since 1.128.0
80 *
81 * @return REST_Route[] List of REST_Route objects.
82 */
83 protected function get_rest_routes() {
84 $can_manage_expirable_item = function () {
85 return current_user_can( Permissions::VIEW_DASHBOARD );
86 };
87
88 return array(
89 new REST_Route(
90 'core/user/data/expirable-items',
91 array(
92 'methods' => WP_REST_Server::READABLE,
93 'callback' => function () {
94 return new WP_REST_Response( $this->expirable_items->get() );
95 },
96 'permission_callback' => $can_manage_expirable_item,
97 )
98 ),
99 new REST_Route(
100 'core/user/data/set-expirable-item-timers',
101 array(
102 'methods' => WP_REST_Server::CREATABLE,
103 'callback' => function ( WP_REST_Request $request ) {
104 $data = $request['data'];
105
106 if ( empty( $data ) || ! is_array( $data ) ) {
107 return new WP_Error(
108 'missing_required_param',
109 /* translators: %s: Missing parameter name */
110 sprintf( __( 'Request parameter is empty: %s.', 'google-site-kit' ), 'items' ),
111 array( 'status' => 400 )
112 );
113 }
114
115 foreach ( $data as $datum ) {
116 if ( empty( $datum['slug'] ) ) {
117 return new WP_Error(
118 'missing_required_param',
119 /* translators: %s: Missing parameter name */
120 sprintf( __( 'Request parameter is empty: %s.', 'google-site-kit' ), 'slug' ),
121 array( 'status' => 400 )
122 );
123 }
124
125 $expiration = null;
126 if ( isset( $datum['expiration'] ) && intval( $datum['expiration'] ) > 0 ) {
127 $expiration = $datum['expiration'];
128 }
129
130 if ( ! $expiration ) {
131 return new WP_Error(
132 'missing_required_param',
133 /* translators: %s: Missing parameter name */
134 sprintf( __( 'Request parameter is invalid: %s.', 'google-site-kit' ), 'expiration' ),
135 array( 'status' => 400 )
136 );
137 }
138
139 $this->expirable_items->add( $datum['slug'], $expiration );
140 }
141
142 return new WP_REST_Response( $this->expirable_items->get() );
143 },
144 'permission_callback' => $can_manage_expirable_item,
145 'args' => array(
146 'data' => array(
147 'type' => 'array',
148 'required' => true,
149 'items' => array(
150 'type' => 'object',
151 'additionalProperties' => false,
152 'properties' => array(
153 'slug' => array(
154 'type' => 'string',
155 'required' => true,
156 ),
157 'expiration' => array(
158 'type' => 'integer',
159 'required' => true,
160 ),
161 ),
162 ),
163 ),
164 ),
165 )
166 ),
167 );
168 }
169 }
170