Fecha fin curso

Fecha fin curso

de Roberto P -
Número de respuestas: 2
Buenos días Xavier;
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
Promedio de valoraciones: -
En respuesta a Roberto P

Re: Fecha fin curso

de Xavier Paz -

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.

En respuesta a Xavier Paz

Re: Fecha fin curso

de Xavier Paz -

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.