G3W3 - Problema con personalización

Estimados:
Deseo saber en que lugar puntualmente debo personalizar si deseo comprobar un webservice externo y dependiendo del valor devuelto permitir o no el acceso al sistema por parte del alumno. Le estoy dando vuelta al Chulupí pero no veo en que punto maneja el acceso propiamente dicho.
Gracias desde ya.

Hola

En

https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.18.0/personalizaciones/personalizacion_chulupi

Está la Modificación de Clases (login.php).

Si pones tu código ahi, no te sirve?

Emilio

Hola Cristian, agrego a lo de Emilio:

Para hacer una validación antes del login deberías personalizar la función autenticar de la clase src/siu/modelo/autenticacion/auth_form.php.

Fíjate que por ejemplo valida el recaptcha:


                //Valido el captcha.
		if ($this->controlar_captcha_login($usuario)) {
		    $this->check_recaptcha_login();
	        }

Si la validación falla lanzas una excepción de la clase error_guarani_login, fíjate en la función check_recaptcha_login:


throw new error_guarani_login(-4);

En lugar de -4 podes poner el numero -10 por ejemplo, el mensaje a mostrar se define en la función get_mensaje de la clase src/siu/errores/error_guarani_login.php, y luego el contenido del mismo en el archivo src/siu/mensajes/mensajes.es.php, en el caso del captcha el error es el siguiente:

'login.errores.codigo_incorrecto' => 'El código ingresado es incorrecto',

Para consumir un WebService nosotros usamos la librería Guzzle, podes encontrar ejemplos de uso de la misma en la clase src/siu/modelo_g3/nucleo/moodle/moodle_nucleo.php.

saludos.
2

Nota:

Guaraní permite varios métodos de autenticación, fíjate que en la carpeta src/siu/modelo/autenticacion/ vas a ver varios archivos del estilo auth_xxx.php. Todos esos archivos tienen la función autenticar para el login.

Si solo estas usando el login tradicional debes personalizar src/siu/modelo/autenticacion/auth_form.php, si estas utilizando mas métodos de autenticación vas a tener que personalizar mas de uno.

saludos.
2

Gracias a todos por su pronta respuesta. En realidad ahora lo que requiero es poder ingresar sin problema, pero luego habilitar o no el cursado y exámenes en base a datos de la tabla sga_alumnos. Lo que hice es personalizar:
conf/acceso/acc_Alumno.php inhabilitando o no las operaciones cursada y examenes en base a ese criterio, la cuestión es que necesito tomar los datos de sga_alumnos. Cual sería la mejor manera de hacer eso?
Gracias.

Hola,

En autogestion tenes varias clases de consultas a la base de datos:

  1. src/siu/modelo/datos/db/alumno.php se consulta de la siguiente manera por ej:
$es_ingresante = catalogo::consultar('alumno', 'es_ingresante_periodos_insc_cursada', ['alumno' => $alumno]);

‘alumno’ por la clase src/siu/modelo/datos/db/alumno.php.
‘es_ingresante_periodos_insc_cursada’ por la función es_ingresante_periodos_insc_cursada dentro de la clase.
El tercer parámetro es un array con los parámetros que espera recibir la función.

También podes usar la consultas de la clase co_alumnos de la siguiente manera:

$plan_version = \toba::consulta_php('co_alumnos')->get_plan_version($alumno['alumno'], $alumno['fecha']);

Si vas a personalizar agregando una query nueva te recomiendo agregarla en src/siu/modelo/datos/db/alumno.php (personalizando).

Ver esta documentación que habla del modelo.

saludos.
2

Eso está perfecto, pero yo necesito consultar la db diciendole “para este alumno”, he buscado en $_REQUEST o $_POST y no encontré como identificar al usuario actual (o alumno).

Hola Cristian,

Te entiendo, el alumno logueado actualmente necesitas. Tenes la función kernel::persona()->get_id_alumno_activo();.

kernel::persona() te devuelve un objeto de la clase src/siu/modelo/entidades/persona.php si estas logueado o vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/PersonaAnonima.php si no estas logueado.

Vas a ver que tenes muchos métodos interesantes:


kernel::persona()->get_id_alumno_activo(); <==> ID del alumno en tabla sga_alumnos
kernel::persona()->get_id(); <==> ID de persona en tabla mdp_personas
kernel::persona()->get_propuestas();
kernel::persona()->get_id_docente();

saludos.
2

Y cual sería el use? \kernel\kernel y la otra ruta no me funcionan.
Perdon por la insistencia pero no encuentro la documentacion del tema.

