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-feature-flags / src / class-feature-flags.php
jetpack / jetpack_vendor / automattic / jetpack-feature-flags / src Last commit date
class-feature-flags.php 4 days ago
class-feature-flags.php
139 lines
1 <?php
2 /**
3 * Lightweight feature flag registry.
4 *
5 * @package automattic/jetpack-feature-flags
6 */
7
8 namespace Automattic\Jetpack\Feature_Flags;
9
10 /**
11 * Registers feature flag metadata and resolves flag state.
12 */
13 class Feature_Flags {
14
15 const PACKAGE_VERSION = '0.1.0';
16
17 /**
18 * Registered feature flags.
19 *
20 * @var array<string, array>
21 */
22 private static $flags = array();
23
24 /**
25 * Register a feature flag.
26 *
27 * Supported definition keys:
28 * - default: bool Whether the flag is enabled by default.
29 * - description: string Human-readable description.
30 * - owner: string Owning package, plugin, or product area.
31 *
32 * Flag names must match /^[a-z0-9][a-z0-9_-]*$/. This is enforced at lint
33 * time by the `Jetpack.FeatureFlags.FeatureFlagName` PHPCS sniff rather than
34 * at runtime, so registration stays allocation-free on the hot path.
35 *
36 * @param string $name Flag name.
37 * @param array $definition Flag definition.
38 * @return void
39 */
40 public static function register( $name, array $definition = array() ) {
41 $definition = array_merge( self::default_definition( $name ), $definition );
42 $definition['default'] = (bool) $definition['default'];
43 $definition['name'] = $name;
44
45 self::$flags[ $name ] = $definition;
46 }
47
48 /**
49 * Return a registered flag definition.
50 *
51 * @param string $name Flag name.
52 * @return array|null Flag definition, or null when the flag is unknown.
53 */
54 public static function get( $name ) {
55 return self::$flags[ $name ] ?? null;
56 }
57
58 /**
59 * Return all registered flag definitions.
60 *
61 * @return array<string, array>
62 */
63 public static function all() {
64 $flags = self::$flags;
65 ksort( $flags );
66
67 return $flags;
68 }
69
70 /**
71 * Return whether a feature flag is enabled.
72 *
73 * Unknown flags default to false but still pass through the global filter.
74 *
75 * @param string $name Flag name.
76 * @return bool Whether the flag is enabled.
77 */
78 public static function is_enabled( $name ) {
79 $definition = self::get( $name );
80
81 if ( null === $definition ) {
82 $definition = self::default_definition( $name );
83 }
84
85 $default = (bool) $definition['default'];
86
87 /**
88 * Filters whether a Jetpack feature flag is enabled.
89 *
90 * @since 0.1.0
91 *
92 * @param bool $enabled Whether the flag is enabled. Defaults to the registered default.
93 * @param string $flag_name Feature flag name.
94 * @param array $definition Registered feature flag definition.
95 */
96 $enabled = (bool) apply_filters( 'jetpack_feature_flag_enabled', $default, $name, $definition );
97
98 /**
99 * Filters whether a specific Jetpack feature flag is enabled.
100 *
101 * The dynamic portion of the hook name, `$name`, refers to the feature flag name.
102 * This mirrors the WordPress `option_{$option}` convention so a single flag can be
103 * toggled with a `__return_true`/`__return_false` one-liner.
104 *
105 * @since 0.1.0
106 *
107 * @param bool $enabled Whether the flag is enabled.
108 * @param array $definition Registered feature flag definition.
109 */
110 return (bool) apply_filters( "jetpack_feature_flag_enabled_{$name}", $enabled, $definition );
111 }
112
113 /**
114 * Clear registered flags.
115 *
116 * Intended for tests.
117 *
118 * @return void
119 */
120 public static function reset() {
121 self::$flags = array();
122 }
123
124 /**
125 * Build the default definition for a flag.
126 *
127 * @param string $name Flag name.
128 * @return array Default flag definition.
129 */
130 private static function default_definition( $name ) {
131 return array(
132 'default' => false,
133 'description' => '',
134 'owner' => '',
135 'name' => $name,
136 );
137 }
138 }
139