Skip to content
Merged
107 changes: 2 additions & 105 deletions includes/class-content-distribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
use Newspack_Network\Content_Distribution\Incoming_Post;
use Newspack_Network\Content_Distribution\Outgoing_Post;
use Newspack_Network\Content_Distribution\Yoast_Primary_Cat;
use Newspack_Network\Content_Distribution\Block_Processor;
use Newspack_Network\Content_Distribution\Blocks;
use WP_Post;

/**
Expand All @@ -35,13 +35,6 @@ class Content_Distribution {
*/
private static $queued_distributions = [];

/**
* Registered block processors
*
* @var array<string, Block_Processor[]> Array of block processors indexed by block name.
*/
private static $block_processors = [];

/**
* Initialize this class and register hooks
*
Expand Down Expand Up @@ -69,10 +62,7 @@ public static function init() {
Distributor_Migrator::init();
Cap_Authors::init();
Yoast_Primary_Cat::init();

// Register block processors.
self::register_block_processor( 'jetpack/slideshow', [ __CLASS__, 'process_jetpack_galleries' ] );
self::register_block_processor( 'jetpack/tiled-gallery', [ __CLASS__, 'process_jetpack_galleries' ] );
Blocks::init();
}

/**
Expand Down Expand Up @@ -547,97 +537,4 @@ public static function distribute_post_partial( $post, $post_data_keys ) {
update_post_meta( $post->ID, self::PAYLOAD_HASH_META, $payload_hash );
}
}

/**
* Register a block processor.
*
* @param string $block_name The name of the block to process.
* @param callable|null $outgoing_callback The callback to transform the outgoing block.
* @param callable|null $incoming_callback The callback to transform the incoming block.
*
* @return void
*/
public static function register_block_processor( $block_name, $outgoing_callback = null, $incoming_callback = null ) {
$block_processor = new Block_Processor( $block_name, $outgoing_callback, $incoming_callback );
if ( ! isset( self::$block_processors[ $block_name ] ) ) {
self::$block_processors[ $block_name ] = [];
}
self::$block_processors[ $block_name ][] = $block_processor;
}

/**
* Reset the block processors for a block name.
*
* @param string $block_name The name of the block.
*
* @return void
*/
public static function reset_block_processors( $block_name ) {
self::$block_processors[ $block_name ] = [];
}

/**
* Process an outgoing block.
*
* @param array $block The block to process.
*
* @return array The processed block.
*/
public static function process_outgoing_block( $block ) {
$block_name = $block['blockName'];

$processors = self::get_block_processors( $block_name );
if ( empty( $processors ) ) {
return $block;
}

foreach ( $processors as $processor ) {
$block = $processor->process_outgoing_block( $block );
}
return $block;
}

/**
* Process an incoming block.
*
* @param array $block The block to process.
*
* @return array The processed block.
*/
public static function process_incoming_block( $block ) {
$block_name = $block['blockName'];

$processors = self::get_block_processors( $block_name );
if ( empty( $processors ) ) {
return $block;
}

foreach ( $processors as $processor ) {
$block = $processor->process_incoming_block( $block );
}
return $block;
}

/**
* Get the processors for a block.
*
* @param string $block_name The name of the block.
*
* @return Block_Processor[] The block processors.
*/
public static function get_block_processors( $block_name ) {
return self::$block_processors[ $block_name ] ?? [];
}

/**
* Process Jetpack galleries blocks.
*
* @param array $block The block to process.
*
* @return array The processed block.
*/
public static function process_jetpack_galleries( $block ) {
unset( $block['attrs']['ids'] );
return $block;
}
}
124 changes: 124 additions & 0 deletions includes/content-distribution/blocks/class-blocks.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<?php
/**
* Content Distribution Custom Handling for Gutenberg Blocks
*
* @package Newspack_Network
*/

namespace Newspack_Network\Content_Distribution;

/**
* Blocks class.
*/
class Blocks {
/**
* Registered block processors
*
* @var array<string, Block_Processor[]> Array of block processors indexed by block name.
*/
private static $block_processors = [];

/**
* Initialize hooks.
*/
public static function init() {
Image_Block::init();

// Register block processors.
self::register_block_processor( 'jetpack/slideshow', [ __CLASS__, 'process_jetpack_galleries' ] );
self::register_block_processor( 'jetpack/tiled-gallery', [ __CLASS__, 'process_jetpack_galleries' ] );
}

/**
* Register a block processor.
*
* @param string $block_name The name of the block to process.
* @param callable|null $outgoing_callback The callback to transform the outgoing block.
* @param callable|null $incoming_callback The callback to transform the incoming block.
*
* @return void
*/
public static function register_block_processor( $block_name, $outgoing_callback = null, $incoming_callback = null ) {
$block_processor = new Block_Processor( $block_name, $outgoing_callback, $incoming_callback );
if ( ! isset( self::$block_processors[ $block_name ] ) ) {
self::$block_processors[ $block_name ] = [];
}
self::$block_processors[ $block_name ][] = $block_processor;
}

/**
* Reset the block processors for a block name.
*
* @param string $block_name The name of the block.
*
* @return void
*/
public static function reset_block_processors( $block_name ) {
self::$block_processors[ $block_name ] = [];
}

/**
* Process an outgoing block.
*
* @param array $block The block to process.
*
* @return array The processed block.
*/
public static function process_outgoing_block( $block ) {
$block_name = $block['blockName'];

$processors = self::get_block_processors( $block_name );
if ( empty( $processors ) ) {
return $block;
}

foreach ( $processors as $processor ) {
$block = $processor->process_outgoing_block( $block );
}
return $block;
}

/**
* Process an incoming block.
*
* @param array $block The block to process.
*
* @return array The processed block.
*/
public static function process_incoming_block( $block ) {
$block_name = $block['blockName'];

$processors = self::get_block_processors( $block_name );
if ( empty( $processors ) ) {
return $block;
}

foreach ( $processors as $processor ) {
$block = $processor->process_incoming_block( $block );
}
return $block;
}

/**
* Get the processors for a block.
*
* @param string $block_name The name of the block.
*
* @return Block_Processor[] The block processors.
*/
public static function get_block_processors( $block_name ) {
return self::$block_processors[ $block_name ] ?? [];
}

/**
* Process Jetpack galleries blocks.
*
* @param array $block The block to process.
*
* @return array The processed block.
*/
public static function process_jetpack_galleries( $block ) {
unset( $block['attrs']['ids'] );
return $block;
}
}
Loading