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-protect-status / src / class-plan.php
jetpack / jetpack_vendor / automattic / jetpack-protect-status / src Last commit date
class-plan.php 8 months ago class-protect-status.php 2 months ago class-rest-controller.php 8 months ago class-scan-status.php 2 months ago class-status.php 3 days ago
class-plan.php
112 lines
1 <?php
2 /**
3 * Class to handle the Protect plan
4 *
5 * @package automattic/jetpack-protect-status
6 */
7
8 namespace Automattic\Jetpack\Protect_Status;
9
10 use Automattic\Jetpack\Current_Plan;
11
12 /**
13 * The Plan class.
14 */
15 class Plan {
16 /**
17 * The meta name used to store the cache date
18 *
19 * @var string
20 */
21 const CACHE_DATE_META_NAME = 'protect-cache-date';
22
23 /**
24 * Valid pediord for the cache: One week.
25 */
26 const CACHE_VALIDITY_PERIOD = 7 * DAY_IN_SECONDS;
27
28 /**
29 * The meta name used to store the cache
30 *
31 * @var string
32 */
33 const CACHE_META_NAME = 'protect-cache';
34
35 /**
36 * Checks if the cache is old, meaning we need to fetch new data from WPCOM
37 */
38 private static function is_cache_old() {
39 if ( empty( self::get_product_from_cache() ) ) {
40 return true;
41 }
42
43 $cache_date = get_user_meta( get_current_user_id(), self::CACHE_DATE_META_NAME, true );
44 return time() - (int) $cache_date > ( self::CACHE_VALIDITY_PERIOD );
45 }
46
47 /**
48 * Gets the product list from the user cache
49 */
50 private static function get_product_from_cache() {
51 return get_user_meta( get_current_user_id(), self::CACHE_META_NAME, true );
52 }
53
54 /**
55 * Gets the product data
56 *
57 * @param string $wpcom_product The product slug.
58 * @return array
59 */
60 public static function get_product( $wpcom_product = 'jetpack_scan' ) {
61 if ( ! self::is_cache_old() ) {
62 return self::get_product_from_cache();
63 }
64
65 $request_url = 'https://public-api.wordpress.com/rest/v1.1/products?locale=' . get_user_locale() . '&type=jetpack';
66 $wpcom_request = wp_remote_get( esc_url_raw( $request_url ) );
67 $response_code = wp_remote_retrieve_response_code( $wpcom_request );
68
69 if ( 200 === $response_code ) {
70 $products = json_decode( wp_remote_retrieve_body( $wpcom_request ) );
71
72 // Pick the desired product...
73 $product = $products->{$wpcom_product};
74
75 // ... and store it into the cache.
76 update_user_meta( get_current_user_id(), self::CACHE_DATE_META_NAME, time() );
77 update_user_meta( get_current_user_id(), self::CACHE_META_NAME, $product );
78
79 return $product;
80 }
81
82 return new \WP_Error(
83 'failed_to_fetch_data',
84 esc_html__( 'Unable to fetch the requested data.', 'jetpack-protect-status' ),
85 array(
86 'status' => $response_code,
87 'request' => $wpcom_request,
88 )
89 );
90 }
91
92 /**
93 * Has Required Plan
94 *
95 * @param bool $force_refresh Refresh the local plan cache from wpcom.
96 * @return bool True when the site has a plan or product that supports the paid Protect tier.
97 */
98 public static function has_required_plan( $force_refresh = false ) {
99 static $has_scan = null;
100 if ( null === $has_scan || $force_refresh ) {
101 $products = array_column( Current_Plan::get_products(), 'product_slug' );
102
103 // Check for a plan or product that enables scan.
104 $plan_supports_scan = Current_Plan::supports( 'scan', $force_refresh );
105 $has_scan_product = count( array_intersect( array( 'jetpack_scan', 'jetpack_scan_monthly' ), $products ) ) > 0;
106 $has_scan = $plan_supports_scan || $has_scan_product;
107 }
108
109 return $has_scan;
110 }
111 }
112