diff --git a/projects/plugins/jetpack/_inc/client/newsletter/subscriptions-settings.jsx b/projects/plugins/jetpack/_inc/client/newsletter/subscriptions-settings.jsx index 3697b42c0a8de..d45bf9f4d084a 100644 --- a/projects/plugins/jetpack/_inc/client/newsletter/subscriptions-settings.jsx +++ b/projects/plugins/jetpack/_inc/client/newsletter/subscriptions-settings.jsx @@ -46,6 +46,8 @@ function SubscriptionsSettings( props ) { isStcEnabled, isSmEnabled, isSubscribePostEndEnabled, + isLoginNavigationEnabled, + isSubscriptionSiteFeatureEnabled, isSubscriptionSiteEditSupported, isSubscriptionsActive, siteRawUrl, @@ -74,6 +76,13 @@ function SubscriptionsSettings( props ) { } ) : null; + const headerTemplateEditorUrl = siteAdminUrl + ? addQueryArgs( `${ siteAdminUrl }site-editor.php`, { + postType: 'wp_template_part', + postId: `${ themeStylesheet }//header`, + } ) + : null; + const handleSubscribeToBlogToggleChange = useCallback( () => { updateFormStateModuleOption( SUBSCRIPTIONS_MODULE_NAME, 'stb_enabled' ); }, [ updateFormStateModuleOption ] ); @@ -93,6 +102,13 @@ function SubscriptionsSettings( props ) { ); }, [ updateFormStateModuleOption ] ); + const handleLoginNavigationToggleChange = useCallback( () => { + updateFormStateModuleOption( + SUBSCRIPTIONS_MODULE_NAME, + 'jetpack_subscriptions_login_navigation_enabled' + ); + }, [ updateFormStateModuleOption ] ); + const getSubClickableCard = () => { if ( unavailableInOfflineMode || ! isSubscriptionsActive || ! isLinked ) { return ''; @@ -231,6 +247,29 @@ function SubscriptionsSettings( props ) { 'jetpack' ) } /> + { isSubscriptionSiteFeatureEnabled && ( + + { __( 'Add the Subscriber Login Block to the navigation', 'jetpack' ) } + { isBlockTheme && headerTemplateEditorUrl && ( + <> + { '. ' } + + { __( 'Preview and edit', 'jetpack' ) } + + + ) } + + } + /> + ) } } @@ -264,6 +303,9 @@ export default withModuleSettingsFormHelpers( isSubscribePostEndEnabled: ownProps.getOptionValue( 'jetpack_subscriptions_subscribe_post_end_enabled' ), + isLoginNavigationEnabled: ownProps.getOptionValue( + 'jetpack_subscriptions_login_navigation_enabled' + ), isSubscriptionSiteFeatureEnabled: isSubscriptionSiteEnabled( state ), isSubscriptionSiteEditSupported: subscriptionSiteEditSupported( state ), isBlockTheme: currentThemeIsBlockTheme( state ), diff --git a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php index 1ea218fcb25dc..cb104c91c4dda 100644 --- a/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php @@ -2659,6 +2659,13 @@ public static function get_updateable_data_list( $selector = '' ) { 'validate_callback' => __CLASS__ . '::validate_boolean', 'jp_group' => 'subscriptions', ), + 'jetpack_subscriptions_login_navigation_enabled' => array( + 'description' => esc_html__( 'Add Subscriber Login block to the navigation.', 'jetpack' ), + 'type' => 'boolean', + 'default' => 0, + 'validate_callback' => __CLASS__ . '::validate_boolean', + 'jp_group' => 'subscriptions', + ), 'social_notifications_subscribe' => array( 'description' => esc_html__( 'Send email notification when someone subscribes to my blog', 'jetpack' ), 'type' => 'boolean', diff --git a/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php b/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php index 435d407e6bd4e..4361110b6429b 100644 --- a/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php +++ b/projects/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php @@ -987,6 +987,7 @@ public function update_data( $request ) { case 'wpcom_featured_image_in_email': case 'wpcom_subscription_emails_use_excerpt': case 'jetpack_subscriptions_subscribe_post_end_enabled': + case 'jetpack_subscriptions_login_navigation_enabled': // Convert the false value to 0. This allows the option to be updated if it doesn't exist yet. $sub_value = $value ? $value : 0; $updated = (string) get_option( $option ) !== (string) $sub_value ? update_option( $option, $sub_value ) : true; diff --git a/projects/plugins/jetpack/changelog/update-subscription-site-login-navigation b/projects/plugins/jetpack/changelog/update-subscription-site-login-navigation new file mode 100644 index 0000000000000..9e71355559483 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-subscription-site-login-navigation @@ -0,0 +1,4 @@ +Significance: minor +Type: other + +Subscription Site: Hook Subscriber Login block into the navigation diff --git a/projects/plugins/jetpack/extensions/blocks/subscriber-login/class-jetpack-subscription-site.php b/projects/plugins/jetpack/extensions/blocks/subscriber-login/class-jetpack-subscription-site.php new file mode 100644 index 0000000000000..ddb16ee16c35b --- /dev/null +++ b/projects/plugins/jetpack/extensions/blocks/subscriber-login/class-jetpack-subscription-site.php @@ -0,0 +1,84 @@ +is_subscription_site_feature_enabled() ) { + return; + } + + $this->handle_subscriber_login_block_navigation_placement(); + } + + /** + * Returns true if Subscription Site feature is enabled. + * + * @return bool + */ + protected function is_subscription_site_feature_enabled() { + // It's temporary. Allows to enable the Subscription Site feature. + return (bool) apply_filters( 'jetpack_subscription_site_enabled', false ); + } + + /** + * Handles Subscriber Login block navigation placement. + * + * @return void + */ + protected function handle_subscriber_login_block_navigation_placement() { + $subscriber_login_navigation_enabled = get_option( 'jetpack_subscriptions_login_navigation_enabled', false ); + if ( ! $subscriber_login_navigation_enabled ) { + return; + } + + if ( ! wp_is_block_theme() ) { // TODO Fallback for classic themes. + return; + } + + add_filter( + 'hooked_block_types', + function ( $hooked_blocks, $relative_position, $anchor_block ) { + if ( $anchor_block === 'core/navigation' && $relative_position === 'last_child' ) { + $hooked_blocks[] = 'jetpack/subscriber-login'; + } + + return $hooked_blocks; + }, + 10, + 3 + ); + } +} diff --git a/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php b/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php index fa75f2b431aaf..99869f726e65f 100644 --- a/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php +++ b/projects/plugins/jetpack/extensions/blocks/subscriber-login/subscriber-login.php @@ -17,6 +17,8 @@ use Jetpack_Memberships; use Jetpack_Options; +require_once __DIR__ . '/class-jetpack-subscription-site.php'; + /** * Registers the block for use in Gutenberg * This is done via an action so that we can disable @@ -35,6 +37,8 @@ function register_block() { __DIR__, array( 'render_callback' => __NAMESPACE__ . '\render_block' ) ); + + Jetpack_Subscription_Site::init()->handle_subscriber_login_block_placements(); } add_action( 'init', __NAMESPACE__ . '\register_block' );