/** * Función que genera la gráfica con el promedio de los * errores cometidos por los alumnos. Va a mostrarse * en el panel del profesor. * */ public function generarGraficaMediaErrores() { $chart = new \VerticalBarChart(800, 350); $serie_errores_unitarios = new \XYDataSet(); $serie_errores_excepcion = new \XYDataSet(); $num_alumnos_por_intento = array(); $alumnos_tabla = TableRegistry::get("Alumnos"); $alumnos = $alumnos_tabla->find('all'); $intento_realizado = false; foreach ($alumnos as $alumno) { $intentos_tabla = TableRegistry::get("Intentos"); $intentos = $intentos_tabla->find('all')->where(['tarea_id' => $_SESSION["lti_idTarea"], 'alumno_id' => $alumno->id]); foreach ($intentos as $intento) { $intento_realizado = true; $clave = "Intento " . $intento->numero_intento; if (array_key_exists($clave, $num_alumnos_por_intento)) { $num_alumnos_por_intento[$clave] += 1; } else { $num_alumnos_por_intento[$clave] = 1; } // Errores $num_errores_unitarios = 0; $num_errores_excepcion = 0; $errores_tabla = TableRegistry::get("Errores"); $errores = $errores_tabla->find('all')->where(['intento_id' => $intento->id])->toArray(); foreach ($errores as $error) { if ($error->tipo_error == "failure") { $num_errores_unitarios++; } else { $num_errores_excepcion++; } } $point_error_unitario = $serie_errores_unitarios->getPointWithX($clave); if ($point_error_unitario != null) { $point_error_unitario->setY(round(($point_error_unitario->getY() + $num_errores_unitarios) / $num_alumnos_por_intento[$clave]), 2); } else { $serie_errores_unitarios->addPoint(new \Point($clave, $num_errores_unitarios)); } $point_error_excepcion = $serie_errores_excepcion->getPointWithX($clave); if ($point_error_excepcion != null) { $point_error_excepcion->setY(round(($point_error_excepcion->getY() + $num_errores_excepcion) / $num_alumnos_por_intento[$clave]), 2); } else { $serie_errores_excepcion->addPoint(new \Point($clave, $num_errores_excepcion)); } } } if ($intento_realizado) { $dataSet = new \XYSeriesDataSet(); $dataSet->addSerie("Unitarios", $serie_errores_unitarios); $dataSet->addSerie("Excepciones", $serie_errores_excepcion); $chart->setDataSet($dataSet); $chart->getPlot()->setGraphCaptionRatio(0.75); $chart->setTitle("Promedio de errores cometidos por intento"); $chart->render("img/" . $_SESSION["lti_idTarea"] . "-prof-promedioErroresUnitariosExcepciones.png"); } }