From b8a763aaddebadfb4165a9af3be5d6785346785b Mon Sep 17 00:00:00 2001 From: Daniel Cothran <daniel@andile.co> Date: Mon, 12 Feb 2018 19:52:08 -0500 Subject: [PATCH] Issue #2944087 by John Cook, andileco: Add polar plotting to Highcharts graphs --- includes/charts.pages.inc | 13 ++++++++++++ .../src/Controller/ChartsApiExample.php | 2 +- .../src/Plugin/Block/ChartsBlock.php | 5 +++++ modules/charts_highcharts/README.txt | 20 +++++++++++++++++- .../charts_highcharts.libraries.yml | 1 + .../src/Charts/HighchartsChartsRender.php | 6 +++++- .../src/Plugin/chart/Highchart.php | 5 +++++ .../src/Settings/Highcharts/Chart.php | 21 +++++++++++++++++++ src/Form/ChartsConfigForm.php | 13 ++++++++++++ 9 files changed, 83 insertions(+), 3 deletions(-) diff --git a/includes/charts.pages.inc b/includes/charts.pages.inc index 9da38ea..160f35c 100644 --- a/includes/charts.pages.inc +++ b/includes/charts.pages.inc @@ -439,6 +439,19 @@ function charts_settings_form($form, $defaults = [], $field_options = [], $paren ], ]; + $form['display']['polar'] = [ + '#title' => t('Transform cartesian charts into the polar coordinate system'), + '#type' => 'checkbox', + '#default_value' => $options['polar'], + '#parents' => array_merge($parents, ['polar']), + '#attributes' => [ + 'class' => [ + 'chart-type-checkbox', + 'container-inline', + ], + ], + ]; + $form['display']['dimensions'] = [ '#title' => t('Dimensions'), '#theme_wrappers' => ['form_element'], diff --git a/modules/charts_api_example/src/Controller/ChartsApiExample.php b/modules/charts_api_example/src/Controller/ChartsApiExample.php index 45fe4be..e0d54dc 100644 --- a/modules/charts_api_example/src/Controller/ChartsApiExample.php +++ b/modules/charts_api_example/src/Controller/ChartsApiExample.php @@ -72,7 +72,7 @@ class ChartsApiExample extends ControllerBase implements ContainerInjectionInter // If using C3, comment out the following two cases. case 'pie': case 'donut': - + } $build = [ diff --git a/modules/charts_blocks/src/Plugin/Block/ChartsBlock.php b/modules/charts_blocks/src/Plugin/Block/ChartsBlock.php index 63dd860..fdd9f33 100644 --- a/modules/charts_blocks/src/Plugin/Block/ChartsBlock.php +++ b/modules/charts_blocks/src/Plugin/Block/ChartsBlock.php @@ -138,6 +138,9 @@ class ChartsBlock extends BlockBase { unset($form['display']['three_dimensional']['#parents']); $form['display']['three_dimensional']['#default_value'] = $this->configuration['three_dimensional']; + unset($form['display']['polar']['#parents']); + $form['display']['polar']['#default_value'] = $this->configuration['polar']; + unset($form['display']['legend_position']['#parents']); $form['display']['legend_position']['#default_value'] = $this->configuration['legend_position']; @@ -178,6 +181,7 @@ class ChartsBlock extends BlockBase { $this->configuration['colors'] = $form_state->getValue('colors'); $this->configuration['background'] = $form_state->getValue(['display','background']); $this->configuration['three_dimensional'] = $form_state->getValue(['display','three_dimensional']); + $this->configuration['polar'] = $form_state->getValue(['display','polar']); $this->configuration['tooltips'] = $form_state->getValue(['display','tooltips']); $this->configuration['tooltips_use_html'] = $form_state->getValue('tooltips_use_html'); $this->configuration['width'] = $form_state->getValue(['display','dimensions','width']); @@ -211,6 +215,7 @@ class ChartsBlock extends BlockBase { 'colors'=>$this->configuration['colors'], 'background'=>$this->configuration['background'], 'three_dimensional'=>$this->configuration['three_dimensional'], + 'polar'=>$this->configuration['polar'], 'tooltips'=>$this->configuration['tooltips'], 'tooltips_use_html'=>$this->configuration['tooltips_use_html'], 'width'=>$this->configuration['width'], diff --git a/modules/charts_highcharts/README.txt b/modules/charts_highcharts/README.txt index 626a074..80fab4c 100644 --- a/modules/charts_highcharts/README.txt +++ b/modules/charts_highcharts/README.txt @@ -32,6 +32,24 @@ If you use Composer to manage dependencies, edit "/composer.json" as follows. } } }, + { + "type": "package", + "package": { + "name": "highcharts/more", + "version": "6.0.4", + "type": "drupal-library", + "extra": { + "installer-name": "highcharts_more" + }, + "dist": { + "url": "https://code.highcharts.com/6.0.4/highcharts-more.js", + "type": "file" + }, + "require": { + "composer/installers": "~1.0" + } + } + }, { "type": "package", "package": { @@ -87,5 +105,5 @@ If you use Composer to manage dependencies, edit "/composer.json" as follows. } } -4. Run "composer require --prefer-dist highcharts/highcharts:6.0.4 highcharts/exporting:6.0.4 highcharts/export-data:6.0.4 highcharts/accessibility:6.0.4" +4. Run "composer require --prefer-dist highcharts/highcharts:6.0.4 highcharts/more:6.0.4 highcharts/exporting:6.0.4 highcharts/export-data:6.0.4 highcharts/accessibility:6.0.4" - you should find that new directories have been created under "/libraries" diff --git a/modules/charts_highcharts/charts_highcharts.libraries.yml b/modules/charts_highcharts/charts_highcharts.libraries.yml index 64e4f47..77a4aa1 100644 --- a/modules/charts_highcharts/charts_highcharts.libraries.yml +++ b/modules/charts_highcharts/charts_highcharts.libraries.yml @@ -16,6 +16,7 @@ highcharts: gpl-compatible: false js: /libraries/highcharts/highcharts.js: {} + /libraries/highcharts_more/highcharts-more.js: {} /libraries/highcharts_exporting/exporting.js: {} /libraries/highcharts_export-data/export-data.js: {} /libraries/highcharts_accessibility/accessibility.js: {} diff --git a/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php b/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php index 2c9997a..cd3b572 100644 --- a/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php +++ b/modules/charts_highcharts/src/Charts/HighchartsChartsRender.php @@ -84,6 +84,11 @@ class HighchartsChartsRender implements ChartsRenderInterface { $chart->setBackgroundColor($options['background']); } + // Set polar plotting. + if (isset($options['polar'])) { + $chart->setPolar($options['polar']); + } + // Set title position. if (isset($options['title_position'])) { if ($options['title_position'] == 'in') { @@ -192,7 +197,6 @@ class HighchartsChartsRender implements ChartsRenderInterface { $highchart->setChart($chart); $highchart->setTitle($chartTitle); $highchart->setAxisX($chartXaxis); - /* $highchart->yAxis = $yAxes; */ $highchart->setTooltip($chartTooltip); $highchart->setPlotOptions($plotOptions); $highchart->setCredits($chartCredits); diff --git a/modules/charts_highcharts/src/Plugin/chart/Highchart.php b/modules/charts_highcharts/src/Plugin/chart/Highchart.php index e2000ea..718a689 100644 --- a/modules/charts_highcharts/src/Plugin/chart/Highchart.php +++ b/modules/charts_highcharts/src/Plugin/chart/Highchart.php @@ -91,6 +91,11 @@ class Highchart extends AbstractChart { $chart->setBackgroundColor($options['background']); } + // Set polar plotting. + if (isset($options['polar'])) { + $chart->setPolar($options['polar']); + } + // Set title position. if ($options['title_position'] == 'in') { $chartTitle->setVerticalAlign('middle'); diff --git a/modules/charts_highcharts/src/Settings/Highcharts/Chart.php b/modules/charts_highcharts/src/Settings/Highcharts/Chart.php index efb4726..cc23eb7 100644 --- a/modules/charts_highcharts/src/Settings/Highcharts/Chart.php +++ b/modules/charts_highcharts/src/Settings/Highcharts/Chart.php @@ -11,6 +11,7 @@ class Chart implements \JsonSerializable { private $width = NULL; private $height = NULL; private $backgroundColor; + private $polar = NULL; /** * Get Type. @@ -102,6 +103,26 @@ class Chart implements \JsonSerializable { $this->backgroundColor = $backgroundColor; } + /** + * Get Polar + * + * @return bool + * Polar. + */ + public function getPolar() { + return $this->polar; + } + + /** + * Set Polar. + * + * @param bool $polar + * Polar. + */ + public function setPolar($polar) { + $this->polar = $polar; + } + /** * Json Serialize. * diff --git a/src/Form/ChartsConfigForm.php b/src/Form/ChartsConfigForm.php index 6104e73..3cd8617 100644 --- a/src/Form/ChartsConfigForm.php +++ b/src/Form/ChartsConfigForm.php @@ -353,6 +353,19 @@ class ChartsConfigForm extends ConfigFormBase { ], ]; + $form['display']['polar'] = [ + '#title' => t('Transform cartesian charts into the polar coordinate system'), + '#type' => 'checkbox', + '#default_value' => $options['polar'], + '#parents' => array_merge($parents, ['polar']), + '#attributes' => [ + 'class' => [ + 'chart-type-checkbox', + 'container-inline', + ], + ], + ]; + $form['display']['dimensions'] = [ '#title' => $this->t('Dimensions'), '#theme_wrappers' => ['form_element'], -- GitLab