PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.2-a.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 / videopress-availability.php
jetpack / jetpack_vendor / automattic / jetpack-premium-analytics / src Last commit date
REST 3 weeks ago Reports 2 weeks ago Sync 3 weeks ago class-analytics.php 5 days ago class-capabilities.php 3 weeks ago class-connection-configuration.php 3 weeks ago class-dashboard-section-registry.php 3 weeks ago class-dashboard-section.php 5 days ago class-dashboard-support-routes.php 2 weeks ago class-jetpack-stats-tracker.php 3 weeks ago class-notices.php 3 weeks ago class-widget-type-registry.php 3 weeks ago class-widget-type.php 3 weeks ago class-woocommerce-analytics-tracker.php 3 weeks ago csv-exports.php 3 weeks ago dashboard-grammar.php 3 weeks ago dashboard-layout.php 5 days ago dashboard-sections.php 5 days ago rest-namespace.php 3 weeks ago videopress-availability.php 5 days ago widget-availability.php 5 days ago widget-i18n.json 3 weeks ago widget-modules.php 5 days ago widget-type-support.php 5 days ago widget-types.php 3 weeks ago
videopress-availability.php
106 lines
1 <?php
2 /**
3 * VideoPress availability, shared by the widget layer and the client routes.
4 *
5 * Calypso gates its Videos module on the `videopress` plan feature, which
6 * `wpcom_site_has_feature()` answers on the WPCOM platform. That function does
7 * not exist off-platform. `Current_Plan::supports()` grants `videopress` to
8 * every plan because of the free tier, while
9 * `Product::get_site_features_from_wpcom()` can make a synchronous WPCOM
10 * request and answers entitlement rather than whether VideoPress is running.
11 * The off-platform question is therefore answered from the module or plugin.
12 *
13 * The canonical gates already exist: `VideoPress\Status::is_active()` for the
14 * off-platform branch, the WPCOM arm of `Current_Plan::supports()` for the
15 * platform one. Neither `jetpack-videopress` nor `jetpack-plans` is in this
16 * package's dependency graph, so the detection below is local by necessity.
17 * Widen the graph before writing another detector.
18 *
19 * @package automattic/jetpack-premium-analytics
20 */
21
22 namespace Automattic\Jetpack\PremiumAnalytics;
23
24 use Automattic\Jetpack\Constants;
25 use Automattic\Jetpack\Modules;
26 use Automattic\Jetpack\Status\Host;
27
28 /**
29 * Filter controlling whether the VideoPress-backed surfaces are available.
30 *
31 * @var string
32 */
33 const VIDEOPRESS_AVAILABLE_FILTER = 'jetpack_premium_analytics_videopress_available';
34
35 /**
36 * Whether the site can produce VideoPress play data.
37 *
38 * Atomic reads the plan feature alongside Simple, not the module: wpcomsh
39 * provides `wpcom_site_has_feature()` there, and the VideoPress module has no
40 * `Auto Activate` header, so a plan that includes VideoPress routinely comes
41 * with the module off. wpcomsh grants `videopress` to every business-and-higher
42 * plan and WoA only exists on those, so the platform branch effectively gates
43 * Simple alone: an Atomic site with the module off keeps the video surfaces.
44 * That is intended — hosting is service-level on WPCOM, so the module would be
45 * a false negative there.
46 *
47 * Off-platform the question becomes "is VideoPress running here", not "is it
48 * paid for" — without the module there is no new play data to report. That is
49 * deliberately narrower than `Initial_State::has_videopress_access()`, which
50 * never looks at the module and counts the paid storage tiers instead.
51 *
52 * `Current_Plan::supports( 'videopress' )` is avoided because off-platform it
53 * returns true for every plan, thanks to the VideoPress free tier.
54 *
55 * @return bool Whether Premium Analytics treats VideoPress as available.
56 */
57 function is_videopress_available() {
58 if ( ( new Host() )->is_wpcom_platform() ) {
59 $is_available = function_exists( 'wpcom_site_has_feature' ) && \wpcom_site_has_feature( 'videopress' );
60 } else {
61 // `false` skips the module registry the standalone Premium Analytics plugin
62 // does not ship, which would otherwise report every module inactive.
63 $is_available = ( new Modules() )->is_active( 'videopress', false )
64 || Constants::is_defined( 'JETPACK_VIDEOPRESS_ROOT_FILE' );
65 }
66
67 /**
68 * Filters whether Premium Analytics treats VideoPress as available.
69 *
70 * Hides the Top videos widget, the Videos report, and the video detail page
71 * when false.
72 *
73 * @param bool $is_available Whether VideoPress was detected in the current request.
74 */
75 return (bool) apply_filters( VIDEOPRESS_AVAILABLE_FILTER, $is_available );
76 }
77
78 /**
79 * Configures the VideoPress script data.
80 *
81 * @return void
82 */
83 function configure_videopress_availability() {
84 add_filter( 'jetpack_admin_js_script_data', __NAMESPACE__ . '\\inject_videopress_script_data', 20 );
85 }
86
87 /**
88 * Injects the VideoPress availability flag into JetpackScriptData.
89 *
90 * The client cannot read `site.plan.features` for this: that key is only
91 * populated when the Publicize package happens to be loaded, which the
92 * standalone Premium Analytics plugin never loads.
93 *
94 * @param array $data The script data passed by the assets package.
95 * @return array
96 */
97 function inject_videopress_script_data( array $data ): array {
98 if ( ! isset( $data['premium_analytics'] ) || ! is_array( $data['premium_analytics'] ) ) {
99 $data['premium_analytics'] = array();
100 }
101
102 $data['premium_analytics']['has_videopress'] = is_videopress_available();
103
104 return $data;
105 }
106