File: /home/paksjuts/apkhoop.com/wp-content/plugins/hello-plus/classes/ehp-shapes.php
<?php
namespace HelloPlus\Classes;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
use Elementor\{
Controls_Manager,
Widget_Base
};
class Ehp_Shapes {
private $context = [];
private ?Widget_Base $widget = null;
private $widget_settings = [];
private $control_prefix = '';
private $prefix_attr = '';
private $key_attr = '';
public function set_context( array $context ) {
$this->context = $context;
}
private function get_options() {
$options_names = [
'default' => esc_html__( 'Default', 'hello-plus' ),
'sharp' => esc_html__( 'Sharp', 'hello-plus' ),
'rounded' => esc_html__( 'Rounded', 'hello-plus' ),
'round' => esc_html__( 'Round', 'hello-plus' ),
'oval' => esc_html__( 'Oval', 'hello-plus' ),
'custom' => esc_html__( 'Custom', 'hello-plus' ),
];
$options = [
'button' => [ 'default', 'sharp', 'rounded', 'round', 'oval', 'custom' ],
'submenu' => [ 'default', 'sharp', 'rounded', 'round', 'oval', 'custom' ],
'box' => [ 'sharp', 'rounded', 'custom' ],
'image' => [ 'sharp', 'rounded', 'round', 'oval', 'custom' ],
'map' => [ 'sharp', 'rounded', 'round', 'oval', 'custom' ],
'float' => [ 'default', 'sharp', 'round', 'rounded', 'custom' ],
'logo' => [ 'sharp', 'rounded', 'round', 'custom' ],
];
return array_map( function ( $keys ) use ( $options_names ) {
return array_intersect_key( $options_names, array_flip( $keys ) );
}, $options );
}
public function get_shape_classnames() {
$this->widget_settings = $this->widget->get_settings_for_display();
$container_prefix = $this->context['container_prefix'];
$is_responsive = $this->context['is_responsive'] ?? true;
$shape = $this->widget_settings[ $this->control_prefix . $container_prefix . '_shape' ] ?? '';
$shape_classnames = [];
if ( ! empty( $shape ) ) {
$shape_classnames[] = 'has-shape-' . $shape;
$shape_classnames[] = 'shape-type-' . $container_prefix;
if ( $is_responsive ) {
$shape_mobile = $this->widget_settings[ $this->control_prefix . $container_prefix . '_shape_mobile' ];
$shape_tablet = $this->widget_settings[ $this->control_prefix . $container_prefix . '_shape_tablet' ];
if ( ! empty( $shape_mobile ) ) {
$shape_classnames[] = 'has-shape-sm-' . $shape_mobile;
}
if ( ! empty( $shape_tablet ) ) {
$shape_classnames[] = 'has-shape-md-' . $shape_tablet;
}
}
}
return $shape_classnames;
}
public function add_shape_attributes() {
$this->widget_settings = $this->widget->get_settings_for_display();
$shape = $this->widget_settings[ $this->control_prefix . $this->context['container_prefix'] . '_shape' ] ?? '';
if ( ! empty( $shape ) ) {
$shape_classnames = $this->get_shape_classnames();
$this->widget->add_render_attribute( $this->context['render_attribute'] . $this->key_attr, [
'class' => $shape_classnames,
] );
}
}
public function add_style_controls() {
$widget_name = $this->context['widget_name'];
$container_prefix = $this->context['container_prefix'];
$condition = $this->context['condition'] ?? [];
$is_responsive = $this->context['is_responsive'] ?? true;
$defaults = [
'box' => 'sharp',
'image' => 'sharp',
'map' => 'sharp',
'logo' => 'sharp',
];
if ( $is_responsive ) {
$this->widget->add_responsive_control(
$this->control_prefix . $container_prefix . '_shape',
[
'label' => esc_html__( 'Shape', 'hello-plus' ),
'type' => Controls_Manager::SELECT,
'default' => $defaults[ $container_prefix ] ?? 'default',
'options' => $this->get_options()[ $container_prefix ],
'frontend_available' => true,
'condition' => $condition,
]
);
} else {
$this->widget->add_control(
$this->control_prefix . $container_prefix . '_shape',
[
'label' => esc_html__( 'Shape', 'hello-plus' ),
'type' => Controls_Manager::SELECT,
'default' => $defaults[ $container_prefix ] ?? 'default',
'options' => $this->get_options()[ $container_prefix ],
'frontend_available' => true,
'condition' => $condition,
]
);
}
$prefix_property = "--{$widget_name}-{$container_prefix}{$this->prefix_attr}-border-radius";
if ( $is_responsive ) {
$this->widget->add_responsive_control(
$this->control_prefix . $container_prefix . '_shape_custom',
[
'label' => esc_html__( 'Border Radius', 'hello-plus' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'rem' ],
'selectors' => [
'{{WRAPPER}} .ehp-' . $widget_name => "{$prefix_property}-block-end: {{BOTTOM}}{{UNIT}}; {$prefix_property}-block-start: {{TOP}}{{UNIT}}; {$prefix_property}-inline-end: {{RIGHT}}{{UNIT}}; {$prefix_property}-inline-start: {{LEFT}}{{UNIT}};",
],
'condition' => array_merge( $condition, [
$this->control_prefix . $container_prefix . '_shape' => 'custom',
] ),
]
);
} else {
$this->widget->add_control(
$this->control_prefix . $container_prefix . '_shape_custom',
[
'label' => esc_html__( 'Border Radius', 'hello-plus' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'rem' ],
'selectors' => [
'{{WRAPPER}} .ehp-' . $widget_name => "{$prefix_property}-block-end: {{BOTTOM}}{{UNIT}}; {$prefix_property}-block-start: {{TOP}}{{UNIT}}; {$prefix_property}-inline-end: {{RIGHT}}{{UNIT}}; {$prefix_property}-inline-start: {{LEFT}}{{UNIT}};",
],
'condition' => array_merge( $condition, [
$this->control_prefix . $container_prefix . '_shape' => 'custom',
] ),
]
);
}
}
public function __construct( Widget_Base $widget, $context = [] ) {
$this->widget = $widget;
$this->context = $context;
$control_prefix = ( $this->context['control_prefix'] ?? $this->context['type_prefix'] ?? '' );
$this->control_prefix = '' !== $control_prefix ? $control_prefix . '_' : '';
$this->prefix_attr = ! empty( $this->context['type_prefix'] ) ? '-' . $this->context['type_prefix'] : '';
$this->key_attr = ! empty( $this->context['key'] ) ? '-' . $this->context['key'] : '';
}
}