PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 7.3.0.1
Jetpack – WP Security, Backup, Speed, & Growth v7.3.0.1
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 / class.jetpack-plan.php
jetpack Last commit date
3rd-party 7 years ago _inc 7 years ago bin 7 years ago css 7 years ago extensions 7 years ago images 7 years ago json-endpoints 7 years ago languages 7 years ago logs 9 years ago modules 7 years ago sal 7 years ago scss 7 years ago sync 7 years ago views 7 years ago wp-cli-templates 7 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 7 years ago class.frame-nonce-preview.php 9 years ago class.jetpack-admin.php 7 years ago class.jetpack-affiliate.php 7 years ago class.jetpack-autoupdate.php 7 years ago class.jetpack-bbpress-json-api-compat.php 9 years ago class.jetpack-cli.php 7 years ago class.jetpack-client-server.php 8 years ago class.jetpack-client.php 7 years ago class.jetpack-connection-banner.php 7 years ago class.jetpack-constants.php 8 years ago class.jetpack-data.php 7 years ago class.jetpack-debugger.php 7 years ago class.jetpack-error.php 10 years ago class.jetpack-gutenberg.php 7 years ago class.jetpack-heartbeat.php 7 years ago class.jetpack-idc.php 8 years ago class.jetpack-ixr-client.php 10 years ago class.jetpack-jitm.php 7 years ago class.jetpack-modules-list-table.php 7 years ago class.jetpack-network-sites-list-table.php 9 years ago class.jetpack-network.php 7 years ago class.jetpack-options.php 7 years ago class.jetpack-plan.php 7 years ago class.jetpack-post-images.php 7 years ago class.jetpack-signature.php 7 years ago class.jetpack-tracks.php 7 years ago class.jetpack-twitter-cards.php 7 years ago class.jetpack-user-agent.php 8 years ago class.jetpack-xmlrpc-server.php 7 years ago class.jetpack.php 7 years ago class.json-api-endpoints.php 7 years ago class.json-api.php 7 years ago class.photon.php 7 years ago composer.json 7 years ago functions.compat.php 7 years ago functions.gallery.php 8 years ago functions.global.php 7 years ago functions.opengraph.php 7 years ago functions.photon.php 7 years ago jest.config.js 7 years ago jetpack.php 7 years ago json-api-config.php 10 years ago json-endpoints.php 7 years ago locales.php 7 years ago readme.txt 7 years ago require-lib.php 7 years ago uninstall.php 7 years ago wpml-config.xml 10 years ago
class.jetpack-plan.php
231 lines
1 <?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Handles fetching of the site's plan from WordPress.com and caching the value locally.
4 *
5 * @package Jetpack
6 */
7
8 /**
9 * Provides methods methods for fetching the plan from WordPress.com.
10 */
11 class Jetpack_Plan {
12 /**
13 * A cache variable to hold the active plan for the current request.
14 *
15 * @var array
16 */
17 private static $active_plan_cache;
18
19 const PLAN_OPTION = 'jetpack_active_plan';
20
21 /**
22 * Given a response to the `/sites/%d` endpoint, will parse the response and attempt to set the
23 * plan from the response.
24 *
25 * @param array $response The response from `/sites/%d`.
26 * @return bool Was the plan successfully updated?
27 */
28 public static function update_from_sites_response( $response ) {
29 // Bail if there was an error or malformed response.
30 if ( is_wp_error( $response ) || ! is_array( $response ) || ! isset( $response['body'] ) ) {
31 return false;
32 }
33
34 $body = wp_remote_retrieve_body( $response );
35 if ( is_wp_error( $body ) ) {
36 return false;
37 }
38
39 // Decode the results.
40 $results = json_decode( $body, true );
41
42 // Bail if there were no results or plan details returned.
43 if ( ! is_array( $results ) || ! isset( $results['plan'] ) ) {
44 return false;
45 }
46
47 $current_plan = get_option( self::PLAN_OPTION, array() );
48
49 // If the plans don't differ, then there's nothing to do.
50 if ( ! empty( $current_plan ) && $current_plan['product_slug'] === $results['plan']['product_slug'] ) {
51 return false;
52 }
53
54 // Store the new plan in an option and return true if updated.
55 $result = update_option( self::PLAN_OPTION, $results['plan'], true );
56 if ( ! $result ) {
57 // If we got to this point, then we know we need to update. So, assume there is an issue
58 // with caching. To fix that issue, we can delete the current option and then update.
59 delete_option( self::PLAN_OPTION );
60 $result = update_option( self::PLAN_OPTION, $results['plan'], true );
61 }
62
63 if ( $result ) {
64 // Reset the cache since we've just updated the plan.
65 self::$active_plan_cache = null;
66 }
67
68 return $result;
69 }
70
71 /**
72 * Make an API call to WordPress.com for plan status
73 *
74 * @uses Jetpack_Options::get_option()
75 * @uses Jetpack_Client::wpcom_json_api_request_as_blog()
76 * @uses update_option()
77 *
78 * @access public
79 * @static
80 *
81 * @return bool True if plan is updated, false if no update
82 */
83 public static function refresh_from_wpcom() {
84 // Make the API request.
85 $request = sprintf( '/sites/%d', Jetpack_Options::get_option( 'id' ) );
86 $response = Jetpack_Client::wpcom_json_api_request_as_blog( $request, '1.1' );
87
88 return self::update_from_sites_response( $response );
89 }
90
91 /**
92 * Get the plan that this Jetpack site is currently using.
93 *
94 * @uses get_option()
95 *
96 * @access public
97 * @static
98 *
99 * @return array Active Jetpack plan details
100 */
101 public static function get() {
102 // this can be expensive to compute so we cache for the duration of a request.
103 if ( is_array( self::$active_plan_cache ) && ! empty( self::$active_plan_cache ) ) {
104 return self::$active_plan_cache;
105 }
106
107 $plan = get_option( self::PLAN_OPTION, array() );
108
109 // Set the default options.
110 $plan = wp_parse_args(
111 $plan,
112 array(
113 'product_slug' => 'jetpack_free',
114 'class' => 'free',
115 'features' => array(
116 'active' => array(),
117 ),
118 )
119 );
120
121 $supports = array();
122
123 // Define what paid modules are supported by personal plans.
124 $personal_plans = array(
125 'jetpack_personal',
126 'jetpack_personal_monthly',
127 'personal-bundle',
128 'personal-bundle-monthly',
129 'personal-bundle-2y',
130 );
131
132 if ( in_array( $plan['product_slug'], $personal_plans, true ) ) {
133 // special support value, not a module but a separate plugin.
134 $supports[] = 'akismet';
135 $plan['class'] = 'personal';
136 }
137
138 // Define what paid modules are supported by premium plans.
139 $premium_plans = array(
140 'jetpack_premium',
141 'jetpack_premium_monthly',
142 'value_bundle',
143 'value_bundle-monthly',
144 'value_bundle-2y',
145 );
146
147 if ( in_array( $plan['product_slug'], $premium_plans, true ) ) {
148 $supports[] = 'akismet';
149 $supports[] = 'simple-payments';
150 $supports[] = 'vaultpress';
151 $supports[] = 'videopress';
152 $plan['class'] = 'premium';
153 }
154
155 // Define what paid modules are supported by professional plans.
156 $business_plans = array(
157 'jetpack_business',
158 'jetpack_business_monthly',
159 'business-bundle',
160 'business-bundle-monthly',
161 'business-bundle-2y',
162 'ecommerce-bundle',
163 'ecommerce-bundle-monthly',
164 'ecommerce-bundle-2y',
165 'vip',
166 );
167
168 if ( in_array( $plan['product_slug'], $business_plans, true ) ) {
169 $supports[] = 'akismet';
170 $supports[] = 'simple-payments';
171 $supports[] = 'vaultpress';
172 $supports[] = 'videopress';
173 $plan['class'] = 'business';
174 }
175
176 // get available features.
177 foreach ( Jetpack::get_available_modules() as $module_slug ) {
178 $module = Jetpack::get_module( $module_slug );
179 if ( ! isset( $module ) || ! is_array( $module ) ) {
180 continue;
181 }
182 if ( in_array( 'free', $module['plan_classes'], true ) || in_array( $plan['class'], $module['plan_classes'], true ) ) {
183 $supports[] = $module_slug;
184 }
185 }
186
187 $plan['supports'] = $supports;
188
189 self::$active_plan_cache = $plan;
190
191 return $plan;
192 }
193
194 /**
195 * Determine whether the active plan supports a particular feature
196 *
197 * @uses Jetpack_Plan::get()
198 *
199 * @access public
200 * @static
201 *
202 * @param string $feature The module or feature to check.
203 *
204 * @return bool True if plan supports feature, false if not
205 */
206 public static function supports( $feature ) {
207 $plan = self::get();
208
209 // Manually mapping WordPress.com features to Jetpack module slugs.
210 foreach ( $plan['features']['active'] as $wpcom_feature ) {
211 switch ( $wpcom_feature ) {
212 case 'wordads-jetpack':
213 // WordAds are supported for this site.
214 if ( 'wordads' === $feature ) {
215 return true;
216 }
217 break;
218 }
219 }
220
221 if (
222 in_array( $feature, $plan['supports'], true )
223 || in_array( $feature, $plan['features']['active'], true )
224 ) {
225 return true;
226 }
227
228 return false;
229 }
230 }
231