File "class.wpdatachart.php"

Full Path: /var/www/bvnghean.vn/save_bvnghean.vn/wp-content/plugins/wpDataTables_v1.6.1/source/class.wpdatachart.php
File size: 28.64 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * Chart engine of wpDataTables plugin
 */

class WPDataChart {
    
   private $_id = NULL;
   private $_wpdatatable_id = NULL;
   private $_title = '';
   private $_engine = '';
   private $_type = '';
   private $_range_type = 'all';
   private $_selected_columns = array();
   private $_row_range = array();
   private $_follow_filtering = false;
   private $_wpdatatable = NULL;
   private $_show_title = true;
   private $_width = 400;
   private $_height = 400;
   private $_show_grid = true;
   private $_show_legend = true;
   private $_user_defined_series_data = array();
   private $_render_data = NULL;
   private $_highcharts_render_data = array();
   private $_type_counters;
   
   private $_axes = array(
       'major' => array(
           'label' => ''
       ),
       'minor' => array(
           'label' => ''
       )
   );
   private $_series = array(
       
   );
   
   public function __construct(){
       
   }
   
   public function setId( $id ){
       $this->_id = $id;
   }
   
   public function getId(){
       return $this->_id;
   }
   
   public function setShowTitle( $show_title ){
       $this->_show_title = (bool) $show_title;
   }
   
   public function getShowTitle(){
       return $this->_show_title;
   }
   
   public function setWidth( $width ){
       $this->_width = $width;
   }
   
   public function getWidth(){
       return $this->_width;
   }
   
   public function setHeight( $height ){
       $this->_height = $height;
   }
   
   public function getHeight(){
        return $this->_height;
   }
   
   public function setShowGrid( $show_grid ){
       $this->_show_grid = (bool) $show_grid;
   }
   
   public function getShowGrid(){
       return $this->_show_grid;
   }
   
   public function setShowLegend( $show_legend ){
       $this->_show_legend = (bool) $show_legend;
   }
   
   public function getShowLegend(){
       return $this->_show_legend;
   }
   
   public function setMajorAxisLabel( $label ){
       $this->_axes['major']['label'] = $label;
   }
   
   public function getMajorAxisLabel(){
       return $this->_axes['major']['label'];
   }
   
   public function setMinorAxisLabel( $label ){
       $this->_axes['minor']['label'] = $label;
   }
   
   public function getMinorAxisLabel(){
       return $this->_axes['minor']['label'];
   }
   
   public function setUserDefinedSeriesData( $series_data ){
       if( is_array( $series_data ) ){
           $this->_user_defined_series_data = $series_data;
       }
   }
   
   public function getUserDefinedSeriesData(){
       return $this->_user_defined_series_data;
   }
   
   public function setFollowFiltering( $follow_filtering ){
       $this->_follow_filtering = $follow_filtering;
   }
   
   public function getFollowFiltering(){
       return $this->_follow_filtering;
   }
   
   public function setEngine( $engine ){
       $this->_engine = $engine;
   }
   
   public function getEngine(){
       return $this->_engine;
   }
   
   public function setType( $type ){
       $this->_type = $type;
   }
   
   public function getType(){
       return $this->_type;
   }
   
   public function setTitle( $title ){
       $this->_title = $title;
   }
   
   public function getTitle(){
       return $this->_title;
   }
   
   public function setRowRange( $row_range ){
       $this->_row_range = $row_range;
   }
   
   public function getRowRange(){
       return $this->_row_range;
   }
   
   public function setSelectedColumns( $selected_columns ){
       $this->_selected_columns = $selected_columns;
   }
   
   public function getSelectedColumns(){
       return $this->_selected_columns;
   }
   
   public function setwpDataTableId( $wdt_id ){
       $this->_wpdatatable_id = $wdt_id;
   }
   
   public function getwpDataTableId(){
       return $this->_wpdatatable_id;
   }

   public function setRangeType( $range_type ){
       $this->_range_type = $range_type;
   }
   
   public function getRangeType(){
       return $this->_range_type;
   }
   
