PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-premium-analytics / src / REST / class-notices-controller.php
jetpack / jetpack_vendor / automattic / jetpack-premium-analytics / src / REST Last commit date
class-api-proxy-controller.php 2 weeks ago class-notices-controller.php 2 weeks ago
class-notices-controller.php
132 lines
1 <?php
2 /**
3 * REST controller for the dashboard notices, which need local processing the data proxy can't do.
4 *
5 * @package automattic/jetpack-premium-analytics
6 */
7
8 namespace Automattic\Jetpack\PremiumAnalytics\REST;
9
10 use Automattic\Jetpack\PremiumAnalytics\Capabilities;
11 use Automattic\Jetpack\PremiumAnalytics\Notices;
12 use WP_REST_Request;
13 use WP_REST_Server;
14
15 /**
16 * Exposes `jetpack-premium-analytics/v1/notices` (GET + POST).
17 *
18 * Unlike the transparent endpoints served by {@see Api_Proxy_Controller}, the notices GET augments
19 * the WPCOM dismissal state with locally-derived flags (opt-in/opt-out/feedback/GDPR), so it lives
20 * on its own route outside `proxy/` and delegates to the {@see Notices} class.
21 */
22 class Notices_Controller {
23
24 /**
25 * Package slug, used as the REST namespace root.
26 *
27 * @var string
28 */
29 private const SLUG = 'jetpack-premium-analytics';
30
31 /**
32 * REST namespace.
33 *
34 * @var string
35 */
36 private $namespace;
37
38 /**
39 * Constructor.
40 */
41 public function __construct() {
42 $this->namespace = self::SLUG . '/v1';
43 }
44
45 /**
46 * Hook the controller's routes onto rest_api_init.
47 *
48 * @return void
49 */
50 public static function register(): void {
51 $controller = new self();
52 add_action( 'rest_api_init', array( $controller, 'register_routes' ) );
53 }
54
55 /**
56 * Register the notices route.
57 *
58 * @return void
59 */
60 public function register_routes(): void {
61 register_rest_route(
62 $this->namespace,
63 '/notices',
64 array(
65 array(
66 'methods' => WP_REST_Server::READABLE,
67 'callback' => array( $this, 'get_notices' ),
68 'permission_callback' => array( $this, 'check_permission' ),
69 ),
70 array(
71 'methods' => WP_REST_Server::EDITABLE,
72 'callback' => array( $this, 'update_notice' ),
73 'permission_callback' => array( $this, 'check_permission' ),
74 'args' => array(
75 'id' => array(
76 'required' => true,
77 'type' => 'string',
78 'description' => __( 'ID of the notice.', 'jetpack-premium-analytics-pkg' ),
79 ),
80 'status' => array(
81 'required' => true,
82 'type' => 'string',
83 'description' => __( 'Status of the notice.', 'jetpack-premium-analytics-pkg' ),
84 ),
85 'postponed_for' => array(
86 'type' => 'number',
87 'default' => 0,
88 'description' => __( 'Postponed for (in seconds).', 'jetpack-premium-analytics-pkg' ),
89 'minimum' => 0,
90 ),
91 ),
92 ),
93 )
94 );
95 }
96
97 /**
98 * Whether the current user may read or change the dashboard notices.
99 *
100 * @return bool
101 */
102 public function check_permission(): bool {
103 return Capabilities::current_user_can_view_analytics();
104 }
105
106 /**
107 * Get the notices to show, with locally-derived flags merged in.
108 *
109 * @param WP_REST_Request $request Request object.
110 *
111 * @return array
112 */
113 public function get_notices( WP_REST_Request $request ): array {
114 return ( new Notices() )->get_notices_to_show( null !== $request->get_param( 'force_refresh' ) );
115 }
116
117 /**
118 * Dismiss or delay a notice.
119 *
120 * @param WP_REST_Request $request Request object.
121 *
122 * @return array|\WP_Error
123 */
124 public function update_notice( WP_REST_Request $request ) {
125 return ( new Notices() )->update_notice(
126 $request->get_param( 'id' ),
127 $request->get_param( 'status' ),
128 $request->get_param( 'postponed_for' )
129 );
130 }
131 }
132