Current File : /home/pacjaorg/www/copwordpres/wp-content/plugins/betterdocs/includes/Editors/BlockEditor/Block.php
<?php

namespace WPDeveloper\BetterDocs\Editors\BlockEditor;

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

use WPDeveloper\BetterDocs\Utils\Base;
use WPDeveloper\BetterDocs\Traits\EditorHelper;
use WPDeveloper\BetterDocs\Utils\Enqueue;

/**
 * Description
 *
 * @method void register_scripts()
 * @property-read mixed $attributes
 *
 * @since 2.5.0
 */
abstract class Block extends Base {
    use EditorHelper;

    public $is_pro = false;

    /**
     * Enqueue
     * @var Enqueue
     */
    protected $assets_manager = null;

    protected $dir = '';

    protected $editor_scripts = ['betterdocs-blocks-editor'];

    protected $editor_styles = ['betterdocs-blocks-editor'];

    protected $frontend_styles  = [];
    protected $frontend_scripts = [];

    /**
     * unique name of block
     * @return string
     */
    abstract public function get_name();

    /**
     * Block can be enabled or not.
     *
     * Override if needed.
     *
     * @return bool
     */
    public function can_enable() {
        return true;
    }

    public function path( $name = '' ) {
        if ( empty( $name ) ) {
            $name = $this->get_name();
        }

        return BETTERDOCS_BLOCKS_DIRECTORY . $name;
    }

    public function register_block_type( $name, ...$args ) {
        return register_block_type(
            apply_filters_ref_array( 'betterdocs.blocks.path', [ $this->path( $name ), $name, &$this ] ),
            ...$args,
        );
    }

    public function load_frontend_styles() {
        if ( empty( $this->frontend_styles ) ) {
            return;
        }

        foreach ( $this->frontend_styles as $handle ) {
            wp_enqueue_style( $handle );
        }
    }

    public function load_frontend_scripts() {
        if ( empty( $this->frontend_scripts ) ) {
            return;
        }

        foreach ( $this->frontend_scripts as $handle ) {
            wp_enqueue_script( $handle );
        }
    }

    public function load_scripts() {
        $this->load_frontend_styles();
        $this->load_frontend_scripts();
    }

    public function string_to_array( $data = [], $key = 'value' ) {
        $_return_val = [];

        if ( is_string( $data ) && ! empty( $data ) ) {
            $_return_val = json_decode( $data, true );
            $_return_val = array_map( function ( $item ) use ( &$key ) {
                return $item[$key];
            }, $_return_val );
        }

        return $_return_val;
    }

    public function register( $assets_manager ) {
        $this->assets_manager = $assets_manager;

        $_args = [];

        if ( method_exists( $this, 'register_scripts' ) ) {
            $this->register_scripts();
        }

        if ( method_exists( $this, 'render_callback' ) ) {
            $_args['render_callback'] = function ( $attributes, $content ) {
                if ( ! is_admin() ) {
                    $this->load_scripts();
                }
                return $this->render_callback( $attributes, $content );
            };
        }

        if (  ( ! empty( $this->frontend_scripts ) || ! empty( $this->frontend_styles ) ) && ! method_exists( $this, 'render_callback' ) ) {
            $_args['render_callback'] = function ( $attributes, $content ) {
                if ( ! is_admin() ) {
                    $this->load_scripts();
                }
                return $content;
            };
        }

        $_args['editor_script']         = $this->editor_scripts;
        $_args['editor_script_handles'] = $this->editor_scripts;

        $_args['editor_style']         = $this->editor_styles;
        $_args['editor_style_handles'] = $this->editor_styles;

        if ( property_exists( $this, 'attributes' ) ) {
            $_args['attributes'] = $this->attributes;
        }

        return $this->register_block_type( $this->get_name(), $_args );
    }

    public function get_default_attributes() {
        return [];
    }

    abstract public function render( $attributes, $content );

    public function render_callback( $attributes, $content ) {
        $this->attributes = wp_parse_args( $attributes, $this->get_default_attributes() );
        $this->attributes = $this->remove_deprecated_attributes( $this->attributes, false, false );

        do_action_ref_array( 'betterdocs_before_render', [ & $this, 'blocks'] );

        ob_start();
        $this->render( $this->attributes, $content );
        $content = ob_get_clean();

        do_action_ref_array( 'betterdocs_after_render', [ & $this, 'blocks'] );

        return $content;
    }

    public function normalize_attributes( $attributes, $mixed_settings = [] ) {
        $mixed_settings = wp_parse_args( [
            'prefix'                  => 'count_prefix',
            'suffix'                  => 'count_suffix',
            'suffixSingular'          => 'count_suffix_singular',
            'showIcon'                => 'show_icon',
            'showTitle'               => 'show_title',
            'titleTag'                => 'title_tag',
            'showCount'               => 'show_count',
            'showButton'              => 'show_button',
            'showButtonIcon'          => 'show_button_icon',
            'buttonIconPosition'      => 'button_icon_position',
            'buttonText'              => 'button_text',
            'buttonIcon'              => 'button_icon',
            'showList'                => 'show_list',
            'showHeader'              => 'show_header',
            'postsPerPage'            => 'post_per_page',
            'postsOrderBy'            => 'post_orderby',
            'postsOrder'              => 'post_order',
            'enableNestedSubcategory' => 'nested_subcategory'
        ], $mixed_settings );

        $_return_value = [];

        foreach ( $mixed_settings as $key => $old_key ) {
            if ( isset( $attributes[$key] ) ) {
                $_return_value[$old_key] = $attributes[$key];
                unset( $attributes[$key] );
            }
        }

        return array_merge( $attributes, $_return_value );
    }
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!