   public static function factory( $constructedChartData, $loadFromDB = true ){
       $chartObj = new self();
       
       if( isset( $constructedChartData['chart_id'] ) ){
            $chartObj->setId( (int) $constructedChartData['chart_id'] );
            if( $loadFromDB ){
                $chartObj->loadFromDB();
                $chartObj->prepareData();
                $chartObj->shiftStringColumnUp();
            }
       }
       
       // Main data (steps 1-3 of chart constructor)
       $chartObj->setwpDataTableId( $constructedChartData['wpdatatable_id'] );
       $chartObj->setTitle( $constructedChartData['chart_title'] );
       $chartObj->setEngine( $constructedChartData['chart_engine'] );
       $chartObj->setType( $constructedChartData['chart_type'] );
       $chartObj->setSelectedColumns( $constructedChartData['selected_columns'] );
       $chartObj->setRangeType( $constructedChartData['range_type'] );
       if( isset( $constructedChartData['range_data'] ) ){
         $chartObj->setRowRange( $constructedChartData['range_data'] );
       }
       $chartObj->setFollowFiltering( (bool) $constructedChartData['follow_filtering'] );
       
       // Render data (step 4 or chart constructor)
       $chartObj->setShowTitle( WDTTools::defineDefaultValue( $constructedChartData, 'show_title', '' ) );
       $chartObj->setWidth( WDTTools::defineDefaultValue( $constructedChartData, 'width', 400 ) );
       $chartObj->setHeight( WDTTools::defineDefaultValue( $constructedChartData, 'height', 400 ) );
       $chartObj->setShowGrid( WDTTools::defineDefaultValue( $constructedChartData, 'show_grid', true ) );
       $chartObj->setShowLegend( WDTTools::defineDefaultValue( $constructedChartData, 'show_legend', true ) );
       $chartObj->setMajorAxisLabel( WDTTools::defineDefaultValue( $constructedChartData, 'horizontal_axis_label', '' ) );
       $chartObj->setMinorAxisLabel( WDTTools::defineDefaultValue( $constructedChartData, 'vertical_axis_label', '' ) );
       
       if( !empty( $constructedChartData['series_data'] ) ){
           $chartObj->setUserDefinedSeriesData( $constructedChartData['series_data'] );
       }
       
       $chartObj->loadChildWPDataTable();
       
       return $chartObj;
   }
   
   public function loadChildWPDataTable(){
       if( empty( $this->_wpdatatable_id ) ) { return false; }
       $this->_wpdatatable = wdt_get_wpdatatable( $this->_wpdatatable_id, empty( $this->_follow_filtering ) );
   }
   
   public function shiftStringColumnUp(){
       /**
        * Check if the string column is not in the beginning and move it up
        */
       if( count( $this->_render_data['columns'] ) > 1 ){
            $shiftNeeded = false;
            $shiftIndex = 0;
            for( $i = 1; $i < count( $this->_render_data['columns'] ); $i++ ){
                if( $this->_render_data['columns'][$i]['type'] == 'string' ){
                    $shiftNeeded = true;
                    $shiftIndex = $i;
                    break;
                }
            }
            
            if( $shiftNeeded ){
                // Shift columns
                $strColumn = $this->_render_data['columns'][$shiftIndex];
                unset( $this->_render_data['columns'][$shiftIndex] );
                array_unshift( $this->_render_data['columns'], $strColumn );
                // Shift rows
                for( $j=0; $j<count( $this->_render_data['rows'] ); $j++ ){
                    $strCell = $this->_render_data['rows'][$j][$shiftIndex];
                    unset( $this->_render_data['rows'][$j][$shiftIndex] );
                    array_unshift( $this->_render_data['rows'][$j], $strCell );
                }
                // Shift column indexes
                if( isset( $this->_render_data['column_indexes'] ) ){
                    $shiftedIndex = $this->_render_data['column_indexes'][$shiftIndex];
                    unset( $this->_render_data['column_indexes'][$shiftIndex] );
                    array_unshift( $this->_render_data['column_indexes'], $shiftedIndex );
                }
            }
       }
       
       // Format axes
        $this->_render_data['axes']['major'] = array(
            'type' => $this->_render_data['columns'][0]['type'],
            'label' => !empty( $this->_render_data['hAxis']['title'] ) ?
                $this->_render_data['hAxis']['title'] : $this->_render_data['columns'][0]['label']
        );
        $this->_render_data['axes']['minor'] = array(
            'type' => $this->_render_data['columns'][1]['type'],
            'label' => !empty( $this->_render_data['vAxis']['title'] ) ?
                $this->_render_data['vAxis']['title'] : ''
        );

        // Get all series names
        if( empty( $this->_render_data['series'] ) ){
            for( $i = 1; $i < count( $this->_render_data['columns'] ); $i++ ){
                $this->_render_data['series'][] = array( 
                    'label' => $this->_render_data['columns'][$i]['label'],
                    'color' => '',
                    'orig_header' => $this->_render_data['columns'][$i]['orig_header']
                );
            }        
        }
       
   }
  
