Skip to content

Commit

Permalink
Include the server side render functions for child blocks.
Browse files Browse the repository at this point in the history
  • Loading branch information
apeatling committed Dec 16, 2020
1 parent 326fb61 commit 7bbef17
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 115 deletions.
5 changes: 4 additions & 1 deletion extensions/blocks/premium-content/_inc/access-check.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<?php

namespace Automattic\Jetpack\Extensions\Premium_Content;

require __DIR__ . '/subscription-service/include.php';

/**
* Determines if the memberships module is set up.
*
Expand Down Expand Up @@ -55,7 +58,7 @@ function current_visitor_can_access( $attributes, $block ) {
return false;
}

$paywall = premium_content_subscription_service();
$paywall = subscription_service();
$can_view = $paywall->visitor_can_view_content( array( $selected_plan_id ) );

if ( $can_view ) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
<?php declare( strict_types = 1 );
<?php

namespace Automattic\Jetpack\Extensions\Premium_Content;

use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\{
Subscription_Service,
Jetpack_Token_Subscription_Service,
Unconfigured_Subscription_Service,
WPCOM_Offline_Subscription_Service,
WPCOM_Token_Subscription_Service
};

require_once __DIR__ . '/class-jwt.php';
require_once __DIR__ . '/class-subscription-service.php';
Expand All @@ -8,3 +18,56 @@
require_once __DIR__ . '/class-wpcom-offline-subscription-service.php';
require_once __DIR__ . '/class-jetpack-token-subscription-service.php';
require_once __DIR__ . '/class-unconfigured-subscription-service.php';

const PAYWALL_FILTER = 'earn_premium_content_subscription_service';

/**
* Initializes the premium content subscription service.
*/
function paywall_initialize() {
$paywall = subscription_service();
if ( $paywall ) {
$paywall->initialize();
}
}
add_action( 'init', 'Automattic\Jetpack\Extensions\Premium_Content\paywall_initialize', 9 );

/**
* Gets the service handling the premium content subscriptions.
*
* @return Subscription_Service Service that will handle the premium content subscriptions.
*/
function subscription_service() {
$interface = apply_filters( 'earn_premium_content_subscription_service', null );
if ( ! $interface instanceof Subscription_Service ) {
_doing_it_wrong( __FUNCTION__, 'No Subscription_Service registered for the earn_premium_content_subscription_service filter', 'full-site-editing' );
}
return $interface;
}

/**
* Gets the default service handling the premium content.
*
* @param Subscription_Service $service If set, this service will be used by default.
* @return Subscription_Service Service that will handle the premium content.
*/
function default_service( $service ) {
if ( null !== $service ) {
return $service;
}

if ( WPCOM_Offline_Subscription_Service::available() ) {
return new WPCOM_Offline_Subscription_Service();
}

if ( WPCOM_Token_Subscription_Service::available() ) {
return new WPCOM_Token_Subscription_Service();
}

if ( Jetpack_Token_Subscription_Service::available() ) {
return new Jetpack_Token_Subscription_Service();
}

return new Unconfigured_Subscription_Service();
}
add_filter( PAYWALL_FILTER, 'Automattic\Jetpack\Extensions\Premium_Content\default_service' );
15 changes: 7 additions & 8 deletions extensions/blocks/premium-content/buttons/buttons.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,22 @@
use Automattic\Jetpack\Blocks;
use Jetpack_Gutenberg;

const FEATURE_NAME = 'premium-content/buttons';
const BUTTONS_NAME = 'premium-content/buttons';

