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 / widget-modules.php
jetpack / jetpack_vendor / automattic / jetpack-premium-analytics / src Last commit date
REST 2 weeks ago Reports 1 week ago Sync 2 weeks ago class-analytics.php 2 days 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 days ago class-dashboard-support-routes.php 1 week 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 days ago dashboard-sections.php 2 days ago rest-namespace.php 2 weeks ago videopress-availability.php 2 days ago widget-availability.php 2 days ago widget-i18n.json 2 weeks ago widget-modules.php 2 days ago widget-type-support.php 2 days ago widget-types.php 2 weeks ago
widget-modules.php
123 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 // REST does not load the admin build, so this require is the manifest's only route
57 // in (WOOA7S-1804). Drop it and every widget renders "Widget is no longer
58 // available" — the #49961 bug.
59 $widgets_manifest = Analytics::widget_manifest_path();
60 if ( file_exists( $widgets_manifest ) ) {
61 require_once $widgets_manifest;
62 }
63
64 bootstrap_widget_types();
65 }
66
67 /**
68 * Build the REST response: one record per available widget type.
69 *
70 * @return \WP_REST_Response
71 */
72 function get_widget_modules_response() {
73 ensure_widget_registry_ready();
74
75 $records = array();
76
77 foreach ( get_available_widget_types() as $widget_type ) {
78 $records[] = array(
79 'name' => $widget_type->name,
80 'render_module' => $widget_type->render_module,
81 'widget_module' => $widget_type->widget_module,
82 'presentation' => $widget_type->presentation,
83 'category' => $widget_type->category,
84 'title' => $widget_type->title,
85 'description' => $widget_type->description,
86 'help' => $widget_type->help,
87 'keywords' => $widget_type->keywords,
88 );
89 }
90
91 return rest_ensure_response( $records );
92 }
93
94 /**
95 * Add available widget modules to the page import map as dynamic dependencies,
96 * so the client can `import()` them on demand.
97 *
98 * @param array $boot_dependencies Boot dependencies for the page.
99 * @return array Updated boot dependencies.
100 */
101 function add_widget_modules_to_boot_deps( $boot_dependencies ) {
102 ensure_widget_registry_ready();
103
104 foreach ( get_available_widget_types() as $widget_type ) {
105 if ( ! empty( $widget_type->render_module ) ) {
106 $boot_dependencies[] = array(
107 'import' => 'dynamic',
108 'id' => $widget_type->render_module,
109 );
110 }
111
112 if ( ! empty( $widget_type->widget_module ) ) {
113 $boot_dependencies[] = array(
114 'import' => 'dynamic',
115 'id' => $widget_type->widget_module,
116 );
117 }
118 }
119
120 return $boot_dependencies;
121 }
122 add_filter( 'jetpack-premium-analytics-wp-admin_boot_dependencies', __NAMESPACE__ . '\\add_widget_modules_to_boot_deps' );
123