   public function prepareSeriesData(){
       // Init render data if it is empty
       if( empty($this->_render_data) ){
            $this->_render_data = array(
                'columns' => array(),
                'rows' => array(),
                'axes' => array(),
                'options' => array(
                    'title' => $this->_show_title ? $this->_title : '',
                    'series' => array(),
                    'width' => $this->_width,
                    'height' => $this->_height
                ),
                'vAxis' => array(

                ),
                'hAxis' => array(

                ),
                'errors' => array(),
                'series' => array()
            );
       }
        
       $this->_type_counters = array(
           'date' => 0,
           'string' => 0,
           'number' => 0
       );
       
       // Define columns
       foreach( $this->getSelectedColumns() as $columnKey ){
           $columnType = $this->_wpdatatable->getColumn( $columnKey )->getGoogleChartColumnType();
           $this->_render_data['columns'][] = array(
                    'type' =>  $columnType,
                    'label' =>  isset( $this->_user_defined_series_data[$columnKey]['label'] ) ? 
                                    $this->_user_defined_series_data[$columnKey]['label'] : $this->_wpdatatable->getColumn( $columnKey )->getTitle(),
                    'orig_header' => $columnKey
                );
           $this->_type_counters[$columnType]++;
       }
       
       // Define axes titles
       if( isset( $this->_axes['major']['label'] ) ){
           $this->_render_data['options']['hAxis']['title'] = $this->_axes['major']['label'];
       }
       if( isset( $this->_axes['minor']['label'] ) ){
           $this->_render_data['options']['vAxis']['title'] = $this->_axes['minor']['label'];
       }
       
       // Define series colors
       if( !empty( $this->_user_defined_series_data ) ){
           $seriesIndex = 0;
           foreach( $this->_user_defined_series_data as $series_data ){
                if( !empty( $series_data['color'] ) ){
                    $this->_render_data['options']['series'][(int) $seriesIndex] = array(
                        'color' => $series_data['color']
                    );
                }
                $seriesIndex++;
           }
       }
       
       // Define grid settings
       if( !$this->_show_grid ){
           if( !isset( $this->_render_data['options']['hAxis'] ) ){
               $this->_render_data['options']['hAxis'] = array();
           }
           $this->_render_data['options']['hAxis']['gridlines'] = array(
               'color' => 'transparent'
           );
           if( !isset( $this->_render_data['options']['vAxis'] ) ){
               $this->_render_data['options']['vAxis'] = array();
           }
           $this->_render_data['options']['vAxis']['gridlines'] = array(
               'color' => 'transparent'
           );
        }
       
        // Define legend settings
        if( !$this->_show_legend ){
            $this->_render_data['options']['legend'] = 'none';
        }

       // Detect errors
       if( $this->_type_counters['string'] > 1 ){
           $this->_render_data['errors'][] = __( 'Only one column can be of type String', 'wpdatatables' );
       }
       if( ( $this->_type_counters['number'] > 1 ) && ( $this->_type_counters['date'] > 1 ) ){
           $this->_render_data['errors'][] = __( 'You are mixing data types (several date axes and several number)', 'wpdatatables' );
       }
       
   }
   
   
   /**
    * Prepares the data for Google charts format
    */
   public function prepareData(){
       
       // Prepare series and columns
       if( empty( $this->_render_data['columns'] ) ){
            $this->prepareSeriesData();
       }
       
       $dateFormat = ( $this->getEngine() == 'google' ) ? DateTime::RFC2822 : get_option( 'wdtDateFormat' );
       
       // The data itself
       if( empty( $this->_render_data['rows'] ) ){
            if( $this->getRangeType() == 'all_rows' ){
                 foreach( $this->_wpdatatable->getDataRows() as $row ){
                     $return_data_row = array( );
                     foreach( $this->getSelectedColumns() as $columnKey ){
                          $dataType = $this->_wpdatatable->getColumn( $columnKey )->getDataType();
                          switch( $dataType ){
                              case 'date':
                                  $return_data_row[] = date( 
                                          $dateFormat, 
                                          strtotime( 
                                                     str_replace( '/', '-', $row[$columnKey] )
                                                 )
                                          );
                                  break;
                              case 'int':
                                  $return_data_row[] = (float) $row[$columnKey];
                                  break;
                              case 'float':
                                  $return_data_row[] = (float) $row[$columnKey];
                                  break;
                              case 'string':
                              default:
                                 $return_data_row[] = $row[$columnKey];
                                 break;
                          }
                     }
                     $this->_render_data['rows'][] = $return_data_row;
                 }
            }else{
                 foreach( $this->_row_range as $rowIndex ){
                     $return_data_row = array( );
                      foreach( $this->getSelectedColumns() as $columnKey ){

                          $dataType = $this->_wpdatatable->getColumn( $columnKey )->getDataType();
                          switch( $dataType ){
                              case 'date':
                                  $return_data_row[] = date( 
                                          $dateFormat,
                                          strtotime( 
                                                     str_replace( '/', '-', $this->_wpdatatable->getCell( $columnKey, $rowIndex ) )
                                                  )
                                          );
                                  break;
                              case 'int':
                                  $return_data_row[] = (float) $this->_wpdatatable->getCell( $columnKey, $rowIndex );
                                  break;
                              case 'float':
                                  $return_data_row[] = (float) $this->_wpdatatable->getCell( $columnKey, $rowIndex );
                                  break;
                              case 'string':
                              default:
                                 $return_data_row[] = $this->_wpdatatable->getCell( $columnKey, $rowIndex );
                                 break;
                          }

                      }
                     $this->_render_data['rows'][] = $return_data_row;
                 }
            }
           
       }
       
      $this->_render_data['type'] = $this->_type;
      return $this->_render_data;  
    }
   
