From daa16b02a627b76763c81dff15fb51e787c22436 Mon Sep 17 00:00:00 2001
From: Daniel Cothran <daniel@andile.co>
Date: Tue, 6 Mar 2018 00:45:51 -0500
Subject: [PATCH] Issue #2947190 by zinalacina, andileco: C3 Charts donut Chart
 Doesn't Render Properly

---
 modules/charts_c3/src/Plugin/chart/C3.php     |  2 +-
 .../charts_google/src/Plugin/chart/Google.php | 27 ++++++++++++++++---
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/modules/charts_c3/src/Plugin/chart/C3.php b/modules/charts_c3/src/Plugin/chart/C3.php
index b890591..bde4f43 100644
--- a/modules/charts_c3/src/Plugin/chart/C3.php
+++ b/modules/charts_c3/src/Plugin/chart/C3.php
@@ -45,7 +45,7 @@ class C3 extends AbstractChart {
     $attachmentCount = count($attachmentDisplayOptions);
     $noAttachmentDisplays = $attachmentCount === 0;
     $types = [];
-    
+
     for ($i = 1; $i <= $attachmentCount; $i++) {
       if ($attachmentDisplayOptions[$i - 1]['style']['options']['type'] == 'column') {
         $types[$seriesData[$i]['name']] = 'bar';
diff --git a/modules/charts_google/src/Plugin/chart/Google.php b/modules/charts_google/src/Plugin/chart/Google.php
index 3c606d9..5c19a82 100644
--- a/modules/charts_google/src/Plugin/chart/Google.php
+++ b/modules/charts_google/src/Plugin/chart/Google.php
@@ -332,7 +332,7 @@ class Google extends AbstractChart {
     $googleOptions->setHorizontalAxes($hAxes);
 
     if (in_array('donut', $chartSelected)) {
-      $googleOptions->pieHole = '0.5';
+      $googleOptions->pieHole = '0.25';
     }
 
     $chartArea = new ChartArea();
@@ -357,10 +357,29 @@ class Google extends AbstractChart {
       $chartArea->setPaddingLeft($options['chart_area']['left']);
     }
 
+    $seriesCount = count($seriesData);
+    $categoriesCount = count($seriesData[0]['data']);
+
     $seriesColors = [];
-    for ($i = 0; $i < count($seriesData); $i++) {
-      $seriesColor = $seriesData[$i]['color'];
-      array_push($seriesColors, $seriesColor);
+    if ($options['type'] == 'pie' || $options['type'] == 'donut') {
+      if ($seriesCount > 1) {
+        for ($i = 0; $i < $seriesCount; $i++) {
+          $seriesColor = $seriesData[$i]['color'];
+          array_push($seriesColors, $seriesColor);
+        }
+      }
+      else {
+        for ($i = 0; $i < $categoriesCount; $i++) {
+          // Use default colors if only one series.
+          $seriesColor = $options['colors'][$i];
+          array_push($seriesColors, $seriesColor);
+        }
+      }
+    } else {
+      for ($i = 0; $i < $seriesCount; $i++) {
+        $seriesColor = $seriesData[$i]['color'];
+        array_push($seriesColors, $seriesColor);
+      }
     }
     $googleOptions->setColors($seriesColors);
 
-- 
GitLab