PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
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-videopress / src / class-plan.php
jetpack / jetpack_vendor / automattic / jetpack-videopress / src Last commit date
js 2 months ago tus 1 month ago videopress-divi 2 months ago videopress-divi-5 2 months ago class-access-control.php 3 months ago class-admin-ui.php 3 weeks ago class-ajax.php 1 month ago class-attachment-handler.php 1 month ago class-block-editor-content.php 1 month ago class-block-editor-extensions.php 1 month ago class-block-replacement.php 9 months ago class-caption-tracks.php 1 month ago class-data.php 1 month ago class-divi.php 2 months ago class-initial-state.php 1 month ago class-initializer.php 4 weeks ago class-jwt-token-bridge.php 2 years ago class-module-control.php 3 years ago class-options.php 2 years ago class-package-version.php 3 weeks ago class-plan.php 2 years ago class-rest-controller.php 1 month ago class-site.php 3 years ago class-stats.php 1 year ago class-status.php 9 months ago class-upload-exception.php 3 years ago class-uploader-rest-endpoints.php 9 months ago class-uploader.php 1 month ago class-utils.php 3 months ago class-video-block-email-renderer.php 2 months ago class-videopress-rest-api-v1-features.php 6 months ago class-videopress-rest-api-v1-settings.php 1 month ago class-videopress-rest-api-v1-site.php 2 years ago class-videopress-rest-api-v1-stats.php 3 years ago class-videopresstoken.php 1 month ago class-wpcom-rest-api-v2-attachment-field-videopress.php 9 months ago class-wpcom-rest-api-v2-attachment-videopress-data.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress-caption-tracks.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress.php 4 weeks ago class-xmlrpc.php 1 month ago utility-functions.php 4 weeks ago
class-plan.php
184 lines
1 <?php
2 /**
3 * The Plan class.
4 *
5 * @package automattic/jetpack-videopress
6 */
7
8 namespace Automattic\Jetpack\VideoPress;
9
10 /**
11 * The Plan class.
12 */
13 class Plan {
14 /**
15 * The meta name used to store the cache date
16 *
17 * @var string
18 */
19 const CACHE_DATE_META_NAME = 'videopress-cache-date';
20
21 /**
22 * Valid pediord for the cache: One week.
23 */
24 const CACHE_VALIDITY_PERIOD = 7 * DAY_IN_SECONDS;
25
26 /**
27 * The meta name used to store the cache
28 *
29 * @var string
30 */
31 const CACHE_META_NAME = 'videopress-cache';
32
33 /**
34 * Checks if the cache is old, meaning we need to fetch new data from WPCOM
35 */
36 private static function is_cache_old() {
37 if ( empty( self::get_product_from_cache() ) ) {
38 return true;
39 }
40
41 $cache_date = get_user_meta( get_current_user_id(), self::CACHE_DATE_META_NAME, true );
42 return time() - (int) $cache_date > ( self::CACHE_VALIDITY_PERIOD );
43 }
44
45 /**
46 * Gets the product list from the user cache
47 */
48 private static function get_product_from_cache() {
49 return get_user_meta( get_current_user_id(), self::CACHE_META_NAME, true );
50 }
51
52 /**
53 * Gets the product data
54 *
55 * @return array
56 */
57 public static function get_product() {
58 $request_url = 'https://public-api.wordpress.com/rest/v1.1/products?locale=' . get_user_locale() . '&type=jetpack';
59 $wpcom_request = wp_remote_get( esc_url_raw( $request_url ) );
60 $response_code = wp_remote_retrieve_response_code( $wpcom_request );
61
62 if ( 200 === $response_code ) {
63 $products = json_decode( wp_remote_retrieve_body( $wpcom_request ) );
64 if ( ! isset( $products->jetpack_videopress ) || ! isset( $products->jetpack_videopress_monthly ) ) {
65 return array();
66 }
67
68 // Pick the desired product...
69 $product = $products->jetpack_videopress;
70
71 // ... and store it into the cache.
72 update_user_meta( get_current_user_id(), self::CACHE_DATE_META_NAME, time() );
73 update_user_meta( get_current_user_id(), self::CACHE_META_NAME, $product );
74
75 return $product;
76 }
77
78 return new \WP_Error(
79 'failed_to_fetch_data',
80 esc_html__( 'Unable to fetch the requested data.', 'jetpack-videopress-pkg' ),
81 array(
82 'status' => $response_code,
83 'request' => $wpcom_request,
84 )
85 );
86 }
87
88 /**
89 * Populate the pricing array with the discount information.
90 *
91 * @param object $product - The product object.
92 * @return int|false Discount percentage.
93 */
94 public static function get_coupon_discount( $product ) {
95 // Check whether the product has a coupon.
96 if ( ! isset( $product->sale_coupon ) ) {
97 return false;
98 }
99
100 $product_id = $product->product_id;
101 $coupon = $product->sale_coupon;
102
103 // Check product is covered by the coupon.
104 if ( ! in_array( $product_id, $coupon->product_ids, true ) ) {
105 return false;
106 }
107
108 // Check whether it is still valid.
109 $coupon_start_date = strtotime( $coupon->start_date );
110 $coupon_expires = strtotime( $coupon->expires );
111 if ( $coupon_start_date > time() || $coupon_expires < time() ) {
112 return false;
113 }
114
115 if ( ! isset( $coupon->discount ) ) {
116 return false;
117 }
118
119 return intval( $coupon->discount );
120 }
121
122 /**
123 * Return details about the VideoPress product price
124 *
125 * @return array Produce price details
126 */
127 public static function get_product_price() {
128 $request_url = 'https://public-api.wordpress.com/rest/v1.1/products?locale=' . get_user_locale() . '&type=jetpack';
129 $wpcom_request = wp_remote_get( esc_url_raw( $request_url ) );
130 $response_code = wp_remote_retrieve_response_code( $wpcom_request );
131
132 if ( 200 === $response_code ) {
133 $products = json_decode( wp_remote_retrieve_body( $wpcom_request ) );
134
135 $products_list = array();
136
137 if ( isset( $products->jetpack_videopress ) ) {
138 $videopress_yearly = $products->jetpack_videopress;
139 // get_coupon_discount
140 $products_list['yearly'] = array(
141 'name' => $videopress_yearly->product_name,
142 'slug' => $videopress_yearly->product_slug,
143 'price' => $videopress_yearly->cost,
144 'priceByMonth' => round( $videopress_yearly->cost / 12, 2 ),
145 'currency' => $videopress_yearly->currency_code,
146 );
147
148 $discount = self::get_coupon_discount( $videopress_yearly );
149
150 if ( $discount ) {
151 $products_list['yearly']['discount'] = $discount;
152 $products_list['yearly']['salePrice'] = round( $videopress_yearly->cost * ( 1 - $discount / 100 ), 2 );
153 $products_list['yearly']['salePriceByMonth'] = round( ( $videopress_yearly->cost * ( 1 - $discount / 100 ) / 12 ), 2 );
154 } else {
155 $products_list['yearly']['salePrice'] = $videopress_yearly->cost;
156 $products_list['yearly']['salePriceByMonth'] = round( $videopress_yearly->cost / 12, 2 );
157 }
158 }
159
160 if ( isset( $products->jetpack_videopress_monthly ) ) {
161 $videopress_monthly = $products->jetpack_videopress_monthly;
162
163 $products_list['monthly'] = array(
164 'name' => $videopress_monthly->product_name,
165 'slug' => $videopress_monthly->product_slug,
166 'price' => $videopress_monthly->cost,
167 'currency' => $videopress_monthly->currency_code,
168 );
169 }
170
171 return $products_list;
172 }
173
174 return new \WP_Error(
175 'failed_to_fetch_data',
176 esc_html__( 'Unable to fetch the requested data.', 'jetpack-videopress-pkg' ),
177 array(
178 'status' => $response_code,
179 'request' => $wpcom_request,
180 )
181 );
182 }
183 }
184