PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
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 / widget-modules.php
jetpack / jetpack_vendor / automattic / jetpack-premium-analytics / src Last commit date
REST 2 weeks ago Reports 2 weeks ago Sync 2 weeks ago class-analytics.php 2 weeks ago class-capabilities.php 2 weeks ago class-connection-configuration.php 2 weeks ago class-dashboard-section-registry.php 2 weeks ago class-dashboard-section.php 2 weeks ago class-dashboard-support-routes.php 2 weeks ago class-jetpack-stats-tracker.php 2 weeks ago class-notices.php 2 weeks ago class-widget-type-registry.php 2 weeks ago class-widget-type.php 2 weeks ago class-woocommerce-analytics-tracker.php 2 weeks ago csv-exports.php 2 weeks ago dashboard-grammar.php 2 weeks ago dashboard-layout.php 2 weeks ago dashboard-sections.php 2 weeks ago rest-namespace.php 2 weeks ago widget-availability.php 2 weeks ago widget-i18n.json 2 weeks ago widget-modules.php 2 weeks ago widget-type-support.php 2 weeks ago widget-types.php 2 weeks ago
widget-modules.php
125 lines
1 <?php
2 /**
3 * Dashboard widget modules: REST exposure + import-map wiring.
4 *
5 * Reads get_available_widget_types() (the registry filtered by
6 * widget-availability.php) and exposes it two ways: the
7 * `/wpcom/v2/widget-modules` REST list, and the page import map, where each
8 * widget's render and metadata modules are registered for dynamic `import()`.
9 *
10 * @package automattic/jetpack-premium-analytics
11 */
12
13 namespace Automattic\Jetpack\PremiumAnalytics;
14
15 require_once __DIR__ . '/rest-namespace.php';
16
17 /**
18 * Register the `/wpcom/v2/widget-modules` REST route.
19 *
20 * @return void
21 */
22 function register_widget_modules_rest_route() {
23 register_rest_route(
24 DASHBOARD_REST_NAMESPACE,
25 '/widget-modules',
26 array(
27 'methods' => \WP_REST_Server::READABLE,
28 'callback' => __NAMESPACE__ . '\\get_widget_modules_response',
29 'permission_callback' => array( Capabilities::class, 'current_user_can_view_analytics' ),
30 )
31 );
32 }
33
34 /**
35 * Load and hydrate the widget type registry, once.
36 *
37 * Deferred to here (the registry's only two readers) instead of running
38 * unconditionally at boot: this package boots on every request to a site
39 * that has it active, and on WPCOM Simple this file's registration runs on
40 * every public-api request across all of WPCOM, not just ones that touch
41 * Premium Analytics. Most such requests never read the registry at all, so
42 * parsing the widget manifest and hydrating it eagerly was wasted work.
43 *
44 * @return void
45 */
46 function ensure_widget_registry_ready() {
47 static $ready = false;
48 if ( $ready ) {
49 return;
50 }
51 $ready = true;
52
53 require_once __DIR__ . '/widget-types.php';
54 require_once __DIR__ . '/widget-availability.php';
55
56 // Manifest register_widget_types() reads; absent without a JS build.
57 $widgets_manifest = __DIR__ . '/../build/widgets.php';
58 if ( file_exists( $widgets_manifest ) ) {
59 require_once $widgets_manifest;
60 }
61
62 bootstrap_widget_types();
63 }
64
65 /**
66 * Build the REST response: one record per available widget type.
67 *
68 * @return \WP_REST_Response
69 */
70 function get_widget_modules_response() {
71 ensure_widget_registry_ready();
72
73 $records = array();
74
75 foreach ( get_available_widget_types() as $widget_type ) {
76 $records[] = array(
77 'name' => $widget_type->name,
78 'render_module' => $widget_type->render_module,
79 'widget_module' => $widget_type->widget_module,
80 'presentation' => $widget_type->presentation,
81 'category' => $widget_type->category,
82 'title' => $widget_type->title,
83 'description' => $widget_type->description,
84 'help' => $widget_type->help,
85 'keywords' => $widget_type->keywords,
86 );
87 }
88
89 return rest_ensure_response( $records );
90 }
91
92 /**
93 * Add available widget modules to the page import map as dynamic dependencies,
94 * so the client can `import()` them on demand.
95 *
96 * @param array $boot_dependencies Boot dependencies for the page.
97 * @return array Updated boot dependencies.
98 */
99 function add_widget_modules_to_boot_deps( $boot_dependencies ) {
100 ensure_widget_registry_ready();
101
102 foreach ( get_available_widget_types() as $widget_type ) {
103 if ( ! empty( $widget_type->render_module ) ) {
104 $boot_dependencies[] = array(
105 'import' => 'dynamic',
106 'id' => $widget_type->render_module,
107 );
108 }
109
110 if ( ! empty( $widget_type->widget_module ) ) {
111 $boot_dependencies[] = array(
112 'import' => 'dynamic',
113 'id' => $widget_type->widget_module,
114 );
115 }
116 }
117
118 return $boot_dependencies;
119 }
120 // The full-page interceptor (page.php) renders via the `{page-id}` filter; the
121 // in-admin variant (page-wp-admin.php) uses the `{page-id}-wp-admin` filter. Hook
122 // both so the widget modules land in the import map regardless of which renders.
123 add_filter( 'jetpack-premium-analytics_boot_dependencies', __NAMESPACE__ . '\\add_widget_modules_to_boot_deps' );
124 add_filter( 'jetpack-premium-analytics-wp-admin_boot_dependencies', __NAMESPACE__ . '\\add_widget_modules_to_boot_deps' );
125