PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-a.5
Jetpack – WP Security, Backup, Speed, & Growth v16.1-a.5
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 / _inc / lib / core-api / wpcom-endpoints / class-wpcom-rest-api-v2-endpoint-guidelines-banner-dismissed.php
jetpack / _inc / lib / core-api / wpcom-endpoints Last commit date
business-hours.php 9 months ago class-wpcom-rest-api-v2-endpoint-admin-bar.php 3 months ago class-wpcom-rest-api-v2-endpoint-admin-color.php 9 months ago class-wpcom-rest-api-v2-endpoint-admin-menu.php 1 month ago class-wpcom-rest-api-v2-endpoint-agent-guidelines-ai.php 1 month ago class-wpcom-rest-api-v2-endpoint-ai.php 1 month ago class-wpcom-rest-api-v2-endpoint-app-media.php 9 months ago class-wpcom-rest-api-v2-endpoint-application-password-extras.php 5 months ago class-wpcom-rest-api-v2-endpoint-block-editor-assets.php 2 months ago class-wpcom-rest-api-v2-endpoint-blog-stats.php 9 months ago class-wpcom-rest-api-v2-endpoint-email-preview.php 3 months ago class-wpcom-rest-api-v2-endpoint-external-media.php 9 months ago class-wpcom-rest-api-v2-endpoint-following.php 9 months ago class-wpcom-rest-api-v2-endpoint-goodreads.php 9 months ago class-wpcom-rest-api-v2-endpoint-google-docs.php 9 months ago class-wpcom-rest-api-v2-endpoint-guidelines-banner-dismissed.php 1 month ago class-wpcom-rest-api-v2-endpoint-instagram-gallery.php 3 months ago class-wpcom-rest-api-v2-endpoint-mailchimp.php 9 months ago class-wpcom-rest-api-v2-endpoint-mcp-settings.php 1 month ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-list.php 9 months ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-subscriptions-count.php 9 months ago class-wpcom-rest-api-v2-endpoint-newsletter-email-sent-status.php 4 months ago class-wpcom-rest-api-v2-endpoint-podcast-player.php 3 months ago class-wpcom-rest-api-v2-endpoint-profile.php 9 months ago class-wpcom-rest-api-v2-endpoint-related-posts.php 9 months ago class-wpcom-rest-api-v2-endpoint-resolve-redirect.php 9 months ago class-wpcom-rest-api-v2-endpoint-search.php 1 month ago class-wpcom-rest-api-v2-endpoint-send-email-preview.php 2 months ago class-wpcom-rest-api-v2-endpoint-subscribers-list.php 1 month ago class-wpcom-rest-api-v2-endpoint-template-loader.php 9 months ago class-wpcom-rest-api-v2-endpoint-top-posts.php 3 months ago class-wpcom-rest-api-v2-endpoint-transient.php 9 months ago class-wpcom-rest-api-v3-endpoint-blogging-prompts.php 9 months ago class-wpcom-rest-api-v3-endpoint-jitm.php 9 months ago gutenberg-available-extensions.php 9 months ago hello.php 9 months ago memberships.php 2 months ago publicize-connection-test-results.php 9 months ago service-api-keys.php 3 months ago sites-posts-featured-media-url.php 9 months ago subscribers.php 9 months ago
class-wpcom-rest-api-v2-endpoint-guidelines-banner-dismissed.php
131 lines
1 <?php
2 /**
3 * REST API endpoint for the Content Guidelines AI empty-state banner.
4 *
5 * Stores a per-user flag (so it persists across the user's devices/browsers)
6 * for whether the banner has been dismissed, instead of relying on per-browser
7 * localStorage. Modeled on the wpcom block-editor "recommended tags modal
8 * dismissed" flow, but scoped to the user via user meta.
9 *
10 * @package automattic/jetpack
11 */
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit( 0 );
15 }
16
17 // Load before the class definition, not in the constructor: META_KEY below
18 // delegates to a Jetpack_AI_Helper constant, and PHP resolves class constant
19 // expressions at first instantiation, before the constructor body runs.
20 if ( ! class_exists( 'Jetpack_AI_Helper' ) ) {
21 require_once JETPACK__PLUGIN_DIR . '_inc/lib/class-jetpack-ai-helper.php';
22 }
23
24 /**
25 * Class WPCOM_REST_API_V2_Endpoint_Guidelines_Banner_Dismissed
26 *
27 * @since 16.0
28 */
29 class WPCOM_REST_API_V2_Endpoint_Guidelines_Banner_Dismissed extends WP_REST_Controller {
30 /**
31 * User meta key storing the dismissed flag.
32 *
33 * The canonical key lives on Jetpack_AI_Helper (required at the top of
34 * this file) because this class is not loaded during admin page loads on
35 * Simple sites, while the admin-page preload in
36 * _inc/content-guidelines-ai.php needs the key there.
37 *
38 * @var string
39 */
40 const META_KEY = Jetpack_AI_Helper::GUIDELINES_BANNER_DISMISSED_META_KEY;
41
42 /**
43 * Namespace prefix.
44 *
45 * @var string
46 */
47 public $namespace = 'wpcom/v2';
48
49 /**
50 * Endpoint base route.
51 *
52 * @var string
53 */
54 public $rest_base = 'jetpack-ai/guidelines-banner-dismissed';
55
56 /**
57 * Constructor.
58 */
59 public function __construct() {
60 $this->is_wpcom = true;
61 $this->wpcom_is_wpcom_only_endpoint = true;
62
63 // Match the suggest-guidelines endpoint: register on Simple/Atomic only.
64 if ( ! \Jetpack_AI_Helper::is_enabled() ) {
65 return;
66 }
67
68 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
69 }
70
71 /**
72 * Register routes.
73 */
74 public function register_routes() {
75 register_rest_route(
76 $this->namespace,
77 '/' . $this->rest_base,
78 array(
79 array(
80 'methods' => WP_REST_Server::EDITABLE,
81 'callback' => array( $this, 'set_dismissed' ),
82 'permission_callback' => array( $this, 'permission_callback' ),
83 ),
84 )
85 );
86 }
87
88 /**
89 * Permission check.
90 *
91 * Gated to the same capability as the Content Guidelines page (and the
92 * suggest-guidelines endpoint): only admins ever see the banner, so only
93 * they need to dismiss it.
94 *
95 * @return bool
96 */
97 public function permission_callback() {
98 return current_user_can( 'manage_options' );
99 }
100
101 /**
102 * Whether the current user has dismissed the banner.
103 *
104 * Back-compat alias: the admin-page preload reads the flag via
105 * Jetpack_AI_Helper::is_guidelines_banner_dismissed() instead, because
106 * this class is not loaded during admin page loads on Simple sites.
107 *
108 * @return bool
109 */
110 public static function is_dismissed() {
111 return Jetpack_AI_Helper::is_guidelines_banner_dismissed();
112 }
113
114 /**
115 * Mark the banner as dismissed for the current user.
116 *
117 * Dismissal is one-way — the banner has no "show again" control — so this
118 * only ever sets the flag.
119 *
120 * @return WP_REST_Response
121 */
122 public function set_dismissed() {
123 update_user_meta( get_current_user_id(), self::META_KEY, '1' );
124
125 // Just set above — return it directly instead of re-reading the meta.
126 return rest_ensure_response( array( 'dismissed' => true ) );
127 }
128 }
129
130 wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Guidelines_Banner_Dismissed' );
131