   public function getAxesAndSeries(){
       if( empty( $this->_render_data['columns'] ) ){
            $this->prepareSeriesData();
            $this->shiftStringColumnUp();
       }
       return $this->_render_data;
   }
   
   public function returnGoogleChartData(){
        $this->prepareData();
        $this->shiftStringColumnUp();
        return $this->_render_data;
   }
   
   public function prepareHighchartsRender(){
       $highchartsRender = array( 
                'title' => array(
                    'text' => $this->_show_title ? $this->getTitle() : ''
                ),
                'series' => array(), 
                'xAxis' => array()
           );
       if( !in_array( 
               $this->_type, 
               array( 
                   'highcharts_pie_chart',
                   'highcharts_pie_with_gradient_chart',
                   'highcharts_donut_chart',
                   'highcharts_3d_pie_chart',
                   'highcharts_3d_donut_chart',
                   'highcharts_angular_gauge_chart',
                   'highcharts_solid_gauge_chart'
                   ) 
               ) ){
            for( $i=0; $i < count( $this->_render_data['columns'] ); $i++ ){
                if( $i == 0 ){
                 $highchartsRender['xAxis']['categories'] = array();
                }else{
                    
                 $seriesEntry = array(
                     'name' => $this->_render_data['series'][$i-1]['label'],
                     'color' => isset( $this->_render_data['options']['series'][$i-1] ) ? 
                            $this->_render_data['options']['series'][$i-1]['color'] : '',
                     'data' => array()
                 );
                }
                foreach( $this->_render_data['rows'] as $row ){
                     if( $i == 0 ){
                      $highchartsRender['xAxis']['categories'][] = $row[$i];
                     }else{
                      $seriesEntry['data'][] = $row[$i];
                     }
                }
                if( $i != 0 ){
                    $highchartsRender['series'][] = $seriesEntry;
                }
            }
       }else{
           if( 
                in_array(
                            $this->_type,
                            array(
                                'highcharts_pie_chart',
                                'highcharts_pie_with_gradient_chart',
                                'highcharts_donut_chart',
                                'highcharts_3d_pie_chart',
                                'highcharts_3d_donut_chart'
                            )
                        ) 
                   ){
                       $seriesEntry = array(
                           'type' => 'pie',
                           'data' => array()
                       );
                    $highchartsRender['series'] = array(
                        array(
                            'type' => 'pie',
                            'name' => $this->_render_data['columns'][1]['label'],
                            'data' => $this->_render_data['rows']
                        )
                    );
                    unset( $highchartsRender['xAxis'] );
           }
       }
       $this->_highcharts_render_data['options'] = $highchartsRender;
       $this->_highcharts_render_data['width'] = $this->getWidth();
       $this->_highcharts_render_data['height'] = $this->getHeight();
       $this->_highcharts_render_data['type'] = $this->getType();
       if( !empty( $this->_render_data['options']['hAxis']['title'] ) ){
           $this->_highcharts_render_data['options']['xAxis']['title']['text'] =  $this->_render_data['options']['hAxis']['title'];
       }
       if( !empty( $this->_render_data['options']['vAxis']['title'] ) ){
           $this->_highcharts_render_data['options']['yAxis']['title']['text'] =  $this->_render_data['options']['vAxis']['title'];
       }
       if( $this->_follow_filtering ){
           if( isset( $this->_render_data['column_indexes'] ) ){
                $this->_highcharts_render_data['column_indexes'] = $this->_render_data['column_indexes'];
           }
       }
       if( !$this->_show_grid ){
            $this->_highcharts_render_data['options']['xAxis']['lineWidth'] = 0;
            $this->_highcharts_render_data['options']['xAxis']['minorGridLineWidth'] = 0;
            $this->_highcharts_render_data['options']['xAxis']['lineColor'] = 'transparent';
            $this->_highcharts_render_data['options']['xAxis']['minorTickLength'] = 0;
            $this->_highcharts_render_data['options']['xAxis']['tickLength'] = 0;
            $this->_highcharts_render_data['options']['yAxis']['lineWidth'] = 0;
            $this->_highcharts_render_data['options']['yAxis']['gridLineWidth'] = 0;
            $this->_highcharts_render_data['options']['yAxis']['minorGridLineWidth'] = 0;
            $this->_highcharts_render_data['options']['yAxis']['lineColor'] = 'transparent';
            $this->_highcharts_render_data['options']['yAxis']['labels'] = array( 'enabled' => false );
            $this->_highcharts_render_data['options']['yAxis']['minorTickLength'] = 0;
            $this->_highcharts_render_data['options']['yAxis']['tickLength'] = 0;
       }
       if( !$this->_show_legend ){
           $this->_highcharts_render_data['options']['legend']['enabled'] = false;
       }
   }
   
