From 037aa55e2725722cee6885b56392802e79df86f5 Mon Sep 17 00:00:00 2001 From: andileco <daniel@andile.co> Date: Tue, 4 Apr 2017 15:43:30 -0400 Subject: [PATCH] Add charts render interface. --- includes/charts.pages.inc | 5 +-- .../charts_c3/src/Charts/C3ChartsRender.php | 19 +++++------- .../src/Charts/GoogleChartsRender.php | 31 +++++++------------ .../src/Charts/HighchartsChartsRender.php | 19 +++++------- src/Charts/ChartsRenderInterface.php | 12 +++++++ src/Charts/ModuleSelector.php | 3 +- 6 files changed, 43 insertions(+), 46 deletions(-) create mode 100644 src/Charts/ChartsRenderInterface.php diff --git a/includes/charts.pages.inc b/includes/charts.pages.inc index 9e34b1a..ece8aae 100644 --- a/includes/charts.pages.inc +++ b/includes/charts.pages.inc @@ -40,9 +40,6 @@ define('CHARTS_SINGLE_AXIS', 'y_only'); */ define('CHARTS_DUAL_AXIS', 'xy'); -// Store Charts preprocess theme functions in a separate .inc file. -\Drupal::moduleHandler()->loadInclude('charts', 'inc', 'charts.theme'); - /** * Retrieve a list of all charting libraries available. * @@ -611,7 +608,7 @@ function charts_default_settings_form($form, $form_state) { */ function charts_default_settings_form_submit($form, $form_state) { \Drupal::state() - ->set('charts_default_settings', $form_state['values']['charts_default_settings']); //was variable_set + ->set('charts_default_settings', $form_state['values']['charts_default_settings']); } diff --git a/modules/charts_c3/src/Charts/C3ChartsRender.php b/modules/charts_c3/src/Charts/C3ChartsRender.php index 8e26f97..d1a46f5 100644 --- a/modules/charts_c3/src/Charts/C3ChartsRender.php +++ b/modules/charts_c3/src/Charts/C3ChartsRender.php @@ -2,6 +2,7 @@ namespace Drupal\charts_c3\Charts; +use Drupal\charts\Charts\ChartsRenderInterface; use Drupal\charts\Util\Util; use Drupal\charts_c3\Settings\CThree\ChartType; use Drupal\charts_c3\Settings\CThree\CThree; @@ -10,16 +11,10 @@ use Drupal\charts_c3\Settings\CThree\ChartData; use Drupal\charts_c3\Settings\CThree\ChartColor; use Drupal\charts_c3\Settings\CThree\ChartAxis; -class C3ChartsRender { - - public function __construct($categories, $seriesData, $options, $attachmentDisplayOptions, &$variables, $chartId) { +class C3ChartsRender implements ChartsRenderInterface { + public function __construct() { Util::checkMissingLibrary('charts_c3', '/vendor/cthree/c3.min.js'); - $c3 = $this->charts_c3_render_charts($options, $categories, $seriesData, $chartId, $attachmentDisplayOptions); - $variables['chart_type'] = 'c3'; - $variables['content_attributes']['data-chart'][] = json_encode($c3); - $variables['attributes']['id'][0] = $chartId; - $variables['attributes']['class'][] = 'charts-c3'; } /** @@ -31,7 +26,7 @@ class C3ChartsRender { * * @return CThree */ - private function charts_c3_render_charts($options, $categories = [], $seriesData = [], $chartId, $attachmentDisplayOptions = []) { + public function charts_render_charts($options, $categories = [], $seriesData = [], $attachmentDisplayOptions = [], &$variables, $chartId) { $noAttachmentDisplays = count($attachmentDisplayOptions); $yAxis = []; @@ -108,7 +103,9 @@ class C3ChartsRender { $chartColor->setPattern($seriesColors); $c3->setColor($chartColor); - return $c3; + $variables['chart_type'] = 'c3'; + $variables['content_attributes']['data-chart'][] = json_encode($c3); + $variables['attributes']['id'][0] = $chartId; + $variables['attributes']['class'][] = 'charts-c3'; } - } diff --git a/modules/charts_google/src/Charts/GoogleChartsRender.php b/modules/charts_google/src/Charts/GoogleChartsRender.php index 925aefa..f67527e 100644 --- a/modules/charts_google/src/Charts/GoogleChartsRender.php +++ b/modules/charts_google/src/Charts/GoogleChartsRender.php @@ -2,30 +2,16 @@ namespace Drupal\charts_google\Charts; +use Drupal\charts\Charts\ChartsRenderInterface; use Drupal\charts\Util\Util; use Drupal\charts_google\Settings\Google\GoogleOptions; use Drupal\charts_google\Settings\Google\ChartType; use Drupal\charts_google\Settings\Google\ChartArea; -class GoogleChartsRender { +class GoogleChartsRender implements ChartsRenderInterface { - private $googleData; - private $googleOptions; - private $googleChartType; - private $chartId; - - public function __construct($categories, $seriesData, $options, $attachmentDisplayOptions, &$variables, $chartId) { + public function __construct() { Util::checkMissingLibrary('charts_google', '/vendor/google/loader.js'); - $this->chartId = $chartId; - $this->googleData = $this->charts_google_render_charts($categories, $seriesData); - $this->googleOptions = $this->charts_google_create_charts_options($options, $seriesData, $attachmentDisplayOptions); - $this->googleChartType = $this->charts_google_create_chart_type($options); - $variables['chart_type'] = 'google'; - $variables['attributes']['class'][0] = 'charts-google'; - $variables['attributes']['id'][0] = $this->chartId; - $variables['content_attributes']['data-chart'][] = $this->googleData; - $variables['attributes']['google-options'][1] = json_encode($this->googleOptions); - $variables['attributes']['google-chart-type'][2] = json_encode($this->googleChartType); } /** @@ -35,7 +21,7 @@ class GoogleChartsRender { * * @return json|string */ - private function charts_google_render_charts($categories = [], $seriesData = []) { + public function charts_render_charts($options, $categories = [], $seriesData = [], $attachmentDisplayOptions = [], &$variables, $chartId) { $dataTable = []; for ($j = 0; $j < count($categories); $j++) { @@ -56,7 +42,14 @@ class GoogleChartsRender { array_unshift($dataTableHeader, 'label'); array_unshift($dataTable, $dataTableHeader); - return json_encode($dataTable); + $googleOptions = $this->charts_google_create_charts_options($options, $seriesData, $attachmentDisplayOptions); + $googleChartType = $this->charts_google_create_chart_type($options); + $variables['chart_type'] = 'google'; + $variables['attributes']['class'][0] = 'charts-google'; + $variables['attributes']['id'][0] = $chartId; + $variables['content_attributes']['data-chart'][] = json_encode($dataTable); + $variables['attributes']['google-options'][1] = json_encode($googleOptions); + $variables['attributes']['google-chart-type'][2] = json_encode($googleChartType); } /** diff --git a/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php b/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php index e0116bb..f9e8685 100644 --- a/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php +++ b/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php @@ -2,6 +2,7 @@ namespace Drupal\charts_highcharts\Charts; +use Drupal\charts\Charts\ChartsRenderInterface; use Drupal\charts\Util\Util; use Drupal\charts_highcharts\Settings\Highcharts\ChartType; use Drupal\charts_highcharts\Settings\Highcharts\ChartTitle; @@ -18,17 +19,10 @@ use Drupal\charts_highcharts\Settings\Highcharts\ChartCredits; use Drupal\charts_highcharts\Settings\Highcharts\ChartLegend; use Drupal\charts_highcharts\Settings\Highcharts\Highcharts; -class HighchartsChartsRender { - - public function __construct($categories, $seriesData, $options, $attachmentDisplayOptions, &$variables, $chartId) { +class HighchartsChartsRender implements ChartsRenderInterface { + public function __construct() { Util::checkMissingLibrary('charts_highcharts', '/vendor/highcharts/highcharts.js'); - $highchart = $this->charts_highcharts_render_charts($options, $categories, $seriesData, $attachmentDisplayOptions); - $variables['chart_type'] = 'highcharts'; - $variables['content_attributes']['data-chart'][] = json_encode($highchart); - $variables['attributes']['id'][0] = $chartId; - $variables['attributes']['class'][] = 'charts-highchart'; - } /** @@ -42,7 +36,7 @@ class HighchartsChartsRender { * * @return Highcharts object to be used by highcharts javascripts visualization framework */ - private function charts_highcharts_render_charts($options, $categories = [], $seriesData = [], $attachmentDisplayOptions = []) { + public function charts_render_charts($options, $categories = [], $seriesData = [], $attachmentDisplayOptions = [], &$variables, $chartId) { $chart = new ChartType(); $chart->setType($options['type']); @@ -108,6 +102,9 @@ class HighchartsChartsRender { $highchart->setLegend($chartLegend); $highchart->setSeries($seriesData); - return $highchart; + $variables['chart_type'] = 'highcharts'; + $variables['content_attributes']['data-chart'][] = json_encode($highchart); + $variables['attributes']['id'][0] = $chartId; + $variables['attributes']['class'][] = 'charts-highchart'; } } diff --git a/src/Charts/ChartsRenderInterface.php b/src/Charts/ChartsRenderInterface.php new file mode 100644 index 0000000..3032815 --- /dev/null +++ b/src/Charts/ChartsRenderInterface.php @@ -0,0 +1,12 @@ +<?php +/** + * @file + * + */ + +namespace Drupal\charts\Charts; + + +interface ChartsRenderInterface { + public function charts_render_charts($options, $categories = [], $seriesData = [], $attachmentDisplayOptions = [], &$variables, $chartId); +} \ No newline at end of file diff --git a/src/Charts/ModuleSelector.php b/src/Charts/ModuleSelector.php index af5ecc1..f97e400 100644 --- a/src/Charts/ModuleSelector.php +++ b/src/Charts/ModuleSelector.php @@ -34,7 +34,8 @@ class ModuleSelector { if ('charts_' . $moduleExist) { $className = ucfirst($moduleName); $moduleChartsRenderer = 'Drupal\charts_' . $moduleName . '\Charts\\' . ucfirst($moduleName) . 'ChartsRender'; - $chartingModule = new $moduleChartsRenderer($this->categories, $this->seriesData, $this->options, $this->attachmentDisplayOptions, $variables, $this->chartId); + $chartingModule = new $moduleChartsRenderer(); + $chartingModule->charts_render_charts($this->options, $this->categories, $this->seriesData, $this->attachmentDisplayOptions, $variables, $this->chartId); } } } -- GitLab