* @version $Id$
* @access public
* @license http://opensource.org/licenses/gpl-3.0.html
*/
/**
*
* @param array $indicator // indicator info
* @param array $obj // parameters
* @param array $values // array of values
* @return array|string
*/
function prepare_chart_data($indicator, $obj, $values)
{
// we check if defined colors are set for given indicator in public theme
if(file_exists(THEME_PUBLIC_PATH.'indicators-colors.php')) include_once(THEME_PUBLIC_PATH.'indicators-colors.php');
if(empty($values)) return true;
$obj['indicator-missing-values'] = [];
foreach ($values as $rec) {
// echo print_r($rec);
// echo "
";
// we get dates and format it based on indicator frequency
list($day, $month, $year) = explode('-', $rec['date_p']);
if($obj['indicator-frequency'] >= 365 ) $dateVal = $year;
elseif($obj['indicator-frequency'] >= 30 ) $dateVal = $month. '-'.$year;
else $dateVal = $day . '-' .$month. '-'. substr($year, 2, 2);
array_push($obj['dates'], $dateVal);
array_push($obj['data'], $rec['sdiv_value']);
array_push($obj['thresholds'], $rec['sdiv_threshold']);
// we identify empty values
if ($indicator[0]['sdii_value_type'] == 'unique' && is_null($rec['sdiv_value'])) array_push($obj['indicator-missing-values'], $dateVal);
if ($indicator[0]['sdii_value_type'] == 'multiple') {
$data = unserialize($rec['sdiv_multivalue']);
if(null_values_only($data)) array_push($obj['indicator-missing-values'], $dateVal);
}
}
$obj['indicator-missing-values'] = array_reverse($obj['indicator-missing-values']);
// if indicator is multiple, we get the given year
if ($indicator[0]['sdii_value_type'] == 'multiple') {
// pie chart only - year parameter mandatory !
if (($obj['indicator-wanted-vis'] == 'pie' || $obj['indicator-wanted-vis'] == 'treemap') && is_null($obj['indicator-wanted-year'])) die('year parameter should be passed for donut / pie charts.');
// 1 - pie chart only - year parameter mandatory !
if ($obj['indicator-wanted-vis'] == 'pie') {
$arr = [];
$colors = [];
for ($i = 0; $i < count($values); $i ++) {
$data = unserialize($values[$i]['sdiv_multivalue']);
if ($obj['indicator-wanted-year'] == substr(formatDate($values[$i]['date_p'], true), 0, 4)) {
foreach ($data as &$val) {
$chartvalues = array(
formatText($val['label'], '2HTML'),
$val['value']
);
if(isset($val['color'])) array_push($colors, $val['color']);
array_push($arr, $chartvalues);
}
}
}
$obj['data'] = $arr;
if(!empty($colors)) $obj['indicator-colors'] = json_encode($colors); // we set colors key if not empty
}
// 1 - treemap chart only - year parameter mandatory !
elseif ($obj['indicator-wanted-vis'] == 'treemap') {
// do not pass leading '#' character in URL
// do not pass color as 'orange', 'blue', only hexadecimal !
isset($_GET['color1']) ? $obj['color1'] = '#' . $_GET['color1'] : $obj['color1'] = '#E6CFF7';
isset($_GET['color2']) ? $obj['color2'] = '#' . $_GET['color2'] : $obj['color2'] = '#BB93D8';
$arr = [];
for ($i = 0; $i < count($values); $i ++) {
$data = unserialize($values[$i]['sdiv_multivalue']);
if ($obj['indicator-wanted-year'] == substr(formatDate($values[$i]['date_p'], true), 0, 4)) {
// we sort array before display
usort($data, function ($a, $b) {
return $a['value'] - $b['value'];
});
$cnt = 1;
foreach ($data as &$val) {
$item = [];
$item["name"] = formatText($val['label'], '2HTML');
$item["value"] = $val['value'];
$item["colorValue"] = $cnt;
array_push($arr, $item);
$cnt ++;
}
}
}
$obj['data'] = json_encode($arr, JSON_NUMERIC_CHECK);
// print_r($obj);
}
// stacked column charts - we prepare default view with may values (several years)
else {
$arr = []; // for multiple only
$labels = []; // for multiple only
$colors = []; // for multiple only
$arrMean = []; // for multiple only
for ($i = 0; $i < count($values); $i++) {
$data = unserialize($values[$i]['sdiv_multivalue']);
// print_r($data);
array_push($arrMean, $data[0]['_mean']);
// first loop to get all labels and colors if set
foreach ($data as &$val) {
if (! in_array(formatText($val['label'], '2HTML'), $labels)) {
array_push($labels, formatText($val['label'], '2HTML'));
}
if (isset($val['color'])) array_push($colors, $val['color']);
}
}
// print_r($labels);
// second loop on labels
for ($t = 0; $t < count($labels); $t ++) {
$label_values = [];
for ($i = 0; $i < count($values); $i ++) {
$flag = 0; // Important flag not found value = 0
$data = unserialize($values[$i]['sdiv_multivalue']);
// first loop to get all labels
foreach ($data as &$val) {
if (formatText($val['label'], '2HTML') == $labels[$t]) {
array_push($label_values, $val['value']);
$flag = 1;
}
}
if ($flag == 0)
array_push($label_values, null); // Important flag not found value = 0
}
$item = [];
$item["name"] = $labels[$t];
$item["data"] = array_reverse($label_values);
array_push($arr, $item);
}
$obj['data'] = json_encode($arr, JSON_NUMERIC_CHECK);
$obj['data-mean'] = $arrMean;
if(!empty($colors)) $obj['indicator-colors'] = json_encode($colors); // we set colors key if not empty
// print_r($obj['data']);
}
// print_r($obj);
// exit;
// if 'labels_on_abscissa'
if($obj['indicator-multiple-mode'] == 'labels_on_abscissa') {
$dataAlt = [];
// echo '
';
// print_r(json_decode($obj['data'], true) );
$obj['dates'] = array_reverse($obj['dates']); // we have to reverse dates
$data = array_reverse(json_decode($obj['data'], true));
// [data] => [{"name":"janvier","data":[25,18,41]},{"name":"f\u00e9vrier","data":[14,25,85]},{"name":"mars","data":[35,42,21]},{"name":"avril","data":[47,35,11]},{"name":"mai","data":[12,63,66]},{"name":"juin","data":[8,14,25]}]
$arrMean = [];
// we iterate on $data to compute mean by labels
for($i = 0; $i < count($data); $i ++) {
array_push($arrMean, array_sum($data[$i]['data']) / count($data[$i]['data']));
}
// we prepare data as wanted
for ($m = 0; $m < count($obj['dates']); $m++) {
// echo $obj['dates'][$m].'
';
$tmpa = [];
foreach($labels as $k => $v) {
// echo($v). '
';
foreach ($data as $el) {
// echo $el['name'].'
';
// if($el['name'] == $v) array_push($dataAlt[$obj['dates'][$m]], $el['data'][$m]);
if($el['name'] == $v) {
array_push($tmpa, $el['data'][$m]);
}
}
}
//list($day, $month, $year)=explode('-',$obj['dates'][$m]);
//$d_date = $year ; // $day . '-' .$month. '-'. substr($year, 0, 2);
//array_push($dataAlt, array('name' => $d_date, 'data' => $tmpa));
array_push($dataAlt, array('name' => $obj['dates'][$m], 'data' => $tmpa));
}
$obj['data'] = json_encode($dataAlt, JSON_NUMERIC_CHECK);
$obj['dates'] = array_reverse($labels); // we set categories
$obj['data-mean'] = $arrMean;
/**
echo '
';
print_r($obj);
echo '
';
* */
}
} // we close indicator 'multiple' test
// if indicator is unique but cumulative, we switch to multiple view and prepare data
if($indicator[0]['sdii_value_type'] == 'unique' && $indicator[0]['sdii_unique_mode'] == 'cumulative') {
$obj['data'] = array_reverse($obj['data']);
// we overwrite indicator value
$obj['indicator-type'] = 'multiple';
$obj['indicator-multiple-mode'] = 'normal';
$obj['indicator-multiple-type'] = 'none';
$tmpa = $tmpv = $tmpc = [];
$cumulative_value = 0;
foreach ($obj['data'] as $key => $val) {
$cumulative_value += $val;
array_push($tmpv, $val);
array_push($tmpc, $cumulative_value);
}
array_push($tmpa, array('name' => mb_ucfirst(_t('dashboard','multivalue_value')), 'data' => $tmpv), array('name' => mb_ucfirst(_t('dashboard','cumulative_value')), 'data' => $tmpc));
$obj['data'] = json_encode($tmpa, JSON_NUMERIC_CHECK);
}
return $obj;
}