/**
* 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() {
function register_buttons_block() {
Blocks::jetpack_register_block(
FEATURE_NAME,
BUTTONS_NAME,
array(
'render_callback' => __NAMESPACE__ . '\render_block',
'plan_check' => true,
'render_callback' => __NAMESPACE__ . '\render_buttons_block',
)
);
}
add_action( 'init', __NAMESPACE__ . '\register_block' );
add_action( 'init', __NAMESPACE__ . '\register_buttons_block' );

/**
* Render callback.
Expand All @@ -36,8 +35,8 @@ function register_block() {
*
* @return string
*/
function render_block( $attributes, $content ) {
Jetpack_Gutenberg::load_styles_as_required( FEATURE_NAME );
function render_buttons_block( $attributes, $content ) {
Jetpack_Gutenberg::load_styles_as_required( BUTTONS_NAME );

return $content;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,29 @@
use Automattic\Jetpack\Blocks;
use Jetpack_Gutenberg;

const FEATURE_NAME = 'premium-content/logged-out-view';
const LOGGEDOUT_VIEW_NAME = 'premium-content/logged-out-view';

require_once '../_inc/access-check.php';
require_once dirname( __DIR__ ) . '/_inc/access-check.php';

/**
* 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() {
function register_loggedout_view_block() {
// Determine required `context` key based on Gutenberg version.
$deprecated = function_exists( 'gutenberg_get_post_from_context' );
$uses = $deprecated ? 'context' : 'uses_context';

Blocks::jetpack_register_block(
FEATURE_NAME,
LOGGEDOUT_VIEW_NAME,
array(
'render_callback' => __NAMESPACE__ . '\render_block',
'plan_check' => true,
'render_callback' => __NAMESPACE__ . '\render_loggedout_view_block',
$uses => array( 'premium-content/planId' ),
)
);
}
add_action( 'init', __NAMESPACE__ . '\register_block' );
add_action( 'init', __NAMESPACE__ . '\register_loggedout_view_block' );

/**
* Render callback.
Expand All @@ -39,7 +42,7 @@ function register_block() {
*
* @return string
*/
function render_block( $attributes, $content, $block = null ) {
function render_loggedout_view_block( $attributes, $content, $block = null ) {
if ( ! pre_render_checks() ) {
return '';
}
Expand All @@ -50,7 +53,7 @@ function render_block( $attributes, $content, $block = null ) {
return '';
}

Jetpack_Gutenberg::load_styles_as_required( FEATURE_NAME );
Jetpack_Gutenberg::load_styles_as_required( LOGGEDOUT_VIEW_NAME );

// Old versions of the block were rendering the subscribe/login button server-side, so we need to still support them.
if ( ! empty( $attributes['buttonClasses'] ) ) {
Expand Down
26 changes: 9 additions & 17 deletions extensions/blocks/premium-content/login-button/login-button.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,33 +9,25 @@

use Automattic\Jetpack\Blocks;
use Jetpack_Gutenberg;
use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\{
Subscription_Service,
Jetpack_Token_Subscription_Service,
Unconfigured_Subscription_Service,
WPCOM_Offline_Subscription_Service,
WPCOM_Token_Subscription_Service
};

require_once '../_inc/subscription-service/include.php';
require_once dirname( __DIR__ ) . '/_inc/subscription-service/include.php';

const FEATURE_NAME = 'premium-content/login-button';
const LOGIN_BUTTON_NAME = 'premium-content/login-button';

/**
* 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() {
function register_login_button_block() {
Blocks::jetpack_register_block(
FEATURE_NAME,
LOGIN_BUTTON_NAME,
array(
'render_callback' => __NAMESPACE__ . '\render_block',
'plan_check' => true,
'render_callback' => __NAMESPACE__ . '\render_login_button_block',
)
);
}
add_action( 'init', __NAMESPACE__ . '\register_block' );
add_action( 'init', __NAMESPACE__ . '\register_login_button_block' );

/**
* Render callback.
Expand All @@ -45,7 +37,7 @@ function register_block() {
*
* @return string
*/
function render_block( $attributes, $content ) {
function render_login_button_block( $attributes, $content ) {
if ( ! pre_render_checks() ) {
return '';
}
Expand All @@ -55,8 +47,8 @@ function render_block( $attributes, $content ) {
return '';
}

Jetpack_Gutenberg::load_styles_as_required( FEATURE_NAME );
Jetpack_Gutenberg::load_styles_as_required( LOGIN_BUTTON_NAME );

$url = premium_content_subscription_service()->access_url();
$url = subscription_service()->access_url();
return preg_replace( '/(<a\b[^><]*)>/i', '$1 href="' . esc_url( $url ) . '">', $content );
}
78 changes: 10 additions & 68 deletions extensions/blocks/premium-content/premium-content.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,14 @@

use Automattic\Jetpack\Blocks;
use Jetpack_Gutenberg;
use RuntimeException;
use Automattic\Jetpack\Extensions\Premium_Content\Subscription_Service\{
Subscription_Service,
Jetpack_Token_Subscription_Service,
Unconfigured_Subscription_Service,
WPCOM_Offline_Subscription_Service,
WPCOM_Token_Subscription_Service
};

require_once __DIR__ . '/_inc/subscription-service/include.php';
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';
const PAYWALL_FILTER = 'earn_premium_content_subscription_service';

/**
* Registers the block for use in Gutenberg
Expand All @@ -33,18 +27,17 @@ function register_block() {
// Determine required `context` key based on Gutenberg version.
$deprecated = function_exists( 'gutenberg_get_post_from_context' );
$provides = $deprecated ? 'providesContext' : 'provides_context';
$uses = $deprecated ? 'context' : 'uses_context';

Blocks::jetpack_register_block(
Blocks::jetpack_register_block(
FEATURE_NAME,
array(
'render_callback' => __NAMESPACE__ . '\render_block',
'plan_check' => true,
$provides => array(
'plan_check' => true,
$provides => array(
'premium-content/planId' => 'selectedPlanId',
),
)
);
);
}
add_action( 'init', __NAMESPACE__ . '\register_block' );

Expand All @@ -61,57 +54,6 @@ function render_block( $attributes, $content ) {
return '';
}

Jetpack_Gutenberg::load_styles_as_required( FEATURE_NAME );
return $content;
Jetpack_Gutenberg::load_styles_as_required( FEATURE_NAME );
return $content;
}

/**
* Initializes the premium content subscription service.
*/
function paywall_initialize() {
$paywall = subscription_service();
if ( $paywall ) {
$paywall->initialize();
}
}
add_action( 'init', 'Automattic\Jetpack\Extensions\Premium_Content\paywall_initialize', 9 );

/**
* Gets the service handling the premium content subscriptions.
*
* @return Subscription_Service Service that will handle the premium content subscriptions.
*/
function subscription_service() {
$interface = apply_filters( 'earn_premium_content_subscription_service', null );
if ( ! $interface instanceof Subscription_Service ) {
_doing_it_wrong( __FUNCTION__, 'No Subscription_Service registered for the earn_premium_content_subscription_service filter', 'full-site-editing' );
}
return $interface;
}

/**
* Gets the default service handling the premium content.
*
* @param Subscription_Service $service If set, this service will be used by default.
* @return Subscription_Service Service that will handle the premium content.
*/
function default_service( $service ) {
if ( null !== $service ) {
return $service;
}

if ( WPCOM_Offline_Subscription_Service::available() ) {
return new WPCOM_Offline_Subscription_Service();
}

if ( WPCOM_Token_Subscription_Service::available() ) {
return new WPCOM_Token_Subscription_Service();
}

if ( Jetpack_Token_Subscription_Service::available() ) {
return new Jetpack_Token_Subscription_Service();
}

return new Unconfigured_Subscription_Service();
}
add_filter( PAYWALL_FILTER, 'Automattic\Jetpack\Extensions\Premium_Content\default_service' );
Loading

0 comments on commit 7bbef17

Please sign in to comment.