Files
acrib.es/wp-content/plugins/kadence-blocks/includes/blocks/class-kadence-blocks-identity-block.php

191 lines
6.4 KiB
PHP
Raw Permalink Normal View History

<?php
/**
* Class to Build the Identity Block.
*
* @package Kadence Blocks
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class to Build the Identity Block.
*
* @category class
*/
class Kadence_Blocks_Identity_Block extends Kadence_Blocks_Abstract_Block {
/**
* Instance of this class
*
* @var null
*/
private static $instance = null;
/**
* Block name within this namespace.
*
* @var string
*/
protected $block_name = 'identity';
/**
* Block determines in scripts need to be loaded for block.
*
* @var string
*/
protected $has_script = false;
/**
* Block determines in scripts need to be loaded for block.
*
* @var string
*/
protected $has_style = true;
/**
* Instance Control
*/
public static function get_instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Builds CSS for block.
*
* @param array $attributes the blocks attributes.
* @param Kadence_Blocks_CSS $css the css class for blocks.
* @param string $unique_id the blocks attr ID.
* @param string $unique_style_id the blocks alternate ID for queries.¸
*/
public function build_css( $attributes, $css, $unique_id, $unique_style_id ) {
$css->set_style_id( 'kb-' . $this->block_name . $unique_style_id );
$css->set_selector( '.kb-identity' . $unique_id );
$css->render_measure_output( $attributes, 'padding', 'padding' );
$css->render_measure_output( $attributes, 'margin', 'margin' );
$css->set_selector( '.kb-identity' . $unique_id .' a');
$css->add_property('text-decoration', 'inherit');
$css->add_property('color', 'inherit');
$css->set_selector( '.kb-identity' . $unique_id . ' .wp-block-site-title' );
$css->render_typography( $attributes, 'titleTypography' );
$css->set_selector( '.kb-identity' . $unique_id . ' .wp-block-site-tagline' );
$css->render_typography( $attributes, 'taglineTypography' );
$css->set_selector( '.kb-identity' . $unique_id . ' .kb-identity-layout-container' );
if( $attributes['layout'] === 'logo-left' || $attributes['layout'] === 'logo-right' || $attributes['layout'] === 'logo-right-stacked' || $attributes['layout'] === 'logo-left-stacked' ) {
$css->add_property( 'align-items', $attributes['textVerticalAlign'] );
}
return $css->css_output();
}
/**
* Return dynamically generated HTML for block
*
* @param array $attributes The block attributes.
* @param string $unique_id The unique ID for the block.
* @param string $content The block inner content.
* @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered.
*
* @return string
*/
public function build_html( $attributes, $unique_id, $content, $block_instance ) {
$layout = isset( $attributes['layout'] ) ? $attributes['layout'] : 'logo-title';
$layout_class = 'kb-identity-layout-container kb-identity-layout-' . $layout;
$content = $this->strip_anchor_tags( $content );
if (!empty($attributes['urlTransparent'])) {
// Use regex to find the existing img tag
$pattern = '/<img[^>]+>/i';
if (preg_match($pattern, $content, $matches)) {
$existing_img = $matches[0];
// Create the transparent image by cloning and modifying the existing img tag
$transparent_img = $existing_img;
$transparent_img = preg_replace('/\bsrc=["\'][^"\']+["\']/', 'src="' . esc_url($attributes['urlTransparent']) . '"', $transparent_img);
$transparent_img = preg_replace('/\bclass=["\']([^"\']*)["\']/', 'class="kb-img kb-img-transparent"', $transparent_img);
$transparent_img = preg_replace('/\bsrcset=["\'][^"\']+["\']/', '', $transparent_img);
$transparent_img = preg_replace('/\bsizes=["\'][^"\']+["\']/', '', $transparent_img);
// Insert the transparent image after the existing image
$content = preg_replace($pattern, '$0' . $transparent_img, $content, 1);
}
}
if (!empty($attributes['urlSticky'])) {
$this->enqueue_script('kadence-blocks-header-sticky-image');
// Use regex to find the existing img tag
$pattern = '/<img[^>]+>/i';
if (preg_match($pattern, $content, $matches)) {
$existing_img = $matches[0];
// Create the transparent image by cloning and modifying the existing img tag
$sticky_img = $existing_img;
$sticky_img = preg_replace('/\bsrc=["\'][^"\']+["\']/', 'src="' . esc_url($attributes['urlSticky']) . '"', $sticky_img);
$sticky_img = preg_replace('/\bclass=["\']([^"\']*)["\']/', 'class="kb-img kb-img-sticky"', $sticky_img);
$sticky_img = preg_replace('/\bsrcset=["\'][^"\']+["\']/', '', $sticky_img);
$sticky_img = preg_replace('/\bsizes=["\'][^"\']+["\']/', '', $sticky_img);
// Insert the transparent image after the existing image
$content = preg_replace($pattern, '$0' . $sticky_img, $content, 1);
}
}
$outer_classes = array( 'kb-identity', 'kb-identity' . $unique_id );
$outer_classes[] = ! empty( $attributes['align'] ) ? 'align' . $attributes['align'] : 'alignnone';
if (!empty($attributes['urlTransparent'])) {
$outer_classes[] = 'has-transparent-img';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $outer_classes ) ) );
if( !empty( $attributes['linkToHomepage']) || !empty( $attributes['link']) ) {
$url = !empty( $attributes['link']) ? esc_url( $attributes['link'] ) : esc_url( home_url( '/' ) );
$content = sprintf( '<a href="%1$s" class="%2$s">%3$s</a>', $url, $layout_class, $content );
} else {
$content = sprintf( '<div class="%1$s">%2$s</div>', $layout_class, $content );
}
return sprintf( '<div %1$s>%2$s</div>', $wrapper_attributes, $content );
}
public function strip_anchor_tags($html) {
$pattern = '/<a\s[^>]*href=[\'"](.+?)[\'"][^>]*>(.+?)<\/a>/i';
$replacement = '$2';
$stripped_html = preg_replace($pattern, $replacement, $html);
return preg_replace('/<\/?a[^>]*>/i', '', $stripped_html);
}
/**
* Registers scripts and styles.
*/
public function register_scripts() {
parent::register_scripts();
// If in the backend, bail out.
if ( is_admin() ) {
return;
}
if ( apply_filters( 'kadence_blocks_check_if_rest', false ) && kadence_blocks_is_rest() ) {
return;
}
wp_register_script( 'kadence-blocks-header-sticky-image', KADENCE_BLOCKS_URL . 'includes/assets/js/kb-header-sticky-image.min.js', array(), KADENCE_BLOCKS_VERSION, true );
}
}
Kadence_Blocks_Identity_Block::get_instance();