<?php
declare(strict_types=1);
namespace MPBC;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
final class Blocks {
private $form_blocks = array(
'mpbc/form-input-customer-name',
'mpbc/form-input-customer-email',
'mpbc/form-input-customer-phone',
'mpbc/form-input-email',
'mpbc/form-input-phone',
'mpbc/form-input-text',
'mpbc/form-input-number',
'mpbc/form-input-checkbox',
'mpbc/form-input-select',
'mpbc/form-input-radio-group',
'mpbc/form-input-textarea',
'mpbc/form-input-price-adjustment',
'mpbc/form-input-select-option',
'mpbc/form-input-radio',
'mpbc/form-input-country-select',
);
public function __construct() {
add_filter( 'block_categories_all', array( $this, 'add_category' ) );
add_action( 'init', array( $this, 'register_blocks' ) );
add_filter( 'allowed_block_types_all', array( $this, 'filter_block_types' ), 10, 2 );
}
/**
* @access private
*/
public function add_category( array $block_categories ): array {
$block_categories = array_merge(
$block_categories,
array(
array(
'slug' => 'mpbc',
'title' => __( 'Booking Calendar', 'motopress-booking-calendar' ),
'icon' => null,
),
array(
'slug' => 'mpbc-form',
'title' => __( 'Form Blocks', 'motopress-booking-calendar' ),
'icon' => null,
),
)
);
return $block_categories;
}
/**
* @access private
*/
public function register_blocks(): void {
//blocks allowed only in Form Editor
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/customer-name' ) ); //Customer Name
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/customer-email' ) ); //Customer Email
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/customer-phone' ) ); //Customer Phone
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/text' ) ); //Short Answer
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/number' ) ); //Number
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/checkbox' ) ); //Checkbox
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/price-adjustment' ) ); //Price Adjustment
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/radio-group' ) ); //Multiple Choice
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/radio' ) ); //-
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/select' ) ); //Dropdown
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/select-option' ) ); //-
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/textarea' ) ); //Long Answer
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/email' ) ); //Email
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/phone' ) ); //Phone
register_block_type( mpbc()->get_file_path( 'assets/property-form-blocks/country-select' ) ); //Country
//site-wide allowed blocks
register_block_type( mpbc()->get_file_path( 'assets/blocks/booking-calendar' ) );
foreach ( $this->form_blocks as $block ) {
wp_set_script_translations( generate_block_asset_handle( $block, 'editorScript' ), 'motopress-booking-calendar', mpbc()->get_file_path( 'languages/' ) );
}
}
public function render_block_tag( string $name, array $attrs = array() ): string {
switch ( $name ) {
case 'mpbc/booking-calendar':
default:
$attrs_json = json_encode( $attrs );
return "<!-- wp:{$name} {$attrs_json} /-->";
}
}
public function filter_block_types( $allowed_block_types, $editor_context ) {
// https://github.com/WordPress/gutenberg/issues/9855#issuecomment-1859147492
if ( $editor_context->post && 'mpbc_form' === $editor_context->post->post_type ) {
return array_merge(
array(
'core/paragraph',
'core/heading',
'core/group',
'core/columns',
'core/image',
'core/spacer',
'core/separator',
),
$this->form_blocks
);
}
$all_blocks = array();
$registered_blocks = \WP_Block_Type_Registry::get_instance()->get_all_registered();
foreach ( $registered_blocks as $registered_block ) {
$all_blocks[] = $registered_block->name;
}
$allowed_block_types = array_values( array_diff( $all_blocks, $this->form_blocks ) );
return $allowed_block_types;
}
}