   public function returnHighChartsData(){
       $this->prepareData();
       $this->shiftStringColumnUp();
       $this->prepareHighchartsRender();
       return $this->_highcharts_render_data;
   }
   
   public function returnData(){
       if( $this->getEngine() == 'google' ){
           return $this->returnGoogleChartData();
       }else{
           return $this->returnHighChartsData();
       }
   }
    
   
   /**
    * Saves the chart data to DB
    * @global WPDB $wpdb
    */
   public function save(){
       global $wpdb;
       
        $this->prepareSeriesData();
        $this->shiftStringColumnUp();
           
        $render_data = array(
            'selected_columns' => $this->getSelectedColumns(),
            'range_type' => $this->getRangeType(),
            'row_range' => $this->getRowRange(),
            'follow_filtering' => $this->getFollowFiltering(),
            'render_data' => $this->_render_data,
            'show_title' => $this->_show_title,
            'show_legend' => $this->_show_legend,
            'show_grid' => $this->_show_grid
        );
        
       
       if( empty( $this->_id ) ){
           // This is a new chart
           
           $wpdb->insert(
                   $wpdb->prefix."wpdatacharts",
                   array(
                       'wpdatatable_id' => $this->_wpdatatable_id,
                       'title' => $this->_title,
                       'engine' => $this->_engine,
                       'type' => $this->_type,
                       'json_render_data' => json_encode( $render_data )
                   )
            );
           
           $this->_id = $wpdb->insert_id;
           
       }else{
           // Updating the chart
           $wpdb->update(
                   $wpdb->prefix."wpdatacharts",
                   array(
                       'wpdatatable_id' => $this->_wpdatatable_id,
                       'title' => $this->_title,
                       'engine' => $this->_engine,
                       'type' => $this->_type,
                       'json_render_data' => json_encode( $render_data )
                   ),
                   array(
                       'id' => $this->_id
                   )
            );
           
       }
       
   }
   
   public function getColumnIndexes(){
       
       foreach( $this->getSelectedColumns() as $columnKey ){
           $this->_render_data['column_indexes'][] = $this->_wpdatatable->getColumnHeaderOffset( $columnKey );
       }
   }
   
   /**
    * Return the shortcode
    */
   public function getShortCode(){
       if( !empty( $this->_id ) ){
           return '[wpdatachart id='.$this->_id.']';
       }else{
           return '';
       }
   }
   
