Reglas de la Academia
Catálogo de reglas con dos niveles (general y por módulo), la tabla local_deltamodules_rule y cómo se aplican con apply_course y apply_changes.
Las Reglas de la Academia definen cómo se comportan los videos, los repasos, el control de pantalla y el certificado de cada módulo. El catálogo único vive en classes/rules.php; quien las aplica es classes/standard.php (Módulos y estándar).
Dos niveles
| Nivel | Dónde se edita | Dónde se guarda |
|---|---|---|
| Regla general | Administración del sitio → Academia → Reglas de la Academia (rules.php) | Configuración del plugin: rule_<clave> en local_deltamodules |
| Regla del módulo | Módulos → Reglas, o "Reglas del módulo" en el menú Más del curso (modrules.php?id=<courseid>) | Tabla local_deltamodules_rule, una fila por regla distinta de la general |
rules::get($key, $courseid) devuelve el valor vigente: el propio del módulo si existe y es válido; si no, el general (rules::general($key)); si tampoco hay uno válido guardado, el valor por defecto del catálogo. Los valores se guardan como texto y se devuelven con el tipo del valor por defecto (int o string). Las reglas propias de cada curso se guardan en una caché estática por petición (rules::$overrides).
Ambas pantallas exigen la capacidad local/deltamodules:managestandard (por perfil, solo el Jefe de Talento Humano; ver Capacidades).
Catálogo
| Clave | Grupo | Etiqueta | Valor por defecto | Opciones |
|---|---|---|---|---|
video_completion | Videos | Un video queda hecho | end | end al verlo hasta el final, view al abrirlo |
video_player | Videos | Reproductor | 1 | 1 igual en todos, 0 el que se configure en cada video |
quiz_lock | Repasos | Cuándo se puede rendir | 1 | 1 después de ver el video, 0 en cualquier momento |
passpercent | Repasos | Nota para aprobar | 70 | 50, 60, 70, 75, 80, 90, 100 (%) |
attempts | Repasos | Intentos por repaso | 2 | 1 a 5 |
timelimit | Repasos | Tiempo por intento | 30 | 0 (sin límite), 10, 15, 20, 30, 45, 60 minutos |
quiz_completion | Repasos | Un repaso queda hecho | pass | pass al aprobarlo, grade al rendirlo con cualquier nota |
retakeattempts | Repasos | Si no aprueba en sus intentos | 2 | 0 (no recibe más) o 1 a 5 intentos nuevos |
exam_notice | Durante el repaso | Aviso al empezar | 1 | 1 mostrar, 0 sin aviso |
exam_leaves | Durante el repaso | Control de cambio de pantalla | 3 | 0 (sin control) o 1 a 5 salidas antes de enviar |
cert_enabled | Certificado | Entrega certificado | 1 | 1 sí, 0 no |
cert_template | Certificado | Diseño del certificado | La primera plantilla del sitio | Plantillas de customcert_templates en contexto de sistema, con "Certificado Deltamontero" primero |
cert_requires | Certificado | Para obtenerlo | all | all completar todo el módulo, quizzes aprobar todos los repasos |
Las reglas passpercent, attempts y timelimit llevan 'force' => true en su definición. Los grupos y su orden están en rules::GROUPS (videos, repasos, examen, certificado). Si no hay plantillas de certificado, cert_template no tiene opciones y no se muestra en el formulario.
Guardar y aplicar
rules::save($courseid, $values)
Con $courseid = 0 guarda la regla general (set_config('rule_<clave>')) y considera todos los módulos de la Academia (rules::academy_courses()). Con un módulo, inserta, actualiza o borra filas de local_deltamodules_rule: un valor vacío o no válido significa "seguir la regla general" y borra la fila. Registra usermodified y timemodified.
Antes y después calcula las reglas vigentes de cada módulo afectado y devuelve solo lo que cambió: [courseid => [claves]].
standard::apply_changes($changes)
Ejecuta standard::apply_course($courseid, $claves) para cada módulo afectado. Las claves cambiadas funcionan como $force: intentos, tiempo y nota para aprobar se imponen incluso a los repasos configurados a mano; el certificado se muestra, oculta o cambia de diseño; y si cambió cuándo queda hecho un video o un repaso, se recalcula el avance de todos.
Ajustes complementarios (solo regla general)
rules.php además llama a rules::update_quiz_defaults() (fija attempts y timelimit en la configuración de quiz, que son los valores con que Moodle propone un cuestionario nuevo) y a manual::refresh() (las páginas 1.5 y 3.9 del manual muestran los valores nuevos).
modrules.php hace lo mismo para un módulo, con rules::save($courseid, …); además permite volver a la regla general con rules::reset($courseid), que equivale a guardar null en todas sus reglas propias.
Los valores de las reglas de repasos son valores iniciales: lo que se configure después en un repaso concreto (en su editor o en el formulario de Moodle) se respeta. La regla se vuelve a imponer a todos solo cuando Talento Humano cambia esa regla.
Dónde se leen las reglas
| Lugar | Reglas que usa |
|---|---|
standard::apply_video | video_player, video_completion |
standard::apply_quiz | attempts, timelimit, passpercent, exam_notice, quiz_completion, quiz_lock |
standard::apply_certificate | cert_enabled, cert_template |
academy::gate_certificate | cert_requires |
standard::needs_retake, academy::exam_notice | retakeattempts, exam_leaves |
Servicio local_deltamodules_exam_strike | exam_leaves (límite del control de pantalla en el navegador) |
lib.php (coursemodule_definition_after_data) | Muestra arriba del formulario de un video o repaso las reglas que se aplicarán; propone attempts y timelimit en un repaso nuevo |
newquiz.php, question_editor::settings | Opciones de nota, intentos y tiempo |
health::check | video_completion, quiz_completion, cert_enabled |
academy::exam_settings, builder::create_quiz | Regla general de attempts y timelimit |
Pantalla común
rules::form_fields($courseid) dibuja el formulario por grupos (lo usan rules.php y modrules.php). En un módulo, cada campo ofrece primero "Regla general (valor)" y marca con "Propia de este módulo" los que difieren. rules::from_request() lee rule[<clave>] con PARAM_ALPHANUMEXT y descarta claves desconocidas. rules::css() aporta los estilos rl-*. rules.php muestra además una vista previa del aviso de un repaso con la regla general y la lista de módulos con reglas propias.
Limpieza
El observador rules::course_deleted (evento \core\event\course_deleted) borra las reglas propias de un curso eliminado.
Agregar una regla nueva
Ver el procedimiento en Guía de cambios.
Módulos y estándar
Estructura oficial de los módulos de la Academia y cómo se crea y se mantiene con academy, builder, standard y health.
Repasos y editor de preguntas
Pantalla corta de nuevo repaso, editor propio de preguntas (question_editor), aviso al empezar automático o escrito a mano y seguridad de los exámenes.