/[drupal]/contributions/modules/fusioncharts/fusioncharts.module
ViewVC logotype

Contents of /contributions/modules/fusioncharts/fusioncharts.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.18 - (show annotations) (download) (as text)
Tue Apr 21 10:32:27 2009 UTC (7 months, 1 week ago) by aaron1234nz
Branch: MAIN
CVS Tags: DRUPAL-5--1-1, DRUPAL-5--1-0, HEAD
Changes since 1.17: +20 -8 lines
File MIME type: text/x-php
Recomit Drupal 5 to HEAD
1 <?php
2 // $Id: fusioncharts.module,v 1.13 2008/11/16 03:14:56 aaron1234nz Exp $
3 define('FUSIONCHART_ARRAY', '1');
4 define('FUSIONCHART_QUERY', '2');
5 define('FUSIONCHART_NODE', '3');
6 define('FUSIONCHART_VIEW', '4');
7
8 include_once('matrix.inc');
9
10 /**
11 * Implementation of hook_menu().
12 */
13 function fusioncharts_menu($may_cache) {
14 $items[] = array(
15 'path' => 'fusioncharts/data',
16 'callback' => 'fusioncharts_data_jscallback',
17 'type' => MENU_CALLBACK,
18 'access' => user_access('access content'),
19 );
20 return $items;
21 }
22
23 /**
24 * Implementation of hook_node_info()
25 */
26 function fusioncharts_node_info() {
27 return array(
28 'fusioncharts' => array(
29 'name' => t('Fusion Chart'),
30 'module' => 'fusioncharts',
31 'has_body' => FALSE,
32 'description' => t("A chart made with the Fusion Charts system."),
33 )
34 );
35 }
36
37 /**
38 * Implementation of hook_access().
39 */
40 function fusioncharts_access($op, $node) {
41 global $user;
42
43 if ($op == 'create' && user_access('create fusioncharts nodes')) {
44 return TRUE;
45 }
46
47 if ($op == 'update' || $op == 'delete') {
48 if (user_access('edit fusioncharts nodes')) {
49 return TRUE;
50 }
51 if (user_access('edit own fusioncharts nodes') && ($user->uid == $node->uid)) {
52 return TRUE;
53 }
54 }
55 }
56
57 /**
58 * Implementation of hook_perm().
59 */
60 function fusioncharts_perm() {
61 return array('create fusioncharts nodes', 'edit fusioncharts nodes', 'edit own fusioncharts nodes');
62 }
63
64 /**
65 * Implementation of hook_form().
66 */
67 function fusioncharts_form(&$node, $form_values = NULL) {
68 include_once('settings.inc');
69 drupal_add_js(drupal_get_path('module', 'fusioncharts') .'/fusioncharts.js');
70 $type = node_get_types('type', $node);
71 $chart_types = variable_get('fusioncharts', '');
72 array_unshift($chart_types, ''); //add a blank to the front of the list
73 $form['#multistep'] = TRUE;
74 $form['#redirect'] = FALSE;
75 $form['title'] = array(
76 '#type' => 'textfield',
77 '#title' => check_plain($type->title_label),
78 '#required' => TRUE,
79 '#default_value' => $node->title,
80 '#weight' => -5
81 );
82
83 if (!isset($node->nid)) {
84 if (!isset($form_values)) {
85 $step = 1;
86 }
87 else {
88 $step = 2;
89 }
90 }
91 else {
92 $step = 2;
93 }
94 if ($form_values['op'] == 'More rows') {
95 $no_of_rows = $form_values['no_of_rows'] + 5;
96 }
97 else {
98 if (isset($node->data)) {
99 $temp = unserialize($node->data);
100 $no_of_rows = count($temp);
101 }
102 else {
103 $no_of_rows = (isset($form_values['no_of_rows']) ? $form_values['no_of_rows'] : 10);
104 }
105 }
106 for ($i=0; $i<=$no_of_rows; $i++) {
107 $rows[] = $i;
108 }
109 if ($form_values['op'] == 'More columns') {
110 $no_of_cols = $form_values['no_of_cols'] + 1;
111 }
112 else {
113 if (isset($node->data)) {
114 $temp = unserialize($node->data);
115 $no_of_cols = count($temp[0]);
116 }
117 else {
118 $no_of_cols = (isset($form_values['no_of_cols']) ? $form_values['no_of_cols'] : 3);
119 }
120 }
121 for ($i=0; $i<=$no_of_cols; $i++) {
122 $cols[] = '';
123 }
124 $chart_type = ($form_values['chart_type'] ? $form_values['chart_type'] : $node->chart_type);
125 $form['step'] = array(
126 '#type' => 'hidden',
127 '#value' => $step,
128 );
129 $form['no_of_rows'] = array(
130 '#type' => 'hidden',
131 '#value' => $no_of_rows,
132 );
133 $form['no_of_cols'] = array(
134 '#type' => 'hidden',
135 '#value' => $no_of_cols,
136 );
137 if ($step >= 1) {
138 $form['chart_type'] = array(
139 '#type' => 'select',
140 '#title' => t('Type of chart'),
141 '#default_value' => $chart_type,
142 '#options' => $chart_types,
143 '#description' => t('The is the type of chart to build. The chart options and data required from a query depend on the type of chart.'),
144 '#required' => TRUE,
145 );
146 }
147 if ($step >= 2) {
148 switch ($chart_type) {
149 case 'Column 3D':
150 case 'Column 2D':
151 case 'Line 2D':
152 case 'Area 2D':
153 case 'Bar 2D':
154 case 'Pie 2D':
155 case 'Pie 3D':
156 case 'Doughnut 2D':
157 case 'Funnel Chart':
158 $form['data'] = array(
159 '#type' => 'matrixfield',
160 '#title' => t('Data'),
161 '#description' => t('Enter your data here'),
162 '#cols' => array('Series', 'Value'),
163 '#rows' => $rows,
164 '#tree' => TRUE,
165 '#default_value' => (isset($form_values['data']['matrix']) ? $form_values['data']['matrix'] : unserialize($node->data))
166 );
167 break;
168 case 'Multi-series Column 2D':
169 case 'Multi-series Column 3D':
170 case 'Multi-series Line 2D':
171 case 'Multi-series Bar 2D':
172 case 'Multi-series Area 2D':
173 case 'Stacked Column 3D':
174 case 'Stacked Column 2D':
175 case 'Stacked Bar 2D':
176 case 'Stacked Area 2D':
177 $rows[0] = 'Label';
178 $cols[0] = 'Series';
179 drupal_add_css(drupal_get_path('module', 'fusioncharts') .'/fusioncharts.css', 'module', 'all', FALSE);
180 $form['data'] = array(
181 '#type' => 'matrixfield',
182 '#title' => t('Data'),
183 '#description' => t('Enter your data here. The first column should contain the name of series (eg. Jan, Feb, Mar, Apr). The subsequent columns should contain the data. The first row should contain the name of each category (eg. 2007, 2008, 2009).'),
184 '#cols' => $cols,
185 '#rows' => $rows,
186 '#tree' => TRUE,
187 '#default_value' => (isset($form_values['data']['matrix']) ? $form_values['data']['matrix'] : unserialize($node->data)),
188 );
189 $form['more_cols'] = array(
190 '#type' => 'button',
191 '#value' => 'More columns',
192 );
193 break;
194 case 'Multi-series Column 2D + Line - Dual Y Axis':
195 case 'Multi-series Column 3D + Line - Dual Y Axis':
196 $rows[0] = 'Label';
197 $rows[1] = 'P/S';
198 drupal_add_css(drupal_get_path('module', 'fusioncharts') .'/fusioncharts.css', 'module', 'all', FALSE);
199 $form['data'] = array(
200 '#type' => 'matrixfield',
201 '#title' => t('Data'),
202 '#description' => t('Enter your data here. The first column should contain the name of series (eg. Jan, Feb, Mar, Apr). The subsequent columns should contain the data. The first row should contain the name of each category (eg. 2007, 2008, 2009). The second row should contain either "P" or "S" depending on which access the data should be plotted against.'),
203 '#cols' => $cols,
204 '#rows' => $rows,
205 '#tree' => TRUE,
206 '#default_value' => (isset($form_values['data']['matrix']) ? $form_values['data']['matrix'] : unserialize($node->data))
207 );
208 $form['more_cols'] = array(
209 '#type' => 'button',
210 '#value' => 'More cols',
211 );
212 break;
213 case 'Candlestick Chart':
214 //not yet implemented
215 break;
216 case 'Gantt Chart':
217 //not yet implemented
218 break;
219 }
220 $form['more_rows'] = array(
221 '#type' => 'button',
222 '#value' => 'More rows',
223 );
224
225 if (!isset($node->settings)) {
226 $node->settings = variable_get('fusioncharts-defset', ''); //load up some sensible default values
227 }
228 if (!isset($node->attributes)) {
229 $node->attributes = variable_get('fusioncharts-defattr', ''); //load up some sensible default values
230 }
231 $form['size'] = array(
232 '#type' => 'fieldset',
233 '#title' => t('Chart size'),
234 '#tree' => TRUE,
235 '#collapsible' => TRUE,
236 '#collapsed' => FALSE,
237 );
238 $form['size']['width'] = array(
239 '#type' => 'textfield',
240 '#title' => t('Chart width'),
241 '#default_value' => isset($node->width) ? $node->width : 400,
242 '#description' => t('The width of the chart (pixels)'),
243 '#size' => 5,
244 '#required' => TRUE,
245 );
246 $form['size']['height'] = array(
247 '#type' => 'textfield',
248 '#title' => t('Chart height'),
249 '#default_value' => isset($node->height) ? $node->height : 300,
250 '#description' => t('The height of the chart (pixels)'),
251 '#size' => 5,
252 '#required' => TRUE,
253 );
254 $form['settings'] = array(
255 '#type' => 'markup',
256 '#value' => ' ',
257 '#tree' => TRUE,
258 );
259 $form['attributes'] = array(
260 '#type' => 'markup',
261 '#value' => ' ',
262 '#tree' => TRUE,
263 );
264 //each chart has a number or properties that can be set. There are a number of common properties, and a number that apply to
265 //a selection of charts. The following section defines all the possible attributes for each chart.
266 switch ($chart_type) {
267 //Single Series Charts
268 case 'Column 2D':
269 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
270 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
271 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
272 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
273 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
274 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
275 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
276 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_h($node->settings));
277 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
278 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
279 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
280 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
281 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
282 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
283 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
284 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
285 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
286 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
287 break;
288
289 case 'Column 3D':
290 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
291 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
292 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
293 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
294 $form = array_merge_recursive($form, _fusioncharts_Canvas_extra($node->settings));
295 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
296 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
297 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
298 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
299 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
300 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
301 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
302 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
303 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane_extra($node->settings));
304 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
305 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
306 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
307 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
308 break;
309
310 case 'Pie 3D':
311 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
312 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
313 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
314 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_c($node->settings));
315 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
316 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
317 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
318 $form = array_merge_recursive($form, _fusioncharts_PieProperties($node->settings));
319 $form = array_merge_recursive($form, _fusioncharts_PieProperties_extra($node->settings));
320 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
321 break;
322
323 case 'Pie 2D':
324 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
325 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
326 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
327 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_c($node->settings));
328 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
329 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
330 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
331 $form = array_merge_recursive($form, _fusioncharts_PieProperties($node->settings));
332 $form = array_merge_recursive($form, _fusioncharts_PieShadowProperties($node->settings));
333 $form = array_merge_recursive($form, _fusioncharts_NameValuedisplaydistance($node->settings));
334 $form = array_merge_recursive($form, _fusioncharts_NameValuedisplaydistance_extra($node->settings));
335 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
336 break;
337
338 case 'Line 2D':
339 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
340 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
341 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
342 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
343 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
344 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
345 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
346 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
347 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
348 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
349 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
350 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
351 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
352 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
353 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
354 $form = array_merge_recursive($form, _fusioncharts_LineProperties($node->settings));
355 $form = array_merge_recursive($form, _fusioncharts_LineShadowProperties($node->settings));
356 $form = array_merge_recursive($form, _fusioncharts_Anchor($node->attributes));
357 break;
358
359 case 'Bar 2D':
360 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
361 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
362 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
363 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
364 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
365 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
366 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
367 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_d($node->settings));
368 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
369 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
370 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
371 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
372 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
373 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
374 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
375 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
376 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
377 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
378 break;
379
380 case 'Area 2D':
381 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
382 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
383 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
384 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
385 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
386 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
387 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
388 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
389 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
390 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
391 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
392 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
393 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
394 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
395 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
396 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
397 $form = array_merge_recursive($form, _fusioncharts_Area($node->settings));
398 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
399 break;
400
401 case 'Doughnut 2D':
402 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
403 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
404 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
405 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_c($node->settings));
406 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
407 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
408 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
409 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
410 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
411 $form = array_merge_recursive($form, _fusioncharts_PieProperties2($node->settings));
412 $form = array_merge_recursive($form, _fusioncharts_PieShadowProperties2($node->settings));
413 $form = array_merge_recursive($form, _fusioncharts_NameValuedisplaydistance($node->settings));
414 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
415 break;
416
417 case 'Multi-series Column 2D':
418 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
419 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
420 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
421 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
422 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
423 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
424 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
425 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_h($node->settings));
426 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
427 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
428 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
429 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
430 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
431 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
432 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
433 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
434 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
435 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
436 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
437 break;
438
439 case 'Multi-series Column 3D':
440 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
441 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
442 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
443 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
444 $form = array_merge_recursive($form, _fusioncharts_Canvas_extra($node->settings));
445 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
446 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
447 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
448 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
449 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
450 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
451 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
452 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
453 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
454 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane_extra($node->settings));
455 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
456 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
457 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
458 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
459 break;
460
461 case 'Multi-series Line 2D':
462 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
463 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
464 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
465 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
466 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
467 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
468 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
469 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
470 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
471 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
472 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
473 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
474 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
475 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
476 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
477 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
478 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
479 $form = array_merge_recursive($form, _fusioncharts_LineProperties($node->settings));
480 $form = array_merge_recursive($form, _fusioncharts_Anchor($node->settings));
481 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
482 break;
483
484 case 'Multi-series Bar 2D':
485 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
486 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
487 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
488 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
489 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
490 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
491 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
492 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_d($node->settings));
493 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
494 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
495 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
496 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
497 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
498 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
499 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
500 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
501 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
502 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
503 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
504 break;
505
506 case 'Multi-series Area 2D':
507 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
508 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
509 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
510 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
511 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
512 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
513 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
514 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
515 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
516 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
517 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
518 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
519 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
520 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
521 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
522 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
523 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
524 $form = array_merge_recursive($form, _fusioncharts_Area($node->settings));
525 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
526 break;
527
528 case ''://?? don't know what this set if for. I lost track.
529 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
530 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
531 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
532 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
533 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
534 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
535 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
536 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
537 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
538 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
539 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
540 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
541 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
542 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
543 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
544 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
545 break;
546
547 case 'Stacked Column 2D':
548 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
549 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
550 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
551 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
552 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
553 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
554 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
555 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_h($node->settings));
556 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
557 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
558 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
559 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
560 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
561 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
562 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
563 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
564 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
565 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
566 break;
567
568 case 'Stacked Area 2D':
569 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
570 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
571 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
572 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
573 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
574 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
575 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
576 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
577 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
578 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
579 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
580 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
581 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
582 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
583 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
584 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
585 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
586 $form = array_merge_recursive($form, _fusioncharts_Area($node->settings));
587 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
588 break;
589
590 case 'Stacked Column 2D':
591 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
592 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
593 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
594 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
595 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
596 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
597 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
598 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_d($node->settings));
599 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_h($node->settings));
600 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
601 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
602 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
603 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
604 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
605 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
606 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
607 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
608 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
609 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
610 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
611 break;
612
613 case 'Stacked Column 3D':
614 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
615 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
616 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
617 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
618 $form = array_merge_recursive($form, _fusioncharts_Canvas_extra($node->settings));
619 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits($node->settings));
620 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
621 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
622 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
623 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
624 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
625 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
626 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
627 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
628 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane_extra($node->settings));
629 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
630 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
631 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
632 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
633 break;
634
635 // Combination Charts
636 case 'Multi-series Column 3D + Line - Dual Y Axis':
637 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
638 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
639 $form = array_merge_recursive($form, _fusioncharts_Titles_extra2($node->settings));
640 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
641 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
642 $form = array_merge_recursive($form, _fusioncharts_Canvas_extra($node->settings));
643 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits2($node->settings));
644 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
645 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
646 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_f($node->settings));
647 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_e($node->settings));
648 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
649 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
650 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
651 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
652 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
653 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane_extra($node->settings));
654 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
655 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
656 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
657 $form = array_merge_recursive($form, _fusioncharts_LineProperties($node->settings));
658 $form = array_merge_recursive($form, _fusioncharts_LineShadowProperties($node->settings));
659 $form = array_merge_recursive($form, _fusioncharts_Anchor($node->settings));
660 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
661 break;
662
663 case 'Multi-series Column 2D + Line - Dual Y Axis':
664 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
665 $form = array_merge_recursive($form, _fusioncharts_Titles_extra2($node->settings));
666 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
667 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits2($node->settings));
668 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
669 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_b($node->settings));
670 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_h($node->settings));
671 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_f($node->settings));
672 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
673 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
674 $form = array_merge_recursive($form, _fusioncharts_ZeroPlane($node->settings));
675 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
676 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting_extra($node->settings));
677 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
678 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->settings));
679 $form = array_merge_recursive($form, _fusioncharts_LineProperties($node->settings));
680 $form = array_merge_recursive($form, _fusioncharts_LineShadowProperties($node->settings));
681 $form = array_merge_recursive($form, _fusioncharts_Anchor($node->settings));
682 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
683 break;
684
685 case 'Candlestick Chart':
686 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
687 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
688 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
689 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
690 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
691 $form = array_merge_recursive($form, _fusioncharts_NumericalLimits3($node->settings));
692 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
693 $form = array_merge_recursive($form, _fusioncharts_Font_extra($node->settings));
694 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
695 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
696 $form = array_merge_recursive($form, _fusioncharts_divisionalH($node->settings));
697 $form = array_merge_recursive($form, _fusioncharts_divisionalV($node->attributes));
698 //$form = array_merge_recursive($form, _fusioncharts_Candle($node->settings));
699 break;
700
701 case 'Funnel Chart':
702 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
703 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
704 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_a($node->settings));
705 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_i($node->settings));
706 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
707 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
708 $form = array_merge_recursive($form, _fusioncharts_ChartMargins($node->settings));
709 $form = array_merge_recursive($form, _fusioncharts_NumberFormatting($node->settings));
710 $form = array_merge_recursive($form, _fusioncharts_Colors($node->attributes));
711 break;
712
713 case 'Gantt Chart':
714 $form = array_merge_recursive($form, _fusioncharts_Titles($node->settings));
715 $form = array_merge_recursive($form, _fusioncharts_Titles_extra($node->settings));
716 $form = array_merge_recursive($form, _fusioncharts_Background($node->settings));
717 $form = array_merge_recursive($form, _fusioncharts_Canvas($node->settings));
718 $form = array_merge_recursive($form, _fusioncharts_GenericProperties_j($node->settings));
719 $form = array_merge_recursive($form, _fusioncharts_Font($node->settings));
720 $form = array_merge_recursive($form, _fusioncharts_HoverCaption($node->settings));
721 $form = array_merge_recursive($form, _fusioncharts_GanttGeneral($node->settings));
722 $form = array_merge_recursive($form, _fusioncharts_DataTable($node->attributes));
723 break;
724 }
725 $form['#redirect'] = NULL; //we can submit now
726 }
727 return $form;
728 }
729
730 /**
731 * Implementation of hook_insert().
732 */
733 function fusioncharts_insert(&$node) {
734 foreach ((array)$node->attributes as $sub => $subarray) {
735 foreach ($subarray as $key => $value) {
736 $attributes[$key] = $value;
737 }
738 }
739 foreach ((array)$node->settings as $sub => $subarray) {
740 foreach ($subarray as $key => $value) {
741 $settings[$key] = $value;
742 }
743 }
744 $chart_types = variable_get('fusioncharts', '');
745 db_query("INSERT INTO {fusioncharts} (nid, vid, chart_type, settings, attributes, data, width, height) VALUES (%d, %d, '%s', '%s', '%s', '%s', %d, %d)", $node->nid, $node->vid, $node->chart_type, serialize($settings), serialize($attributes), serialize($node->data['matrix']), $node->size['width'], $node->size['height']);
746 }
747
748 /**
749 * Implementation of hook_update().
750 */
751 function fusioncharts_update($node) {
752 foreach ((array)$node->attributes as $sub => $subarray) {
753 foreach ($subarray as $key => $value) {
754 $attributes[$key] = $value;
755 }
756 }
757 foreach ((array)$node->settings as $sub => $subarray) {
758 foreach ($subarray as $key => $value) {
759 $settings[$key] = $value;
760 }
761 }
762 if ($node->revision) {
763 fusioncharts_insert($node);
764 }
765 else {
766 db_query("UPDATE {fusioncharts} SET nid = %d, chart_type = '%s', settings = '%s', attributes = '%s', data = '%s', width = %d, height = %d WHERE vid = %d", $node->nid, $node->chart_type, serialize($settings), serialize($attributes), serialize($node->data['matrix']), $node->size['width'], $node->size['height'], $node->vid);
767 }
768 }
769
770 /**
771 * Implementation of hook_nodeapi().
772 */
773 function fusioncharts_nodeapi(&$node, $op, $teaser, $page) {
774 switch ($op) {
775 case 'delete revision':
776 // Notice that we're matching a single revision based on the node's vid.
777 db_query('DELETE FROM {fusioncharts} WHERE vid = %d', $node->vid);
778 break;
779 case 'load':
780 $node->settings = unserialize($node->settings);
781 $node->attributes = unserialize($node->attributes);
782 break;
783 }
784 }
785
786 /**
787 * Implementation of hook_delete().
788 */
789 function fusioncharts_delete($node) {
790 db_query('DELETE FROM {fusioncharts} WHERE nid = %d', $node->nid);
791 }
792
793 /**
794 * Implementation of hook_load().
795 */
796 function fusioncharts_load($node) {
797 return db_fetch_object(db_query("SELECT * FROM {fusioncharts} WHERE vid = %d", $node->vid));
798 }
799
800 /**
801 * Implementation of hook_view().
802 */
803 function fusioncharts_view($node, $teaser = FALSE, $page = FALSE) {
804 $node = node_prepare($node, $teaser);
805 $node->content['chart'] = array(
806 '#value' => fusioncharts_render(FUSIONCHART_NODE, $node->vid, 'node_'.$node->vid),
807 '#weight' => 1,
808 );
809 return $node;
810 }
811
812 /**
813 * XML generation from data
814 * This function is called by fusioncharts_render and by fusioncharts_data_jscallback initiated by the javascript onclick action.
815 *
816 * @param string $jsid Name to be used for the id attribute in the DOM (used for javascript manipulation)
817 * @param enum $type The type of data recieved. One of FUSIONCHARTS_NODE, FUSIONCHARTS_QUERY, FUSIONCHARTS_ARRAY, FUSIONCHARTS_VIEW
818 * @param string $callbackfn The name of the function which holds the chart definition
819 * @param array $args Any further arguments recieved by the function. These arguments will be passed to the callback function. optional
820 * @return the XML data to draw the chart
821 */
822 function fusioncharts_data($jsid, $type, $callbackfn, $args = array()) {
823 switch ($type) {
824 case FUSIONCHART_ARRAY:
825 list($data, $chart_type, $settings, $attributes, $width, $height) = call_user_func($callbackfn .'_fusionchart_callback', $args);
826 $data = (array)$data;
827 break;
828 case FUSIONCHART_QUERY:
829 list($query, $chart_type, $settings, $attributes, $width, $height) = call_user_func($callbackfn .'_fusionchart_callback', $args);
830 $result = db_query($query);
831 if (db_num_rows($result) == 0) {
832 drupal_set_message("No data returned from the query '$query'");
833 exit();
834 }
835 $i=0;
836 switch ($chart_type) {
837 case 'Column 3D':
838 case 'Column 2D':
839 case 'Line 2D':
840 case 'Area 2D':
841 case 'Bar 2D':
842 case 'Pie 2D':
843 case 'Pie 3D':
844 case 'Doughnut 2D':
845 case 'Funnel Chart':
846 while ($row = db_fetch_object($result)) {
847 $data[$i][0] = $row->name;
848 $data[$i][1] = $row->value;
849 $i++;
850 }
851 break;
852
853 case 'Multi-series Column 2D':
854 case 'Multi-series Column 3D':
855 case 'Multi-series Line 2D':
856 case 'Multi-series Bar 2D':
857 case 'Multi-series Area 2D':
858 case 'Stacked Column 3D':
859 case 'Stacked Column 2D':
860 case 'Stacked Bar 2D':
861 case 'Stacked Area 2D':
862 while ($row = db_fetch_object($result)) {
863 $data[$i][0] = $row->category;
864 $data[$i][1] = $row->series;
865 $data[$i][2] = $row->value;
866 $i++;
867 }
868 break;
869
870 case 'Multi-series Column 2D + Line - Dual Y Axis':
871 case 'Multi-series Column 3D + Line - Dual Y Axis':
872 while ($row = db_fetch_object($result)) {
873 $data[$i][0] = $row->category;
874 $data[$i][1] = $row->series;
875 $data[$i][2] = $row->axis;
876 $data[$i][3] = $row->value;
877 $i++;
878 }
879 break;
880
881 case 'Candlestick Chart':
882 //probably too complex for a simple query
883 break;
884
885 case 'Gantt Chart':
886 //probably too complex for a simple query
887 break;
888 }
889 $data = (array)$data;
890 break;
891 case FUSIONCHART_NODE:
892 $row = db_fetch_object(db_query("SELECT data, chart_type, settings, attributes FROM {fusioncharts} WHERE vid = %d", $callbackfn));
893 $chart_type = $row->chart_type;
894 $raw_data = unserialize($row->data);
895 $settings = unserialize($row->settings);
896 $attributes_temp = unserialize($row->attributes);
897 foreach ((array)$attributes_temp as $key => $value) {
898 if (substr($value, 0, 1) == '#' && strlen($value) == 7) { //remove the # from the color
899 $attributes['color'][] = substr($value, 1);
900 }
901 else {
902 $attributes[$key] = $value;
903 }
904 }
905 foreach ((array)$settings as $key => $value) {
906 if (substr($value, 0, 1) == '#' && strlen($value) == 7) { //remove the # from the color
907 $settings[$key] = substr($value, 1);
908 }
909 }
910
911 switch ($chart_type) {
912 case 'Column 3D':
913 case 'Column 2D':
914 case 'Line 2D':
915 case 'Area 2D':
916 case 'Bar 2D':
917 case 'Pie 2D':
918 case 'Pie 3D':
919 case 'Doughnut 2D':
920 case 'Funnel Chart':
921 $data = $raw_data;
922 break;
923
924 case 'Multi-series Column 2D':
925 case 'Multi-series Column 3D':
926 case 'Multi-series Line 2D':
927 case 'Multi-series Bar 2D':
928 case 'Multi-series Area 2D':
929 case 'Stacked Column 3D':
930 case 'Stacked Column 2D':
931 case 'Stacked Bar 2D':
932 case 'Stacked Area 2D':
933 $no_of_rows = count($raw_data);
934 $no_of_cols = count($raw_data[0]);
935 for ($i=1; $i<$no_of_cols; $i++) {
936 for ($j=1; $j<$no_of_rows; $j++) {
937 if ($raw_data[$j][$i] != '') {
938 $data[] = array($raw_data[$j][0], $raw_data[0][$i], $raw_data[$j][$i]);
939 }
940 }
941 }
942 break;
943
944 case 'Multi-series Column 2D + Line - Dual Y Axis':
945 case 'Multi-series Column 3D + Line - Dual Y Axis':
946 $no_of_rows = count($raw_data);
947 $no_of_cols = count($raw_data[0]);
948 for ($i=1; $i<$no_of_cols; $i++) {
949 for ($j=2; $j<$no_of_rows; $j++) {
950 if ($raw_data[$j][$i] != '') {
951 $data[] = array($raw_data[$j][0], $raw_data[0][$i], $raw_data[1][$i], $raw_data[$j][$i]);
952 }
953 }
954 }
955 break;
956
957 case 'Candlestick Chart':
958 //not implemented yet
959 break;
960
961 case 'Gantt Chart':
962 //not implemented yet
963 break;
964 }
965 $data = (array)$data;
966 //append another 50 random colours, just so we don't run out!
967 for ($i=1; $i<50; $i++) {
968 $attributes['color'][] = dechex(rand(0, 255)) . dechex(rand(0, 255)) . dechex(rand(0, 255));
969 }
970 break;
971 case FUSIONCHART_VIEW:
972 $view = views_get_view($callbackfn);
973 foreach ($view->argument as $argument) {
974 if ($argument['type'] == 'charttype') {
975 $chart_type = $argument['options'];
976 $aggregation = strtolower($argument['wildcard']);
977 }
978 }
979 foreach ($view->field as $field) {
980 $datamap[$field['queryname']] = !empty($field['label']) ? $field['label'] : $field['queryname'];
981 }
982 $datamap['nid'] = 'nid';
983 views_load_cache();
984 $info = _views_get_query($view, NULL, NULL);
985 $query = db_rewrite_sql($info['query'], 'node');
986 $result = db_query($query, $info['args']);
987 while ($item = db_fetch_object($result)) {
988 $count = 1;
989 foreach ($item as $field => $value) {
990 switch ($aggregation) {
991 case 'average':
992 $data[$datamap[$field]] = ($data[$datamap[$field]] * $count +