| 1 |
<?php |
| 2 |
/** |
| 3 |
* Subcription service includes to build out the service. |
| 4 |
* |
| 5 |
* @package Automattic\Jetpack\Extensions\Premium_Content |
| 6 |
*/ |
| 7 |
|
| 8 |
namespace Automattic\Jetpack\Extensions\Premium_Content; |
| 9 |
|
| 10 |
use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Jetpack_Token_Subscription_Service; |
| 11 |
use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Subscription_Service; |
| 12 |
use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Unconfigured_Subscription_Service; |
| 13 |
use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\WPCOM_Online_Subscription_Service; |
| 14 |
|
| 15 |
if ( ! defined( 'ABSPATH' ) ) { |
| 16 |
exit( 0 ); |
| 17 |
} |
| 18 |
|
| 19 |
require_once __DIR__ . '/class-jwt.php'; |
| 20 |
require_once __DIR__ . '/interface-subscription-service.php'; |
| 21 |
require_once __DIR__ . '/class-abstract-token-subscription-service.php'; |
| 22 |
require_once __DIR__ . '/class-jetpack-token-subscription-service.php'; |
| 23 |
require_once __DIR__ . '/class-wpcom-online-subscription-service.php'; |
| 24 |
require_once __DIR__ . '/class-wpcom-offline-subscription-service.php'; |
| 25 |
require_once __DIR__ . '/class-unconfigured-subscription-service.php'; |
| 26 |
|
| 27 |
const PAYWALL_FILTER = 'earn_premium_content_subscription_service'; |
| 28 |
|
| 29 |
/** |
| 30 |
* Initializes the premium content subscription service. |
| 31 |
*/ |
| 32 |
function paywall_initialize() { |
| 33 |
$paywall = subscription_service(); |
| 34 |
if ( $paywall ) { |
| 35 |
$paywall->initialize(); |
| 36 |
} |
| 37 |
} |
| 38 |
add_action( 'init', 'Automattic\Jetpack\Extensions\Premium_Content\paywall_initialize', 9 ); |
| 39 |
|
| 40 |
/** |
| 41 |
* Gets the service handling the premium content subscriptions. |
| 42 |
* |
| 43 |
* @param int|null $user_id An optional user_id to query subscriptions against. Uses token from request/cookie or logged-in user information if omitted. |
| 44 |
* @return Subscription_Service Service that will handle the premium content subscriptions. |
| 45 |
*/ |
| 46 |
function subscription_service( $user_id = null ) { |
| 47 |
/** |
| 48 |
* Filter the Jetpack_Token_Subscription_Service class. |
| 49 |
* |
| 50 |
* @since 9.4.0 |
| 51 |
* |
| 52 |
* @param null|Jetpack_Token_Subscription_Service $interface Registered Subscription_Service. |
| 53 |
*/ |
| 54 |
$interface = apply_filters( PAYWALL_FILTER, null, $user_id ); |
| 55 |
if ( ! $interface instanceof Jetpack_Token_Subscription_Service ) { |
| 56 |
_doing_it_wrong( __FUNCTION__, 'No Subscription_Service registered for the ' . esc_html( PAYWALL_FILTER ) . ' filter', 'jetpack' ); |
| 57 |
} |
| 58 |
return $interface; |
| 59 |
} |
| 60 |
|
| 61 |
/** |
| 62 |
* Gets the default service handling the premium content. |
| 63 |
* |
| 64 |
* @param Subscription_Service $service If set, this service will be used by default. |
| 65 |
* @param int|null $user_id An optional user_id to query subscriptions against. Uses token from request/cookie or logged-in user information if omitted. |
| 66 |
* @return Subscription_Service Service that will handle the premium content. |
| 67 |
*/ |
| 68 |
function default_service( $service, $user_id = null ) { |
| 69 |
if ( null !== $service ) { |
| 70 |
return $service; |
| 71 |
} |
| 72 |
|
| 73 |
// Prefer to use the WPCOM_Online_Subscription_Service if this code is executing on WPCOM. |
| 74 |
$wpcom_available_but_user_is_not_logged_in = defined( 'IS_WPCOM' ) && IS_WPCOM && ! is_user_logged_in() && ! empty( $user_id ); |
| 75 |
if ( WPCOM_Online_Subscription_Service::available() || $wpcom_available_but_user_is_not_logged_in ) { |
| 76 |
// Return the WPCOM Online subscription service when we are on WPCOM. |
| 77 |
return new WPCOM_Online_Subscription_Service( $user_id ); |
| 78 |
} |
| 79 |
|
| 80 |
// Fallback on using the Jetpack_Token_Subscription_Service if this is not executing on WPCOM but is executing on a Jetpack site. |
| 81 |
if ( Jetpack_Token_Subscription_Service::available() ) { |
| 82 |
// Return the Jetpack Token Subscription Service when it is available. |
| 83 |
return new Jetpack_Token_Subscription_Service(); |
| 84 |
} |
| 85 |
|
| 86 |
// Return an Unconfigured Subscription Service if this is not a WPCOM or Jetpack site or if both of those services are not available. |
| 87 |
return new Unconfigured_Subscription_Service(); |
| 88 |
} |
| 89 |
add_filter( PAYWALL_FILTER, 'Automattic\Jetpack\Extensions\Premium_Content\default_service', 10, 2 ); |
| 90 |
|