PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 / subscriber-login / subscriber-login.php
jetpack / extensions / blocks / subscriber-login Last commit date
class-jetpack-subscription-site.php 1 year ago subscriber-login.php 7 months ago
subscriber-login.php
161 lines
1 <?php
2 /**
3 * Subscriber Login Block.
4 *
5 * @since 13.1
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\Subscriber_Login;
11
12 use Automattic\Jetpack\Blocks;
13 use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Abstract_Token_Subscription_Service;
14 use Automattic\Jetpack\Status\Host;
15 use Automattic\Jetpack\Status\Request;
16 use Jetpack;
17 use Jetpack_Gutenberg;
18 use Jetpack_Memberships;
19 use Jetpack_Options;
20
21 if ( ! defined( 'ABSPATH' ) ) {
22 exit( 0 );
23 }
24
25 require_once __DIR__ . '/class-jetpack-subscription-site.php';
26
27 /**
28 * Registers the block for use in Gutenberg
29 * This is done via an action so that we can disable
30 * registration if we need to.
31 */
32 function register_block() {
33 if (
34 ! Jetpack::is_module_active( 'subscriptions' ) ||
35 ! class_exists( 'Jetpack_Memberships' ) ||
36 ! class_exists( 'Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\Abstract_Token_Subscription_Service' )
37 ) {
38 return;
39 }
40
41 Blocks::jetpack_register_block(
42 __DIR__,
43 array( 'render_callback' => __NAMESPACE__ . '\render_block' )
44 );
45
46 add_filter(
47 'jetpack_options_whitelist',
48 function ( $options ) {
49 $options[] = 'jetpack_subscriptions_login_navigation_enabled';
50
51 return $options;
52 }
53 );
54
55 // If called via REST API, we need to register later in the lifecycle
56 if ( ( new Host() )->is_wpcom_platform() && ! Request::is_frontend() ) {
57 add_action(
58 'restapi_theme_init',
59 function () {
60 Jetpack_Subscription_Site::init()->handle_subscriber_login_block_placements();
61 }
62 );
63 } else {
64 Jetpack_Subscription_Site::init()->handle_subscriber_login_block_placements();
65 }
66 }
67 add_action( 'init', __NAMESPACE__ . '\register_block' );
68
69 /**
70 * Returns current URL.
71 *
72 * @return string
73 */
74 function get_current_url() {
75 if ( ! isset( $_SERVER['HTTP_HOST'] ) || ! isset( $_SERVER['REQUEST_URI'] ) ) {
76 return '';
77 }
78
79 return ( is_ssl() ? 'https://' : 'http://' ) . wp_unslash( $_SERVER['HTTP_HOST'] ) . wp_unslash( $_SERVER['REQUEST_URI'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
80 }
81
82 /**
83 * Returns subscriber log in URL.
84 *
85 * @param string $redirect Path to redirect to on login.
86 *
87 * @return string
88 */
89 function get_subscriber_login_url( $redirect ) {
90 $redirect = ! empty( $redirect ) ? $redirect : get_site_url();
91
92 if ( ( new Host() )->is_wpcom_simple() ) {
93 // On WPCOM we will redirect immediately
94 return wpcom_logmein_redirect_url( $redirect, false, null, 'link', get_current_blog_id() );
95 }
96
97 // On self-hosted we will save and hide the token
98 $redirect_url = get_site_url() . '/wp-json/jetpack/v4/subscribers/auth';
99 $redirect_url = add_query_arg( 'redirect_url', $redirect, $redirect_url );
100
101 return add_query_arg(
102 array(
103 'site_id' => intval( Jetpack_Options::get_option( 'id' ) ),
104 'redirect_url' => rawurlencode( $redirect_url ),
105 ),
106 'https://subscribe.wordpress.com/memberships/jwt/'
107 );
108 }
109
110 /**
111 * Determines whether the current visitor is a logged in user or a subscriber.
112 *
113 * @return bool
114 */
115 function is_subscriber_logged_in() {
116 return is_user_logged_in() || Abstract_Token_Subscription_Service::has_token_from_cookie();
117 }
118
119 /**
120 * Renders Subscriber Login block.
121 *
122 * @param array $attributes The block attributes.
123 *
124 * @return string
125 */
126 function render_block( $attributes ) {
127 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
128
129 $block_template = '<div %1$s><a href="%2$s">%3$s</a></div>';
130 $redirect_url = ! empty( $attributes['redirectToCurrent'] ) ? get_current_url() : get_site_url();
131 $log_in_label = ! empty( $attributes['logInLabel'] ) ? sanitize_text_field( $attributes['logInLabel'] ) : esc_html__( 'Log in', 'jetpack' );
132 $log_out_label = ! empty( $attributes['logOutLabel'] ) ? sanitize_text_field( $attributes['logOutLabel'] ) : esc_html__( 'Log out', 'jetpack' );
133 $show_manage_link = ! empty( $attributes['showManageSubscriptionsLink'] );
134 $manage_subscriptions_label = ! empty( $attributes['manageSubscriptionsLabel'] ) ? sanitize_text_field( $attributes['manageSubscriptionsLabel'] ) : esc_html__( 'Manage subscription', 'jetpack' );
135
136 if ( ! is_subscriber_logged_in() ) {
137 return sprintf(
138 $block_template,
139 get_block_wrapper_attributes(),
140 get_subscriber_login_url( $redirect_url ),
141 $log_in_label
142 );
143 }
144
145 if ( $show_manage_link && Jetpack_Memberships::is_current_user_subscribed() ) {
146 return sprintf(
147 $block_template,
148 get_block_wrapper_attributes(),
149 'https://wordpress.com/reader/site/subscription/' . Jetpack_Memberships::get_blog_id(),
150 $manage_subscriptions_label
151 );
152 }
153
154 return sprintf(
155 $block_template,
156 get_block_wrapper_attributes(),
157 wp_logout_url( $redirect_url ),
158 $log_out_label
159 );
160 }
161