Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
30.77% covered (danger)
30.77%
8 / 26
0.00% covered (danger)
0.00%
0 / 3
CRAP
n/a
0 / 0
Automattic\Jetpack\Extensions\Premium_Content\paywall_initialize
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
Automattic\Jetpack\Extensions\Premium_Content\subscription_service
75.00% covered (warning)
75.00%
3 / 4
0.00% covered (danger)
0.00%
0 / 1
2.06
Automattic\Jetpack\Extensions\Premium_Content\default_service
62.50% covered (warning)
62.50%
5 / 8
0.00% covered (danger)
0.00%
0 / 1
11.38
1<?php
2/**
3 * Subcription service includes to build out the service.
4 *
5 * @package Automattic\Jetpack\Extensions\Premium_Content
6 */
7
8namespace Automattic\Jetpack\Extensions\Premium_Content;
9
10use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Jetpack_Token_Subscription_Service;
11use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Subscription_Service;
12use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Unconfigured_Subscription_Service;
13use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\WPCOM_Online_Subscription_Service;
14
15if ( ! defined( 'ABSPATH' ) ) {
16    exit( 0 );
17}
18
19require_once __DIR__ . '/class-jwt.php';
20require_once __DIR__ . '/interface-subscription-service.php';
21require_once __DIR__ . '/class-abstract-token-subscription-service.php';
22require_once __DIR__ . '/class-jetpack-token-subscription-service.php';
23require_once __DIR__ . '/class-wpcom-online-subscription-service.php';
24require_once __DIR__ . '/class-wpcom-offline-subscription-service.php';
25require_once __DIR__ . '/class-unconfigured-subscription-service.php';
26
27const PAYWALL_FILTER = 'earn_premium_content_subscription_service';
28
29/**
30 * Initializes the premium content subscription service.
31 */
32function paywall_initialize() {
33    $paywall = subscription_service();
34    if ( $paywall ) {
35        $paywall->initialize();
36    }
37}
38add_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 */
46function 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 */
68function 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}
89add_filter( PAYWALL_FILTER, 'Automattic\Jetpack\Extensions\Premium_Content\default_service', 10, 2 );