Navegación y hooks
Hooks de local_deltamodules, redirecciones de pantallas de Moodle, barra superior, avisos para el super administrador, vista de estudiante, callbacks de lib.php y la lista blanca de Administración del sitio.
Hooks registrados (db/hooks.php)
| Hook | Callback | Para qué |
|---|---|---|
\core\hook\navigation\primary_extend | hook_callbacks::primary_extend | Agrega entradas a la barra superior. |
\core\hook\navigation\primary_extend (prioridad -1000) | hook_callbacks::primary_order | Corre después de los demás plugins: fija la pestaña activa y ordena la barra. |
\core\hook\output\before_http_headers | hook_callbacks::before_http_headers | Sin caché del navegador, redirecciones y ajustes por página. |
\core\hook\output\before_standard_head_html_generation | hook_callbacks::before_head | Oculta el chat sin sesión; tarjeta de equipo; avisos al super administrador; índice de navegación. |
\core\hook\output\before_http_headers | student_view::before_http_headers | Vista de estudiante automática. |
\core\hook\output\before_http_headers | standard::before_http_headers | Procesa "volver a ver el video" (Módulos y estándar). |
\core\hook\output\before_standard_head_html_generation | student_view::head | Interruptor propio de "Modo de edición" mientras el rol está cambiado. |
local_candidate_enrollment registra sus propios hooks (barra "Postulantes", aislamiento de postulantes). Ver local_candidate_enrollment.
hook_callbacks::before_http_headers
En orden:
$PAGE->set_cacheable(false): las páginas se envían conCache-Control: no-store(el botón Atrás no muestra páginas de una sesión cerrada ni el login tras entrar). Se complementa con un script enadditionalhtmlheadque recarga la página si el navegador la restaura desde su caché de historial.- Clase
delta-manageren elbodypara quien puede actualizar el curso sin estar en vista de estudiante (el CSS global solo muestra la barra secundaria del curso a quien lo gestiona o está editando). - En la página principal (
site-index) quita la barra de pestañas del curso del sitio. /admin/category.php?category=…redirige a la pestaña de Administración del sitio que contiene esa categoría (/admin/search.php#link<pestaña>, calculada porhook_callbacks::admin_tab()).course_admin_route()(ver abajo).- Aviso de borrador: al abrir un módulo oculto de la Academia, quien lo gestiona ve "Borrador: nadie ve este módulo todavía" con enlaces a Revisar y publicar y a Reglas del módulo.
/user/edit.phpdel propio perfil, sin correo y con la contraseña ya cambiada →completeprofile.php.- Página de confirmación de
local_ai_manager→aiterms.php. - Una vez por sesión (
$SESSION->deltaaiauto), si no se exige aceptar las condiciones de IA, marca como confirmado al usuario que no es postulante. - Con sesión iniciada, el login redirige a
/my/. - Tras editar a alguien desde Personal o Postulantes (
$SESSION->deltaeditreturn, válido una hora), al volver al perfil regresa a la pantalla de origen.
course_admin_route(): desvíos a las pantallas de la Academia
Solo en peticiones sin datos POST, con sesión y fuera de CLI o AJAX.
| Desde | Hacia | Para quién |
|---|---|---|
Página del curso o del repaso recién creado con el formulario de Moodle ($SESSION->deltanewquiz) | questions.php | Todos |
/course/modedit.php?add=quiz en un módulo de la Academia (sin full=1) | newquiz.php | Todos |
Botones de Mis cursos ("Gestionar módulos", "Nuevo módulo") que llevan a /course/management.php o /course/edit.php sin id | modules.php / modules.php#nuevo | Todos |
/course/management.php, /course/editcategory.php | modules.php | No super administradores |
/course/edit.php (nuevo / existente) | modules.php#nuevo / moddata.php?id=… | No super administradores |
/course/index.php | modules.php (si puede crear cursos) | No super administradores |
/mod/quiz/edit.php?cmid=… (solo ese parámetro) | questions.php | No super administradores |
/mod/quiz/view.php de un cuestionario sin preguntas, para quien lo gestiona | questions.php | No super administradores |
/admin/tool/uploadcourse/index.php | modules.php#nuevo | No super administradores |
| Papelera de reciclaje de una categoría o del sitio | modules.php (la de un curso sí se permite) | No super administradores |
Cualquier página de /cohort/ | people.php (con moodle/user:update) o modules.php | No super administradores |
Barra superior
primary_extend agrega:
| Clave | Texto | Condición |
|---|---|---|
deltamyteam | Equipos | local/deltamodules:manageteams |
deltamyteam | Mi equipo | Lidera un equipo (sin la capacidad anterior) |
deltareports | Reportes | local/deltamodules:viewreports |
deltamodules | Módulos | moodle/course:create |
deltaclients | Clientes | local/deltamodules:manageclients |
primary_order aplica el orden hook_callbacks::PRIMARY_ORDER: home, myhome, mycourses, deltamyteam, deltamodules, deltacandidates, deltaclients, deltareports, siteadminnode (lo demás al final). Además marca la pestaña activa según la ruta (por ejemplo, las páginas de módulos activan "Módulos" y las de personas, reglas o correo activan "Administración del sitio"), porque Moodle solo reconoce sus propias páginas.
before_head
- Sin sesión o como invitado: CSS que oculta el botón y la ventana del chat de IA.
- En el Área personal (
my-index): tarjeta "Lideras el equipo…" (my_team_card). - Para el super administrador, en el Área personal y en Administración: avisos (
admin_alerts):
| Aviso | Fuente |
|---|---|
| El cron no corre hace más de 15 minutos | tool_task/lastcronstart |
| Pasos del último despliegue que fallaron | deploy_errors y deploy_time (los escribe moodle-config.sh) |
| Respaldo automático fallido, inexistente, con más de 36 horas o sin copia externa | backup_last_ok, backup_last_fail, backup_fail_msg, backup_offsite_ok |
La cuenta admin usa la contraseña por defecto que estuvo publicada | alert_admin_defaultpass: lo encendían versiones anteriores de create-second-superadmin.php; se apaga solo cuando la cuenta admin cambia su contraseña (observador people::password_updated) |
A la cuenta admin.respaldo se le puso una contraseña aleatoria (14 días) | alert_respaldo_reset: solo lo escribían versiones anteriores de create-second-superadmin.php; el código actual ya no reemplaza esa contraseña |
- Índice de navegación (
crumbs): en toda la Administración del sitio y en las páginas propias que llaman aui::crumbs()(clasedelta-crumbs), dibuja arriba del título la ruta completa tomada de la miga de pan de Moodle, sin repeticiones, y oculta la miga del tema. En el resto del sitio la miga de pan está oculta por CSS.
Vista de estudiante: student_view
Quien gestiona (tiene moodle/course:update) y además está matriculado en un curso lo cursa como cualquier colaborador. En las páginas de estudiante (course-view, course-section, mod-*-view, attempt, summary, review, startattempt, index) con el modo de edición apagado, student_view::before_http_headers aplica el "Cambiar rol a Estudiante" nativo de Moodle y recarga la página. Fuera de esas páginas devuelve el rol normal. Como Moodle oculta su interruptor de edición con el rol cambiado, student_view::head agrega uno propio que envía a editmode.php (student_view::enable_editing: vuelve al rol normal y activa la edición). El super administrador queda fuera. Estado en $SESSION->deltastudentview.
Callbacks de lib.php
| Función | Qué hace |
|---|---|
local_deltamodules_extend_navigation_course | En los módulos de la Academia agrega "Reglas del módulo" al menú del curso para quien tiene managestandard. |
local_deltamodules_coursemodule_definition_after_data | En el formulario de un video o repaso de la Academia, muestra las reglas que se aplicarán; en un repaso nuevo, propone intentos y tiempo del módulo; maneja el aviso escrito a mano. |
local_deltamodules_coursemodule_edit_post_actions | Al guardar un cuestionario, restaura el aviso escrito a mano y rehace el automático. |
Administración del sitio
Páginas que agrega settings.php
| Nombre interno | Sección | Página | Capacidad |
|---|---|---|---|
local_deltamodules_import | Cursos | Crear módulo desde archivo | moodle/course:create |
local_deltamodules_backups | Cursos → Copias de seguridad | Respaldos de la Academia | moodle/backup:backupcourse |
local_deltamodules_review | Informes | Revisión anual de módulos | local/deltamodules:managereview |
local_deltamodules_rules | Academia (categoría propia, al inicio) | Reglas de la Academia | local/deltamodules:managestandard |
local_deltamodules_guide | Academia | Guía para Talento Humano | local/deltamodules:managestandard |
local_deltamodules_aitools | Configuración IA (categoría propia) | Configuración IA | local/ai_manager:manage |
local_deltamodules_people | Usuarios → Cuentas (primero) | Personal Deltamontero | moodle/user:update |
local_deltamodules_peopleimport | Usuarios → Cuentas | Importar personal desde Excel | local/deltamodules:managepeople |
local_deltamodules_policies | Usuarios → Cuentas | Aceptación de políticas | tool/policy:managedocs o local/ai_manager:manage |
local_deltamodules_staffemails | Usuarios → Cuentas | Completar correos del personal | local/deltamodules:managepeople |
local_deltamodules_verifycert | Usuarios → Cuentas | Verificar un certificado | moodle/user:viewalldetails |
local_deltamodules_mail | Usuarios → Cuentas | Correos de la Academia | local/deltamodules:managepeople |
local_deltamodules_grades | Calificaciones | Calificaciones de la Academia | local/deltamodules:managestandard |
local_deltamodules_certtemplates | General → Certificados | Plantillas de certificado (mod_customcert) | mod/customcert:manage |
local_deltamodules_certverify | General → Certificados | Verificar un certificado | mod/customcert:verifycertificate |
settings.php no usa el guardián $hassiteconfig a propósito: cada página exige su propia capacidad y así las ven perfiles que no son super administradores.
Lista blanca: admin_access
Al final de settings.php, si el usuario no es super administrador (admin_access::applies()), admin_access::prune($ADMIN) quita del árbol toda página que no esté en admin_access::ALLOWED ni dentro de una categoría de ALLOWED_CATEGORIES (privacy). Como las páginas de administración se abren a través del árbol, tampoco se pueden abrir escribiendo la dirección. Estar en la lista no da acceso: cada página sigue pidiendo su capacidad.
ALLOWED incluye las páginas propias de la tabla anterior (salvo las de certificados duplicadas en Usuarios), local_candidate_enrollment_staff (Crear colaborador), customreports (Informes personalizados de Moodle), frontpagesettings (Página principal del sitio) y search (buscador de la administración).
Página principal
moodle-config.sh fija customfrontpageinclude = /var/www/html/local/deltamodules/frontpage.php, que imprime local_deltamodules\landing::render(): portada institucional con la presentación de la Academia y, sin sesión, tres tarjetas de acceso (colaboradores: iniciar sesión; postulantes: prueba técnica con código; clientes: iniciar sesión o crear cuenta con el código de su empresa). defaulthomepage = 1 lleva al Área personal al iniciar sesión.