Personalizacion de clase

Hola, estoy intentando personalizar la clase controlador del siguiente path: siu/lib/kernel/nucleo estoy siguiendo la guía [1], mi repliqué el esquema de directorios y tengo el siguiente código:

<?php

namespace unlu\kernel\nucleo;

use siu\kernel\kernel;
use siu\kernel\nucleo\nuevo_request;
use siu\kernel\nucleo\parametros;
use siu\kernel\util\u;
use siu\kernel\util\validador;
use siu\kernel\error_kernel;
use siu\kernel\error_kernel_validacion;

abstract class controlador extends siu\lib\kernel\nucleo\controlador
{
	function procesar_accion()


Y no me toma la personalización, como me doy cuenta como debe ser el namespace? y la clase de la cual extiendo?

Saludos
Maxi

[1] http://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.11.0/personalizaciones/personalizacion_chulupi

Hola Maxi, lo ideal seria personalizar el archivo src/siu/extension_kernel/controlador_g3w2.php, pero lamentablemente no es personalizable, vamos a ver la forma de poder subsanar esto. Por otra parte si lo que queres es ejecutar algo antes de que se procese la acción hay un helper (src/siu/extension_kernel/helper_controlador_g3w2.php) que tiene un método llamado pre_accion, dicha clase y método se pueden personalizar y agregar comportamiento antes de la ejecución de la acción propiamente dicha.

Contanos un poco que es lo que quieren hacer y en que versión están así les podemos dar una mano.

saludos.

La version es la 3.11.2, lo que queremos hacer es tener un log mas detallado. Probé extender esa clase:

<?php
namespace unlu\extension_kernel;

use siu\kernel\kernel;

class helper_controlador_g3w2 extends \siu\extension_kernel\helper_controlador_g3w2{

    public function pre_accion(){
    	kernel::log()->add_info("log de prueba", '');
    }

}

Probe con eso y usando la funcion klog, no funciona, y me da errores que no encuentra la clase, Como puedo ver los paths de las clases para saber como utilizarlas?

Saludos
Maxi

Hola, estimo que estas en la 3.11.1 porque la 3.11.2 todavía no salio!!!

Si el tema es lo mismo que este otro hilo lo seguimos por este y lo cerramos.

el código de la personalización debería quedar así:


<?php
namespace unlu\extension_kernel;

use siu\extension_kernel\interface_helper_controlador_g3w2;

class helper_controlador_g3w2 implements interface_helper_controlador_g3w2{

    public function pre_accion(){
        .............................
    }

    }

}

saludos.

si, es la 3.11.1, con klog(); no me muestra nada en el log (esta configurado en info), y quiero usar kernel::log() pero no se como agregar la clase para usarla. Probé con:

use siu\kernel;
use siu\kernel\kernel;
use siu\extension_kernel\kernel;

entre otras, y todas dan error.

Como puedo hacer?

Saludos
Maxi

pude con use kernel\kernel;! ahora, que funciones puedo usar para obtener datos del usuario logueado, opcion actual y demas? el resto de las cosas lo saco del $_SERVER

Hola Maxi, podes usar guarani::persona()->xxxxx(), vas a ver que tiene varios métodos de utilidad.

saludos.

poniendo use guarani; me da el siguiente error:

Fatal error: Call to undefined method guarani::persona() in

como tengo que incluir a guarani?

Saludos
Maxi

Hola Maxi, esta mal el use, seria:

use siu\guarani;

también podes usar:

kernel::persona()->xxxxx()

el use seria:

use kernel\kernel;

Si usas un IDE como ser Netbeans o PhpStorm te autocompleta los namespaces.

saludos.

Probé de las 2 maneras

use siu\guarani; guarani::persona()->get_nombre()
use kernel\kernel; kernel::persona()->get_nombre()

Y con las 2 me da el siguiente error en el navegador (Firefox 37.0 - Lubuntu)

The page isn't redirecting properly

Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

This problem can sometimes be caused by disabling or refusing to accept cookies.</blockquote>

Adjunto los logs.

Saludos
Maxi


logs.zip (1.38 KB)

Hola, los logs no dicen mucho, te pediría los logs de apache!!!

pregunta, ustedes personalizaron algo del login? tienen las personalizaciones subidas al colab?

saludos.

Te adjunto el log de apache, lo que personalizamos del login fueron los siguientes archivos:

operaciones\acceso\contenido_login\default.twig operaciones\acceso\login\default.twig operaciones\acceso\recuperar_pass\pagelet_recuperar_pass.js

Saludos
Maxi


apache-log.zip (8.89 KB)

Hola Maxi, estuve viendo los logs pero no me brindan mucha información. Veamos lo siguiente:

  1. como estas usando los use? los tenes que poner arriba de todo antes de la declaración de la clase, ej:

<?php
namespace unlu\extension_kernel;

use kernel\kernel;
use siu\guarani;

class helper_controlador_g3w2 implements interface_helper_controlador_g3w2{

