* @link https://www.fireplugins.com * @copyright Copyright © 2022 FirePlugins All Rights Reserved * @license GNU GPLv3 or later */ namespace FireBox\Core; if (!defined('ABSPATH')) { exit; // Exit if accessed directly. } class Blocks { public function __construct() { if (!function_exists('register_block_type')) { return; } add_action('enqueue_block_editor_assets', [$this, 'blocks_assets']); // Register categories add_filter('block_categories_all', [$this, 'register_categories'], 10, 2); $this->register_blocks(); } /** * Adds the `FireBox` and `FirePlugins` custom Gutenberg block categories * to register all our blocks. * * @param array $categories * @param WP_Block_Editor_Context $context * * @return array */ public function register_categories($categories, $context) { // Add FireBox category $categories = array_merge( $categories, array( array( 'slug' => 'firebox', 'title' => firebox()->_('FB_PLUGIN_NAME') ), ) ); // Add FirePlugins category $categories = array_merge( $categories, array( array( 'slug' => 'fireplugins', 'title' => fpframework()->_('FPF_NAME') ), ) ); return $categories; } /** * Initialize all blocks * * @return void */ public function register_blocks() { $ds = DIRECTORY_SEPARATOR; $base_dir = implode($ds, [__DIR__, 'Blocks']); $files = array_diff(scandir($base_dir), ['.', '..', 'index.php', 'Block.php']); $namespace = '\FireBox\Core\Blocks\\'; foreach ($files as $item) { // Check if this is a single file and load it $file = implode($ds, [$base_dir, $item]); if (is_file($file)) { $this->registerBlock($namespace . rtrim($item, '.php')); continue; } // If that's not a file, we assume it is a directory of files $blocks = array_diff(scandir($file), ['.', '..', 'index.php']); foreach ($blocks as $key => $block_name) { $class = $namespace . $item . '\\' . rtrim($block_name, '.php'); $this->registerBlock($class); } } } /** * Registers the block. * * @param string $class * * @return void */ private function registerBlock($class) { $block = new $class(); $block->register(); } /** * Blocks assets. * * - Extends functionality of the button/image blocks by allowing to trigger a popup. * It also allows us to set custom CSS Classes to these blocks without triggering a popup. */ public function blocks_assets() { wp_register_script( 'fb-blocks-extend', FBOX_MEDIA_ADMIN_URL . 'js/fb_blocks_extend.js', ['wp-i18n', 'wp-blocks', 'wp-editor', 'wp-components', 'wp-api-fetch'], FBOX_VERSION, true ); wp_enqueue_script('fb-blocks-extend'); } }