oont-contents/plugins/jetpack/extensions/blocks/premium-content/_inc/subscription-service/class-wpcom-offline-subscription-service.php
2025-02-08 15:10:23 +01:00

66 lines
2.1 KiB
PHP

<?php
/**
* This subscription service is used when a subscriber is offline and a token is not available.
*
* @package Automattic\Jetpack\Extensions\Premium_Content
*/
namespace Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service;
use const Automattic\Jetpack\Extensions\Subscriptions\META_NAME_FOR_POST_LEVEL_ACCESS_SETTINGS;
/**
* Class WPCOM_Offline_Subscription_Service
* This subscription service is used when a subscriber is offline and a token is not available.
* This subscription service will be used when sending emails to subscribers
*
* @package Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service
*/
class WPCOM_Offline_Subscription_Service extends WPCOM_Online_Subscription_Service {
/**
* Is available()
*
* @return bool
*/
public static function available() {
// Return available if the user is logged in and we are on WPCOM.
return false;
}
/**
* Check if the subscriber can receive the newsletter.
* This is the only method where is user does not need to be logged in.
*
* @param int $user_id User id.
* @param int $post_id Post id.
*
* @return bool
* @throws \Exception Throws an exception when used outside of WPCOM.
*/
public function subscriber_can_receive_post_by_mail( $user_id, $post_id ) {
if ( 0 === $user_id || empty( $user_id ) ) {
// Email cannot be sent to non-users
return false;
}
$previous_user = wp_get_current_user();
wp_set_current_user( $user_id );
$access_level = get_post_meta( $post_id, META_NAME_FOR_POST_LEVEL_ACCESS_SETTINGS, true );
if ( ! $access_level || self::POST_ACCESS_LEVEL_EVERYBODY === $access_level ) {
// The post is not gated, we return early
return true;
}
$valid_plan_ids = \Jetpack_Memberships::get_all_newsletter_plan_ids();
$is_blog_subscriber = true; // it is a subscriber as this is used in async when lopping through subscribers...
$allowed = $this->user_can_view_content( $valid_plan_ids, $access_level, $is_blog_subscriber, $post_id );
wp_set_current_user( $previous_user->ID );
return $allowed;
}
}