Ui.. ahora si que me has roto. Yo lo del tipo Mime me suena de haberlo nombrado el profesor en clase pero de hace mucho mucho tiempo. Asique la verdad es que no tengo ni idea de si está o no está metida esa cabecera.
Lo que es headers veo que se meten para el tipo txt pero para el excel no. Miré también en excellib.class.php que es el fichero que incluye la descarga de tipo excel pero tampoco vi nada de cabeceras.
Asique ante mi enorme ignorancia en el tema, voy a optar por dejarte el trozo de código de txt y excel para que si tienes un momento me puedas decir si tengo o no eso que me falta.
Código:
// Si se va a efectuar una descarga de los resultados en formato EXCEL y el
// usuario puede descargar los resultados
if ($download == "xls" and has_capability('mod/practical:downloadresponses', $context)) {
// Se incluye el fichero especificado
require_once("$CFG->libdir/excellib.class.php");
// Calcula el nombre del fichero
$filename = clean_filename("$course->shortname ".strip_tags(format_string($practical->name,true))).'.xls';
// Crea el cuaderno
$workbook = new MoodleExcelWorkbook("-");
// Envía las cabeceras HTTP
$workbook->send($filename);
// Crea la primera hoja de trabajo
$myxls =& $workbook->add_worksheet($strresponses);
// Imprime los nombres de todos los campos
$myxls->write_string(0,0,get_string('lastname'));
$myxls->write_string(0,1,get_string('firstname'));
$myxls->write_string(0,2,get_string('idnumber'));
$myxls->write_string(0,3,get_string('group'));
$myxls->write_string(0,4,get_string('schedule','practical'));
// Genera los datos para el cuerpo de la hoja de cálculo
$i=0;
$row=1; // fila 1
// Si hay usuarios que cumplan la capacidad
if ($users) {
// Para cada uno de ellos
foreach ($users as $user) {
// Si el id es cero y tiene la capacidad de leer los resultados, no entra
if (!($optionid==0 and has_capability('mod/practical:readresponses', $context, $user->id))) {
// Si ha dado una respuesta y no se da a la vez que el id de la opción sea cero
// y que el usuario tenga capacidad de leer las respuestas
if (!empty($answers[$user->id]) and !($answers[$user->id]->optionid==0 and has_capability('mod/practical:readresponses', $context, $user->id))) {
$myxls->write_string($row,0,$user->lastname);
$myxls->write_string($row,1,$user->firstname);
$studentid=(!empty($user->idnumber) ? $user->idnumber : " ");
$myxls->write_string($row,2,$studentid);
$ug2 = '';
// Almacena el grupo del usuario en un curso particular
$usergrps = user_group($course->id, $user->id);
if ($usergrps) {
foreach ($usergrps as $ug) {
$ug2 = $ug2. $ug->name;
}
}
$myxls->write_string($row,3,$ug2);
// Almacena la opcion elegida y la muestra
$useroption = practical_get_option_text($practical, $answers[$user->id]->optionid);
if (isset($useroption)) {
$myxls->write_string($row,4,format_string($useroption,true));
}
$row++; // pasa a la siguiente fila
}
$pos=4;
}
}
// Cierra el cuaderno
$workbook->close();
exit;
}
}
// Si se va a efectuar una descarga de los resultados en formato TXT y el
// usuario puede descargar los resultados
if ($download == "txt" and has_capability('mod/practical:downloadresponses', $context)) {
// Calcula el nombre del fichero
$filename = clean_filename("$course->shortname ".strip_tags(format_string($practical->name,true))).'.txt';
header("Content-Type: application/download\n");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Expires: 0");
header("Cache-Control: must-revalidate,post-check=0,pre-check=0");
header("Pragma: public");
// Imprime los nombres de todos los campos
echo get_string('firstname')."\t".get_string('lastname') . "\t". get_string('idnumber') . "\t";
echo get_string('group'). "\t";
echo get_string('schedule','practical'). "\n";
// Genera los datos para el cuerpo de la hoja de cálculo
$i=0;
$row=1; // fila 1
// Si hay usuarios que cumplan la capacidad
if ($users) {
// Para cada uno de ellos
foreach ($users as $user) {
// Si ha dado una respuesta y no se da a la vez que el id de la opción sea cero
// y que el usuario tenga capacidad de leer las respuestas
if (!empty($answers[$user->id]) and !($answers[$user->id]->optionid==0 and has_capability('mod/practical:readresponses', $context, $user->id))) {
echo $user->lastname;
echo "\t".$user->firstname;
$studentid = ' '; // inicializa la variable
// Si el usuario tiene id se le asigna a la variable
if (!empty($user->idnumber)) {
$studentid = $user->idnumber;
}
echo "\t". $studentid."\t";
$ug2 = '';
// Almacena el grupo del usuario en un curso particular
$usergrps = user_group($course->id, $user->id);
if ($usergrps) {
foreach ($usergrps as $ug) {
$ug2 = $ug2. $ug->name;
}
}
echo $ug2. "\t";
echo format_string(practical_get_option_text($practical, $answers[$user->id]->optionid),true). "\n";
}
$row++; // pasa a la siguiente fila
}
exit;
}
}
Muchas gracias!!! y perdona la lata que te estoy dando!