  1. Es muy probable que este entrando en un bucle de redirección, les pediría lo siguiente, en el archivo src/siu/operaciones/acceso/controlador.php función accion__index agreguen el siguiente klog2:

function accion__index()
    {

            //unset($_SESSION['state']);{}
	    $this->vista()->set_pagelet('login');

            klog2("sesion abierta", kernel::sesion()->abierta());

	    if (kernel::sesion()->abierta()) {
		    $op_defecto = kernel::persona()->perfil()->get_parametro('index');
		    $this->nuevo_request($op_defecto);
		}

    }

luego volve a intentar y volveme a enviar los logs, para mi el problema es que kernel::sesion()->abierta() devuelve true cuando no hay ningún usuario logueado y esto genera el bucle de redirección.

saludos.

puse el klog, pero no me muestra nada el log, lo unico que dice al final es esto:

================================================================================ ================================ nivel INFO ================================ ================================================================================

– La acción ‘login’ no existe Se redirige a ‘index’ con parámetro ‘login’ -

– EJECUTANDO ACCION ‘siu\operaciones\acceso\controlador::accion__index’ -----

– REDIRECCIÓN --------------------------------------------------------------

http://localhost/g3w3/acceso/login

–F<1>:E<0>:W<2>:T<0.056 s>:M<1.26 Mb>–

== FIN =============================================

tendria que extender el Kernel para chequear esto de la sesion abierta?

Hola, ya se lo que esta ocurriendo, ustedes en el archivo src/pers/unlu/extension_kernel/helper_controlador_g3w2.php función pre_accion están usando la siguiente función:


$perfil = kernel::persona()->get_id_perfil_activo();

en ese caso reemplacenla por:


if(kernel::sesion()->esta_seteada('__persona_perfil')) $perfil = kernel::sesion()->get('__persona_perfil');

se ve que eso hace que en el archivo src/siu/operaciones/acceso/controlador.php función accion__index el método kernel::sesion()->abierta() devuelva true y provoca un bucle de redirección.

saludos.

Con esa modificación anduvo bien! hay algún método que pueda extender para poder loguear también las redirecciones? Algo como el pre_accion de interface_helper_controlador_g3w2. Desde esa función puedo hacer el log de la navegación del usuario en el sistema, pero no puedo guardar los intentos fallidos de login ni el cierre de sesión. Hay algún método para ver el usuario y la contraseña ingresada cuando da error?
Extendí el archivo operaciones/acceso/controlador.php, pero solo puedo loguear cuando ingresa al index del sitio.
Intenté extender el archivo lib/kernel/interfaz/renderer.php y también extension_kernel/eventos_aplicacion.php, pero no me lo toma.

Hola, para los redirects deberías extender de acá src/siu/lib/kernel/nucleo/nuevo_request.php. Para la autenticación fíjate en la clase src/siu/modelo/autenticacion/auth_form.php método autenticar.

saludos.

Copiado del GDS 20120:

Necesitamos algo de este estilo:

IP máquina;Fecha;Hora; Tipo acción (descripción de la acción);Perfil; Resultado de acción (opción seleccionada);Legajo o nombre de Usuario; DNI
En tipo acción se propone:
-Breve descripción de la acción (si es una opción el nombre, puede ser login u al termino de alguna transacción). Registrar tambien en el caso de cambios de clave o reseteos.
-Resultado de acción: si es un error informar aquí, sino “Acción exitosa”

actualmente estoy viendo que clases tendria que personalizar

Respuesta ultima pregunta GDS 20120:

para obtener la operación: kernel::ruteador()->get_id_operacion();
para obtener la acción: kernel::ruteador()->get_accion();
para obtener el perfil: kernel::persona()->get_id_perfil_activo();
para obtener el legajo del alumno: kernel::persona()->get_legajo_activo();
para obtener el legajo del docente: kernel::persona()->get_legajo_docente();
para obtener el nombre y apellido de la persona: kernel::persona()->get_nombre();

para mas datos sobre la persona ver los métodos de las clases: src/siu/modelo/entidades/persona.php y src/siu/lib/kernel/acceso/persona_anonima.php.

Para escribir dicha información es los logs se usa el método klog2($clave, $valor);

el resto de la información (IP máquina, Fecha y Hora) la obtienen con funciones estándares de PHP.

saludos.

Genial!! ya con esto tenemos casi todo, lo unico que no pude hacer es extender el archivo src/siu/lib/kernel/nucleo/nuevo_request.php, este es el codigo:

<?php

namespace unlu\kernel\nucleo;
use kernel\kernel;
use siu\guarani;

class nuevo_request extends lib\kernel\nucleo\nuevo_request
{
    protected $operacion;
    protected $accion;
    protected $ssl;
	protected $url;
	protected $mensaje_post_nav = false;
    
    function __construct($operacion = 'home', $accion = 'index', $ssl = false)
    {
        $this->operacion = $operacion;
        $this->accion = $accion;
		$this->ssl = $ssl;
		kernel::log()->add_info('LOG','Adentro de nuevo_request');
    }
    
	function set_url($url)
	{
		kernel::log()->add_info('LOG','Adentro de nuevo_request');
		$this->url = $url;
	}
	
	function tiene_mensaje_post_nav()
	{
		kernel::log()->add_info('LOG','Adentro de nuevo_request');
		return $this->mensaje_post_nav !== false;
	}
	
	function set_mensaje_post_nav($mensaje)
	{
		kernel::log()->add_info('LOG','Adentro de nuevo_request');
		$this->mensaje_post_nav = $mensaje;
	}
	
	function get_mensaje_post_nav()
	{
		kernel::log()->add_info('LOG','Adentro de nuevo_request');
		return $this->mensaje_post_nav;
	}
	
    function get_url()
    {
    	kernel::log()->add_info('LOG','Adentro de nuevo_request');
        $op  = $this->get_operacion();
        $ac  = $this->get_accion();
        $url = (isset($this->url)) ? $this->url : kernel::vinculador()->crear($op, $ac, array(), array(
			'ssl' => $this->ssl
		));
        
        return $url;
    }
    
    function get_operacion()
    {
    	kernel::log()->add_info('LOG','Adentro de nuevo_request');
        return $this->operacion;
    }
    
    function get_accion()
    {
    	kernel::log()->add_info('LOG','Adentro de nuevo_request');
        return $this->accion;
    }    
}

?>

Saludos
Maxi