Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
happy-elementor-addons-pro
/
widgets
/
advanced-data-table
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Advanced Data Table * * @package Happy_Addons */ namespace Happy_Addons_Pro\Widget; use Elementor\Controls_Manager; use Elementor\Core\Schemes\Typography; use Elementor\Group_Control_Typography; use Elementor\Group_Control_Border; use Elementor\Group_Control_Background; use Elementor\Group_Control_Box_Shadow; use Elementor\Group_Control_Image_Size; use Elementor\Utils; use Elementor\Control_Media; defined('ABSPATH') || die(); class Advanced_Data_Table extends Base { /** * Get widget title. * * @return string Widget title. * @since 1.0.0 * @access public * */ public function get_title() { return __( 'Advanced Data Table', 'happy-addons-pro' ); } /** * Get widget icon. * * @return string Widget icon. * @since 1.0.0 * @access public * */ public function get_icon() { return 'hm hm-data-table'; } public function get_keywords() { return ['data', 'table', 'google', 'spreadsheet', 'advanced', 'row', 'column', 'tabular']; } // Whether the reload preview is required or not. public function is_reload_preview_required() { return true; } /** * Register content related controls */ protected function register_content_controls() { $this->start_controls_section( '_section_table', [ 'label' => __( 'Data Table', 'happy-addons-pro' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'table_type', [ 'type' => Controls_Manager::SELECT, 'label' => __( 'Table Type', 'happy-addons-pro' ), 'default' => 'google_sheet', 'options' => [ 'google_sheet' => __( 'Google Sheet', 'happy-addons-pro' ), 'table_press' => __( 'TablePress', 'happy-addons-pro' ), 'database' => __( 'Database', 'happy-addons-pro' ), 'import' => __( 'Import', 'happy-addons-pro' ), ] ] ); $this->add_control( 'import_table_data', [ 'label' => __( 'Add Data', 'happy-addons-pro' ), 'description' => __( 'Paste Data in CSV format. First Row will be Column Labels', 'happy-addons-pro' ), 'type' => Controls_Manager::TEXTAREA, 'rows' => 10, 'label_block' => true, 'condition' => [ 'table_type' => 'import' ], ] ); $this->add_control( 'database_tables_list', [ 'label' => __( 'Tables', 'happy-addons-pro' ), 'type' => Controls_Manager::SELECT, 'label_block' => true, 'condition' => [ 'table_type' => 'database' ], 'options' => ['' => __( 'Select Database Table', 'happy-addons-pro' ) ] + \hapro_db_tables_list(), ] ); $this->add_control( 'table_press_list', [ 'label' => __( 'Select Table', 'happy-addons-pro' ), 'type' => Controls_Manager::SELECT, 'label_block' => true, 'condition' => [ 'table_type' => 'table_press' ], 'options' => ['' => __( 'Select Table', 'happy-addons-pro' ) ] + \hapro_get_table_press_list(), ] ); $this->add_control( 'api_key', [ 'label' => __( 'Google API Key', 'happy-addons-pro' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'description' => sprintf('<a href="https://console.developers.google.com/" target="_blank">%s</a>', __( 'Get API Key', 'happy-addons-pro' ) ), 'condition' => [ 'table_type' => 'google_sheet' ] ] ); $this->add_control( 'sheet_id', [ 'label' => __( 'Google Sheet ID', 'happy-addons-pro' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'description' => __( 'Add Google Sheets ID.', 'happy-addons-pro' ), 'condition' => [ 'table_type' => 'google_sheet' ] ] ); $this->add_control( 'sheet_range', [ 'label' => __( 'Google Sheets Range', 'happy-addons-pro' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'description' => __( 'Add Google Sheets Range. Ex: A1:D5', 'happy-addons-pro' ), 'condition' => [ 'table_type' => 'google_sheet' ] ] ); $this->add_responsive_control( 'head_align', [ 'label' => __( 'Head Alignment', 'happy-addons-pro' ), 'type' => Controls_Manager::CHOOSE, 'separator' => 'before', 'options' => [ 'left' => [ 'title' => __( 'Left', 'happy-addons-pro' ), 'icon' => 'fa fa-align-left', ], 'center' => [ 'title' => __( 'Center', 'happy-addons-pro' ), 'icon' => 'fa fa-align-center', ], 'right' => [ 'title' => __( 'Right', 'happy-addons-pro' ), 'icon' => 'fa fa-align-right', ] ], 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__head-column-cell' => 'text-align: {{VALUE}}' ] ] ); $this->add_responsive_control( 'row_align', [ 'label' => __( 'Row Alignment', 'happy-addons-pro' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'left' => [ 'title' => __( 'Left', 'happy-addons-pro' ), 'icon' => 'fa fa-align-left', ], 'center' => [ 'title' => __( 'Center', 'happy-addons-pro' ), 'icon' => 'fa fa-align-center', ], 'right' => [ 'title' => __( 'Right', 'happy-addons-pro' ), 'icon' => 'fa fa-align-right', ] ], 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body-row-cell' => 'text-align: {{VALUE}}' ] ] ); $this->add_control( 'remove_cash', [ 'label' => __( 'Remove Cache', 'happy-addons-pro' ), 'description' => __( "Don't forget to off when you have done editing Google Sheet.", 'happy-addons-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => __( 'ON', 'happy-addons-pro' ), 'label_off' => __( 'OFF', 'happy-addons-pro' ), 'return_value' => 'yes', 'default' => 'no', 'separator' => 'before', 'condition' => [ 'table_type' => 'google_sheet' ] ] ); $this->end_controls_section(); $this->start_controls_section( '_section_table_settings', [ 'label' => __( 'Settings', 'happy-addons-pro' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'show_search', [ 'label' => __( 'Enable Search', 'happy-addons-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => __( 'ON', 'happy-addons-pro' ), 'label_off' => __( 'OFF', 'happy-addons-pro' ), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'show_pagination', [ 'label' => __( 'Enable Pagination', 'happy-addons-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => __( 'ON', 'happy-addons-pro' ), 'label_off' => __( 'OFF', 'happy-addons-pro' ), 'return_value' => 'yes', 'default' => '', 'prefix_class' => 'ha-enable-pagination-' ] ); $this->add_control( 'show_entries', [ 'label' => __( 'Enable Entries', 'happy-addons-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => __( 'ON', 'happy-addons-pro' ), 'label_off' => __( 'OFF', 'happy-addons-pro' ), 'return_value' => 'yes', 'default' => 'yes', 'prefix_class' => 'ha-show-entries-', 'condition' => [ 'show_pagination' => 'yes' ] ] ); $this->add_control( 'export_table', [ 'label' => __( 'Enable Export Table', 'happy-addons-pro' ), 'description' => __( 'Export as CSV file', 'happy-addons-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => __( 'ON', 'happy-addons-pro' ), 'label_off' => __( 'OFF', 'happy-addons-pro' ), 'return_value' => 'yes', 'default' => '', ] ); $this->add_control( 'export_table_text', [ 'label' => __( 'Export Table', 'happy-addons-pro' ), 'type' => Controls_Manager::TEXT, 'label_block' => false, 'default' => __( 'Export Table', 'happy-addons-pro' ), 'condition' => [ 'export_table' => 'yes' ] ] ); $this->add_control( 'allow_visitors_export_table', [ 'label' => __( 'Allow Visitors to Export Table', 'happy-addons-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => __( 'ON', 'happy-addons-pro' ), 'label_off' => __( 'OFF', 'happy-addons-pro' ), 'return_value' => 'yes', 'default' => '', 'condition' => [ 'export_table' => 'yes' ] ] ); $this->add_responsive_control( 'table_width', [ 'label' => __( 'Table Width for Horizontal Scroll', 'happy-addons-pro' ), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => [ 'min' => 0, 'max' => 1000, ], ], 'desktop_default' => [ 'unit' => 'px', 'size' => '' ], 'tablet_default' => [ 'unit' => 'px', 'size' => '768' ], 'mobile_default' => [ 'unit' => 'px', 'size' => '767' ], 'selectors' => [ '{{WRAPPER}} .dataTables_wrapper' => 'max-width: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); } /** * Register styles related controls */ protected function register_style_controls() { $this->start_controls_section( '_section_table_common', [ 'label' => __( 'Common', 'happy-addons-pro' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_control( 'search_heading', [ 'label' => __( 'Search', 'happy-addons-pro' ), 'type' => Controls_Manager::HEADING, ] ); $this->add_control( 'search_note', [ 'label' => false, 'type' => Controls_Manager::RAW_HTML, 'condition' => [ 'show_search' => '' ], 'raw' => __( 'Search is not Enable on <strong>Settings</strong>.', 'happy-addons-pro' ), ] ); $this->add_responsive_control( 'search_padding', [ 'label' => __( 'Padding', 'happy-addons-pro' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}} .dataTables_filter input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'search_border_radius', [ 'label' => __( 'Border Radius', 'happy-addons-pro' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}} .dataTables_filter input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'search_border', 'selector' => '{{WRAPPER}} .dataTables_filter input', ] ); $this->add_control( 'search_label_color', [ 'label' => __( 'Label Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_filter label' => 'color: {{VALUE}}', ], ] ); $this->add_control( 'search_input_background_color', [ 'label' => __( 'Input Background Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_filter input' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'pagination_heading', [ 'label' => __( 'Pagination', 'happy-addons-pro' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before' ] ); $this->add_control( 'pagination_note', [ 'label' => false, 'type' => Controls_Manager::RAW_HTML, 'condition' => [ 'show_pagination' => '' ], 'raw' => __( 'Pagination is not Enable on <strong>Settings</strong>.', 'happy-addons-pro' ), ] ); $this->add_responsive_control( 'pagination_top_spacing', [ 'label' => __( 'Top Spacing', 'happy-addons-pro' ), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'selectors' => [ '{{WRAPPER}} .dataTables_paginate ' => 'margin-top: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .dataTables_info ' => 'margin-top: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'pagination_spacing', [ 'label' => __( 'Space between', 'happy-addons-pro' ), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'selectors' => [ '{{WRAPPER}} .dataTables_paginate .paginate_button.previous' => 'margin-right: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .dataTables_paginate span a' => 'margin-right: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'pagination_padding', [ 'label' => __( 'Padding', 'happy-addons-pro' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}} .dataTables_paginate a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'pagination_border_radius', [ 'label' => __( 'Border Radius', 'happy-addons-pro' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}} .dataTables_paginate a' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'pagination_border', 'selector' => '{{WRAPPER}} .dataTables_paginate a', ] ); $this->add_control( 'show_entries_color', [ 'label' => __( 'Show Entries Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_length' => 'color: {{VALUE}}', ], ] ); $this->add_control( 'show_entries_Counter', [ 'label' => __( 'Data Counter Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_info' => 'color: {{VALUE}}', ], ] ); $this->start_controls_tabs( '_tabs_pagination' ); $this->start_controls_tab( '_tab_arrow_normal', [ 'label' => __( 'Normal', 'happy-addons-pro' ), ] ); $this->add_control( 'pagination_normal_background_color', [ 'label' => __( 'Background Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate a' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'pagination_normal_color', [ 'label' => __( 'Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate a' => 'color: {{VALUE}} !important', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( '_tab_active', [ 'label' => __( 'Active', 'happy-addons-pro' ), ] ); $this->add_control( 'pagination_active_background_color', [ 'label' => __( 'Background Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate span .paginate_button.current' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'pagination_active_color', [ 'label' => __( 'Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate span .paginate_button.current' => 'color: {{VALUE}} !important', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( '_tab_disabled', [ 'label' => __( 'Disabled', 'happy-addons-pro' ), ] ); $this->add_control( 'pagination_disabled_background_color', [ 'label' => __( 'Background Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate .paginate_button.disabled' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'pagination_disabled_color', [ 'label' => __( 'Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate .paginate_button.disabled' => 'color: {{VALUE}} !important', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( '_tab_hover', [ 'label' => __( 'Hover', 'happy-addons-pro' ), ] ); $this->add_control( 'pagination_hover_background_color', [ 'label' => __( 'Background Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate .paginate_button:not(.disabled):hover' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'pagination_hover_color', [ 'label' => __( 'Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .dataTables_paginate .paginate_button:not(.disabled):hover' => 'color: {{VALUE}} !important', ], ] ); $this->add_control( 'pagination_hover_border_color', [ 'label' => __( 'Border Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'pagination_border_border!' => '', ], 'selectors' => [ '{{WRAPPER}} .dataTables_paginate .paginate_button:not(.disabled):hover' => 'border-color: {{VALUE}} !important', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); $this->start_controls_section( '_section_table_head', [ 'label' => __( 'Table Head', 'happy-addons-pro' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'table_head_padding', [ 'label' => __( 'Padding', 'happy-addons-pro' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__head .ha-advanced-table__head-column-cell' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'head_border', 'selector' => '{{WRAPPER}} .ha-advanced-table__head .ha-advanced-table__head-column-cell', ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'head_typography', 'selector' => '{{WRAPPER}} .ha-advanced-table__head .ha-advanced-table__head-column-cell', 'scheme' => Typography::TYPOGRAPHY_3, ] ); $this->add_control( 'head_background_color', [ 'label' => __( 'Background Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__head .ha-advanced-table__head-column' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'head_color', [ 'label' => __( 'Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__head .ha-advanced-table__head-column-cell' => 'color: {{VALUE}}', ], ] ); $this->add_control( 'column_short_icon_color', [ 'label' => __( 'Sorting Icon Color', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__head-column-cell.sorting_asc:before' => 'border-bottom-color: {{VALUE}}', '{{WRAPPER}} .ha-advanced-table__head-column-cell.sorting_desc:after' => 'border-top-color: {{VALUE}}', '{{WRAPPER}} .ha-advanced-table__head-column-cell.sorting:before' => 'border-bottom-color: {{VALUE}}', '{{WRAPPER}} .ha-advanced-table__head-column-cell.sorting:after' => 'border-top-color: {{VALUE}}' ], ] ); $this->end_controls_section(); $this->start_controls_section( '_section_table_row', [ 'label' => __( 'Table Row', 'happy-addons-pro' ), 'tab' => Controls_Manager::TAB_STYLE, ] ); $this->add_responsive_control( 'table_row_padding', [ 'label' => __( 'Padding', 'happy-addons-pro' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%' ], 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row-cell' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'row_border', 'selector' => '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row-cell', ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'row_typography', 'selector' => '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row-cell', 'scheme' => Typography::TYPOGRAPHY_3, ] ); $this->start_controls_tabs( '_tabs_rows' ); $this->start_controls_tab( '_tab_head_row', [ 'label' => __( 'Normal', 'happy-addons-pro' ) ] ); $this->add_control( 'row_background_color_even', [ 'label' => __( 'Background Color (Even)', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(even)' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'row_background_color_odd', [ 'label' => __( 'Background Color (Odd)', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(odd)' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'row_color_even', [ 'label' => __( 'Color (Even) ', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(even)' => 'color: {{VALUE}}', ], ] ); $this->add_control( 'row_color_odd', [ 'label' => __( 'Color (Odd)', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(odd)' => 'color: {{VALUE}}', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( '_tab_row', [ 'label' => __( 'Hover', 'happy-addons-pro' ) ] ); $this->add_control( 'row_hover_background_color_even', [ 'label' => __( 'Background Color (Even)', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(even):hover' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'row_hover_background_color_odd', [ 'label' => __( 'Background Color (Odd)', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(odd):hover' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( 'row_hover_color_even', [ 'label' => __( 'Color (Even)', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(even):hover' => 'color: {{VALUE}}', ], ] ); $this->add_control( 'row_hover_color_odd', [ 'label' => __( 'Color (Odd)', 'happy-addons-pro' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ha-advanced-table__body .ha-advanced-table__body-row:nth-child(odd):hover' => 'color: {{VALUE}}', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } protected function render() { $settings = $this->get_settings_for_display(); if ( $settings['table_type'] == 'google_sheet' ) { $this->google_sheet_render( $this->get_id() ); } elseif ( $settings['table_type'] == 'database' ) { $this->database_table_render(); } elseif ( $settings['table_type'] == 'table_press' ) { $this->tablepress_render(); } elseif ( $settings['table_type'] == 'import' ) { $this->import_table_render(); } } protected function attributes() { $settings = $this->get_settings_for_display(); // echo "<pre>"; // print_r($settings); // echo "</pre>"; $this->add_render_attribute( 'data-table', 'class', 'ha-advanced-table' ); $this->add_render_attribute( 'data-table', 'data-widget-id', $this->get_id() ); if ( $settings['show_search'] == 'yes' ) { $this->add_render_attribute( 'data-table', 'data-search', 'true' ); } else $this->add_render_attribute( 'data-table', 'data-search', 'false' ); if ( $settings['show_pagination'] == 'yes' ) { $this->add_render_attribute( 'data-table', 'data-paging', 'true' ); } else $this->add_render_attribute( 'data-table', 'data-paging', 'false' ); if ( ! empty( $settings['table_width']['size'] ) ) { $this->add_render_attribute( 'data-table', 'data-scroll-x', 'true' ); } if ( $settings['export_table'] == 'yes' ) { $this->add_render_attribute( 'data-table', 'data-export-table-text', esc_attr( $settings['export_table_text'] ) ); if ( $settings['allow_visitors_export_table'] == 'yes' ) { $this->add_render_attribute( 'data-table', 'data-export-table', 'true' ); } else { is_admin() == true ? $this->add_render_attribute( 'data-table', 'data-export-table', 'true' ) : null; } } } protected function google_sheet_render($id) { $settings = $this->get_settings_for_display(); $error_message = []; $sheet_id = esc_html( $settings['sheet_id'] ); $range = $settings['sheet_range'] ? str_replace(':', '%3A', esc_html( trim( $settings['sheet_range'] ) ) ) : ''; $api_key = esc_html( $settings['api_key'] ); $base_url = 'https://sheets.googleapis.com/v4/spreadsheets/'; $parameters = '?dateTimeRenderOption=FORMATTED_STRING&majorDimension=ROWS&valueRenderOption=FORMATTED_VALUE&key='; $url = $base_url . $sheet_id .'/values/'. $range . $parameters . $api_key; // error handling for editor fields. if ( empty( $api_key ) ) { $error_message[] = __( 'Add API key', 'happy-addons-pro' ); } elseif ( empty( $sheet_id ) ) { $error_message[] = __( 'Add Google Sheets ID', 'happy-addons-pro' ); } elseif ( empty( $range ) ) { $error_message[] = __( 'Add Sheets Range', 'happy-addons-pro' ); } if ( ! empty( $error_message ) ) { return printf( '<div class="ha-data-table-error">%s</div>', $error_message[0] ); } $transient_key = $id . '_data_table_cash'; $table_data = get_transient( $transient_key ); if ( false === $table_data ) { $data = wp_remote_get( $url ); $table_data = json_decode( wp_remote_retrieve_body( $data ), true ); set_transient( $transient_key, $table_data, 0 ); } if ( $settings['remove_cash'] == 'yes' ) { delete_transient( $transient_key ); } // error handling for google sheet if ( empty( $table_data ) ) { $error_message['sheet_empty'] = __( 'Google Sheet is Empty', 'happy-addons-pro' ); return printf( '<div class="ha-data-table-error">%s</div>', $error_message['sheet_empty'] ); } elseif ( ! empty( $table_data ) && ! empty( $table_data['error'] ) ) { $error_message['sheet_error'] = $table_data['error']['message']; if ( ! empty( $error_message['sheet_error'] ) ) { return printf( '<div class="ha-data-table-error">%s</div>', $error_message['sheet_error'] ); } } // echo "<pre>"; // print_r($table_data); // echo "<pre>"; $table_columns = $table_data['values'][0]; $table_rows = array_splice($table_data['values'], 1, count( $table_data['values'] ) ); $this->attributes(); ?> <table <?php echo $this->get_render_attribute_string( 'data-table' ); ?>> <thead class="ha-advanced-table__head"> <tr class="ha-advanced-table__head-column"> <?php foreach ( $table_columns as $column ) : ?> <th class="ha-advanced-table__head-column-cell"><?php echo esc_html( $column ); ?></th> <?php endforeach; ?> </tr> </thead> <tbody class="ha-advanced-table__body"> <?php for( $i = 0; $i < count( $table_rows ); $i++ ) : if ( count( $table_columns ) > count( $table_rows[$i] ) ) { $diference = count( $table_columns ) - count( $table_rows[$i] ); for( $j = 0; $j < $diference; $j++ ) { array_push( $table_rows[$i], null ); } } ?> <tr class="ha-advanced-table__body-row"> <?php foreach ( $table_rows[$i] as $row ) : $cell = $row == null ? '' : $row; ?> <td class="ha-advanced-table__body-row-cell"><?php echo esc_html( $cell ); ?></td> <?php endforeach; ?> </tr> <?php endfor; ?> </tbody> </table> <?php } protected function database_table_render() { global $wpdb; $settings = $this->get_settings_for_display(); $table_name = $settings["database_tables_list"]; if ( empty( $table_name ) ) { return printf( '<div class="ha-data-table-error">%s</div>', __( 'Select Table', 'happy-addons-pro' ) ); } $table = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A); if ( is_wp_error( $table ) ) { return printf( '<div class="ha-data-table-error">%s</div>', $table->get_error_message() ); } $this->attributes(); ?> <table <?php echo $this->get_render_attribute_string( 'data-table' ); ?>> <thead class="ha-advanced-table__head"> <tr class="ha-advanced-table__head-column"> <?php foreach ( array_keys($table[0]) as $key => $column ) : ?> <th class="ha-advanced-table__head-column-cell"><?php echo esc_html( $column ); ?></th> <?php endforeach; ?> </tr> </thead> <tbody class="ha-advanced-table__body"> <?php for( $i = 0; $i < count( $table ); $i++ ) : ?> <tr class="ha-advanced-table__body-row"> <?php foreach ( $table[$i] as $row ) : ?> <td class="ha-advanced-table__body-row-cell"><?php echo esc_html( $row ); ?></td> <?php endforeach; ?> </tr> <?php endfor; ?> </tbody> </table> <?php } protected function tablepress_render() { $settings = $this->get_settings_for_display(); if ( ! hapro_is_table_press_activated() ) { return printf( '<div class="ha-data-table-error">%s</div>', __( 'Install TablePress', 'happy-addons-pro' ) ); } if ( empty( hapro_get_table_press_list() ) ) { return printf( '<div class="ha-data-table-error">%s</div>', __( 'Create Table', 'happy-addons-pro' ) ); } if ( empty( $settings['table_press_list'] ) ) { return printf( '<div class="ha-data-table-error">%s</div>', __( 'Select Table', 'happy-addons-pro' ) ); } $tables = []; $tables_option = get_option( 'tablepress_tables', '{}' ); $tables_opt = json_decode( $tables_option, true ); $tables = $tables_opt['table_post']; $table_id = $tables[$settings['table_press_list']]; $table_data = get_post_field( 'post_content', $table_id ); $tables = json_decode( $table_data, true ); $this->attributes(); ?> <table <?php echo $this->get_render_attribute_string( 'data-table' ); ?>> <thead class="ha-advanced-table__head"> <tr class="ha-advanced-table__head-column"> <?php foreach ( $tables[0] as $key => $column ) : ?> <th class="ha-advanced-table__head-column-cell"><?php echo esc_html( $column ); ?></th> <?php endforeach; ?> </tr> </thead> <tbody class="ha-advanced-table__body"> <?php for( $i = 0; $i < count( $tables ); $i++ ) : ?> <tr class="ha-advanced-table__body-row"> <?php foreach ( $tables[$i] as $row ) : ?> <td class="ha-advanced-table__body-row-cell"><?php echo esc_html( $row ); ?></td> <?php endforeach; ?> </tr> <?php endfor; ?> </tbody> </table> <?php } protected function import_table_render() { $settings = $this->get_settings_for_display(); if ( empty( $settings['import_table_data'] ) ) { return printf( '<div class="ha-data-table-error">%s</div>', __( 'Paste Data in CSV format.', 'happy-addons-pro' ) ); } $table_data = explode( "\n", $settings['import_table_data'] ); $columns = explode( ',', $table_data[0] ); $table_rows = array_splice( $table_data, 1, count( $table_data ) ); $this->attributes(); ?> <table <?php echo $this->get_render_attribute_string( 'data-table' ); ?>> <thead class="ha-advanced-table__head"> <tr class="ha-advanced-table__head-column"> <?php foreach ( $columns as $key => $column ) : ?> <th class="ha-advanced-table__head-column-cell"><?php echo esc_html( $column ); ?></th> <?php endforeach; ?> </tr> </thead> <tbody class="ha-advanced-table__body"> <?php for( $i = 0; $i < count( $table_rows ); $i++ ) : $rows = explode( ',', $table_rows[$i]); ?> <tr class="ha-advanced-table__body-row"> <?php foreach ( $rows as $row ) : ?> <td class="ha-advanced-table__body-row-cell"><?php echo esc_html( $row ); ?></td> <?php endforeach; ?> </tr> <?php endfor; ?> </tbody> </table> <?php } }