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