$val) { if ($key == ($total_asignados-1)) { $cad_numempl .= $val['userid']; }else{ $cad_numempl .= $val['userid'].","; } } $sqlusers = ""; $sqlusers .= "SELECT q.numempl, q.nombre AS nombre, q.apellidos, q.nomcentro, q.nomdistrito, q.posicion, q.sociedad, q.division, q.unidad_organizativa, q.ceco, q.supervisor, IF(q.habilitado = 1, 'ACTIVO', 'BAJA') AS estado_empleado, categoria.nombre AS nomcat, q.nomcat AS nomcurso, q.visitado AS visitado, q.fecha AS fecha FROM ( SELECT user.numempl AS numempl, user.nombre AS nombre, user.apellido AS apellidos, user.centrotrabajonom AS nomcentro, user.distritonom AS nomdistrito, user.posicion, user.sociedad, user.division, user.unidad_organizativa, user.ceco, user.supervisor, user.habilitado, categoria.padre, categoria.nombre AS nomcat, categoria.id AS cat0, scormpkg.nombre nomcurso, scormpkg.idcategoria AS idcategoria, CASE WHEN scormresults.userid <> '' THEN CONCAT( COUNT(scormresults.userid), ' de ', ( SELECT COUNT(*) FROM scormpkg WHERE scormpkg.idcategoria = categoria.id ) ) END AS visitado, scormresults.fecha FROM scormresults INNER JOIN user ON user.userid = scormresults.userid INNER JOIN scormpkg ON scormpkg.id = scormresults.scormid INNER JOIN categoria ON categoria.id = scormpkg.idcategoria WHERE (scormresults.status = 'passed' OR scormresults.status = 'completed') AND user.userid IN ($cad_numempl) AND scormpkg.habilitado = 1"; if ($estado != 'all') { $sqlusers .= " AND user.habilitado $estado"; } else { $sqlusers .= " AND user.habilitado IN (0,1)"; } if ($fechainicio != '' && $fechafin != '') { $sqlusers .= " AND scormresults.fecha BETWEEN '$fechainicio' AND '$fechafin'"; } $sqlusers .= " GROUP BY scormresults.userid, scormpkg.idcategoria ORDER BY scormresults.userid, categoria.id DESC ) AS q INNER JOIN categoria ON categoria.id = q.padre WHERE categoria.id = $categoria ORDER BY q.numempl, q.cat0 ASC"; $resultusers = mysqli_query($link, $sqlusers); if ($resultusers) { mysqli_data_seek($resultusers, 0); while ($row = mysqli_fetch_assoc($resultusers)) { $data[] = $row; } } $sqlcolumns = "SELECT categoria.id, categoria.clave, categoria.nombre FROM categoria WHERE padre = 0 AND id = $categoria AND habilitado = 1 ORDER BY categoria.id"; $resultcolumn = mysqli_query($link, $sqlcolumns); if ($resultcolumn) { mysqli_data_seek($resultcolumn, 0); while ($row = mysqli_fetch_assoc($resultcolumn)) { $categorias[] = $row; } } $sqlTotales = "SELECT rs2.total, categoria.nombre FROM ( SELECT COUNT(categoria.padre) AS total, categoria.padre as categoripadre FROM ( SELECT scormpkg.idcategoria as tema, scormpkg.nombre as nombre_tema FROM scormpkg INNER JOIN categoria ON categoria.id = scormpkg.idcategoria WHERE scormpkg.habilitado = 1 AND categoria.habilitado = 1 ) AS rs1 INNER JOIN categoria ON categoria.id = rs1.tema GROUP BY categoria.padre ) AS rs2 INNER JOIN categoria ON categoria.id = rs2.categoripadre"; $resultTotales = mysqli_query($link, $sqlTotales); if ($resultTotales) { mysqli_data_seek($resultTotales, 0); while ($row = mysqli_fetch_assoc($resultTotales)) { $totales[$row['nombre']] = $row['total']; } } $columnasvisibles = array( 'Estado del empleado', 'Número de empleado', 'Nombres(s)', 'Apellidos', 'Posición', 'Sociedad', 'División', 'Unidad organizativa', 'CeCo', 'Distrito', 'Centro de trabajo', 'Supervisor', ); foreach ($categorias as $key2 => $cat) { array_push($headers, strip_tags($cat['nombre'])); } /* for ($i=0; $i < sizeof($columnasvisibles) ; $i++) { $columnasvisibles[$i] = array('title' => $columnasvisibles[$i]); } $return->columnasvisibles = $columnasvisibles; */ array_push($resultados, $headers); if (!empty($data)) { $anterior = ''; $anteriorcat = ''; $users = 0; $visitados = 0; foreach ($data as $key1 => $col) { //print_r($col); //echo $col[2]."
"; if ($col['numempl'] == $anterior) { //echo $col['numempl']." igual - ".$col['nomcat']."- ".$users."
"; if ($anteriorcat == $col['nomcat']) { $visitas = explode(" de ", $col['visitado']); $visitados = $visitados + $visitas[0]; $total = $visitados . " de " . $totales[$col['nomcat']]; $datos[($users - 1)][$col['nomcat']] = $total; } else { $visitados = 0; $anteriorcat = $col['nomcat']; $visitas = explode(" de ", $col['visitado']); $visitados = $visitados + $visitas[0]; $total = $visitados . " de " . $totales[$col['nomcat']]; $datos[($users - 1)][$col['nomcat']] = $total; } } else { //echo $col['numempl']." nuevo - ".$col['nomcat']." - ".$users."
"; $visitados = 0; $datos[$users] = ['estado_empleado' => $col['estado_empleado'], 'numempl' => $col['numempl'], 'nombre' => $col['nombre'], 'apellidos' => $col['apellidos'], 'posicion' => $col['posicion'], 'sociedad' => $col['sociedad'], 'division' => $col['division'], 'unidad_organizativa' => $col['unidad_organizativa'], 'ceco' => $col['ceco'], 'nomdistrito' => $col['nomdistrito'], 'nomcentro' => $col['nomcentro'], 'supervisor' => $col['supervisor']]; $visitas = explode(" de ", $col['visitado']); $visitados = $visitas[0]; $anteriorcat = $col['nomcat']; foreach ($categorias as $key2 => $cat) { if ($anteriorcat == $cat['nombre']) { $datos[$users][$cat['nombre']] = $visitados . " de " . $totales[$cat['nombre']]; } else { $datos[$users][$cat['nombre']] = "0 de " . $totales[$cat['nombre']]; } } $users++; } $anterior = $col['numempl']; } //print_r($datos[3]); //echo "
"; foreach ($datos as $col => $columnas) { $fill = []; foreach ($columnas as $key => $value) { array_push($fill, $value); } $datos[$col] = $fill; } } else { $datos = []; } foreach ($datos as $key => $val) { $obj = [ $val[0], $val[1], $val[2], $val[3], $val[4], $val[5], $val[6], $val[7], $val[8], $val[9], $val[10], $val[11], $val[12], $val[13], $val[14], $val[15], $val[16], $val[17], $val[18], $val[19], $val[20], $val[21], $val[22], $val[23], $val[24], $val[25], $val[26], ]; array_push($resultados, $obj); } function cleanData(&$str) { $str = mb_convert_encoding($str, 'UTF-16LE', 'UTF-8'); $str = preg_replace("/\t/", " ", $str); $str = preg_replace("/\r?\n/", " ", $str); if (strstr($str, '"')) { $str = '"' . str_replace('"', '""', $str) . '"'; } } $nombre_cat = strip_tags($cat['nombre']); // filename for download $filename = "reporte - Categorías visitadas __".$nombre_cat."__" . date('Ymd') . ".csv"; header("Content-Disposition: attachment; filename=\"$filename\""); header("Content-Type: text/csv"); $out = fopen("php://output", 'w'); $flag = false; foreach ($resultados as $row) { array_walk($row, __NAMESPACE__ . '\cleanData'); fputcsv($out, array_values($row), ',', '"'); } fclose($out); exit;