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