Academia Deltamontero · Documentación
Desarrollolocal_deltamodules

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)

HookCallbackPara qué
\core\hook\navigation\primary_extendhook_callbacks::primary_extendAgrega entradas a la barra superior.
\core\hook\navigation\primary_extend (prioridad -1000)hook_callbacks::primary_orderCorre después de los demás plugins: fija la pestaña activa y ordena la barra.
\core\hook\output\before_http_headershook_callbacks::before_http_headersSin caché del navegador, redirecciones y ajustes por página.
\core\hook\output\before_standard_head_html_generationhook_callbacks::before_headOculta el chat sin sesión; tarjeta de equipo; avisos al super administrador; índice de navegación.
\core\hook\output\before_http_headersstudent_view::before_http_headersVista de estudiante automática.
\core\hook\output\before_http_headersstandard::before_http_headersProcesa "volver a ver el video" (Módulos y estándar).
\core\hook\output\before_standard_head_html_generationstudent_view::headInterruptor 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:

  1. $PAGE->set_cacheable(false): las páginas se envían con Cache-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 en additionalhtmlhead que recarga la página si el navegador la restaura desde su caché de historial.
  2. Clase delta-manager en el body para 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).
  3. En la página principal (site-index) quita la barra de pestañas del curso del sitio.
  4. /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 por hook_callbacks::admin_tab()).
  5. course_admin_route() (ver abajo).
  6. 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.
  7. /user/edit.php del propio perfil, sin correo y con la contraseña ya cambiada → completeprofile.php.
  8. Página de confirmación de local_ai_manager → aiterms.php.
  9. 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.
  10. Con sesión iniciada, el login redirige a /my/.
  11. 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.

DesdeHaciaPara quién
Página del curso o del repaso recién creado con el formulario de Moodle ($SESSION->deltanewquiz)questions.phpTodos
/course/modedit.php?add=quiz en un módulo de la Academia (sin full=1)newquiz.phpTodos
Botones de Mis cursos ("Gestionar módulos", "Nuevo módulo") que llevan a /course/management.php o /course/edit.php sin idmodules.php / modules.php#nuevoTodos
/course/management.php, /course/editcategory.phpmodules.phpNo super administradores
/course/edit.php (nuevo / existente)modules.php#nuevo / moddata.php?id=…No super administradores
/course/index.phpmodules.php (si puede crear cursos)No super administradores
/mod/quiz/edit.php?cmid=… (solo ese parámetro)questions.phpNo super administradores
/mod/quiz/view.php de un cuestionario sin preguntas, para quien lo gestionaquestions.phpNo super administradores
/admin/tool/uploadcourse/index.phpmodules.php#nuevoNo super administradores
Papelera de reciclaje de una categoría o del sitiomodules.php (la de un curso sí se permite)No super administradores
Cualquier página de /cohort/people.php (con moodle/user:update) o modules.phpNo super administradores

Barra superior

primary_extend agrega:

ClaveTextoCondición
deltamyteamEquiposlocal/deltamodules:manageteams
deltamyteamMi equipoLidera un equipo (sin la capacidad anterior)
deltareportsReporteslocal/deltamodules:viewreports
deltamodulesMódulosmoodle/course:create
deltaclientsClienteslocal/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):
AvisoFuente
El cron no corre hace más de 15 minutostool_task/lastcronstart
Pasos del último despliegue que fallarondeploy_errors y deploy_time (los escribe moodle-config.sh)
Respaldo automático fallido, inexistente, con más de 36 horas o sin copia externabackup_last_ok, backup_last_fail, backup_fail_msg, backup_offsite_ok
La cuenta admin usa la contraseña por defecto que estuvo publicadaalert_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 a ui::crumbs() (clase delta-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ónQué hace
local_deltamodules_extend_navigation_courseEn los módulos de la Academia agrega "Reglas del módulo" al menú del curso para quien tiene managestandard.
local_deltamodules_coursemodule_definition_after_dataEn 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_actionsAl 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 internoSecciónPáginaCapacidad
local_deltamodules_importCursosCrear módulo desde archivomoodle/course:create
local_deltamodules_backupsCursos → Copias de seguridadRespaldos de la Academiamoodle/backup:backupcourse
local_deltamodules_reviewInformesRevisión anual de móduloslocal/deltamodules:managereview
local_deltamodules_rulesAcademia (categoría propia, al inicio)Reglas de la Academialocal/deltamodules:managestandard
local_deltamodules_guideAcademiaGuía para Talento Humanolocal/deltamodules:managestandard
local_deltamodules_aitoolsConfiguración IA (categoría propia)Configuración IAlocal/ai_manager:manage
local_deltamodules_peopleUsuarios → Cuentas (primero)Personal Deltamonteromoodle/user:update
local_deltamodules_peopleimportUsuarios → CuentasImportar personal desde Excellocal/deltamodules:managepeople
local_deltamodules_policiesUsuarios → CuentasAceptación de políticastool/policy:managedocs o local/ai_manager:manage
local_deltamodules_staffemailsUsuarios → CuentasCompletar correos del personallocal/deltamodules:managepeople
local_deltamodules_verifycertUsuarios → CuentasVerificar un certificadomoodle/user:viewalldetails
local_deltamodules_mailUsuarios → CuentasCorreos de la Academialocal/deltamodules:managepeople
local_deltamodules_gradesCalificacionesCalificaciones de la Academialocal/deltamodules:managestandard
local_deltamodules_certtemplatesGeneral → CertificadosPlantillas de certificado (mod_customcert)mod/customcert:manage
local_deltamodules_certverifyGeneral → CertificadosVerificar un certificadomod/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.

En esta página