Files
2025-02-24 22:33:42 +01:00

1366 lines
42 KiB
PHP

<?php
namespace Essential_Addons_Elementor\Pro\Elements;
use \Elementor\Controls_Manager;
use \Elementor\Group_Control_Background;
use Elementor\Repeater;
use \Elementor\Core\Schemes\Typography;
use \Elementor\Group_Control_Border;
use \Elementor\Group_Control_Box_Shadow;
use \Elementor\Group_Control_Typography;
use \Elementor\Utils;
use \Elementor\Widget_Base;
if (!defined('ABSPATH')) exit; // If this file is called directly, abort.
class Google_Map extends Widget_Base
{
public function get_name()
{
return 'eael-google-map';
}
public function get_title()
{
return esc_html__('Google Map', 'essential-addons-elementor');
}
public function get_icon()
{
return 'eaicon-advanced-google-maps';
}
public function get_categories()
{
return ['essential-addons-elementor'];
}
public function get_keywords()
{
return [
'advanced google map',
'ea advanced google map',
'ea google map',
'ea map',
'ea advanced map',
'map',
'google map',
'navigation map',
'mutiple marker',
'dynamic map',
'ea',
'essential addons'
];
}
public function get_custom_help_url()
{
return 'https://essential-addons.com/elementor/docs/advanced-google-map/';
}
protected function register_controls()
{
/**
* Google Map General Settings
*/
$this->start_controls_section(
'eael_section_google_map_settings',
[
'label' => esc_html__('General Settings', 'essential-addons-elementor')
]
);
$this->add_control(
'eael_google_map_type',
[
'label' => esc_html__('Google Map Type', 'essential-addons-elementor'),
'type' => Controls_Manager::SELECT,
'default' => 'basic',
'label_block' => false,
'options' => [
'basic' => esc_html__('Basic', 'essential-addons-elementor'),
'marker' => esc_html__('Multiple Marker', 'essential-addons-elementor'),
'static' => esc_html__('Static', 'essential-addons-elementor'),
'polyline' => esc_html__('Polyline', 'essential-addons-elementor'),
'polygon' => esc_html__('Polygon', 'essential-addons-elementor'),
'overlay' => esc_html__('Overlay', 'essential-addons-elementor'),
'routes' => esc_html__('With Routes', 'essential-addons-elementor'),
'panorama' => esc_html__('Panorama', 'essential-addons-elementor'),
]
]
);
$this->add_control(
'eael_google_map_address_type',
[
'label' => __('Address Type', 'essential-addons-elementor'),
'type' => Controls_Manager::CHOOSE,
'options' => [
'address' => [
'title' => __('Address', 'essential-addons-elementor'),
'icon' => 'fa fa-map',
],
'coordinates' => [
'title' => __('Coordinates', 'essential-addons-elementor'),
'icon' => 'fa fa-map-marker',
],
],
'default' => 'address',
'condition' => [
'eael_google_map_type' => ['basic']
]
]
);
$this->add_control(
'eael_google_map_addr',
[
'label' => esc_html__('Geo Address', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'dynamic' => [ 'active' => true ],
'label_block' => true,
'default' => esc_html__('Marina Bay, Singapore', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_address_type' => ['address'],
'eael_google_map_type' => ['basic']
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_lat',
[
'label' => esc_html__('Latitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('28.948790', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type!' => ['routes'],
'eael_google_map_address_type' => ['coordinates']
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_lng',
[
'label' => esc_html__('Longitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-81.298843', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type!' => ['routes'],
'eael_google_map_address_type' => ['coordinates']
],
'ai' => [
'active' => false,
],
]
);
// Only for static
$this->add_control(
'eael_google_map_static_lat',
[
'label' => esc_html__('Latitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('28.948790', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['static'],
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_static_lng',
[
'label' => esc_html__('Longitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-81.298843', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['static'],
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_resolution_title',
[
'label' => __('Map Image Resolution', 'essential-addons-elementor'),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'eael_google_map_type' => 'static'
]
]
);
$this->add_control(
'eael_google_map_static_width',
[
'label' => esc_html__('Static Image Width', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 610
],
'range' => [
'px' => [
'max' => 1400,
],
],
'condition' => [
'eael_google_map_type' => 'static'
]
]
);
$this->add_control(
'eael_google_map_static_height',
[
'label' => esc_html__('Static Image Height', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 300
],
'range' => [
'px' => [
'max' => 700,
],
],
'condition' => [
'eael_google_map_type' => 'static'
]
]
);
// Only for Overlay
$this->add_control(
'eael_google_map_overlay_lat',
[
'label' => esc_html__('Latitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('28.948790', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['overlay'],
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_overlay_lng',
[
'label' => esc_html__('Longitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-81.298843', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['overlay'],
],
'ai' => [
'active' => false,
],
]
);
// Only for panorama
$this->add_control(
'eael_google_map_panorama_lat',
[
'label' => esc_html__('Latitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('28.948790', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['panorama'],
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_panorama_lng',
[
'label' => esc_html__('Longitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-81.298843', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['panorama'],
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_overlay_content',
[
'label' => esc_html__('Overlay Content', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXTAREA,
'label_block' => True,
'default' => esc_html__('Add your content here', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => 'overlay'
]
]
);
$this->end_controls_section();
/**
* Map Settings (With Marker only for Basic)
*/
$this->start_controls_section(
'eael_section_google_map_basic_marker_settings',
[
'label' => esc_html__('Map Marker Settings', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['basic']
]
]
);
$this->add_control(
'eael_google_map_basic_marker_title',
[
'label' => esc_html__('Title', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
],
'label_block' => true,
'default' => esc_html__('Google Map Title', 'essential-addons-elementor'),
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_basic_marker_content',
[
'label' => esc_html__('Content', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXTAREA,
'dynamic' => [
'active' => true,
],
'label_block' => true,
'default' => esc_html__('Google map content', 'essential-addons-elementor')
]
);
$this->add_control(
'eael_google_map_basic_marker_icon_enable',
[
'label' => __('Custom Marker Icon', 'essential-addons-elementor'),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'label_on' => __('Yes', 'essential-addons-elementor'),
'label_off' => __('No', 'essential-addons-elementor'),
'return_value' => 'yes',
]
);
$this->add_control(
'eael_google_map_basic_marker_icon',
[
'label' => esc_html__('Marker Icon', 'essential-addons-elementor'),
'type' => Controls_Manager::MEDIA,
'default' => [
// 'url' => Utils::get_placeholder_image_src(),
],
'condition' => [
'eael_google_map_basic_marker_icon_enable' => 'yes'
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_basic_marker_icon_width',
[
'label' => esc_html__('Marker Width', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 32
],
'range' => [
'px' => [
'max' => 150,
],
],
'condition' => [
'eael_google_map_basic_marker_icon_enable' => 'yes'
]
]
);
$this->add_control(
'eael_google_map_basic_marker_icon_height',
[
'label' => esc_html__('Marker Height', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 32
],
'range' => [
'px' => [
'max' => 150,
],
],
'condition' => [
'eael_google_map_basic_marker_icon_enable' => 'yes'
]
]
);
$this->end_controls_section();
/**
* Map Settings (With Marker)
*/
$this->start_controls_section(
'eael_section_google_map_marker_settings',
[
'label' => esc_html__( 'Map Marker Settings', 'essential-addons-elementor' ),
'condition' => [
'eael_google_map_type' => ['marker', 'polyline', 'routes', 'static']
]
]
);
$repeater = new Repeater();
$repeater->add_control(
'eael_google_map_marker_lat',
[
'label' => esc_html__( 'Latitude', 'essential-addons-elementor' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => esc_html__( '28.948790', 'essential-addons-elementor' ),
'ai' => [
'active' => false,
],
]
);
$repeater->add_control(
'eael_google_map_marker_lng',
[
'label' => esc_html__( 'Longitude', 'essential-addons-elementor' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => esc_html__( '-81.298843', 'essential-addons-elementor' ),
'ai' => [
'active' => false,
],
]
);
$repeater->add_control(
'eael_google_map_marker_title',
[
'label' => esc_html__( 'Title', 'essential-addons-elementor' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => esc_html__( 'Marker Title', 'essential-addons-elementor' ),
'ai' => [
'active' => false,
],
]
);
$repeater->add_control(
'eael_google_map_marker_content',
[
'label' => esc_html__( 'Content', 'essential-addons-elementor' ),
'type' => Controls_Manager::TEXTAREA,
'label_block' => true,
'default' => esc_html__( 'Marker Content. You can put html here.', 'essential-addons-elementor' ),
'ai' => [
'active' => false,
],
]
);
$repeater->add_control(
'eael_google_map_marker_icon_color',
[
'label' => esc_html__( 'Default Icon Color', 'essential-addons-elementor' ),
'description' => esc_html__( '(Works only on Static mode)', 'essential-addons-elementor' ),
'type' => Controls_Manager::COLOR,
'default' => '#e23a47',
]
);
$repeater->add_control(
'eael_google_map_marker_icon_enable',
[
'label' => __( 'Use Custom Icon', 'essential-addons-elementor' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'label_on' => __( 'Yes', 'essential-addons-elementor' ),
'label_off' => __( 'No', 'essential-addons-elementor' ),
'return_value' => 'yes',
]
);
$repeater->add_control(
'eael_google_map_marker_icon',
[
'label' => esc_html__( 'Custom Icon', 'essential-addons-elementor' ),
'type' => Controls_Manager::MEDIA,
'default' => [
// 'url' => Utils::get_placeholder_image_src(),
],
'condition' => [
'eael_google_map_marker_icon_enable' => 'yes'
],
'ai' => [
'active' => false,
],
]
);
$repeater->add_control(
'eael_google_map_marker_icon_width',
[
'label' => esc_html__( 'Icon Width', 'essential-addons-elementor' ),
'type' => Controls_Manager::NUMBER,
'default' => esc_html__( '32', 'essential-addons-elementor' ),
'condition' => [
'eael_google_map_marker_icon_enable' => 'yes'
]
]
);
$repeater->add_control(
'eael_google_map_marker_icon_height',
[
'label' => esc_html__( 'Icon Height', 'essential-addons-elementor' ),
'type' => Controls_Manager::NUMBER,
'default' => esc_html__( '32', 'essential-addons-elementor' ),
'condition' => [
'eael_google_map_marker_icon_enable' => 'yes'
]
]
);
$this->add_control(
'eael_google_map_markers',
[
'type' => Controls_Manager::REPEATER,
'seperator' => 'before',
'default' => [
['eael_google_map_marker_title' => esc_html__('Map Marker 1', 'essential-addons-elementor')],
],
'fields' => $repeater->get_controls(),
'title_field' => '{{eael_google_map_marker_title}}',
]
);
$this->end_controls_section();
/**
* Polyline Coordinates Settings (Polyline)
*/
$this->start_controls_section(
'eael_section_google_map_polyline_settings',
[
'label' => esc_html__( 'Coordinate Settings', 'essential-addons-elementor' ),
'condition' => [
'eael_google_map_type' => ['polyline', 'polygon']
]
]
);
$polylines_repeater = new Repeater();
$polylines_repeater->add_control(
'eael_google_map_polyline_title',
[
'label' => esc_html__( 'Title', 'essential-addons-elementor' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => esc_html__( '#', 'essential-addons-elementor' ),
'ai' => [
'active' => false,
],
]
);
$polylines_repeater->add_control(
'eael_google_map_polyline_lat',
[
'label' => esc_html__( 'Latitude', 'essential-addons-elementor' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'ai' => [
'active' => false,
],
]
);
$polylines_repeater->add_control(
'eael_google_map_polyline_lng',
[
'label' => esc_html__( 'Longitude', 'essential-addons-elementor' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_polylines',
[
'type' => Controls_Manager::REPEATER,
'seperator' => 'before',
'default' => [
[
'eael_google_map_polyline_title' => esc_html__( '#1', 'essential-addons-elementor' ),
'eael_google_map_polyline_lat' => '-12.040397656836609',
'eael_google_map_polyline_lng' => '-77.03373871559225'
],
[
'eael_google_map_polyline_title' => esc_html__( '#2', 'essential-addons-elementor' ),
'eael_google_map_polyline_lat' => '-12.040248585302038',
'eael_google_map_polyline_lng' => '-77.03993927003302'
],
[
'eael_google_map_polyline_title' => esc_html__( '#3', 'essential-addons-elementor' ),
'eael_google_map_polyline_lat' => '-12.050047116528843',
'eael_google_map_polyline_lng' => '-77.02448169303511'
],
[
'eael_google_map_polyline_title' => esc_html__( '#4', 'essential-addons-elementor' ),
'eael_google_map_polyline_lat' => '-12.044804866577001',
'eael_google_map_polyline_lng' => '-77.02154422636042'
],
],
'fields' => $polylines_repeater->get_controls(),
'title_field' => '{{eael_google_map_polyline_title}}',
]
);
$this->end_controls_section();
/**
* Routes Coordinates Settings (Routes)
*/
$this->start_controls_section(
'eael_section_google_map_routes_settings',
[
'label' => esc_html__('Routes Coordinate Settings', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type' => ['routes']
]
]
);
$this->add_control(
'eael_google_map_routes_origin',
[
'label' => esc_html__('Origin', 'essential-addons-elementor'),
'type' => Controls_Manager::HEADING,
'separator' => 'after',
]
);
$this->add_control(
'eael_google_map_routes_origin_lat',
[
'label' => esc_html__('Latitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-12.044012922866312', 'essential-addons-elementor'),
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_routes_origin_lng',
[
'label' => esc_html__('Longitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-77.02470665341184', 'essential-addons-elementor'),
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_routes_dest',
[
'label' => esc_html__('Destination', 'essential-addons-elementor'),
'type' => Controls_Manager::HEADING,
'separator' => 'after',
]
);
$this->add_control(
'eael_google_map_routes_dest_lat',
[
'label' => esc_html__('Latitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-12.090814532191756', 'essential-addons-elementor'),
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_routes_dest_lng',
[
'label' => esc_html__('Longitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('-77.02271108990476', 'essential-addons-elementor'),
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_routes_travel_mode',
[
'label' => esc_html__('Travel Mode', 'essential-addons-elementor'),
'type' => Controls_Manager::SELECT,
'default' => 'walking',
'label_block' => false,
'options' => [
'walking' => esc_html__('Walking', 'essential-addons-elementor'),
'bicycling' => esc_html__('Bicycling', 'essential-addons-elementor'),
'driving' => esc_html__('Driving', 'essential-addons-elementor'),
]
]
);
$this->end_controls_section();
$this->start_controls_section(
'section_map_controls',
[
'label' => esc_html__('Map Controls', 'essential-addons-elementor')
]
);
$this->add_control(
'eael_google_map_zoom',
[
'label' => esc_html__('Zoom Level', 'essential-addons-elementor'),
'type' => Controls_Manager::NUMBER,
'label_block' => false,
'default' => esc_html__('14', 'essential-addons-elementor'),
]
);
$this->add_control(
'eael_map_streeview_control',
[
'label' => esc_html__('Street View Controls', 'essential-addons-elementor'),
'type' => Controls_Manager::SWITCHER,
'default' => 'true',
'label_on' => __('On', 'essential-addons-elementor'),
'label_off' => __('Off', 'essential-addons-elementor'),
'return_value' => 'true',
]
);
$this->add_control(
'eael_map_type_control',
[
'label' => esc_html__('Map Type Control', 'essential-addons-elementor'),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __('On', 'essential-addons-elementor'),
'label_off' => __('Off', 'essential-addons-elementor'),
'return_value' => 'yes',
]
);
$this->add_control(
'eael_map_zoom_control',
[
'label' => esc_html__('Zoom Control', 'essential-addons-elementor'),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __('On', 'essential-addons-elementor'),
'label_off' => __('Off', 'essential-addons-elementor'),
'return_value' => 'yes',
]
);
$this->add_control(
'eael_map_fullscreen_control',
[
'label' => esc_html__('Fullscreen Control', 'essential-addons-elementor'),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __('On', 'essential-addons-elementor'),
'label_off' => __('Off', 'essential-addons-elementor'),
'return_value' => 'yes',
]
);
$this->add_control(
'eael_map_scroll_zoom',
[
'label' => esc_html__('Scroll Wheel Zoom', 'essential-addons-elementor'),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __('On', 'essential-addons-elementor'),
'label_off' => __('Off', 'essential-addons-elementor'),
'return_value' => 'yes',
]
);
$this->add_control(
'eael_google_map_center_point',
[
'label' => esc_html__( 'Center Point', 'essential-addons-elementor' ),
'type' => Controls_Manager::SELECT,
'default' => '',
'options' => [
'' => __( 'Default', 'essential-addons-elementor' ),
'auto' => __( 'Auto Center', 'essential-addons-elementor' ),
'custom' => __( 'Custom Point', 'essential-addons-elementor' ),
],
'condition' => [
'eael_google_map_type' => [ 'marker', 'polyline', 'polygon' ]
]
]
);
$this->add_control(
'eael_google_map_center_point_lat',
[
'label' => esc_html__('Latitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('28.948790', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_center_point' => 'custom',
],
'ai' => [
'active' => false,
],
]
);
$this->add_control(
'eael_google_map_center_point_lng',
[
'label' => esc_html__('Longitude', 'essential-addons-elementor'),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => esc_html__('90.403947', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_center_point' => 'custom',
],
'ai' => [
'active' => false,
],
]
);
$this->end_controls_section();
/**
* Map Theme Settings
*/
$this->start_controls_section(
'eael_section_google_map_theme_settings',
[
'label' => esc_html__('Map Theme', 'essential-addons-elementor'),
'condition' => [
'eael_google_map_type!' => ['static', 'panorama', 'polygon', 'routes']
]
]
);
$this->add_control(
'eael_google_map_theme_source',
[
'label' => __('Theme Source', 'essential-addons-elementor'),
'type' => Controls_Manager::CHOOSE,
'options' => [
'gstandard' => [
'title' => __('Google Standard', 'essential-addons-elementor'),
'icon' => 'fa fa-map',
],
'snazzymaps' => [
'title' => __('Snazzy Maps', 'essential-addons-elementor'),
'icon' => 'fa fa-map-marker',
],
'custom' => [
'title' => __('Custom', 'essential-addons-elementor'),
'icon' => 'fa fa-edit',
],
],
'default' => 'gstandard'
]
);
$this->add_control(
'eael_google_map_gstandards',
[
'label' => esc_html__('Google Themes', 'essential-addons-elementor'),
'type' => Controls_Manager::SELECT,
'default' => 'standard',
'options' => [
'standard' => __('Standard', 'essential-addons-elementor'),
'silver' => __('Silver', 'essential-addons-elementor'),
'retro' => __('Retro', 'essential-addons-elementor'),
'dark' => __('Dark', 'essential-addons-elementor'),
'night' => __('Night', 'essential-addons-elementor'),
'aubergine' => __('Aubergine', 'essential-addons-elementor')
],
'description' => sprintf('<a href="https://mapstyle.withgoogle.com/" target="_blank">%1$s</a> %2$s', __('Click here', 'essential-addons-elementor'), __('to generate your own theme and use JSON within Custom style field.', 'essential-addons-elementor')),
'condition' => [
'eael_google_map_theme_source' => 'gstandard'
]
]
);
$this->add_control(
'eael_google_map_snazzymaps',
[
'label' => esc_html__('SnazzyMaps Themes', 'essential-addons-elementor'),
'type' => Controls_Manager::SELECT,
'label_block' => true,
'default' => 'colorful',
'options' => [
'default' => __('Default', 'essential-addons-elementor'),
'simple' => __('Simple', 'essential-addons-elementor'),
'colorful' => __('Colorful', 'essential-addons-elementor'),
'complex' => __('Complex', 'essential-addons-elementor'),
'dark' => __('Dark', 'essential-addons-elementor'),
'greyscale' => __('Greyscale', 'essential-addons-elementor'),
'light' => __('Light', 'essential-addons-elementor'),
'monochrome' => __('Monochrome', 'essential-addons-elementor'),
'nolabels' => __('No Labels', 'essential-addons-elementor'),
'twotone' => __('Two Tone', 'essential-addons-elementor')
],
'description' => sprintf('<a href="https://snazzymaps.com/explore" target="_blank">%1$s</a> %2$s', __('Click here', 'essential-addons-elementor'), __('to explore more themes and use JSON within custom style field.', 'essential-addons-elementor')),
'condition' => [
'eael_google_map_theme_source' => 'snazzymaps'
]
]
);
$this->add_control(
'eael_google_map_custom_style',
[
'label' => __('Custom Style', 'essential-addons-elementor'),
'description' => sprintf('<a href="https://mapstyle.withgoogle.com/" target="_blank">%1$s</a> %2$s', __('Click here', 'essential-addons-elementor'), __('to get JSON style code to style your map', 'essential-addons-elementor')),
'type' => Controls_Manager::TEXTAREA,
'condition' => [
'eael_google_map_theme_source' => 'custom',
],
]
);
$this->end_controls_section();
/**
* -------------------------------------------
* Tab Style Google Map Style
* -------------------------------------------
*/
$this->start_controls_section(
'eael_section_google_map_style_settings',
[
'label' => esc_html__('General Style', 'essential-addons-elementor'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'eael_google_map_max_width',
[
'label' => __('Max Width', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 1140,
'unit' => 'px',
],
'size_units' => ['px', '%'],
'range' => [
'px' => [
'min' => 0,
'max' => 1400,
'step' => 10,
],
'%' => [
'min' => 0,
'max' => 100,
'step' => 1,
]
],
'selectors' => [
'{{WRAPPER}} .eael-google-map' => 'max-width: {{SIZE}}{{UNIT}};',
]
]
);
$this->add_responsive_control(
'eael_google_map_max_height',
[
'label' => __('Max Height', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 400,
'unit' => 'px',
],
'size_units' => ['px'],
'range' => [
'px' => [
'min' => 0,
'max' => 1400,
'step' => 10,
]
],
'selectors' => [
'{{WRAPPER}} .eael-google-map' => 'height: {{SIZE}}{{UNIT}};',
]
]
);
$this->add_responsive_control(
'eael_google_map_margin',
[
'label' => esc_html__('Margin', 'essential-addons-elementor'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .eael-google-map' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
/**
* -------------------------------------------
* Tab Style Google Map Style
* -------------------------------------------
*/
$this->start_controls_section(
'eael_section_google_map_overlay_style_settings',
[
'label' => esc_html__('Overlay Style', 'essential-addons-elementor'),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'eael_google_map_type' => ['overlay']
]
]
);
$this->add_responsive_control(
'eael_google_map_overlay_width',
[
'label' => __('Width', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 200,
'unit' => 'px',
],
'size_units' => ['px'],
'range' => [
'px' => [
'min' => 0,
'max' => 1100,
'step' => 10,
]
],
'selectors' => [
'{{WRAPPER}} .eael-gmap-overlay' => 'width: {{SIZE}}{{UNIT}};',
]
]
);
$this->add_control(
'eael_google_map_overlay_bg_color',
[
'label' => esc_html__('Background Color', 'essential-addons-elementor'),
'type' => Controls_Manager::COLOR,
'default' => '#fff',
'selectors' => [
'{{WRAPPER}} .eael-gmap-overlay' => 'background-color: {{VALUE}};',
],
]
);
$this->add_responsive_control(
'eael_google_mapoverlay_padding',
[
'label' => esc_html__('Padding', 'essential-addons-elementor'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .eael-gmap-overlay' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'eael_google_map_overlay_margin',
[
'label' => esc_html__('Margin', 'essential-addons-elementor'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .eael-gmap-overlay' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'eael_google_map_overlay_border',
'label' => esc_html__('Border', 'essential-addons-elementor'),
'selector' => '{{WRAPPER}} .eael-gmap-overlay',
]
);
$this->add_responsive_control(
'eael_google_map_overlay_border_radius',
[
'label' => esc_html__('Border Radius', 'essential-addons-elementor'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .eael-gmap-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'eael_google_map_overlay_box_shadow',
'selector' => '{{WRAPPER}} .eael-gmap-overlay',
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'eael_google_map_overlay_typography',
'selector' => '{{WRAPPER}} .eael-gmap-overlay',
]
);
$this->add_control(
'eael_google_map_overlay_color',
[
'label' => esc_html__('Color', 'essential-addons-elementor'),
'type' => Controls_Manager::COLOR,
'default' => '#222',
'selectors' => [
'{{WRAPPER}} .eael-gmap-overlay' => 'color: {{VALUE}};',
],
]
);
$this->end_controls_section();
/**
* -------------------------------------------
* Tab Style Google Map Stroke Style
* -------------------------------------------
*/
$this->start_controls_section(
'eael_section_google_map_stroke_style_settings',
[
'label' => esc_html__('Stroke Style', 'essential-addons-elementor'),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'eael_google_map_type' => ['polyline', 'polygon', 'routes']
]
]
);
$this->add_control(
'eael_google_map_stroke_color',
[
'label' => esc_html__('Color', 'essential-addons-elementor'),
'type' => Controls_Manager::COLOR,
'default' => '#e23a47',
]
);
$this->add_responsive_control(
'eael_google_map_stroke_opacity',
[
'label' => __('Opacity', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 0.8,
],
'size_units' => ['px'],
'range' => [
'px' => [
'min' => 0.2,
'max' => 1,
'step' => 0.1,
]
],
]
);
$this->add_responsive_control(
'eael_google_map_stroke_weight',
[
'label' => __('Weight', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 4,
],
'size_units' => ['px'],
'range' => [
'px' => [
'min' => 1,
'max' => 10,
'step' => 1,
]
],
]
);
$this->add_control(
'eael_google_map_stroke_fill_color',
[
'label' => esc_html__('Fill Color', 'essential-addons-elementor'),
'type' => Controls_Manager::COLOR,
'default' => '#e23a47',
'condition' => [
'eael_google_map_type' => ['polygon']
]
]
);
$this->add_responsive_control(
'eael_google_map_stroke_fill_opacity',
[
'label' => __('Fill Opacity', 'essential-addons-elementor'),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 0.4,
],
'size_units' => ['px'],
'range' => [
'px' => [
'min' => 0.2,
'max' => 1,
'step' => 0.1,
]
],
'condition' => [
'eael_google_map_type' => ['polygon']
]
]
);
$this->end_controls_section();
}
protected function get_map_theme($settings)
{
if ($settings['eael_google_map_theme_source'] == 'custom') {
return wp_strip_all_tags($settings['eael_google_map_custom_style']);
} else {
$themes = include('advance-gmap-themes.php');
if (isset($themes[$settings['eael_google_map_theme_source']][$settings['eael_google_map_gstandards']])) {
return $themes[$settings['eael_google_map_theme_source']][$settings['eael_google_map_gstandards']];
} elseif (isset($themes[$settings['eael_google_map_theme_source']][$settings['eael_google_map_snazzymaps']])) {
return $themes[$settings['eael_google_map_theme_source']][$settings['eael_google_map_snazzymaps']];
} else {
return '';
}
}
}
protected function map_render_data_attributes( $settings ) {
$new_settings = $this->get_settings();
return [
'data-map_type' => esc_attr($settings['eael_google_map_type']),
'data-map_address_type' => esc_attr($settings['eael_google_map_address_type']),
'data-map_lat' => esc_attr($this->get_settings('eael_google_map_lat')),
'data-map_lng' => esc_attr($this->get_settings('eael_google_map_lng')),
'data-map_addr' => esc_attr($settings['eael_google_map_addr']),
'data-map_basic_marker_title' => esc_attr($settings['eael_google_map_basic_marker_title']),
'data-map_basic_marker_content' => esc_attr($settings['eael_google_map_basic_marker_content']),
'data-map_basic_marker_icon_enable' => esc_attr($new_settings['eael_google_map_basic_marker_icon_enable']),
'data-map_basic_marker_icon' => esc_attr($new_settings['eael_google_map_basic_marker_icon']['url']),
'data-map_basic_marker_icon_width' => esc_attr($new_settings['eael_google_map_basic_marker_icon_width']['size']),
'data-map_basic_marker_icon_height' => esc_attr($new_settings['eael_google_map_basic_marker_icon_height']['size']),
'data-map_zoom' => esc_attr($settings['eael_google_map_zoom']),
'data-map_marker_content' => isset($settings['eael_google_map_marker_content']) ? esc_attr($settings['eael_google_map_marker_content']) : '',
'data-map_markers' => urlencode(wp_json_encode($new_settings['eael_google_map_markers'])),
'data-map_static_width' => esc_attr($new_settings['eael_google_map_static_width']['size']),
'data-map_static_height' => esc_attr($new_settings['eael_google_map_static_height']['size']),
'data-map_static_lat' => esc_attr($settings['eael_google_map_static_lat']),
'data-map_static_lng' => esc_attr($settings['eael_google_map_static_lng']),
'data-map_polylines' => urlencode(wp_json_encode($settings['eael_google_map_polylines'])),
'data-map_stroke_color' => esc_attr($new_settings['eael_google_map_stroke_color']),
'data-map_stroke_opacity' => esc_attr($new_settings['eael_google_map_stroke_opacity']['size']),
'data-map_stroke_weight' => esc_attr($new_settings['eael_google_map_stroke_weight']['size']),
'data-map_stroke_fill_color' => esc_attr($new_settings['eael_google_map_stroke_fill_color']),
'data-map_stroke_fill_opacity' => esc_attr($new_settings['eael_google_map_stroke_fill_opacity']['size']),
'data-map_overlay_content' => esc_attr($settings['eael_google_map_overlay_content']),
'data-map_routes_origin_lat' => esc_attr($settings['eael_google_map_routes_origin_lat']),
'data-map_routes_origin_lng' => esc_attr($settings['eael_google_map_routes_origin_lng']),
'data-map_routes_dest_lat' => esc_attr($settings['eael_google_map_routes_dest_lat']),
'data-map_routes_dest_lng' => esc_attr($settings['eael_google_map_routes_dest_lng']),
'data-map_routes_travel_mode' => esc_attr($settings['eael_google_map_routes_travel_mode']),
'data-map_panorama_lat' => esc_attr($settings['eael_google_map_panorama_lat']),
'data-map_panorama_lng' => esc_attr($settings['eael_google_map_panorama_lng']),
'data-map_theme' => urlencode(wp_json_encode($this->get_map_theme($settings))),
'data-map_streeview_control' => ($settings['eael_map_streeview_control'] ? 'true' : 'false'),
'data-map_type_control' => ($settings['eael_map_type_control'] ? 'true' : 'false'),
'data-map_zoom_control' => ($settings['eael_map_zoom_control'] ? 'true' : 'false'),
'data-map_fullscreen_control' => ($settings['eael_map_fullscreen_control'] ? 'true' : 'false'),
'data-map_scroll_zoom' => ($settings['eael_map_scroll_zoom'] ? 'true' : 'false')
];
}
protected function print_map_render_data_attribute_string($settings)
{
$data_attributes = $this->map_render_data_attributes($settings);
foreach ($data_attributes as $key => $value) {
if (isset($key) && !empty($value)) {
echo ' ' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
}
}
}
protected function get_polyline_center_point( $obj ) {
$center_type = $obj->get_settings_for_display( 'eael_google_map_center_point' );
if ( $center_type === 'auto' ) {
$poly_lines = $obj->get_settings_for_display( 'eael_google_map_polylines' );
if ( ! empty( $poly_lines ) ) {
$lat_array = wp_list_pluck( $poly_lines, 'eael_google_map_polyline_lat' );
$lng_array = wp_list_pluck( $poly_lines, 'eael_google_map_polyline_lng' );
} else {
$multy_lines = $obj->get_settings_for_display( 'eael_google_map_markers' );
$lat_array = wp_list_pluck( $multy_lines, 'eael_google_map_marker_lat' );
$lng_array = wp_list_pluck( $multy_lines, 'eael_google_map_marker_lng' );
}
$center_lat = ( max( $lat_array ) + min( $lat_array ) ) / 2;
$center_lng = ( max( $lng_array ) + min( $lng_array ) ) / 2;
} elseif ( $center_type === 'custom' ) {
$center_lat = $obj->get_settings_for_display( 'eael_google_map_center_point_lat' );
$center_lng = $obj->get_settings_for_display( 'eael_google_map_center_point_lng' );
} else {
$center_lat = $center_lng = '';
}
return [ 'center_lat' => $center_lat, 'center_lng' => $center_lng ];
}
protected function render()
{
$settings = $this->get_settings_for_display();
$poly_line_center = $this->get_polyline_center_point($this);
$this->add_render_attribute( 'eael_google_map_wrap', [
'class' => [ 'eael-google-map', 'eael-google-map-' . $settings['eael_google_map_type'] ],
'id' => 'eael-google-map-' . esc_attr( $this->get_id() ),
'data-id' => esc_attr( $this->get_id() ),
'data-map-center-lat' => $poly_line_center['center_lat'],
'data-map-center-lng' => $poly_line_center['center_lng'],
] );
?>
<?php if (!empty($settings['eael_google_map_type'])) : ?>
<div <?php
$this->print_render_attribute_string('eael_google_map_wrap');
$this->print_map_render_data_attribute_string($settings); // Already Escaped
?>></div>
<?php endif; ?>
<div class="google-map-notice"></div>
<?php
}
protected function content_template()
{
}
}