| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- /**
- * Premium Content Block.
- *
- * @package automattic/jetpack
- */
- namespace Automattic\Jetpack\Extensions\Premium_Content;
- use Automattic\Jetpack\Blocks;
- 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 ) || jetpack_is_atomic_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 ( jetpack_is_atomic_site() ) {
- // On Atomic 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,
- )
- );
- }
|