PHP Fatal error: Uncaught Error: Call to a member function get_id_alumno_activo() …
este es el mensaje de error. Uso:
use siu\modelo\datos\catalogo;
use siu\modelo\entidades\parametro;
use SIU\Chulupi\kernel;
use SIU\Chulupi\util\db\db;
use siu\modelo\entidades\persona;
use siu\guarani;

Hola,

El use seria este:

use SIU\Chulupi\kernel;

Creo que para hacer uso de la función kernel::persona()->get_id_alumno_activo(); la persona debe estar logueada y ser alumno en al menos una carrera.

saludos.
2

No me funciona con ese use.

En el mismo lugar que lo estas usando agrega esto a modo de debug:


$persona = kernel::persona();
klog2("clase persona", get_class($persona));
klog2("metodos clase persona", get_class_methods(get_class($persona)));

La función klog2 guarda datos en los logs. Ingresa a dichos logs y busca lo siguiente: “clase persona” y “metodos clase persona”, seguramente vas a ver algo como lo siguiente:


--  clase persona  -------------------------------------------------------------

SIU\Chulupi\acceso\PersonaAnonima

--  metodos clase persona  -----------------------------------------------------

Array
(
    [0] => __construct
    [1] => __call
    [2] => perfil
    [3] => get_perfiles
    [4] => set_perfil_activo
    [5] => get_locale
    [6] => get_id
    [7] => get_nombre
    [8] => get_name
    [9] => add_derecho
    [10] => tiene_derecho
    [11] => ir_operacion_default
    [12] => tiene_derecho_entidad
    [13] => tiene_derecho_entidades
)

Si ves eso significa que la persona no esta logueada.

En el caso de una persona logueada vas a ver lo siguiente:


--  clase persona  -------------------------------------------------------------

siu\modelo\entidades\persona

--  metodos clase persona  -----------------------------------------------------

Array
(
    [0] => __construct
    [1] => get_id
    [2] => get_tipo_documento
    [3] => get_tipo_documento_desc
    [4] => get_tipo_documento_desc_abreviada
    [5] => get_nro_documento
    [6] => get_inicial_apellido
    [7] => get_nombre
    [8] => get_solo_nombres
    [9] => get_solo_apellido
    [10] => get_nombres_elegido
    [11] => get_apellido_elegido
    [12] => get_fecha_nacimiento
    [13] => get_identificacion
    [14] => get_usuario_arai
    [15] => get_mail
    [16] => get_configuracion
    [17] => get_id_imagen
    [18] => get_encuestas_pendientes
    [19] => set_encuestas_respondidas
    [20] => get_encuestas_respondidas
    [21] => perfil
    [22] => set_perfil_activo
    [23] => get_perfiles
    [24] => get_id_perfil_activo
    [25] => get_perfil_default_sugerido
    [26] => get_tipo_usuario_inicial
    [27] => get_count_perfiles
    [28] => es_perfil_docente
    [29] => es_perfil_cursos
    [30] => es_docente
    [31] => get_legajo_docente
    [32] => get_id_docente
    [33] => es_alumno
    [34] => es_ingresante
    [35] => tiene_propuestas
    [36] => set_propuesta_activa
    [37] => get_propuestas
    [38] => get_lista_propuestas
    [39] => get_id_propuesta_activa
    [40] => get_info_propuesta_activa
    [41] => get_id_alumno_activo
    [42] => get_legajo_activo
    [43] => get_id_plan_activo
    [44] => get_info_plan_activo
    [45] => get_id_plan_version_activo
    [46] => get_info_plan_version_activo
    [47] => get_id_ubicacion_activa
    [48] => get_id_modalidad_activa
    [49] => get_id_division_activa
    [50] => es_cursos
    [51] => get_cantidad_mensajes
    [52] => limpiar_cache_cantidad_mensajes
    [53] => cursadas
    [54] => examenes
    [55] => get_locale
    [56] => get_user_data
    [57] => set_user_data
    [58] => get_data_recuperar_pass
    [59] => update_token
    [60] => update_mail_temporal
    [61] => blanquear_mail_temporal
    [62] => refresh_token
    [63] => get_persona_from_token
    [64] => get_mail_from_token
    [65] => reset_password
    [66] => actualizar_configuracion
    [67] => actualizar_configuracion_email
    [68] => actualizar_configuracion_checks
    [69] => actualizar_password
    [70] => controlar_password
    [71] => tiene_derecho_entidad
    [72] => tiene_derecho_entidades
    [73] => get_cant_requisitos_pendientes
    [74] => get_requisitos_pendientes
    [75] => agrega_nombre_elegido
    [76] => add_derecho
    [77] => tiene_derecho
    [78] => ir_operacion_default
)

