826 lines
26 KiB
PHP
826 lines
26 KiB
PHP
<?php
|
|
/**
|
|
* General actions and filters.
|
|
*
|
|
* @package GenerateBlocks
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
/**
|
|
* Get an array of string handles for the package styles.
|
|
*
|
|
* @return array An array of string handles.
|
|
*/
|
|
function generateblocks_pro_get_package_style_deps() {
|
|
return [ 'generateblocks-pro-packages' ];
|
|
}
|
|
|
|
add_action( 'admin_enqueue_scripts', 'generateblocks_pro_packages_scripts', 1 );
|
|
/**
|
|
* Register package stylesheets.
|
|
* Update generateblocks_pro_get_package_style_deps above when adding new styles.
|
|
*/
|
|
function generateblocks_pro_packages_scripts() {
|
|
$component_asset_info = generateblocks_pro_get_enqueue_assets( 'packages' );
|
|
wp_enqueue_style(
|
|
'generateblocks-pro-packages',
|
|
GENERATEBLOCKS_PRO_DIR_URL . 'dist/packages.css',
|
|
'',
|
|
$component_asset_info['version']
|
|
);
|
|
|
|
$edge22_packages = [
|
|
'block-styles',
|
|
'components',
|
|
'styles-builder',
|
|
];
|
|
|
|
foreach ( $edge22_packages as $name ) {
|
|
$package_asset_info = generateblocks_pro_get_enqueue_assets( "{$name}-imported" );
|
|
$script_asset_info = generateblocks_pro_get_enqueue_assets( $name );
|
|
|
|
wp_register_script(
|
|
"generateblocks-pro-$name",
|
|
GENERATEBLOCKS_PRO_DIR_URL . 'dist/' . $name . '.js',
|
|
$package_asset_info['dependencies'],
|
|
$script_asset_info['version'],
|
|
true
|
|
);
|
|
|
|
wp_register_style(
|
|
"generateblocks-pro-$name",
|
|
false,
|
|
[ 'generateblocks-pro-packages' ],
|
|
$component_asset_info['version']
|
|
);
|
|
}
|
|
|
|
wp_register_style(
|
|
'generateblocks-pro-dashboard-table',
|
|
GENERATEBLOCKS_PRO_DIR_URL . 'dist/dashboard-table.css',
|
|
[ 'wp-components' ],
|
|
filemtime( GENERATEBLOCKS_PRO_DIR . 'dist/dashboard-table.css' )
|
|
);
|
|
}
|
|
|
|
add_action( 'enqueue_block_editor_assets', 'generateblocks_pro_do_block_editor_assets', 9 );
|
|
/**
|
|
* Enqueue Gutenberg block assets for both frontend + backend.
|
|
*
|
|
* Assets enqueued:
|
|
* 1. blocks.style.build.css - Frontend + Backend.
|
|
* 2. blocks.build.js - Backend.
|
|
* 3. blocks.editor.build.css - Backend.
|
|
*
|
|
* @uses {wp-blocks} for block type registration & related functions.
|
|
* @uses {wp-element} for WP Element abstraction — structure of blocks.
|
|
* @uses {wp-i18n} to internationalize the block's text.
|
|
* @uses {wp-editor} for WP editor styles.
|
|
* @since 1.0.0
|
|
*/
|
|
function generateblocks_pro_do_block_editor_assets() {
|
|
global $pagenow;
|
|
|
|
$deps = array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor', 'wp-html-entities' );
|
|
|
|
if ( 'widgets.php' === $pagenow ) {
|
|
unset( $deps[3] );
|
|
}
|
|
|
|
$assets = generateblocks_pro_get_enqueue_assets(
|
|
'blocks',
|
|
[
|
|
'dependencies' => $deps,
|
|
'version' => filemtime( GENERATEBLOCKS_PRO_DIR . 'dist/blocks.js' ),
|
|
]
|
|
);
|
|
|
|
wp_enqueue_script(
|
|
'generateblocks-pro',
|
|
GENERATEBLOCKS_PRO_DIR_URL . 'dist/blocks.js',
|
|
$assets['dependencies'],
|
|
$assets['version'],
|
|
true
|
|
);
|
|
|
|
wp_set_script_translations( 'generateblocks-pro', 'generateblocks-pro', GENERATEBLOCKS_PRO_DIR . 'languages' );
|
|
|
|
$admin_settings = wp_parse_args(
|
|
get_option( 'generateblocks_admin', array() ),
|
|
generateblocks_pro_get_admin_option_defaults()
|
|
);
|
|
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
|
|
$post_type = $screen && ! empty( $screen->post_type ) ? $screen->post_type : get_post_type();
|
|
|
|
wp_localize_script(
|
|
'generateblocks-pro',
|
|
'generateBlocksPro',
|
|
array(
|
|
'templatesURL' => admin_url( 'edit.php?post_type=gblocks_templates' ),
|
|
'svgIcons' => generateblocks_pro_editor_icon_list(),
|
|
'isGlobalStyle' => 'gblocks_global_style' === get_post_type(),
|
|
'globalStyleIds' => generateblocks_pro_get_global_style_ids(),
|
|
'globalStyleAttrs' => generateblocks_pro_get_global_style_attrs(),
|
|
'hasRgbaSupport' => version_compare( GENERATEBLOCKS_VERSION, '1.4.0-alpha.1', '>=' ),
|
|
'hasColorGroups' => version_compare( GENERATEBLOCKS_VERSION, '1.5.0-alpha.1', '>=' ),
|
|
'enableRemoteTemplates' => $admin_settings['enable_remote_templates'],
|
|
'enableLocalTemplates' => $admin_settings['enable_local_templates'],
|
|
'isACFActive' => class_exists( 'ACF' ),
|
|
'generateblocksVersion' => GENERATEBLOCKS_VERSION,
|
|
'generateblocksProVersion' => GENERATEBLOCKS_PRO_VERSION,
|
|
'blockStyles' => function_exists( 'generateblocks_get_default_styles' ) ? generateblocks_get_default_styles() : array(),
|
|
'showIncompatibleGlobalStyles' => apply_filters( 'generateblocks_show_incompatible_global_styles', false ),
|
|
'useLegacyPatternLibrary' => generateblocks_pro_has_legacy_patterns(),
|
|
'adminUrl' => admin_url(),
|
|
'canManageStyles' => GenerateBlocks_Pro_Styles::can_manage_styles(),
|
|
'canManageForms' => class_exists( 'GenerateBlocks_Pro_Form_Post_Type' )
|
|
&& GenerateBlocks_Pro_Form_Post_Type::current_user_can( 'manage' ),
|
|
'canImportPatternForms' => generateblocks_pro_can_import_pattern_forms(),
|
|
'hasFormsEnabled' => generateblocks_pro_forms_enabled(),
|
|
'formControlHtmlAttributes' => class_exists( 'GenerateBlocks_Block_Form_Field_Control' )
|
|
? GenerateBlocks_Block_Form_Field_Control::get_allowed_html_attribute_names()
|
|
: array(),
|
|
'currentPostType' => $post_type ? (string) $post_type : '',
|
|
'mediaQueries' => function_exists( 'generateblocks_get_media_queries' )
|
|
? generateblocks_get_media_queries()
|
|
: [],
|
|
)
|
|
);
|
|
|
|
generateblocks_pro_packages_scripts();
|
|
|
|
wp_enqueue_style(
|
|
'generateblocks-pro',
|
|
GENERATEBLOCKS_PRO_DIR_URL . 'dist/blocks.css',
|
|
array_merge( [ 'wp-edit-blocks' ], generateblocks_pro_get_package_style_deps() ),
|
|
filemtime( GENERATEBLOCKS_PRO_DIR . 'dist/blocks.css' )
|
|
);
|
|
|
|
$editor_assets = generateblocks_pro_get_enqueue_assets( 'editor' );
|
|
|
|
wp_enqueue_script(
|
|
'generateblocks-pro-editor',
|
|
GENERATEBLOCKS_PRO_DIR_URL . 'dist/editor.js',
|
|
$editor_assets['dependencies'],
|
|
$editor_assets['version'],
|
|
true
|
|
);
|
|
|
|
wp_enqueue_style(
|
|
'generateblocks-pro-editor',
|
|
GENERATEBLOCKS_PRO_DIR_URL . 'dist/editor.css',
|
|
array_merge( [ 'wp-edit-blocks' ], generateblocks_pro_get_package_style_deps() ),
|
|
filemtime( GENERATEBLOCKS_PRO_DIR . 'dist/editor.css' )
|
|
);
|
|
|
|
wp_localize_script(
|
|
'generateblocks-pro-editor',
|
|
'generateblocksProEditor',
|
|
[
|
|
'hasOverlaysEnabled' => generateblocks_pro_overlays_enabled(),
|
|
]
|
|
);
|
|
|
|
wp_localize_script(
|
|
'generateblocks-pro-classic-menu-editor-script',
|
|
'generateblocksBlockClassicMenu',
|
|
[
|
|
'hasMenuSupport' => get_theme_support( 'menus' ),
|
|
'menuAdminUrl' => admin_url( 'nav-menus.php' ),
|
|
'navMenus' => wp_get_nav_menus(),
|
|
]
|
|
);
|
|
}
|
|
|
|
add_filter( 'generateblocks_attr_container', 'generateblocks_pro_set_container_attributes', 10, 2 );
|
|
/**
|
|
* Set the attributes for our main Container wrapper.
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $attributes The existing attributes.
|
|
* @param array $settings The settings for the block.
|
|
*/
|
|
function generateblocks_pro_set_container_attributes( $attributes, $settings ) {
|
|
if ( '' !== $settings['url'] && 'wrapper' === $settings['linkType'] ) {
|
|
$attributes['href'] = esc_url( $settings['url'] );
|
|
|
|
$rel_attributes = array();
|
|
|
|
if ( $settings['relNoFollow'] ) {
|
|
$rel_attributes[] = 'nofollow';
|
|
}
|
|
|
|
if ( $settings['target'] ) {
|
|
$rel_attributes[] = 'noopener';
|
|
$rel_attributes[] = 'noreferrer';
|
|
$attributes['target'] = '_blank';
|
|
}
|
|
|
|
if ( $settings['relSponsored'] ) {
|
|
$rel_attributes[] = 'sponsored';
|
|
}
|
|
|
|
if ( ! empty( $rel_attributes ) ) {
|
|
$attributes['rel'] = implode( ' ', $rel_attributes );
|
|
}
|
|
|
|
if ( $settings['hiddenLinkAriaLabel'] ) {
|
|
$attributes['aria-label'] = esc_attr( $settings['hiddenLinkAriaLabel'] );
|
|
}
|
|
}
|
|
|
|
$attributes = generateblocks_pro_with_custom_attributes( $attributes, $settings );
|
|
|
|
if ( ! empty( $settings['useGlobalStyle'] ) && ! empty( $settings['globalStyleId'] ) ) {
|
|
$attributes['class'] .= ' gb-container-' . esc_attr( $settings['globalStyleId'] );
|
|
}
|
|
|
|
return $attributes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_attr_grid-item', 'generateblocks_pro_set_grid_container_attributes', 10, 2 );
|
|
/**
|
|
* Set the attributes for our grid item wrapper.
|
|
*
|
|
* @since 1.1.0
|
|
* @param array $attributes The existing attributes.
|
|
* @param array $settings The settings for the block.
|
|
*/
|
|
function generateblocks_pro_set_grid_container_attributes( $attributes, $settings ) {
|
|
if ( ! empty( $settings['useGlobalStyle'] ) && ! empty( $settings['globalStyleId'] ) ) {
|
|
$attributes['class'] .= ' gb-grid-column-' . esc_attr( $settings['globalStyleId'] );
|
|
}
|
|
|
|
return $attributes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_attr_grid-wrapper', 'generateblocks_pro_set_grid_attributes', 10, 2 );
|
|
/**
|
|
* Set the attributes for our grid wrapper.
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $attributes The existing attributes.
|
|
* @param array $settings The settings for the block.
|
|
*/
|
|
function generateblocks_pro_set_grid_attributes( $attributes, $settings ) {
|
|
if ( ! empty( $settings['useGlobalStyle'] ) && ! empty( $settings['globalStyleId'] ) ) {
|
|
$attributes['class'] .= ' gb-grid-wrapper-' . esc_attr( $settings['globalStyleId'] );
|
|
}
|
|
|
|
$attributes = generateblocks_pro_with_custom_attributes( $attributes, $settings );
|
|
|
|
return $attributes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_attr_button-container', 'generateblocks_pro_set_button_container_attributes', 10, 2 );
|
|
/**
|
|
* Set the attributes for our grid wrapper.
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $attributes The existing attributes.
|
|
* @param array $settings The settings for the block.
|
|
*/
|
|
function generateblocks_pro_set_button_container_attributes( $attributes, $settings ) {
|
|
if ( ! empty( $settings['useGlobalStyle'] ) && ! empty( $settings['globalStyleId'] ) ) {
|
|
$attributes['class'] .= ' gb-button-wrapper-' . esc_attr( $settings['globalStyleId'] );
|
|
}
|
|
|
|
$attributes = generateblocks_pro_with_custom_attributes( $attributes, $settings );
|
|
|
|
return $attributes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_attr_image', 'generateblocks_pro_set_image_attributes', 10, 2 );
|
|
/**
|
|
* Set the attributes for our dynamic image block.
|
|
*
|
|
* @since 1.2.0
|
|
* @param array $attributes The existing attributes.
|
|
* @param array $settings The settings for the block.
|
|
*/
|
|
function generateblocks_pro_set_image_attributes( $attributes, $settings ) {
|
|
if ( ! empty( $settings['useGlobalStyle'] ) && ! empty( $settings['globalStyleId'] ) ) {
|
|
$attributes['class'] .= ' gb-image-' . esc_attr( $settings['globalStyleId'] );
|
|
}
|
|
|
|
$attributes = generateblocks_pro_with_custom_attributes( $attributes, $settings );
|
|
|
|
return $attributes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_attr_dynamic-headline', 'generateblocks_pro_set_headline_attributes', 10, 2 );
|
|
/**
|
|
* Set the attributes for our dynamic headlines.
|
|
*
|
|
* @since 1.2.0
|
|
* @param array $attributes The existing attributes.
|
|
* @param array $settings The settings for the block.
|
|
*/
|
|
function generateblocks_pro_set_headline_attributes( $attributes, $settings ) {
|
|
if ( ! empty( $settings['useGlobalStyle'] ) && ! empty( $settings['globalStyleId'] ) ) {
|
|
$attributes['class'] .= ' gb-headline-' . esc_attr( $settings['globalStyleId'] );
|
|
}
|
|
|
|
$attributes = generateblocks_pro_with_custom_attributes( $attributes, $settings );
|
|
|
|
return $attributes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_attr_dynamic-button', 'generateblocks_pro_set_button_attributes', 10, 2 );
|
|
/**
|
|
* Set the attributes for our dynamic buttons.
|
|
*
|
|
* @since 1.2.0
|
|
* @param array $attributes The existing attributes.
|
|
* @param array $settings The settings for the block.
|
|
*/
|
|
function generateblocks_pro_set_button_attributes( $attributes, $settings ) {
|
|
if ( ! empty( $settings['useGlobalStyle'] ) && ! empty( $settings['globalStyleId'] ) ) {
|
|
$attributes['class'] .= ' gb-button-' . esc_attr( $settings['globalStyleId'] );
|
|
}
|
|
|
|
$attributes = generateblocks_pro_with_custom_attributes( $attributes, $settings );
|
|
|
|
return $attributes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_after_container_open', 'generateblocks_pro_add_container_link', 10, 2 );
|
|
/**
|
|
* Add a hidden container link to the Container.
|
|
*
|
|
* @since 1.0.0
|
|
* @param string $output Block output.
|
|
* @param array $attributes The block attributes.
|
|
*/
|
|
function generateblocks_pro_add_container_link( $output, $attributes ) {
|
|
$defaults = generateblocks_get_block_defaults();
|
|
|
|
$settings = wp_parse_args(
|
|
$attributes,
|
|
$defaults['container']
|
|
);
|
|
|
|
if ( '' !== $settings['url'] && 'hidden-link' === $settings['linkType'] ) {
|
|
$rel_attributes = array();
|
|
|
|
if ( $settings['relNoFollow'] ) {
|
|
$rel_attributes[] = 'nofollow';
|
|
}
|
|
|
|
if ( $settings['relSponsored'] ) {
|
|
$rel_attributes[] = 'sponsored';
|
|
}
|
|
|
|
if ( ! empty( $rel_attributes ) ) {
|
|
$attributes['rel'] = implode( ' ', $rel_attributes );
|
|
}
|
|
|
|
if ( $settings['target'] ) {
|
|
$rel_attributes[] = 'noopener';
|
|
$rel_attributes[] = 'noreferrer';
|
|
}
|
|
|
|
$output .= sprintf(
|
|
'<a %s></a>',
|
|
generateblocks_attr(
|
|
'container-link',
|
|
array(
|
|
'class' => 'gb-container-link',
|
|
'href' => '' !== $settings['url'] ? esc_url( $settings['url'] ) : '',
|
|
'aria-label' => $settings['hiddenLinkAriaLabel'] ? esc_attr( $settings['hiddenLinkAriaLabel'] ) : '',
|
|
'rel' => ! empty( $rel_attributes ) ? implode( ' ', $rel_attributes ) : '',
|
|
'target' => $settings['target'] ? '_blank' : '',
|
|
),
|
|
$settings
|
|
)
|
|
);
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
add_filter( 'generateblocks_svg_shapes', 'generateblocks_pro_add_custom_svg_shapes' );
|
|
/**
|
|
* Add custom SVG shapes from our library.
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $shapes Existing shapes.
|
|
*/
|
|
function generateblocks_pro_add_custom_svg_shapes( $shapes ) {
|
|
$custom_shapes = get_option( 'generateblocks_svg_shapes', array() );
|
|
$new_shapes = array();
|
|
|
|
if ( ! empty( $custom_shapes ) ) {
|
|
// Format our custom shapes to fit our shapes structure.
|
|
foreach ( $custom_shapes as $index => $data ) {
|
|
$new_shapes[ esc_attr( $data['group_id'] ) ] = array(
|
|
'group' => esc_html( $data['group'] ),
|
|
'svgs' => array(),
|
|
);
|
|
|
|
if ( isset( $data['shapes'] ) ) {
|
|
foreach ( (array) $data['shapes'] as $shape_index => $shape ) {
|
|
$new_shapes[ esc_attr( $data['group_id'] ) ]['svgs'][ $shape['id'] ] = array(
|
|
'label' => $shape['name'],
|
|
'icon' => $shape['shape'],
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$shapes = array_merge( $new_shapes, $shapes );
|
|
|
|
return $shapes;
|
|
}
|
|
|
|
add_filter( 'generateblocks_container_tagname', 'generateblocks_pro_set_container_tagname', 10, 2 );
|
|
/**
|
|
* Set the Container block tag name.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $tagname Current tag name.
|
|
* @param array $attributes Current attributes.
|
|
*/
|
|
function generateblocks_pro_set_container_tagname( $tagname, $attributes ) {
|
|
$defaults = generateblocks_get_block_defaults();
|
|
|
|
$settings = wp_parse_args(
|
|
$attributes,
|
|
$defaults['container']
|
|
);
|
|
|
|
if ( ! empty( $settings['url'] ) && 'wrapper' === $settings['linkType'] ) {
|
|
$tagname = 'a';
|
|
}
|
|
|
|
return $tagname;
|
|
}
|
|
|
|
add_filter( 'register_block_type_args', 'generateblocks_pro_filter_block_type_args', 10, 2 );
|
|
/**
|
|
* Filter our register_block_type() args.
|
|
*
|
|
* @param array $args Existing args.
|
|
* @param string $name The block name.
|
|
*/
|
|
function generateblocks_pro_filter_block_type_args( $args, $name ) {
|
|
if ( 'generateblocks/container' === $name ) {
|
|
if ( ! empty( $args['editor_script_handles'] ) ) {
|
|
$args['editor_script_handles'] = array_merge( $args['editor_script_handles'], [ 'generateblocks-pro' ] );
|
|
$args['editor_style_handles'] = array_merge( $args['editor_style_handles'], [ 'generateblocks-pro' ] );
|
|
}
|
|
}
|
|
|
|
return $args;
|
|
}
|
|
|
|
add_filter( 'generateblocks_modify_block_data', 'generateblocks_pro_add_block_data', 10, 2 );
|
|
/**
|
|
* Add our blocks to the dataset.
|
|
*
|
|
* @param array $data The block data.
|
|
* @param array $block The block.
|
|
*/
|
|
function generateblocks_pro_add_block_data( $data, $block ) {
|
|
$block_name = $block['blockName'] ?? '';
|
|
|
|
if ( ! $block_name ) {
|
|
return $data;
|
|
}
|
|
|
|
if ( 'generateblocks-pro/accordion' === $block_name ) {
|
|
$data['accordion'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/accordion-item' === $block_name ) {
|
|
$data['accordion-item'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/accordion-toggle' === $block_name ) {
|
|
$data['accordion-toggle'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/accordion-toggle-icon' === $block_name ) {
|
|
$data['accordion-toggle-icon'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/tabs' === $block_name ) {
|
|
$data['tabs'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/tabs-menu' === $block_name ) {
|
|
$data['tabs-menu'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/tab-menu-item' === $block_name ) {
|
|
$data['tab-menu-item'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/tab-items' === $block_name ) {
|
|
$data['tab-items'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/tab-item' === $block_name ) {
|
|
$data['tab-item'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/navigation' === $block_name ) {
|
|
$data['navigation'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/classic-menu' === $block_name ) {
|
|
$data['classic-menu'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/classic-menu-item' === $block_name ) {
|
|
$data['classic-menu-item'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/classic-sub-menu' === $block_name ) {
|
|
$data['classic-sub-menu'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/menu-container' === $block_name ) {
|
|
$data['menu-container'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/menu-toggle' === $block_name ) {
|
|
$data['menu-toggle'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/site-header' === $block_name ) {
|
|
$data['site-header'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/carousel' === $block_name ) {
|
|
$data['carousel'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/carousel-items' === $block_name ) {
|
|
$data['carousel-items'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/carousel-item' === $block_name ) {
|
|
$data['carousel-item'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/carousel-pagination' === $block_name ) {
|
|
$data['carousel-pagination'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/carousel-control' === $block_name ) {
|
|
$data['carousel-control'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/form' === $block_name && generateblocks_pro_forms_enabled() ) {
|
|
$data['form'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/form-field' === $block_name && generateblocks_pro_forms_enabled() ) {
|
|
$data['form-field'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/form-field-label' === $block_name && generateblocks_pro_forms_enabled() ) {
|
|
$data['form-field-label'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
if ( 'generateblocks-pro/form-field-control' === $block_name && generateblocks_pro_forms_enabled() ) {
|
|
$data['form-field-control'][] = $block['attrs'] ?? [];
|
|
}
|
|
|
|
// Follow a form-render reference into the referenced gblocks_form post so
|
|
// CSS pre-generation on the host page picks up the form field blocks that
|
|
// live inside. Mirrors the core/block (reusable block) recursion in
|
|
// generateblocks_get_block_data(). Tracks processed form IDs to avoid
|
|
// re-parsing the same form twice on a page with multiple references.
|
|
if (
|
|
'generateblocks-pro/form-render' === $block_name
|
|
&& generateblocks_pro_forms_enabled()
|
|
&& function_exists( 'generateblocks_get_block_data' )
|
|
&& class_exists( 'GenerateBlocks_Pro_Form_Post_Type' )
|
|
) {
|
|
$form_id = isset( $block['attrs']['formId'] ) ? absint( $block['attrs']['formId'] ) : 0;
|
|
|
|
if ( $form_id && ( empty( $data['formIds'] ) || ! in_array( $form_id, (array) $data['formIds'], true ) ) ) {
|
|
$form = get_post( $form_id );
|
|
|
|
if (
|
|
$form
|
|
&& GenerateBlocks_Pro_Form_Post_Type::POST_TYPE === $form->post_type
|
|
&& 'publish' === $form->post_status
|
|
) {
|
|
$form_blocks = parse_blocks( $form->post_content );
|
|
|
|
if ( ! empty( $form_blocks ) ) {
|
|
$data['formIds'][] = $form_id;
|
|
$data = generateblocks_get_block_data( $form_blocks, $data );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
add_filter( 'generateblocks_dynamic_css_blocks', 'generateblocks_pro_add_dynamic_css_blocks' );
|
|
/**
|
|
* Add our dynamic CSS blocks.
|
|
*
|
|
* @param array $blocks Existing blocks.
|
|
*/
|
|
function generateblocks_pro_add_dynamic_css_blocks( $blocks ) {
|
|
$blocks['accordion'] = 'GenerateBlocks_Block_Accordion';
|
|
$blocks['accordion-item'] = 'GenerateBlocks_Block_Accordion_Item';
|
|
$blocks['accordion-toggle'] = 'GenerateBlocks_Block_Accordion_Toggle';
|
|
$blocks['accordion-toggle-icon'] = 'GenerateBlocks_Block_Accordion_Toggle_Icon';
|
|
$blocks['tabs'] = 'GenerateBlocks_Block_Tabs';
|
|
$blocks['tabs-menu'] = 'GenerateBlocks_Block_Tabs_Menu';
|
|
$blocks['tab-menu-item'] = 'GenerateBlocks_Block_Tab_Menu_Item';
|
|
$blocks['tab-items'] = 'GenerateBlocks_Block_Tab_Items';
|
|
$blocks['tab-item'] = 'GenerateBlocks_Block_Tab_Item';
|
|
$blocks['navigation'] = 'GenerateBlocks_Block_Navigation';
|
|
$blocks['classic-menu'] = 'GenerateBlocks_Block_Classic_Menu';
|
|
$blocks['classic-menu-item'] = 'GenerateBlocks_Block_Classic_Menu_Item';
|
|
$blocks['classic-sub-menu'] = 'GenerateBlocks_Block_Classic_Sub_Menu';
|
|
$blocks['menu-container'] = 'GenerateBlocks_Block_Menu_Container';
|
|
$blocks['menu-toggle'] = 'GenerateBlocks_Block_Menu_Toggle';
|
|
$blocks['site-header'] = 'GenerateBlocks_Block_Site_Header';
|
|
$blocks['carousel'] = 'GenerateBlocks_Block_Carousel';
|
|
$blocks['carousel-items'] = 'GenerateBlocks_Block_Carousel_Items';
|
|
$blocks['carousel-item'] = 'GenerateBlocks_Block_Carousel_Item';
|
|
$blocks['carousel-pagination'] = 'GenerateBlocks_Block_Carousel_Pagination';
|
|
$blocks['carousel-control'] = 'GenerateBlocks_Block_Carousel_Control';
|
|
|
|
if ( generateblocks_pro_forms_enabled() ) {
|
|
$blocks['form'] = 'GenerateBlocks_Block_Form';
|
|
$blocks['form-field'] = 'GenerateBlocks_Block_Form_Field';
|
|
$blocks['form-field-label'] = 'GenerateBlocks_Block_Form_Field_Label';
|
|
$blocks['form-field-control'] = 'GenerateBlocks_Block_Form_Field_Control';
|
|
}
|
|
|
|
return $blocks;
|
|
}
|
|
|
|
add_filter( 'generateblocks_dynamic_tags_allowed_blocks', 'generateblocks_pro_add_dynamic_tags_allowed_blocks' );
|
|
/**
|
|
* Add our dynamic tags allowed blocks.
|
|
*
|
|
* @param array $blocks Existing blocks.
|
|
*/
|
|
function generateblocks_pro_add_dynamic_tags_allowed_blocks( $blocks ) {
|
|
$pro_blocks = [
|
|
'generateblocks-pro/accordion',
|
|
'generateblocks-pro/accordion-content',
|
|
'generateblocks-pro/accordion-item',
|
|
'generateblocks-pro/accordion-toggle',
|
|
'generateblocks-pro/accordion-toggle-icon',
|
|
'generateblocks-pro/tabs',
|
|
'generateblocks-pro/tabs-menu',
|
|
'generateblocks-pro/tab-menu-item',
|
|
'generateblocks-pro/tab-items',
|
|
'generateblocks-pro/tab-item',
|
|
];
|
|
|
|
return array_merge( $blocks, $pro_blocks );
|
|
}
|
|
|
|
add_action( 'enqueue_block_editor_assets', 'generateblocks_pro_set_global_styles_permission', 0 );
|
|
add_action( 'admin_enqueue_scripts', 'generateblocks_pro_set_global_styles_permission', 0 );
|
|
/**
|
|
* Output permissions for use in the editor.
|
|
*
|
|
* @return void
|
|
*/
|
|
function generateblocks_pro_set_global_styles_permission() {
|
|
if ( 'admin_enqueue_scripts' === current_filter() ) {
|
|
$screen = get_current_screen();
|
|
|
|
if ( 'generateblocks_page_generateblocks-styles' !== $screen->id ) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
$permissions = [
|
|
'canManageStyles' => GenerateBlocks_Pro_Styles::can_manage_styles(),
|
|
];
|
|
|
|
$permission_object = wp_json_encode( $permissions );
|
|
wp_register_script( 'generateblocks-global-styles-permissions', '', [], '1.0', false );
|
|
wp_enqueue_script( 'generateblocks-global-styles-permissions' );
|
|
$script = sprintf(
|
|
'var gbGlobalStylePermissions = %s;
|
|
Object.freeze( gbGlobalStylePermissions );',
|
|
$permission_object
|
|
);
|
|
wp_add_inline_script( 'generateblocks-global-styles-permissions', $script );
|
|
}
|
|
|
|
add_action( 'enqueue_block_editor_assets', 'generateblocks_pro_set_conditions_permission', 0 );
|
|
add_action( 'admin_enqueue_scripts', 'generateblocks_pro_set_conditions_permission', 0 );
|
|
/**
|
|
* Output conditions permissions for use in the editor.
|
|
*
|
|
* @since 2.4.0
|
|
* @return void
|
|
*/
|
|
function generateblocks_pro_set_conditions_permission() {
|
|
if ( 'admin_enqueue_scripts' === current_filter() ) {
|
|
$screen = get_current_screen();
|
|
|
|
// Load on conditions dashboard and post editor screens.
|
|
if ( ! $screen || ( 'generateblocks_page_generateblocks-conditions' !== $screen->id && 'post' !== $screen->base ) ) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
$permissions = [
|
|
'canUseConditions' => GenerateBlocks_Pro_Conditions::current_user_can_use_conditions( 'use' ),
|
|
'canManageConditions' => GenerateBlocks_Pro_Conditions::current_user_can_use_conditions( 'manage' ),
|
|
];
|
|
|
|
$permission_object = wp_json_encode( $permissions );
|
|
wp_register_script( 'generateblocks-conditions-permissions', '', [], '1.0', false );
|
|
wp_enqueue_script( 'generateblocks-conditions-permissions' );
|
|
$script = sprintf(
|
|
'var gbConditionsPermissions = %s;
|
|
Object.freeze( gbConditionsPermissions );',
|
|
$permission_object
|
|
);
|
|
wp_add_inline_script( 'generateblocks-conditions-permissions', $script );
|
|
}
|
|
|
|
add_action( 'enqueue_block_editor_assets', 'generateblocks_pro_set_overlays_permission', 0 );
|
|
add_action( 'admin_enqueue_scripts', 'generateblocks_pro_set_overlays_permission', 0 );
|
|
/**
|
|
* Output overlays permissions for use in the editor.
|
|
*
|
|
* @since 2.4.0
|
|
* @return void
|
|
*/
|
|
function generateblocks_pro_set_overlays_permission() {
|
|
if ( 'admin_enqueue_scripts' === current_filter() ) {
|
|
$screen = get_current_screen();
|
|
|
|
// Load on overlays dashboard and post editor screens.
|
|
if ( ! $screen || ( 'generateblocks_page_generateblocks-overlay-panels' !== $screen->id && 'post' !== $screen->base ) ) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
$permissions = [
|
|
'canUseOverlays' => GenerateBlocks_Pro_Overlays::current_user_can_use_overlays( 'use' ),
|
|
'canManageOverlays' => GenerateBlocks_Pro_Overlays::current_user_can_use_overlays( 'manage' ),
|
|
];
|
|
|
|
$permission_object = wp_json_encode( $permissions );
|
|
wp_register_script( 'generateblocks-overlays-permissions', '', [], '1.0', false );
|
|
wp_enqueue_script( 'generateblocks-overlays-permissions' );
|
|
$script = sprintf(
|
|
'var gbOverlaysPermissions = %s;
|
|
Object.freeze( gbOverlaysPermissions );',
|
|
$permission_object
|
|
);
|
|
wp_add_inline_script( 'generateblocks-overlays-permissions', $script );
|
|
}
|
|
|
|
add_action( 'init', 'generateblocks_pro_register_menu_support' );
|
|
/**
|
|
* Register menu support for GenerateBlocks Pro.
|
|
*
|
|
* @return void
|
|
*/
|
|
function generateblocks_pro_register_menu_support() {
|
|
register_setting(
|
|
'general',
|
|
'generateblocks_pro_classic_menu_support',
|
|
array(
|
|
'type' => 'boolean',
|
|
'default' => false,
|
|
'show_in_rest' => true,
|
|
)
|
|
);
|
|
}
|
|
|
|
add_action( 'after_setup_theme', 'generateblocks_pro_add_menu_support', 100 );
|
|
/**
|
|
* Add menu support for GenerateBlocks Pro.
|
|
*
|
|
* @return void
|
|
*/
|
|
function generateblocks_pro_add_menu_support() {
|
|
if ( get_theme_support( 'menus' ) ) {
|
|
return;
|
|
}
|
|
|
|
$menu_support = get_option( 'generateblocks_pro_classic_menu_support', false );
|
|
|
|
if ( $menu_support ) {
|
|
add_theme_support( 'menus' );
|
|
}
|
|
}
|