Current File : /home/kelaby89/muzza.fit/wp-content/plugins/mp-timetable/classes/blocks/class-timetable-block.php
<?php

namespace mp_timetable\classes\blocks;

use Mp_Time_Table;
use mp_timetable\plugin_core\classes\Core;
use mp_timetable\plugin_core\classes\Shortcode;

class Timetable_Block {

	public function __construct() {

		global $pagenow;

        $dependencies = array( 'wp-i18n', 'wp-element', 'wp-blocks', 'wp-components', 'wp-api', 'wp-api-fetch', 'mptt-functions', 'mptt-event-object' );

        if ( $pagenow !== 'widgets.php' ) {
            array_push( $dependencies, 'wp-editor' );
        } else {
            array_push( $dependencies, 'wp-edit-widgets' );
        }

        // block-js
        wp_register_script(
            'mptt-blocks-js',
            Mp_Time_Table::get_plugin_url( 'media/js/blocks/dist/index.js' ),
            $dependencies,
            Core::get_instance()->get_version()
        );

		// style.css
		wp_register_style(
			'mptt-blocks',
			Mp_Time_Table::get_plugin_url( 'media/css/style.css' ),
			array(),
			Core::get_instance()->get_version()
		);
		
		// block-editor.css
		wp_register_style(
			'mptt-blocks-editor',
			Mp_Time_Table::get_plugin_url( 'media/css/block-editor.css' ),
			array('mptt-blocks'),
			Core::get_instance()->get_version()
		);


		// Internationalization

		/* 
		 * For custom translations
		 * https://developer.wordpress.org/reference/functions/wp_set_script_translations/
		 *
		 * By default, minified files should still be excluded, and if you want to explicitly include them, you can do so by adding --include=*.min.js to the command.
		 * https://github.com/wp-cli/i18n-command/pull/85
		 *
		 */
		 //wp_set_script_translations( 'mptt-blocks-js', 'mp-timetable', Mp_Time_Table::get_plugin_path() . 'languages' );


		wp_set_script_translations( 'mptt-blocks-js', 'mp-timetable' );

		register_block_type(
			'mp-timetable/timetable',
			array(
				'attributes' => array(
					'align' => array(
						'type' => 'string',
					),
					'col' => array(
						'type' => 'array',
						'items'   => [
							'type' => 'integer',
						],
					),
					'events' => array(
						'type' => 'array',
						'items'   => [
							'type' => 'integer',
						],
					),
					'event_categ' => array(
						'type' => 'array',
						'items'   => [
							'type' => 'integer',
						],
					),
					'increment' => array(
						'type' => 'string',
						'default' => '1',
					),
					'view' => array(
						'type' => 'string',
						'default' => 'dropdown_list',
					),
					'view_sort' => array(
						'type' => 'string',
						'default' => '',
					),
					'label' => array(
						'type' => 'string',
						'default' => __( "All Events", 'mp-timetable' ),
					),
					'hide_label' => array(
						'type' => 'string',
						'default' => '0',
					),
					'hide_hrs' => array(
						'type' => 'string',
						'default' => '0',
					),
					'hide_empty_rows' => array(
						'type' => 'string',
						'default' => '1',
					),
					'title' => array(
						'type' => 'string',
						'default' => '1',
					),
					'time' => array(
						'type' => 'string',
						'default' => '1',
					),
					'sub_title' => array(
						'type' => 'string',
						'default' => '0',
					),
					'description' => array(
						'type' => 'string',
						'default' => '1',
					),
					'user' => array(
						'type' => 'string',
						'default' => '0',
					),
					'group' => array(
						'type' => 'string',
						'default' => '0',
					),					
					'disable_event_url' => array(
						'type' => 'string',
						'default' => '0',
					),
					'text_align' => array(
						'type' => 'string',
						'default' => 'center',
					),
					'id' => array(
						'type' => 'string',
					),
					'row_height' => array(
						'type' => 'string',
						'default' => '45',
					),
					'font_size' => array(
						'type' => 'string',
					),            
					'responsive' => array(
						'type' => 'string',
						'default' => '1',
					),            
					'text_align_vertical' => array(
						'type' => 'string',
						'default' => 'default',
					),
					'custom_class' => array(
						'type' => 'string',
					),
					'table_layout' => array(
						'type' => 'string'
					),
				),
				'render_callback' => [ $this, 'render_timetable' ],
				'editor_style'    => 'mptt-blocks-editor',
				'editor_script'   => 'mptt-blocks-js',
			)
		);
	}

	private function show_shortcode($attributes) {
		foreach ($attributes as $key => $value) {
			// [] -> '1,2,3'
			if ( is_array($value) ) {
				$attributes[$key] = implode( ',', $value );
			}
			// 'sub_title' -> 'sub-title'
			if ($key == 'sub_title') {
				$attributes['sub-title'] = $attributes[$key];
				unset( $attributes[$key] );
			}
		}

		echo Shortcode::get_instance()->show_shortcode( $attributes );
	}

	public function render_timetable( $attributes ) {

		include_once( ABSPATH . 'wp-admin/includes/plugin.php' );

		$block_name = 'wp-block-timetable';

		$class = $block_name;
		if ( isset( $attributes['align'] ) ) {
			$class .= ' align' . $attributes['align'];
		}

		ob_start();
		?><div class="<?php echo esc_attr( $class ); ?>"><?php

			$this->show_shortcode($attributes);

		?></div><?php

		$result = ob_get_clean();

		return $result;
	}

}
Hello World !