diff options
Diffstat (limited to 'plugins/jetpack/extensions/blocks/premium-content/premium-content.php')
-rw-r--r-- | plugins/jetpack/extensions/blocks/premium-content/premium-content.php | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/plugins/jetpack/extensions/blocks/premium-content/premium-content.php b/plugins/jetpack/extensions/blocks/premium-content/premium-content.php new file mode 100644 index 00000000..41915978 --- /dev/null +++ b/plugins/jetpack/extensions/blocks/premium-content/premium-content.php @@ -0,0 +1,131 @@ +<?php +/** + * Premium Content Block. + * + * @package automattic/jetpack + */ + +namespace Automattic\Jetpack\Extensions\Premium_Content; + +use Automattic\Jetpack\Blocks; +use Automattic\Jetpack\Status\Host; +use Jetpack_Gutenberg; + +require_once __DIR__ . '/_inc/access-check.php'; +require_once __DIR__ . '/logged-out-view/logged-out-view.php'; +require_once __DIR__ . '/subscriber-view/subscriber-view.php'; +require_once __DIR__ . '/buttons/buttons.php'; +require_once __DIR__ . '/login-button/login-button.php'; + +const FEATURE_NAME = 'premium-content/container'; + +/** + * Registers the block for use in Gutenberg + * This is done via an action so that we can disable + * registration if we need to. + */ +function register_block() { + // Only load this block on WordPress.com. + if ( ( defined( 'IS_WPCOM' ) && IS_WPCOM ) || ( new Host() )->is_woa_site() ) { + // Determine required `context` key based on Gutenberg version. + $deprecated = function_exists( 'gutenberg_get_post_from_context' ); + $provides = $deprecated ? 'providesContext' : 'provides_context'; + + Blocks::jetpack_register_block( + FEATURE_NAME, + array( + 'render_callback' => __NAMESPACE__ . '\render_block', + 'plan_check' => true, + 'attributes' => array( + 'isPremiumContentChild' => array( + 'type' => 'boolean', + 'default' => true, + ), + ), + $provides => array( + 'premium-content/planId' => 'selectedPlanId', + 'isPremiumContentChild' => 'isPremiumContentChild', + ), + ) + ); + } +} +add_action( 'init', __NAMESPACE__ . '\register_block' ); + +/** + * Render callback. + * + * @param array $attributes Array containing the block attributes. + * @param string $content String containing the block content. + * + * @return string + */ +function render_block( $attributes, $content ) { + if ( ! pre_render_checks() ) { + return ''; + } + + if ( + ! membership_checks() + // Only display Stripe nudge if Upgrade nudge isn't displaying. + && required_plan_checks() + ) { + $stripe_nudge = render_stripe_nudge(); + return $stripe_nudge . $content; + } + + // We don't use FEATURE_NAME here because styles are not in /container folder. + Jetpack_Gutenberg::load_styles_as_required( 'premium-content' ); + return $content; +} + +/** + * Server-side rendering for the stripe connection nudge. + * + * @return string Final content to render. + */ +function render_stripe_nudge() { + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { + \jetpack_require_lib( 'memberships' ); + $blog_id = get_current_blog_id(); + $settings = (array) \get_memberships_settings_for_site( $blog_id ); + + return stripe_nudge( + $settings['connect_url'], + __( 'Connect to Stripe to use this block on your site.', 'jetpack' ), + __( 'Connect', 'jetpack' ) + ); + } elseif ( ( new Host() )->is_woa_site() ) { + // On WoA sites, the Stripe connection url is not easily available + // server-side, so we redirect them to the post in the editor in order + // to connect. + return stripe_nudge( + get_edit_post_link( get_the_ID() ), + __( 'Connect to Stripe in the editor to use this block on your site.', 'jetpack' ), + __( 'Edit post', 'jetpack' ) + ); + } + + // The Premium Content block is not supported on Jetpack sites. + return ''; +} + +/** + * Render the stripe nudge. + * + * @param string $checkout_url Url for the CTA. + * @param string $description Text of the nudge. + * @param string $button_text Text of the button. + * + * @return string Final content to render. + */ +function stripe_nudge( $checkout_url, $description, $button_text ) { + \jetpack_require_lib( 'components' ); + return \Jetpack_Components::render_frontend_nudge( + array( + 'checkoutUrl' => $checkout_url, + 'description' => $description, + 'buttonText' => $button_text, + ) + ); +} |