excel.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. <?php
  2. require_once "{$_SERVER['DOCUMENT_ROOT']}/dependencies.php";
  3. // Exportar a archivo separado por comas
  4. // Must receive from POST associative array with keys and values
  5. use Respect\Validation\Validator as v;
  6. $query = json_decode(file_get_contents('php://input'), true);
  7. $queries = array(
  8. 'usuarios' => "SELECT * FROM mdl_user",
  9. 'calificaciones' => "SELECT c.id AS courseid, c.shortname, COALESCE(cc2.name, cc.name) AS AREA, CASE WHEN cc2.name IS NULL THEN NULL ELSE cc.name END AS GRUPO, prof.username AS profesor_clave, CONCAT(prof.firstname, ' ', prof.lastname) AS profesor_nombre, c.fullname AS course_fullname, CASE WHEN COALESCE(MIN(mgi.calculation) <> '', false) THEN 'Sí' ELSE 'No' END AS formula, CASE WHEN MAX(mgi.AGGREGATIONCOEF) > 0 THEN 'Sí' ELSE 'No' END AS ponderacion FROM mdl_course c JOIN mdl_grade_items mgi ON c.id = mgi.courseid JOIN mdl_course_categories cc ON cc.id = c.category LEFT JOIN mdl_course_categories cc2 ON cc.parent = cc2.id JOIN mdl_context ctx ON ctx.instanceid = c.id JOIN mdl_role_assignments ra ON ra.contextid = ctx.id AND ra.roleid = 3 JOIN mdl_user prof ON ra.userid = prof.id WHERE mgi.itemtype IN ('course', 'category') GROUP BY c.id, c.shortname, cc.name, cc2.name, c.fullname, prof.firstname, prof.lastname, prof.username ORDER BY AREA, GRUPO, profesor_nombre;",
  10. );
  11. methods(['POST' => v::keySet(
  12. v::key('query', v::in(array_keys($queries))),
  13. )]);
  14. // method must be POST
  15. if (!isset($_SESSION['user'], $moodle_db)) {
  16. serverError(title: 'Error de conexión', message: 'No se ha iniciado sesión o no se ha establecido una conexión con la base de datos de Moodle');
  17. exit();
  18. }
  19. $data = $moodle_db->query($queries[$query['query']]);
  20. $filename = 'test.csv';
  21. header('Content-Type: text/csv; charset=ANSI');
  22. header("Content-Disposition: attachment; filename=$filename");
  23. $fp = fopen('php://output', 'wb');
  24. // insert header
  25. fputcsv($fp, array_keys($data[0]));
  26. // insert data
  27. foreach ($data as $line) {
  28. fputcsv($fp, $line);
  29. }
  30. fclose($fp);
  31. exit();