PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
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 / extensions / blocks / premium-content / _inc / subscription-service / class-wpcom-online-subscription-service.php
jetpack / extensions / blocks / premium-content / _inc / subscription-service Last commit date
class-abstract-token-subscription-service.php 1 month ago class-jetpack-token-subscription-service.php 1 month ago class-jwt.php 2 months ago class-unconfigured-subscription-service.php 8 months ago class-wpcom-offline-subscription-service.php 8 months ago class-wpcom-online-subscription-service.php 3 months ago include.php 8 months ago interface-subscription-service.php 8 months ago
class-wpcom-online-subscription-service.php
175 lines
1 <?php
2 /**
3 * This subscription service is used when a subscriber is online
4 *
5 * @package Automattic\Jetpack\Extensions\Premium_Content
6 */
7
8 namespace Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit( 0 );
12 }
13
14 /**
15 * Class WPCOM_Offline_Subscription_Service
16 *
17 * @package Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service
18 */
19 class WPCOM_Online_Subscription_Service extends Jetpack_Token_Subscription_Service {
20
21 /**
22 * Is available()
23 *
24 * @return bool
25 */
26 public static function available() {
27 // Return available if the user is logged in and we are on WPCOM.
28 return defined( 'IS_WPCOM' ) && IS_WPCOM && is_user_logged_in();
29 }
30
31 /**
32 * Lookup users subscriptions for a site and determine if the user has a valid subscription to match the plan ID
33 *
34 * @param array $valid_plan_ids .
35 * @param string $access_level .
36 *
37 * @return bool
38 */
39 public function visitor_can_view_content( $valid_plan_ids, $access_level ) {
40 include_once WP_CONTENT_DIR . '/mu-plugins/email-subscriptions/subscriptions.php';
41 $email = wp_get_current_user()->user_email;
42 $subscriber_object = \Blog_Subscriber::get( $email );
43
44 $is_blog_subscriber = false;
45 if ( $subscriber_object ) {
46 $blog_id = $this->get_site_id();
47 $subscription_status = \Blog_Subscription::get_subscription_status_for_blog( $subscriber_object, $blog_id );
48 $is_blog_subscriber = 'active' === $subscription_status;
49 }
50
51 return $this->user_can_view_content( $valid_plan_ids, $access_level, $is_blog_subscriber, get_the_ID() );
52 }
53
54 /**
55 * Retrieves the email of the currently authenticated subscriber.
56 *
57 * This function checks if the current user has an active subscription. If the user is subscribed,
58 * their email is returned. Otherwise, it returns an empty string to indicate no active subscription.
59 *
60 * @return string The email address of the subscribed user or an empty string if not subscribed.
61 */
62 public function get_subscriber_email() {
63 if ( ! is_user_logged_in() ) {
64 return '';
65 }
66 return wp_get_current_user()->user_email;
67 }
68
69 /**
70 * Returns true if the current authenticated user is subscribed to the current site.
71 *
72 * @return bool
73 */
74 public function is_current_user_subscribed(): bool {
75 include_once WP_CONTENT_DIR . '/mu-plugins/email-subscriptions/subscriptions.php';
76 $email = wp_get_current_user()->user_email;
77 $subscriber_object = \Blog_Subscriber::get( $email );
78 if ( empty( $subscriber_object ) ) {
79 return false;
80 }
81 $blog_id = $this->get_site_id();
82 $subscription_status = \Blog_Subscription::get_subscription_status_for_blog( $subscriber_object, $blog_id );
83 if ( 'active' !== $subscription_status ) {
84 return false;
85 }
86 return true;
87 }
88
89 /**
90 * Returns true if the current authenticated user has a pending subscription to the current site.
91 *
92 * @return bool
93 */
94 public function is_current_user_pending_subscriber(): bool {
95 include_once WP_CONTENT_DIR . '/mu-plugins/email-subscriptions/subscriptions.php';
96 $email = wp_get_current_user()->user_email;
97 $subscriber_object = \Blog_Subscriber::get( $email );
98 if ( empty( $subscriber_object ) ) {
99 return false;
100 }
101 $blog_id = $this->get_site_id();
102 $subscription_status = \Blog_Subscription::get_subscription_status_for_blog( $subscriber_object, $blog_id );
103 if ( self::BLOG_SUB_PENDING !== $subscription_status ) {
104 return false;
105 }
106 return true;
107 }
108
109 /**
110 * Lookup users subscriptions for a site and determine if the user has a valid subscription to match the plan ID
111 *
112 * @param array $valid_plan_ids .
113 * @param string $access_level .
114 * @param bool $is_blog_subscriber .
115 * @param int $post_id .
116 *
117 * @return bool
118 */
119 protected function user_can_view_content( $valid_plan_ids, $access_level, $is_blog_subscriber, $post_id ) {
120 $user_id = is_user_logged_in() ? wp_get_current_user()->ID : $this->user_id;
121 /**
122 * Filter the subscriptions attached to a specific user on a given site.
123 *
124 * @since 9.4.0
125 *
126 * @param array $subscriptions Array of subscriptions.
127 * @param int $user_id The user's ID.
128 * @param int $site_id ID of the current site.
129 */
130 $subscriptions = apply_filters( 'earn_get_user_subscriptions_for_site_id', array(), $user_id, $this->get_site_id() );
131 // format the subscriptions so that they can be validated.
132 $subscriptions = self::abbreviate_subscriptions( $subscriptions );
133 $is_paid_subscriber = static::validate_subscriptions( $valid_plan_ids, $subscriptions );
134
135 return $this->user_has_access( $access_level, $is_blog_subscriber, $is_paid_subscriber, $post_id, $subscriptions );
136 }
137
138 /**
139 * Report the subscriptions as an ID => [ 'end_date' => ]. mapping
140 *
141 * @param array $subscriptions_from_bd .
142 *
143 * @return array<int, object>
144 */
145 public static function abbreviate_subscriptions( $subscriptions_from_bd ) {
146 $subscriptions = array();
147 foreach ( $subscriptions_from_bd as $subscription ) {
148 // We are picking the expiry date that is the most in the future.
149 if (
150 'active' === $subscription['status'] && (
151 ! isset( $subscriptions[ $subscription['product_id'] ] ) ||
152 empty( $subscription['end_date'] ) || // Special condition when subscription has no expiry date - we will default to a year from now for the purposes of the token.
153 strtotime( $subscription['end_date'] ) > strtotime( (string) $subscriptions[ $subscription['product_id'] ]->end_date )
154 )
155 ) {
156 $subscriptions[ $subscription['product_id'] ] = new \stdClass();
157 $subscriptions[ $subscription['product_id'] ]->end_date = empty( $subscription['end_date'] ) ? gmdate( 'Y-m-d H:i:s', ( time() + 365 * 24 * 3600 ) ) : $subscription['end_date'];
158 if ( ! empty( $subscription['is_comp'] ) ) {
159 $subscriptions[ $subscription['product_id'] ]->is_comp = true;
160 }
161 }
162 }
163 return $subscriptions;
164 }
165
166 /**
167 * Get the site ID.
168 *
169 * @return int The site ID.
170 */
171 public function get_site_id() {
172 return get_current_blog_id();
173 }
174 }
175