saludos.
2

PHP Fatal error: Uncaught Error: Call to a member function get_id_alumno_activo() ...

Pasame la frase completa del error.

saludos.
1

PHP Fatal error: Uncaught Error: Class ‘kernel’ not found in /usr/local/proyectos/g3w3/src/pers/ucp/conf/acceso/acc_Alumno.php

Tue Jan 19 16:53:52.827152 2021] [php7:error] [pid 33563] [client ::1:35058] PHP Fatal error: Uncaught Error: Class ‘kernel’ not found in /usr/local/proyectos/g3w3/src/pers/ucp/conf/acceso/acc_Alumno.php:25\nStack trace:\n#0 /usr/local/proyectos/g3w3/vendor/siu/chulupi-framework/src/SIU/Chulupi/util/config.php(12): include()\n#1 /usr/local/proyectos/g3w3/vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/FactoryPerfil.php(64): SIU\Chulupi\util\config::load()\n#2 /usr/local/proyectos/g3w3/vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/FactoryPerfil.php(37): SIU\Chulupi\acceso\FactoryPerfil->get_conf_php()\n#3 /usr/local/proyectos/g3w3/vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/FactoryPerfil.php(29): SIU\Chulupi\acceso\FactoryPerfil->construir_acceso_desde_php()\n#4 /usr/local/proyectos/g3w3/src/siu/modelo/entidades/persona.php(198): SIU\Chulupi\acceso\FactoryPerfil->construir()\n#5 /usr/local/proyectos/g3w3/src/siu/modelo/entidades/persona.php(46): siu\modelo\entidades\persona->set_perfil_activo()\n#6 /usr/local/proyectos/g3w3/vendor/siu/chulupi-framework/src/SIU/Chulupi/nucleo/localizador.php(4 in /usr/local/proyectos/g3w3/src/pers/ucp/conf/acceso/acc_Alumno.php on line 25, referer: http://localhost/ucp/

Hola,

No deberías utilizar eso en el archivo acc_Alumno.php, dicho archivo es de configuración, devuelve un array con las operaciones habilitadas para el perfil alumno y en que parte del menú se muestran.

Podes hacer uso de la misma en un controlador, modelo, vista, etc.

Contame mejor que es lo que desean hacer así me pongo mas en contexto.

saludos.
2

Lo que necesito es, en base a datos que se encuentran en sga_alumnos, me habilite o no el cursado e inscripcion a examenes. El tema es que algo que deberia ser simple como averiguar cual es el alumno logueado (porque lo tengo logueado) es todo un problema jaja. Yo desde ese fichero personalizado en base a datos ficticios inhabilito o no esos modulos, por eso me resulta mas simple trabajar ahi que tocar en otro lado. No requiero una operacion nueva aparte.

Hola Cristian,

Vas a ver que dentro de src/pers/ejemplo03/extension_kernel/helper_controlador_g3w2.php hay un ejemplo de personalización similar a lo que necesitas, te lo explico:

  1. pre_accion es una función que se ejecuta antes de entrar a la operación.

  2. Vos me dijiste que querías restringir “Inscripción a materias” e “Inscripción a exámenes”, seria algo así:


        if(in_array($operacion, array("cursada", "examen")) && in_array($perfil, array("Alumno")) && $no_es_alumno_regular){
            $nuevo_request = new NuevoRequest('inicio_alumno', 'index', false);
            $nuevo_request->set_mensaje_post_nav("¡¡¡Debes ser alumno regular!!!");
            throw $nuevo_request;
        }

En este ejemplo lo que se esta haciendo es no permitir ingresar a esas dos operaciones si no es alumno regular, vos agregaras la condición que te parezca. Lo que hago es redirigirlo a la operación “inicio_alumno” mostrado el mensaje “¡¡¡Debes ser alumno regular!!!”, podes personalizarlo como quieras.

saludos.
3

<?php namespace ucp\extension_kernel; use SIU\Chulupi\kernel; use SIU\Chulupi\nucleo\NuevoRequest; use siu\extension_kernel\interface_helper_controlador_g3w2; class helper_controlador_g3w2 implements interface_helper_controlador_g3w2{ public function pre_accion(){ if(in_array($operacion, array("cursada", "examen")) && in_array($perfil, array("Alumno"))){ $nuevo_request = new NuevoRequest('inicio_alumno', 'index', false); $nuevo_request->set_mensaje_post_nav("¡¡¡Debes ser alumno regular!!!"); throw $nuevo_request; } } } [b]No me debería impedir acceder a las operaciones éste código?[/b]