/
home
/
altere25
/
usaigc.com
/
wp-content
/
plugins
/
wpdatatables
/
source
/
/home/altere25/usaigc.com/wp-content/plugins/wpdatatables/source
mkdir
upload
Name
Size
Mode
Actions
lang/
-
0755
rm
class.chartjs.wpdatachart.php
41732
0644
edit
dl
rm
class.date.wpdatacolumn.php
1768
0644
edit
dl
rm
class.datetime.wpdatacolumn.php
1857
0644
edit
dl
rm
class.email.wpdatacolumn.php
1196
0644
edit
dl
rm
class.feedback.php
567
0644
edit
dl
rm
class.float.wpdatacolumn.php
1777
0644
edit
dl
rm
class.google.wpdatachart.php
22760
0644
edit
dl
rm
class.image.wpdatacolumn.php
1164
0644
edit
dl
rm
class.int.wpdatacolumn.php
1674
0644
edit
dl
rm
class.link.wpdatacolumn.php
7543
0644
edit
dl
rm
class.sql.php
7690
0644
edit
dl
rm
class.string.wpdatacolumn.php
886
0644
edit
dl
rm
class.time.wpdatacolumn.php
1639
0644
edit
dl
rm
class.tpl.php
2016
0644
edit
dl
rm
class.wdtbrowsechartstable.php
22104
0644
edit
dl
rm
class.wdtbrowsetable.php
19798
0644
edit
dl
rm
class.wdtconfigcontroller.php
60401
0644
edit
dl
rm
class.wdtexception.php
388
0644
edit
dl
rm
class.wdtnestedjson.php
8859
0644
edit
dl
rm
class.wdtsettingscontroller.php
5431
0644
edit
dl
rm
class.wdttools.php
60736
0644
edit
dl
rm
class.wpdatachart.php
41516
0644
edit
dl
rm
class.wpdatacolumn.php
17433
0644
edit
dl
rm
class.wpdatatable.php
110805
0644
edit
dl
rm
class.wpdatatablecache.php
11752
0644
edit
dl
rm
class.wpdatatablerows.php
18571
0644
edit
dl
rm
class.wpdatatablestemplates.php
487136
0644
edit
dl
rm
class.wpexcelcolumn.php
9359
0644
edit
dl
rm
Edit:
/home/altere25/usaigc.com/wp-content/plugins/wpdatatables/source/class.wpdatachart.php
(41516B)
<?php /** @noinspection PhpMultipleClassDeclarationsInspection */ defined('ABSPATH') or die('Access denied.'); /** * Chart engine of wpDataTables plugin */ class WPDataChart { protected $_id = NULL; protected $_wpdatatable_id = NULL; protected $_engine = ''; protected $_type = ''; protected $_range_type = 'all'; protected $_selected_columns = array(); protected $_row_range = array(); protected $_follow_filtering = false; protected $_wpdatatable = NULL; protected $_user_defined_series_data = array(); protected $_render_data = NULL; protected $_type_counters; // Chart protected $_width = 400; protected $_responsiveWidth = false; protected $_height = 400; protected $_group_chart = false; protected $_background_color = '#FFFFFF'; // Series protected $_series = array(); protected $_series_type = ''; // Axes protected $_show_grid = true; protected $_vertical_axis_min; protected $_vertical_axis_max; protected $_axes = array( 'major' => array( 'label' => '' ), 'minor' => array( 'label' => '' ) ); // Title protected $_title = ''; protected $_show_title = true; // Tooltip protected $_tooltip_enabled = true; // Render data protected $_json_chart_render_data = null; public function setId($id) { $this->_id = $id; } public function getId() { return $this->_id; } // Chart public function setWidth($width) { $this->_width = $width; } public function getWidth() { return $this->_width; } /** * @return bool */ public function isResponsiveWidth() { return $this->_responsiveWidth; } /** * @param bool $responsiveWidth */ public function setResponsiveWidth($responsiveWidth) { $this->_responsiveWidth = $responsiveWidth; } public function setHeight($height) { $this->_height = $height; } public function getHeight() { return $this->_height; } /** * @param bool $group_chart */ public function setGroupChart($group_chart) { $this->_group_chart = $group_chart; } /** * @return bool */ public function isGroupChart() { return $this->_group_chart; } /** * @param $background_color */ public function setBackgroundColor($background_color) { $this->_background_color = $background_color; } /** * @return string */ public function getBackgroundColor() { return $this->_background_color; } // Axes /** * @param $show_grid */ public function setShowGrid($show_grid) { $this->_show_grid = (bool)$show_grid; } /** * @return bool */ public function isShowGrid() { return $this->_show_grid; } /** * @param $label */ public function setMajorAxisLabel($label) { $this->_axes['major']['label'] = $label; } /** * @return mixed */ public function getMajorAxisLabel() { return $this->_axes['major']['label']; } /** * @param $label */ public function setMinorAxisLabel($label) { $this->_axes['minor']['label'] = $label; } /** * @return mixed */ public function getMinorAxisLabel() { return $this->_axes['minor']['label']; } /** * @param mixed $vertical_axis_min */ public function setVerticalAxisMin($vertical_axis_min) { $this->_vertical_axis_min = $vertical_axis_min; } /** * @return mixed */ public function getVerticalAxisMin() { return $this->_vertical_axis_min; } /** * @param mixed $vertical_axis_max */ public function setVerticalAxisMax($vertical_axis_max) { $this->_vertical_axis_max = $vertical_axis_max; } /** * @return mixed */ public function getVerticalAxisMax() { return $this->_vertical_axis_max; } // Title /** * @param string $title */ public function setTitle($title) { $this->_title = $title; } /** * @return string */ public function getTitle() { return $this->_title; } /** * @param bool $show_title */ public function setShowTitle($show_title) { $this->_show_title = $show_title; } /** * @return bool */ public function isShowTitle() { return $this->_show_title; } /** * @return bool */ public function isTooltipEnabled() { return $this->_tooltip_enabled; } /** * @param bool $tooltip_enabled */ public function setTooltipEnabled($tooltip_enabled) { $this->_tooltip_enabled = (bool)$tooltip_enabled; } /** * @param $series_data */ public function setUserDefinedSeriesData($series_data) { if (is_array($series_data)) { $this->_user_defined_series_data = $series_data; } } /** * @return array */ public function getUserDefinedSeriesData() { return $this->_user_defined_series_data; } /** * @param $engine */ public function setEngine($engine) { $this->_engine = $engine; } /** * @return string */ public function getEngine() { return $this->_engine; } /** * @param $type */ public function setType($type) { $this->_type = $type; } /** * @return string */ public function getType() { return $this->_type; } /** * @return string */ public function getSeriesType() { return $this->_series_type; } /** * @param string $series_type */ public function setSeriesType($series_type) { $this->_series_type = $series_type; } /** * @param $row_range */ public function setRowRange($row_range) { $this->_row_range = $row_range; } /** * @return array */ public function getRowRange() { return $this->_row_range; } /** * @param $selected_columns */ public function setSelectedColumns($selected_columns) { $this->_selected_columns = $selected_columns; } /** * @return array */ public function getSelectedColumns() { return $this->_selected_columns; } /** * @param $wdt_id */ public function setwpDataTableId($wdt_id) { $this->_wpdatatable_id = $wdt_id; } /** * @return null */ public function getwpDataTableId() { return $this->_wpdatatable_id; } /** * @param $range_type */ public function setRangeType($range_type) { $this->_range_type = $range_type; } /** * @return string */ public function getRangeType() { return $this->_range_type; } /** * @return null */ public function getJsonChartRenderData() { return $this->_json_chart_render_data; } /** * @param null $json_chart_render_data */ public function setJsonChartRenderData($json_chart_render_data) { $this->_json_chart_render_data = $json_chart_render_data; } /** * @param $constructedChartData * @param bool $loadFromDB * @throws WDTException */ public function __construct($constructedChartData, $loadFromDB) { if (isset($constructedChartData['id'])) { $this->setId((int)$constructedChartData['id']); } $this->setwpDataTableId((int)$constructedChartData['wpdatatable_id']); $this->loadChildWPDataTable(); $this->setTitle(sanitize_text_field($constructedChartData['title'])); $this->setType(sanitize_text_field($constructedChartData['type'])); if (isset($constructedChartData['series_type'])) { $this->setSeriesType(sanitize_text_field($constructedChartData['series_type'])); } $this->setSelectedColumns(array_map('sanitize_text_field', (array)$constructedChartData['selected_columns'])); $this->setRangeType(sanitize_text_field($constructedChartData['range_type'])); if (isset($constructedChartData['range_data'])) { $this->setRowRange(array_map('intval', $constructedChartData['range_data'])); } // Series if (!empty($constructedChartData['series_data'])) { array_walk_recursive( $constructedChartData['series_data'], function ($value) { sanitize_text_field($value); } ); $this->setUserDefinedSeriesData($constructedChartData['series_data']); } $this->setWidth((int)WDTTools::defineDefaultValue($constructedChartData, 'width', 0)); $this->setResponsiveWidth((bool)WDTTools::defineDefaultValue($constructedChartData, 'responsive_width', 0)); $this->setHeight((int)WDTTools::defineDefaultValue($constructedChartData, 'height', 400)); $this->setGroupChart((bool)(WDTTools::defineDefaultValue($constructedChartData, 'group_chart', false))); $this->setBackgroundColor(sanitize_text_field(WDTTools::defineDefaultValue($constructedChartData, 'background_color', '#FFFFFF'))); $this->setShowGrid((bool)(WDTTools::defineDefaultValue($constructedChartData, 'show_grid', true))); $this->setMajorAxisLabel(sanitize_text_field(WDTTools::defineDefaultValue($constructedChartData, 'horizontal_axis_label'))); $this->setMinorAxisLabel(sanitize_text_field(WDTTools::defineDefaultValue($constructedChartData, 'vertical_axis_label'))); $this->setVerticalAxisMin(sanitize_text_field(WDTTools::defineDefaultValue($constructedChartData, 'vertical_axis_min'))); $this->setVerticalAxisMax(sanitize_text_field(WDTTools::defineDefaultValue($constructedChartData, 'vertical_axis_max'))); $this->setTooltipEnabled((bool)(WDTTools::defineDefaultValue($constructedChartData, 'tooltip_enabled', true))); } /** * * Creates a new WPDataChart based on the chart engine * @param $constructedChartData * @param bool $loadFromDB * @return mixed */ public static function build($constructedChartData, $loadFromDB = false) { $wdtChart = 'Wdt' . ucfirst($constructedChartData['engine']) . 'Chart' . '\Wdt' . ucfirst($constructedChartData['engine']) . 'Chart'; $chartClassFileName = 'class.' . $constructedChartData['engine'] . '.wpdatachart.php'; require_once(WDT_ROOT_PATH . 'source/' . $chartClassFileName); return new $wdtChart($constructedChartData, $loadFromDB); } /** * * Sets the corresponding wpDataTable * * @throws WDTException */ public function loadChildWPDataTable() { if (empty($this->getwpDataTableId())) { return false; } $this->_wpdatatable = WPDataTable::loadWpDataTable($this->_wpdatatable_id, null, empty($this->_follow_filtering)); return true; } /** * @return void */ public function shiftXAxisColumnUp() { /** * 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) { $this->shiftColumns($shiftIndex); } } $this->formatShiftedAxes(); } public function shiftColumns($shiftIndex) { // 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); } } public function formatShiftedAxes() { // 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'] ); } } } /** * @return void */ 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() ); } if ($this->isResponsiveWidth()) { unset($this->_render_data['options']['width']); $this->_render_data['options']['responsive_width'] = 1; } $this->_type_counters = array( 'date' => 0, 'datetime' => 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']; } $this->defineSeries(); // Group chart data if ($this->isGroupChart()) { $this->_render_data['group_chart'] = true; } else { $this->_render_data['group_chart'] = false; } // Define grid settings if (!$this->isShowGrid()) { 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' ); $this->_render_data['show_grid'] = false; } else { $this->_render_data['show_grid'] = true; } // 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'); } if (empty($this->_render_data)) { $this->_render_data = array(); } } /** * @return mixed|null * @throws WDTException */ public function prepareData() { // Prepare series and columns if (empty($this->_render_data['columns'])) { $this->prepareSeriesData(); } $dateFormat = $this->getDateFormat(); $timeFormat = $this->getDateTimeFormat(); // 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) { if (!$this->_wpdatatable->getColumn($columnKey)) throw new WDTException('In chart, selected column "' . $columnKey . '" does not exist anymore in source table with ID =' . $this->_wpdatatable->getWpId() . '.<br> Please check your source that you use for creating this table or create new chart from that table and replace new chart shortcode with old one on the front page.'); $dataType = $this->_wpdatatable->getColumn($columnKey)->getDataType(); $decimalPlaces = $this->_wpdatatable->getColumn($columnKey)->getDecimalPlaces(); $thousandsSeparator = $this->_wpdatatable->getColumn($columnKey)->isShowThousandsSeparator(); switch ($dataType) { case 'date': $timestamp = is_numeric($row[$columnKey]) ? $row[$columnKey] : strtotime(str_replace('/', '-', $row[$columnKey])); $return_data_row[] = date( $dateFormat, $timestamp ); break; case 'datetime': $timestamp = is_numeric($row[$columnKey]) ? $row[$columnKey] : strtotime(str_replace('/', '-', $row[$columnKey])); if ($this->getEngine() == 'google') { $return_data_row[] = date( $dateFormat, $timestamp ); } else { $return_data_row[] = date( $dateFormat . ' ' . $timeFormat, $timestamp ); } break; case 'time': $timestamp = $row[$columnKey]; $return_data_row[] = date( $timeFormat, $timestamp ); break; case 'int': if (has_filter('wpdatatables_filter_int_cell_data_in_charts')) { $row[$columnKey] = apply_filters('wpdatatables_filter_int_cell_data_in_charts', $row[$columnKey], $columnKey, $this->getId(), $this->_wpdatatable->getWpId()); if (!is_null($row[$columnKey])) { $return_data_row[] = (float)$row[$columnKey]; } else { $return_data_row[] = null; } } else { $return_data_row[] = (float)$row[$columnKey]; } break; case 'float': if (has_filter('wpdatatables_filter_float_cell_data_in_charts')) { $row[$columnKey] = apply_filters('wpdatatables_filter_float_cell_data_in_charts', $row[$columnKey], $columnKey, $this->getId(), $this->_wpdatatable->getWpId()); if (!is_null($row[$columnKey])) { if ($decimalPlaces != -1) { $return_data_row[] = (float)number_format( (float)($row[$columnKey]), $decimalPlaces, '.', $thousandsSeparator ? '' : '.'); } else { $return_data_row[] = (float)$row[$columnKey]; } } else { $return_data_row[] = null; } } else { if ($decimalPlaces != -1) { $return_data_row[] = (float)number_format( (float)($row[$columnKey]), $decimalPlaces, '.', $thousandsSeparator ? '' : '.'); } else { $return_data_row[] = (float)$row[$columnKey]; } } break; case 'link': if (!in_array($this->getEngine(), ['google', 'chartjs'])) { if (strpos($row[$columnKey], '||') !== false) { list($link, $row[$columnKey]) = explode('||', $row[$columnKey]); $return_data_row[] = '<a href="' . $link . '">' . $row[$columnKey] . '</a>'; } else { $return_data_row[] = '<a href="' . $row[$columnKey] . '">' . $row[$columnKey] . '</a>'; } } else { $return_data_row[] = $row[$columnKey]; } break; case 'string': default: if ($this->getEngine() == 'apexcharts') { $return_data_row[] = $row[$columnKey] === null ? '' : $row[$columnKey]; } else { $return_data_row[] = $row[$columnKey]; } break; } } $this->_render_data['rows'][] = $return_data_row; } } else { foreach ($this->getRowRange() as $rowIndex) { $return_data_row = array(); foreach ($this->getSelectedColumns() as $columnKey) { $dataType = $this->_wpdatatable->getColumn($columnKey)->getDataType(); $decimalPlaces = $this->_wpdatatable->getColumn($columnKey)->getDecimalPlaces(); switch ($dataType) { case 'date': $timestamp = is_int($this->_wpdatatable->getCell($columnKey, $rowIndex)) ? $this->_wpdatatable->getCell($columnKey, $rowIndex) : strtotime(str_replace('/', '-', $this->_wpdatatable->getCell($columnKey, $rowIndex))); $return_data_row[] = date( $dateFormat, $timestamp ); break; case 'datetime': $timestamp = is_int($this->_wpdatatable->getCell($columnKey, $rowIndex)) ? $this->_wpdatatable->getCell($columnKey, $rowIndex) : strtotime(str_replace('/', '-', $this->_wpdatatable->getCell($columnKey, $rowIndex))); if ($this->getEngine() == 'google') { $return_data_row[] = date( $dateFormat, $timestamp ); } else { $return_data_row[] = date( $dateFormat . ' ' . $timeFormat, $timestamp ); } break; case 'time': $timestamp = $this->_wpdatatable->getCell($columnKey, $rowIndex); $return_data_row[] = date( $timeFormat, $timestamp ); break; case 'int': if (has_filter('wpdatatables_filter_int_cell_data_in_charts')) { $cellData = apply_filters('wpdatatables_filter_int_cell_data_in_charts', $this->_wpdatatable->getCell($columnKey, $rowIndex), $columnKey, $this->getId(), $this->_wpdatatable->getWpId()); if (!is_null($cellData)) { $return_data_row[] = (float)$cellData; } else { $return_data_row[] = null; } } else { $return_data_row[] = (float)$this->_wpdatatable->getCell($columnKey, $rowIndex); } break; case 'float': if (has_filter('wpdatatables_filter_float_cell_data_in_charts')) { $floatNumber = apply_filters('wpdatatables_filter_float_cell_data_in_charts', $this->_wpdatatable->getCell($columnKey, $rowIndex), $columnKey, $this->getId(), $this->_wpdatatable->getWpId()); if (!is_null($floatNumber)) { if ($decimalPlaces != -1) { $return_data_row[] = (float)number_format($floatNumber, $decimalPlaces); } else { $return_data_row[] = $floatNumber; } } else { $return_data_row[] = null; } } else { $floatNumber = (float)$this->_wpdatatable->getCell($columnKey, $rowIndex); if ($decimalPlaces != -1) { $return_data_row[] = (float)number_format($floatNumber, $decimalPlaces); } else { $return_data_row[] = $floatNumber; } } break; case 'link': $cellData = $this->_wpdatatable->getCell($columnKey, $rowIndex); if (!in_array($this->getEngine(), ['google', 'chartjs'])) { if (strpos($cellData, '||') !== false) { list($link, $cellData) = explode('||', $cellData); $return_data_row[] = '<a href="' . $link . '">' . $cellData . '</a>'; } else { $return_data_row[] = '<a href="' . $cellData . '">' . $cellData . '</a>'; } } else { $return_data_row[] = $cellData; } 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; } /** * @return void */ public function groupData() { if (isset($this->_render_data['group_chart'])) { if ($this->isGroupChart() || $this->_render_data['group_chart']) { $output = array(); foreach ($this->_render_data['rows'] as $row) { if (!empty($output)) { $value_key = 'none'; foreach ($output as $key => $value) { if ($value_key === 'none') { if ($value[0] == $row[0]) { $value_key = $key; } } } if ($value_key === 'none') { $output[] = $row; } else { for ($n = 1; $n <= count($row) - 1; $n++) { $output[$value_key][$n] += $row[$n]; } } } else { $output[] = $row; } } $this->_group_chart = 1; $this->_render_data['rows'] = $output; } else { $this->_group_chart = 0; } } else { $this->_group_chart = 0; } } /** * @return void */ public function prepareRender() { } /** * @return mixed|null * @throws WDTException */ public function returnData() { $this->prepareData(); $this->groupData(); $this->shiftXAxisColumnUp(); $this->prepareRender(); return $this->returnRenderData(); } /** * Saves the chart data to DB * @global WPDB $wpdb */ public function save() { global $wpdb; $this->prepareSeriesData(); $this->shiftXAxisColumnUp(); $this->prepareRender(); $render_data = $this->formRenderDataForDb(); if (empty($this->getId())) { // This is a new chart $wpdb->insert( $wpdb->prefix . "wpdatacharts", array( 'wpdatatable_id' => $this->getwpDataTableId(), 'title' => $this->getTitle(), 'engine' => $this->getEngine(), 'type' => $this->getType(), '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->getwpDataTableId(), 'title' => $this->getTitle(), 'engine' => $this->getEngine(), 'type' => $this->getType(), 'json_render_data' => json_encode($render_data) ), array( 'id' => $this->_id ) ); } } /** * @return void */ 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 . ']'; } return ''; } /** * Load chart from the database * @return bool * @throws WDTException */ public function loadFromDB() { $chartData = $this->getChartDataById($this->getId()); $renderData = $this->setChartRenderData($chartData); $this->setGeneralChartProperties($chartData, $renderData); $this->setSpecificChartProperties($renderData); $this->loadChildWPDataTable(); return true; } /** * @param $chartId * @return array|false|object|stdClass */ public static function getChartDataById($chartId) { global $wpdb; if (empty($chartId)) { return false; } // Load json data from DB $chartQuery = $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "wpdatacharts WHERE id = %d", $chartId ); $chartData = $wpdb->get_row($chartQuery); if ($chartData === null) { return false; } return $chartData; } /** * Render Chart * @throws WDTException */ public function render() { $minified_js = get_option('wdtMinifiedJs'); $this->prepareData(); if ($this->_follow_filtering) { $this->getColumnIndexes(); } $this->groupData(); $this->shiftXAxisColumnUp(); $js_ext = $minified_js ? '.min.js' : '.js'; wp_enqueue_script('wpdatatables-render-chart', WDT_JS_PATH . 'wdtcharts/wdt.chartsRender' . $js_ext, array('jquery'), WDT_CURRENT_VERSION); $this->setJsonChartRenderData($this->enqueueChartSpecificScripts($js_ext)); return $this->enqueueScriptsAfterChartRender(); } /** * @param $js_ext * @return false|string */ public function enqueueChartSpecificScripts($js_ext) { return json_encode($this->_render_data); } /** * @return false|string */ public function enqueueScriptsAfterChartRender() { do_action_deprecated( 'wdt-enqueue-scripts-after-chart-render', array(), WDT_INITIAL_LITE_VERSION, 'wpdatatables_enqueue_scripts_after_chart_render' ); do_action('wpdatatables_enqueue_scripts_after_chart_render'); $id = $this->_id; ob_start(); include(WDT_TEMPLATE_PATH . 'wpdatachart.inc.php'); $chart_html = ob_get_contents(); ob_end_clean(); return $chart_html; } /** * Delete chart by ID * @param $chartId * @return bool */ public static function delete($chartId) { global $wpdb; if (!isset($_REQUEST['wdtNonce']) || empty($chartId) || !current_user_can('manage_options') || !wp_verify_nonce($_REQUEST['wdtNonce'], 'wdtDeleteChartNonce')) { return false; } $wpdb->delete( $wpdb->prefix . "wpdatacharts", array( 'id' => (int)$chartId ) ); do_action('wpdatatables_after_delete_charts', (int)$chartId, 'chart'); return true; } /** * Get all charts non-paged for the MCE editor * @return array|null|object */ public static function getAll() { global $wpdb; $query = "SELECT id, title FROM {$wpdb->prefix}wpdatacharts "; return $wpdb->get_results($query, ARRAY_A); } /** * @param $renderData * @return void */ public function setSpecificChartProperties($renderData) { } /** * @param $chartData * @param $renderData * @return void */ public function setGeneralChartProperties($chartData, $renderData) { $this->setEngine($chartData->engine); $this->setId($chartData->id); $this->setwpDataTableId($chartData->wpdatatable_id); $this->setTitle($chartData->title); $this->setType($chartData->type); if (!empty($renderData['series_type'])) { $this->setSeriesType($renderData['series_type']); } $this->setSelectedColumns($renderData['selected_columns']); $this->setRangeType($renderData['range_type']); $this->setRowRange($renderData['row_range']); $this->setShowGrid($renderData['show_grid'] ?: false); $this->setShowTitle($renderData['show_title'] ?: false); $this->setResponsiveWidth(isset($renderData['render_data']['options']['responsive_width']) ? (bool)$renderData['render_data']['options']['responsive_width'] : false); if (!empty($renderData['render_data']['options']['width'])) { $this->setWidth($renderData['render_data']['options']['width']); } $this->setHeight($renderData['render_data']['options']['height']); } /** * @return void */ public function defineSeries() { if (!empty($this->getUserDefinedSeriesData())) { $seriesIndex = 0; foreach ($this->_user_defined_series_data as $series_data) { if (!empty($series_data['color']) || !empty($series_data['type']) || !empty($series_data['label'])) { $this->_render_data['options']['series'][$seriesIndex] = array( 'color' => $series_data['color'], 'label' => $series_data['label'] ); } $seriesIndex++; } } } /** * @return false|mixed|null */ public function getDateFormat() { return get_option('wdtDateFormat'); } /** * @return false|mixed|null */ public function getDateTimeFormat() { return get_option('wdtTimeFormat'); } /** * @return mixed|null */ public function returnRenderData() { return $this->_render_data; } /** * @return mixed|null */ public function getRenderData() { return $this->_render_data; } /** * @return array */ public function formRenderDataForDb() { return array( 'selected_columns' => $this->getSelectedColumns(), 'range_type' => $this->getRangeType(), 'row_range' => $this->getRowRange(), 'render_data' => $this->_render_data, 'show_grid' => $this->_show_grid, 'show_title' => $this->_show_title, 'series_type' => $this->getSeriesType() ); } /** * @param $chartData * @return mixed|null */ public function setChartRenderData($chartData) { $renderData = json_decode($chartData->json_render_data, true); if (!empty($renderData['render_data'])) { $this->_render_data = $renderData['render_data']; } return $renderData; } }
Save
cmd:
run