   /**
    * Load from DB
    */
   public function loadFromDB(){
       global $wpdb;
       
       if( empty( $this->_id ) ){
           return false;
       }
       
       // Load json data from DB
       $chartQuery = $wpdb->prepare( 
                                "SELECT * 
                                    FROM ".$wpdb->prefix."wpdatacharts 
                                    WHERE id = %d", 
                                    $this->_id 
                            );
       $chartData = $wpdb->get_row( $chartQuery );
       
       $this->setTitle( $chartData->title );
       $this->setEngine( $chartData->engine );
       $this->setwpDataTableId( $chartData->wpdatatable_id );
       $this->setType( $chartData->type );
       
       $renderData = json_decode( $chartData->json_render_data, true );
       $this->_render_data = $renderData['render_data'];
       $this->setSelectedColumns( $renderData['selected_columns'] );
       $this->setFollowFiltering( $renderData['follow_filtering'] );
       $this->setRangeType( $renderData['range_type'] );
       $this->setRowRange( $renderData['row_range'] );
       $this->setShowGrid( isset( $renderData['show_grid'] ) ? $renderData['show_grid'] : false );
       $this->setShowTitle( isset( $renderData['show_title'] ) ? $renderData['show_title'] : false );
       $this->setShowLegend( isset( $renderData['show_legend'] ) ? $renderData['show_legend'] : false );
       $this->setWidth( $renderData['render_data']['options']['width'] );
       $this->setHeight( $renderData['render_data']['options']['height'] );
       $this->loadChildWPDataTable();
   }
   
   /**
    * Render Chart
    */
   public function renderChart(){
       
       $minified_js = get_option('wdtMinifiedJs');
       
       $this->prepareData();
       if( $this->_follow_filtering ){
            $this->getColumnIndexes();
       }

       $this->shiftStringColumnUp();
       
       if( $this->_engine == 'google' ){
            // Google Chart JS
            wp_enqueue_script( 'wdt_google_charts', '//www.google.com/jsapi' );           
            if( $minified_js ){
                // Google Chart wpDataTable JS library
                wp_enqueue_script( 'wpdatatables-google-chart', WDT_JS_PATH.'wpdatatables/wpdatatables_google_charts.min.js' );
                // wpDataCharts render script
                wp_enqueue_script( 'wpdatatables-render-chart', WDT_JS_PATH.'wpdatatables/wpdatacharts_render.min.js' );
            }else{
                // Google Chart wpDataTable JS library
                wp_enqueue_script( 'wpdatatables-google-chart', WDT_JS_PATH.'wpdatatables/wpdatatables_google_charts.js' );
                // wpDataCharts render script
                wp_enqueue_script( 'wpdatatables-render-chart', WDT_JS_PATH.'wpdatatables/wpdatacharts_render.js' );
            }
            $json_chart_render_data = json_encode( $this->_render_data );
       }else{
            $this->prepareHighchartsRender();
            // Highchart JS
            wp_enqueue_script('wdt_highcharts','//code.highcharts.com/highcharts.js');
            wp_enqueue_script('wdt_highcharts3d','//code.highcharts.com/highcharts-3d.js');
            if( $minified_js ){
                // Highchart wpDataTable JS library
                wp_enqueue_script('wpdatatables-highcharts',WDT_JS_PATH.'wpdatatables/wpdatatables_highcharts.min.js');
                // wpDataCharts render script
                wp_enqueue_script( 'wpdatatables-render-chart', WDT_JS_PATH.'wpdatatables/wpdatacharts_render.min.js' );
            }else{
                // Highchart wpDataTable JS library
                wp_enqueue_script('wpdatatables-highcharts',WDT_JS_PATH.'wpdatatables/wpdatatables_highcharts.js');
                // wpDataCharts render script
                wp_enqueue_script( 'wpdatatables-render-chart', WDT_JS_PATH.'wpdatatables/wpdatacharts_render.js' );
            }
            $json_chart_render_data = json_encode( $this->_highcharts_render_data );
       }
       
       $chart_id = $this->_id;
       ob_start();
       include( WDT_TEMPLATE_PATH.'wpdatachart.inc.php' );
       $chart_html = ob_get_contents();
       ob_end_clean();
       return $chart_html;
       
   }
   
   /**
    * Return render data
    */
   public function getRenderData(){
        return $this->_render_data;
   }
   
   /**
    * Delete chart by ID
    */
   public static function deleteChart( $chartId ){
       global $wpdb;
       
       $wpdb->delete(
            $wpdb->prefix."wpdatacharts",
            array(
                'id' => (int) $chartId
            )
        );
       
   }
   
}
?>