<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName /** * Hustle_GHBlock_Abstract class * * @package Hustle */ /** * Class Hustle_GHBlock_Abstract * Extend this class to create new gutenberg block * * @since 1.0 Gutenberg Addon */ abstract class Hustle_GHBlock_Abstract { /** * Module's dependencies for rendering the preview * * @var array */ protected $dependencies = array(); /** * Type will be used as identifier * * @since 1.0 Gutenber Addon * * @var string */ protected $slug; /** * Get block type * * @since 1.0 Gutenber Addon * @return string */ final public function get_slug() { return $this->slug; } /** * Initialize block * * @since 1.0 Gutenberg Addon */ public function init() { // Register block. $this->register_block(); // Load block scripts. add_action( 'enqueue_block_editor_assets', array( $this, 'load_assets' ) ); } /** * Register block type callback * Shouldn't be overridden on block class * * @since 1.0 Gutenberg Addon */ public function register_block() { if ( function_exists( 'register_block_type' ) ) { register_block_type( 'hustle/' . $this->get_slug(), array( 'render_callback' => array( $this, 'render_block' ), ) ); } } /** * Render block on front-end * Should be overriden in block class * * @since 1.0 Gutenberg Addon * @param array $properties Block properties. * * @return string */ public function render_block( $properties = array() ) { return ''; } /** * Enqueue assets ( scritps / styles ) * Should be overriden in block class * * @since 1.0 Gutenberg Addon */ public function load_assets() { return true; } /** * Get modules list with shortcode * * @since 1.0 Gutenberg Addon * * @param string $type Module type. * * @return array $module_list List of modules with shortcode. */ protected function get_modules_by_type( $type ) { $modules = Hustle_Module_Collection::instance()->get_all( true, array( 'module_type' => $type ) ); $module_list = array( array( 'value' => '', 'label' => esc_html__( 'Choose module name', 'hustle' ), ), ); if ( is_array( $modules ) ) { foreach ( $modules as $module ) { $shortcode_id = $module->get_shortcode_id(); if ( empty( $shortcode_id ) ) { continue; } if ( ! $this->is_module_included( $module ) ) { continue; } $this->check_dependencies( $module ); $module_list[] = array( 'value' => esc_html( $shortcode_id ), 'label' => esc_html( $module->module_name ), ); } } return $module_list; } /** * Check for dependencies in each block type. * To be overridden as required. * * @param Hustle_Model $module Module to be checked. * @return void */ protected function check_dependencies( Hustle_Model $module ) {} /** * Check in every block type if this module should be available. * * @since 4.0.0 * * @param Hustle_Model $module Instance of the current module. * @return bool */ protected function is_module_included( Hustle_Model $module ) { return true; } }