File: /var/www/html/wpmuhibbah/wp-content/themes/goodwish/framework/modules/shortcodes/button/button.php
<?php
namespace GoodwishEdge\Modules\Shortcodes\Button;
use GoodwishEdge\Modules\Shortcodes\Lib\ShortcodeInterface;
/**
* Class Button that represents button shortcode
* @package GoodwishEdge\Modules\Shortcodes\Button
*/
class Button implements ShortcodeInterface {
/**
* @var string
*/
private $base;
/**
* Sets base attribute and registers shortcode with Visual Composer
*/
public function __construct() {
$this->base = 'edgtf_button';
add_action('vc_before_init', array($this, 'vcMap'));
}
/**
* Returns base attribute
* @return string
*/
public function getBase() {
return $this->base;
}
/**
* Maps shortcode to Visual Composer
*/
public function vcMap() {
vc_map(array(
'name' => esc_html__('Edge Button', 'goodwish'),
'base' => $this->base,
'category' => esc_html__('by EDGE', 'goodwish'),
'icon' => 'icon-wpb-button extended-custom-icon',
'allowed_container_element' => 'vc_row',
'params' => array_merge(
array(
array(
'type' => 'dropdown',
'heading' => esc_html__('Size', 'goodwish'),
'param_name' => 'size',
'value' => array(
esc_html__('Default', 'goodwish') => '',
esc_html__('Small', 'goodwish') => 'small',
esc_html__('Medium', 'goodwish') => 'medium',
esc_html__('Large', 'goodwish') => 'large',
esc_html__('Extra Large', 'goodwish') => 'huge',
esc_html__('Extra Large Full Width', 'goodwish') => 'huge-full-width'
),
'save_always' => true,
'admin_label' => true
),
array(
'type' => 'dropdown',
'heading' => esc_html__('Type', 'goodwish'),
'param_name' => 'type',
'value' => array(
esc_html__('Default', 'goodwish') => '',
esc_html__('Outline', 'goodwish') => 'outline',
esc_html__('Outline Light', 'goodwish') => 'outline-light',
esc_html__('Solid', 'goodwish') => 'solid',
esc_html__('Solid Light', 'goodwish') => 'solid-dark',
esc_html__('Transparent', 'goodwish') => 'transparent'
),
'save_always' => true,
'admin_label' => true
),
array(
'type' => 'textfield',
'heading' => esc_html__('Text', 'goodwish'),
'param_name' => 'text',
'admin_label' => true
),
array(
'type' => 'textfield',
'heading' => esc_html__('Link', 'goodwish'),
'param_name' => 'link',
'admin_label' => true
),
array(
'type' => 'dropdown',
'heading' => esc_html__('Link Target', 'goodwish'),
'param_name' => 'target',
'value' => array(
esc_html__('Self', 'goodwish') => '_self',
esc_html__('Blank', 'goodwish') => '_blank'
),
'save_always' => true,
'admin_label' => true
),
array(
'type' => 'textfield',
'heading' => esc_html__('Custom CSS class', 'goodwish'),
'param_name' => 'custom_class',
'admin_label' => true
)
),
goodwish_edge_icon_collections()->getVCParamsArray(array(), '', true),
array(
array(
'type' => 'colorpicker',
'heading' => esc_html__('Color', 'goodwish'),
'param_name' => 'color',
'group' => esc_html__('Design Options', 'goodwish'),
'admin_label' => true
),
array(
'type' => 'colorpicker',
'heading' => esc_html__('Hover Color', 'goodwish'),
'param_name' => 'hover_color',
'group' => esc_html__('Design Options', 'goodwish'),
'admin_label' => true
),
array(
'type' => 'colorpicker',
'heading' => esc_html__('Background Color', 'goodwish'),
'param_name' => 'background_color',
'admin_label' => true,
'dependency' => array('element' => 'type', 'value' => array('solid', 'solid-dark', 'outline','outline-light', '')),
'group' => esc_html__('Design Options','goodwish')
),
array(
'type' => 'colorpicker',
'heading' => esc_html__('Hover Background Color', 'goodwish'),
'param_name' => 'hover_background_color',
'admin_label' => true,
'group' => esc_html__('Design Options','goodwish'),
'dependency' => array('element' => 'type', 'value' => array('solid', 'solid-dark', 'outline','outline-light', '')),
),
array(
'type' => 'colorpicker',
'heading' => esc_html__('Border Color', 'goodwish'),
'param_name' => 'border_color',
'admin_label' => true,
'dependency' => array('element' => 'type', 'value' => array('solid', 'solid-dark', 'outline','outline-light', '')),
'group' => esc_html__('Design Options','goodwish')
),
array(
'type' => 'colorpicker',
'heading' => esc_html__('Hover Border Color', 'goodwish'),
'param_name' => 'hover_border_color',
'admin_label' => true,
'group' => esc_html__('Design Options','goodwish'),
'dependency' => array('element' => 'type', 'value' => array('solid', 'solid-dark', 'outline','outline-light', '')),
),
array(
'type' => 'textfield',
'heading' => esc_html__('Font Size (px)', 'goodwish'),
'param_name' => 'font_size',
'admin_label' => true,
'group' => esc_html__('Design Options','goodwish')
),
array(
'type' => 'dropdown',
'heading' => esc_html__('Font Weight', 'goodwish'),
'param_name' => 'font_weight',
'value' => goodwish_edge_get_font_weight_array(true),
'admin_label' => true,
'group' => esc_html__('Design Options', 'goodwish')
),
array(
'type' => 'textfield',
'heading' => esc_html__('Margin', 'goodwish'),
'param_name' => 'margin',
'description' => esc_html__('Insert margin in format: 0px 0px 1px 0px', 'goodwish'),
'admin_label' => true,
'group' => esc_html__('Design Options','goodwish')
)
)
) //close array_merge
));
}
/**
* Renders HTML for button shortcode
*
* @param array $atts
* @param null $content
*
* @return string
*/
public function render($atts, $content = null) {
$default_atts = array(
'size' => '',
'type' => '',
'text' => '',
'link' => '',
'target' => '',
'color' => '',
'hover_color' => '',
'background_color' => '',
'hover_background_color' => '',
'border_color' => '',
'hover_border_color' => '',
'font_size' => '',
'font_weight' => '',
'margin' => '',
'custom_class' => '',
'html_type' => 'anchor',
'input_name' => '',
'hover_animation' => '',
'custom_attrs' => array()
);
$default_atts = array_merge($default_atts, goodwish_edge_icon_collections()->getShortcodeParams());
$params = shortcode_atts($default_atts, $atts);
if($params['html_type'] !== 'input') {
$iconPackName = goodwish_edge_icon_collections()->getIconCollectionParamNameByKey($params['icon_pack']);
$params['icon'] = $iconPackName ? $params[$iconPackName] : '';
}
$params['size'] = !empty($params['size']) ? $params['size'] : 'medium';
$params['type'] = !empty($params['type']) ? $params['type'] : 'solid';
$params['link'] = !empty($params['link']) ? $params['link'] : '#';
$params['target'] = !empty($params['target']) ? $params['target'] : '_self';
//prepare params for template
$params['button_classes'] = $this->getButtonClasses($params);
$params['button_custom_attrs'] = !empty($params['custom_attrs']) ? $params['custom_attrs'] : array();
$params['button_styles'] = $this->getButtonStyles($params);
$params['button_data'] = $this->getButtonDataAttr($params);
return goodwish_edge_get_shortcode_module_template_part('templates/'.$params['html_type'], 'button', $params['hover_animation'], $params);
}
/**
* Returns array of button styles
*
* @param $params
*
* @return array
*/
private function getButtonStyles($params) {
$styles = array();
if(!empty($params['color'])) {
$styles[] = 'color: '.$params['color'];
}
if(!empty($params['background_color'])) {
$styles[] = 'background-color: '.$params['background_color'];
}
if(!empty($params['border_color'])) {
$styles[] = 'border-color: '.$params['border_color'];
}
if(!empty($params['font_size'])) {
$styles[] = 'font-size: '.goodwish_edge_filter_px($params['font_size']).'px';
}
if(!empty($params['font_weight'])) {
$styles[] = 'font-weight: '.$params['font_weight'];
}
if(!empty($params['margin'])) {
$styles[] = 'margin: '.$params['margin'];
}
return $styles;
}
/**
*
* Returns array of button data attr
*
* @param $params
*
* @return array
*/
private function getButtonDataAttr($params) {
$data = array();
if(!empty($params['hover_background_color'])) {
$data['data-hover-bg-color'] = $params['hover_background_color'];
}
if(!empty($params['hover_color'])) {
$data['data-hover-color'] = $params['hover_color'];
}
if(!empty($params['hover_border_color'])) {
$data['data-hover-border-color'] = $params['hover_border_color'];
}
return $data;
}
/**
* Returns array of HTML classes for button
*
* @param $params
*
* @return array
*/
private function getButtonClasses($params) {
$buttonClasses = array(
'edgtf-btn',
'edgtf-btn-'.$params['size'],
'edgtf-btn-'.$params['type']
);
if(!empty($params['hover_background_color'])) {
$buttonClasses[] = 'edgtf-btn-custom-hover-bg';
}
if(!empty($params['hover_border_color'])) {
$buttonClasses[] = 'edgtf-btn-custom-border-hover';
}
if(!empty($params['hover_color'])) {
$buttonClasses[] = 'edgtf-btn-custom-hover-color';
}
if(!empty($params['icon'])) {
$buttonClasses[] = 'edgtf-btn-icon';
}
if(!empty($params['custom_class'])) {
$buttonClasses[] = $params['custom_class'];
}
return $buttonClasses;
}
}