160 lines
5.2 KiB
PHP
160 lines
5.2 KiB
PHP
<?php
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
die( '-1' );
|
|
}
|
|
|
|
/**
|
|
* Class WPBakeryShortCode_Vc_Custom_heading
|
|
* @since 4.3
|
|
*/
|
|
class WPBakeryShortCode_Vc_Custom_Heading extends WPBakeryShortCode {
|
|
/**
|
|
* Defines fields names for google_fonts, font_container and etc
|
|
* @since 4.4
|
|
* @var array
|
|
*/
|
|
protected $fields = array(
|
|
'google_fonts' => 'google_fonts',
|
|
'font_container' => 'font_container',
|
|
'el_class' => 'el_class',
|
|
'css' => 'css',
|
|
'text' => 'text',
|
|
);
|
|
|
|
/**
|
|
* Used to get field name in vc_map function for google_fonts, font_container and etc..
|
|
*
|
|
* @param $key
|
|
*
|
|
* @return bool
|
|
* @since 4.4
|
|
*/
|
|
protected function getField( $key ) {
|
|
return isset( $this->fields[ $key ] ) ? $this->fields[ $key ] : false;
|
|
}
|
|
|
|
/**
|
|
* Get param value by providing key
|
|
*
|
|
* @param $key
|
|
*
|
|
* @return array|bool
|
|
* @throws \Exception
|
|
* @since 4.4
|
|
*/
|
|
protected function getParamData( $key ) {
|
|
return WPBMap::getParam( $this->shortcode, $this->getField( $key ) );
|
|
}
|
|
|
|
/**
|
|
* Parses shortcode attributes and set defaults based on vc_map function relative to shortcode and fields names
|
|
*
|
|
* @param $atts
|
|
*
|
|
* @return array
|
|
* @throws \Exception
|
|
* @since 4.3
|
|
*/
|
|
public function getAttributes( $atts ) {
|
|
/**
|
|
* Shortcode attributes
|
|
* @var $text
|
|
* @var $google_fonts
|
|
* @var $font_container
|
|
* @var $el_class
|
|
* @var $link
|
|
* @var $css
|
|
*/
|
|
$atts = vc_map_get_attributes( $this->getShortcode(), $atts );
|
|
extract( $atts );
|
|
|
|
/**
|
|
* Get default values from VC_MAP.
|
|
*/
|
|
$google_fonts_field = $this->getParamData( 'google_fonts' );
|
|
$font_container_field = $this->getParamData( 'font_container' );
|
|
|
|
$el_class = $this->getExtraClass( $el_class );
|
|
$font_container_obj = new Vc_Font_Container();
|
|
$google_fonts_obj = new Vc_Google_Fonts();
|
|
$font_container_field_settings = isset( $font_container_field['settings'], $font_container_field['settings']['fields'] ) ? $font_container_field['settings']['fields'] : array();
|
|
$google_fonts_field_settings = isset( $google_fonts_field['settings'], $google_fonts_field['settings']['fields'] ) ? $google_fonts_field['settings']['fields'] : array();
|
|
$font_container_data = $font_container_obj->_vc_font_container_parse_attributes( $font_container_field_settings, $font_container );
|
|
$google_fonts_data = strlen( $google_fonts ) > 0 ? $google_fonts_obj->_vc_google_fonts_parse_attributes( $google_fonts_field_settings, $google_fonts ) : '';
|
|
|
|
return array(
|
|
'text' => isset( $text ) ? $text : '',
|
|
'google_fonts' => $google_fonts,
|
|
'font_container' => $font_container,
|
|
'el_class' => $el_class,
|
|
'css' => isset( $css ) ? $css : '',
|
|
'link' => ( 0 === strpos( $link, '|' ) ) ? false : $link,
|
|
'font_container_data' => $font_container_data,
|
|
'google_fonts_data' => $google_fonts_data,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Parses google_fonts_data and font_container_data to get needed css styles to markup
|
|
*
|
|
* @param $el_class
|
|
* @param $css
|
|
* @param $google_fonts_data
|
|
* @param $font_container_data
|
|
* @param $atts
|
|
*
|
|
* @return array
|
|
* @since 4.3
|
|
*/
|
|
public function getStyles( $el_class, $css, $google_fonts_data, $font_container_data, $atts ) {
|
|
$styles = array();
|
|
if ( ! empty( $font_container_data ) && isset( $font_container_data['values'] ) ) {
|
|
foreach ( $font_container_data['values'] as $key => $value ) {
|
|
if ( 'tag' !== $key && strlen( $value ) ) {
|
|
if ( preg_match( '/description/', $key ) ) {
|
|
continue;
|
|
}
|
|
if ( 'font_size' === $key || 'line_height' === $key ) {
|
|
$value = preg_replace( '/\s+/', '', $value );
|
|
}
|
|
if ( 'font_size' === $key ) {
|
|
$pattern = '/^(\d*(?:\.\d+)?)\s*(px|\%|in|cm|mm|em|rem|ex|pt|pc|vw|vh|vmin|vmax)?$/';
|
|
// allowed metrics: http://www.w3schools.com/cssref/css_units.asp
|
|
preg_match( $pattern, $value, $matches );
|
|
$value = isset( $matches[1] ) ? (float) $matches[1] : (float) $value;
|
|
$unit = isset( $matches[2] ) ? $matches[2] : 'px';
|
|
$value = $value . $unit;
|
|
}
|
|
if ( strlen( $value ) > 0 ) {
|
|
$styles[] = str_replace( '_', '-', $key ) . ': ' . $value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ( ( ! isset( $atts['use_theme_fonts'] ) || 'yes' !== $atts['use_theme_fonts'] ) && ! empty( $google_fonts_data ) && isset( $google_fonts_data['values'], $google_fonts_data['values']['font_family'], $google_fonts_data['values']['font_style'] ) ) {
|
|
$google_fonts_family = explode( ':', $google_fonts_data['values']['font_family'] );
|
|
$styles[] = 'font-family:' . $google_fonts_family[0];
|
|
$google_fonts_styles = explode( ':', $google_fonts_data['values']['font_style'] );
|
|
$styles[] = 'font-weight:' . $google_fonts_styles[1];
|
|
$styles[] = 'font-style:' . $google_fonts_styles[2];
|
|
}
|
|
|
|
/**
|
|
* Filter 'VC_SHORTCODE_CUSTOM_CSS_FILTER_TAG' to change vc_custom_heading class
|
|
*
|
|
* @param string - filter_name
|
|
* @param string - element_class
|
|
* @param string - shortcode_name
|
|
* @param array - shortcode_attributes
|
|
*
|
|
* @since 4.3
|
|
*/
|
|
$css_class = apply_filters( VC_SHORTCODE_CUSTOM_CSS_FILTER_TAG, 'vc_custom_heading ' . $el_class . vc_shortcode_custom_css_class( $css, ' ' ), $this->settings['base'], $atts );
|
|
|
|
return array(
|
|
'css_class' => trim( preg_replace( '/\s+/', ' ', $css_class ) ),
|
|
'styles' => $styles,
|
|
);
|
|
}
|
|
}
|