Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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