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