Fix missing/broken contribution charts
authorRich Lott / Artful Robot <forums@artfulrobot.uk>
Thu, 10 Oct 2019 07:39:29 +0000 (09:39 +0200)
committerRich Lott / Artful Robot <forums@artfulrobot.uk>
Thu, 10 Oct 2019 08:44:20 +0000 (10:44 +0200)
CRM/Contribute/Form/ContributionCharts.php
templates/CRM/Contribute/Form/ContributionCharts.tpl
templates/CRM/common/chart.tpl

index 70c58ce2cb8edda545fc3b821037c444294e68de..158db37c79d4a4dfa8e2b2aed42b6f972998afeb 100644 (file)
@@ -173,7 +173,7 @@ class CRM_Contribute_Form_ContributionCharts extends CRM_Core_Form {
         $monthlyChart = TRUE;
       }
 
-      $values['divName'] = "open_flash_chart_{$chartKey}";
+      $values['divName'] = "chart_{$chartKey}";
       $funName = ($chartType == 'bvg') ? 'barChart' : 'pieChart';
 
       // build the chart objects.
index 3e6c01a0f98ac18d780ba938918a39cc9d0a87ba..0faf575cd321f4ca40fdc8eb2cde1e5e55daf2ff 100644 (file)
 {* Display monthly and yearly contributions using Google charts (Bar and Pie) *}
 {if $hasContributions}
 <div id="chartData">
-<table class="chart">
-  <tr class="crm-contribution-form-block-open_flash_chart">
-     <td>
+<table >
+  <tr class="crm-contribution-form-block-chart">
+     <td width="50%">
          {if $hasByMonthChart}
              {* display monthly chart *}
-             <div id="open_flash_chart_by_month"></div>
+             <div id="chart_by_month"></div>
          {else}
        {ts}There were no contributions during the selected year.{/ts}
          {/if}
      </td>
-     <td>
+     <td width="50%">
           {* display yearly chart *}
-         <div id="open_flash_chart_by_year"></div>
+         <div id="chart_by_year"></div>
      </td>
   </tr>
 </table>
 {literal}
 <script type="text/javascript">
 
- var allData = {/literal}{$chartData}{literal};
-
   CRM.$(function($) {
-    $.each(allData, function(chartID, chartValues) {
-      createChart(chartID, chartValues.divName, chartValues.size.xSize, chartValues.size.ySize, 'loadData');
-    });
-  });
+    var allData = {/literal}{$chartData}{literal};
 
-  function loadData( chartID ) {
-     return allData[chartID].object;
-  }
+    $.each( allData, function( chartID, chartValues ) {
+        var divName = "chart_" + chartID;
+        createChart( chartID, divName, 300, 300, allData[chartID].object );
+        });
 
-  function byMonthOnClick( barIndex ) {
-     var url = allData.by_month.on_click_urls['url_' + barIndex];
-     if ( url ) window.location.href = url;
-  }
+    function byMonthOnClick( barIndex ) {
+       var url = allData.by_month.on_click_urls['url_' + barIndex];
+       if ( url ) window.location.href = url;
+    }
 
-  function byYearOnClick( barIndex ) {
-     var url = allData.by_year.on_click_urls['url_' + barIndex];
-     if ( url ) window.location.href = url;
-  }
+    function byYearOnClick( barIndex ) {
+       var url = allData.by_year.on_click_urls['url_' + barIndex];
+       if ( url ) window.location.href = url;
+    }
 
- </script>
+  });
+</script>
 {/literal}
 {/if}
index 5425871f121a27277d10234b16f332ea9930f1b9..1400408f4a16951f02c3b61d9b0d2d0e2bcf1dc7 100644 (file)
@@ -44,7 +44,8 @@ function createChart( chartID, divName, xSize, ySize, data ) {
   }
 
   // Figure out suitable size based on container size.
-  var w = Math.min(div.clientWidth - 32, 800);
+  // In some cases the containing element has no size. We should insist on a minimum size.
+  var w = Math.max(Math.min(div.clientWidth - 32, 800), 316);
   var h = Math.min(400, parseInt(w / 2));
 
   var chartNode = document.createElement('div');