He leido tus respuestas en foros, pero no soy capaz de lograr mi proposito. Te coemnto a ver sime puedes guiar.
He modificado el formulario de creacion y edicion de cursos, añadiendo un campo (fecha_fin) a la tabla mdl_course.
He intentado modificar el archivo cron.php para que me ejecute (Update mdl_course set visible=0 where fecha_fin
Es sencillo. El código podría ser el siguiente
//solo cursos con fecha de fin menor que la de hoy
$ahora = time();
//si obtiene cursos candidatos a ser cerrados
if ($cursos = get_records_select('courses',"fecha_fin < $ahora")){ç
foreach($cursos as $curso){
//si aun esta visible, se oculta el curso
if (! set_field("course", "visible", 0, "id", $curso->id)) {
//si no se ha podido, mostramos mensaje de error
echo "error: no se ha podido ocultar el curso ".$curso->shortname;
}
//ocultamos todas las secciones
if (! set_field("course", "hiddensections", 1, "id", $curso->id)) {
//si no se ha podido, mostramos mensaje de error
echo "error: no se han podido ocultar las secciones - ".$curso->shortname;
}
}
}
Con la primera linea solo tienes que poner la condición del where, pues la función get_records_select() sirve precisamente para eso. Dicha función esta en lib/dmllib.php.
Después recorres cada curso obtenido en la consulta, ocultando el curso y por si acaso las distintas secciones.
La solución actualizada para Moodle 2.x
$ahora = time();
//si obtiene cursos candidatos a ser cerrados
if ($cursos = $DB->get_records_select('courses',"fecha_fin < $ahora")){
foreach($cursos as $curso){
//si aun esta visible, se oculta el curso
if (! $DB->set_field("course", "visible", 0, array("id"=>$course->id))) {
//si no se ha podido, mostramos mensaje de error
print_error("error: no se ha podido ocultar el curso ".$curso->shortname);
}
//ocultamos todas las secciones
if (! $DB->set_field("course", "hiddensections", 1, array("id"=>$course->id))) {
//si no se ha podido, mostramos mensaje de error
print_error("error: no se han podido ocultar las secciones - ".$curso->shortname);
}
}
}
No cambia mucho, solo hay que incluir el $DB para consultas y poner los parámetros en distinto formato.