1 | <?php |
---|
2 | |
---|
3 | /** |
---|
4 | * @file |
---|
5 | * Plugin theme file. |
---|
6 | */ |
---|
7 | function template_preprocess_semantic_views(&$vars) { |
---|
8 | $options = $vars['options']; |
---|
9 | $view = $vars['view']; |
---|
10 | $fields = $view->get_items('field'); |
---|
11 | $data = array(); |
---|
12 | $highcharts_config = json_decode(file_get_contents(drupal_get_path("module", "highcharts_views") . '/defaults/bar-basic.json')); |
---|
13 | $highcharts_config->chart->defaultSeriesType = $options['format']['chart_type']; |
---|
14 | $highcharts_config->title->text = $options['format']['title']; |
---|
15 | $highcharts_config->subtitle->text = $options['format']['subtitle']; |
---|
16 | |
---|
17 | $highcharts_config->legend->enabled = $options['format']['legend_enabled']; |
---|
18 | if ($options['format']['chart_type']!= 'pie') { |
---|
19 | $highcharts_config->yAxis->title->text = $options['y_axis']['title']; |
---|
20 | $highcharts_config->yAxis->title->align = $options['y_axis']['title_align']; |
---|
21 | if ($options['x_axis']["reversed"] != FALSE) { |
---|
22 | $highcharts_config->xAxis->reversed = TRUE; |
---|
23 | } |
---|
24 | if ($options['y_axis']["reversed"] != FALSE) { |
---|
25 | $highcharts_config->yAxis->reversed = TRUE; |
---|
26 | } |
---|
27 | if ($options['format']['swap_axes'] != FALSE) { |
---|
28 | $highcharts_config->chart->inverted = TRUE; |
---|
29 | } |
---|
30 | } |
---|
31 | |
---|
32 | $highcharts_config->series = array(); |
---|
33 | $highcharts_config->xAxis->categories = array(); |
---|
34 | if (is_array($options) |
---|
35 | && is_array($options['x_axis']['dataset_data']) |
---|
36 | && is_array($fields)) { |
---|
37 | foreach ($options['x_axis']['dataset_data'] as $key) { |
---|
38 | if ($key != FALSE) { |
---|
39 | $vars['fields'][$key] = $fields[$key]; |
---|
40 | } |
---|
41 | } |
---|
42 | } |
---|
43 | |
---|
44 | $highcharts_config->xAxis->categories = array(); |
---|
45 | foreach ($view->style_plugin->render_tokens as $result_index => $row) { |
---|
46 | foreach ($row as $field_name => $field) { |
---|
47 | $f = str_replace(array('[',']'), '', $field_name); |
---|
48 | if ($options['x_axis']['dataset_data'][$f]) { |
---|
49 | $data[$f][] = (float)$field; |
---|
50 | } |
---|
51 | } |
---|
52 | if (!empty($options['x_axis']['dataset_label'])) { |
---|
53 | $highcharts_config->xAxis->categories[] = $row["[".$options['x_axis']['dataset_label']."]"]; |
---|
54 | } |
---|
55 | } |
---|
56 | if (function_exists("highcharts_series_" . $options['format']['chart_type'])) { |
---|
57 | // If there's a specialized data writer, return data from data writer. |
---|
58 | $highcharts_config->series = array(call_user_func("highcharts_views_series_".$options['format']['chart_type'], $data, $fields, $options)); |
---|
59 | } |
---|
60 | else { |
---|
61 | // Get a standard series. |
---|
62 | $highcharts_config->series = highcharts_views_series($data, $vars['fields']); |
---|
63 | } |
---|
64 | |
---|
65 | // Render the chart options object, and retrieve the chart id. |
---|
66 | highcharts_render($highcharts_config); |
---|
67 | // Define required and optional chart container attributes. |
---|
68 | $attributes = array( |
---|
69 | // Required chart id passed by reference. |
---|
70 | 'id' => $highcharts_config->chart->renderTo, |
---|
71 | // @todo add optional views config for styles or any other valid attribute. |
---|
72 | // Example: 'style' => 'height: 400px;' |
---|
73 | ); |
---|
74 | |
---|
75 | $vars['attributes'] = $attributes; |
---|
76 | } |
---|
77 | |
---|
78 | /** |
---|
79 | * Standard highcharts views series data writer. |
---|
80 | * |
---|
81 | * @param array $data |
---|
82 | * @param array $fields |
---|
83 | * |
---|
84 | * @return |
---|
85 | * The highcharts series data object. |
---|
86 | */ |
---|
87 | function highcharts_views_series($data, $fields) { |
---|
88 | $toReturn = array(); |
---|
89 | |
---|
90 | foreach ($fields as $key => $field) { |
---|
91 | $item = new stdClass; |
---|
92 | $item->name = (array_key_exists("label", $field)) ? $field['label'] : $field['id']; |
---|
93 | $item->data = $data[$key]; |
---|
94 | $toReturn[] = $item; |
---|
95 | } |
---|
96 | |
---|
97 | return $toReturn; |
---|
98 | } |
---|
99 | |
---|
100 | /** |
---|
101 | * Specialized pie highcharts views series data writer. |
---|
102 | * |
---|
103 | * @param array $data |
---|
104 | * @param array $fields |
---|
105 | * @param array $options |
---|
106 | * |
---|
107 | * @return |
---|
108 | * The highcharts series data object. |
---|
109 | */ |
---|
110 | function highcharts_views_series_pie($data, $fields, $options) { |
---|
111 | $toReturn = new StdClass(); |
---|
112 | $toReturn->type = $options['format']['chart_type']; |
---|
113 | $toReturn->name = $options['format']['title']; |
---|
114 | $toReturn->data = array(); |
---|
115 | |
---|
116 | foreach ($fields as $key => $field) { |
---|
117 | $pie = 0; |
---|
118 | if (array_key_exists($key, $data)) { |
---|
119 | foreach($data[$key] as $value) { |
---|
120 | if (is_numeric($value)) { |
---|
121 | $pie += $value; |
---|
122 | } |
---|
123 | } |
---|
124 | $toReturn->data[] = array( |
---|
125 | array_key_exists("label", $field) ? $field['label'] : $field['id'], |
---|
126 | $pie, |
---|
127 | ); |
---|
128 | } |
---|
129 | } |
---|
130 | |
---|
131 | return $toReturn; |
---|
132 | } |
---|