$this->assign('year_bads_percentage', $year_nb_bads * 100 / $year_nb_moods); $this->assign('year_goods', $year_nb_goods); $this->assign('year_bads', $year_nb_bads); // months stats $diplayMonths = array(); $monthsGraph = array(); foreach ($months as $m) { $monthMoods = Mood::CountMonthMoods($m, $year); $t = $monthMoods['count']; $tg = $monthMoods[MoodLevel::GOOD]; $tb = $monthMoods[MoodLevel::BAD]; $diplayMonths[$m] = array('total' => $t, 'goods' => $tg, 'bads' => $tb, 'goods_percentage' => $tg * 100 / $t, 'bads_percentage' => $tb * 100 / $t); $monthsGraph['name'][] = date('M.', mktime(0, 0, 0, $m, 1)); $monthsGraph['value'][] = round($diplayMonths[$m]['goods_percentage'], 2); $s .= "\n new Chart(document.getElementById('chartMonth" . $m . "').getContext('2d')).Doughnut(\n [\n {\n value: " . $tb . ",\n color: \$('#color_picker .progress-bar-danger').css('background-color'),\n label: 'Bad Mood'\n },\n {\n value: " . $tg . ",\n color: \$('#color_picker .progress-bar-success').css('background-color'),\n label: 'Good Mood'\n }\n ]\n , {\n animation: true,\n animationEasing: 'linear', animationSteps: 25,\n segmentShowStroke: false,\n percentageInnerCutout : 60\n }\n );\n "; } $this->assign('months', $diplayMonths); // draw year line graph if (count($months) > 1) { $monthsGraph = array_map('array_reverse', $monthsGraph); $s .= "\n var dataYear = {\n labels: ['" . implode("', '", $monthsGraph['name']) . "'],\n datasets: [\n {\n label: 'Mood',\n fillColor: 'rgba(220,220,220,0.2)',\n strokeColor: \$('#color_picker .progress-bar-success').css('background-color'),\n pointColor: \$('#color_picker .progress-bar-success').css('background-color'),\n data: [" . implode(", ", $monthsGraph['value']) . "]\n }\n ]\n };\n var chartYear = new Chart(document.getElementById('chartYear').getContext('2d')).Line(dataYear, { responsive: true });\n "; } else { $s .= "\$('#chartYear').parent().hide();"; } // wait loading $this->register('script', TextHelper::RemoveLineBreak("\n \$(function() {\n \$('a.details-year').on('click', function(){\n \$('.modal').modal({show: true});\n var modal = \$('#loadingModal');\n setTimeout(function() {\n modal.html('Still loading…');\n setTimeout(function() {\n modal.html('Still loading all the amazing data…');\n }, 2000);\n }, 1000);\n });\n });")); } // shared data postlude $s .= '});'; $this->register('script', TextHelper::RemoveLineBreak($s)); $this->register('script_file', 'chart.min.js');