Error locales G2W3 2.8.3

Gente,
Estamos teniendo el siguiente error al intentar loguerse como Docente:

PHP Fatal error:  Call to a member function get_locale() on a non-object in /usr/local/proyectos/3w/2.8.3/src/siu/lib/kernel/kernel.php on line 385, referer: http://www.xxx/acceso?auth=form

Lo cual apunta a esta lìenea: $locale_persona = kernel::persona()->get_locale();

y la funcion tiene:

function get_locale()
{
return ‘es_AR’;
// return ‘en_US’;
}

Nuestro servidor tiene los siguientes locales:
[root@g3w2 ~]# locale
LANG=es_AR
LC_CTYPE=“es_ES.ISO-8859-1”
LC_NUMERIC=“es_ES.ISO-8859-1”
LC_TIME=“es_ES.ISO-8859-1”
LC_COLLATE=“es_ES.ISO-8859-1”
LC_MONETARY=“es_ES.ISO-8859-1”
LC_MESSAGES=“es_ES.ISO-8859-1”
LC_PAPER=“es_ES.ISO-8859-1”
LC_NAME=“es_ES.ISO-8859-1”
LC_ADDRESS=“es_ES.ISO-8859-1”
LC_TELEPHONE=“es_ES.ISO-8859-1”
LC_MEASUREMENT=“es_ES.ISO-8859-1”
LC_IDENTIFICATION=“es_ES.ISO-8859-1”
LC_ALL=es_ES.ISO-8859-1
[root@g3w2 ~]#

Hola Claudio, al parecer el objeto persona (kernel::persona()) es NULL y al querer llamar el método get_locale() sobre NULL falla.

para poder saber cuales son las causas por las que esta llegando en NULL te pediría lo siguiente, abrí el archivo src/siu/lib/kernel/acceso/login_manager.php busca la funcion protected function instanciar_persona y agregar estos dos klog2 que puse al final:

protected function instanciar_persona(sesion $session, authentication_provider $auth = null)
	{
		if($autenticado = $session->abierta()){
			$id_persona = $session->get_id_persona();
			$persona = $this->get_clase_persona($id_persona);
                        klog2('id_persona', $id_persona);
                        klog2('nombre_persona', $persona->get_nombre());
                        ...
                        ...

luego envíame los logs de la aplicación para poder ver que esta sucediendo.

saludos, Leonel.

================================================================================
=================================   ERRORES   ==================================
================================================================================

clase: kernel\error_kernel
mensaje: No existe el parametro de configuracion: usa_proxy
traza: [TRAZA]

---[ 0 ]-----------------------------------------

- function: kernel\nucleo\proyecto->get
- file: /usr/local/proyectos/3w/2.8.3/src/siu/lib/kernel/nucleo/proyecto.php, linea 34
- param:
         0: usa_proxy
---[ 1 ]-----------------------------------------

- function: kernel\nucleo\proyecto->usa_proxy
- file: /usr/local/proyectos/3w/2.8.3/src/siu/modelo/autenticacion/auth_form.php, linea 116

---[ 2 ]-----------------------------------------

- function: siu\modelo\autenticacion\auth_form->check_recaptcha
- file: /usr/local/proyectos/3w/2.8.3/src/siu/modelo/autenticacion/auth_form.php, linea 96

---[ 3 ]-----------------------------------------

- function: siu\modelo\autenticacion\auth_form->check_recaptcha_login
- file: /usr/local/proyectos/3w/2.8.3/src/siu/modelo/autenticacion/auth_form.php, linea 35

---[ 4 ]-----------------------------------------

- function: siu\modelo\autenticacion\auth_form->autenticar
- file: /usr/local/proyectos/3w/2.8.3/src/siu/lib/kernel/acceso/login_manager.php, linea 48

---[ 5 ]-----------------------------------------

- function: kernel\acceso\login_manager->autenticar
- file: /usr/local/proyectos/3w/2.8.3/src/siu/lib/kernel/nucleo/acceso_web.php, linea 100

---[ 6 ]-----------------------------------------

- function: kernel\nucleo\acceso_web::procesar_request
- file: /usr/local/proyectos/3w/2.8.3/src/siu/lib/kernel/nucleo/acceso_web.php, linea 26

---[ 7 ]-----------------------------------------

- function: kernel\nucleo\acceso_web::procesar
- file: /usr/local/proyectos/3w/2.8.3/src/siu/www/index.php, linea 4


########################################################################################################################
clase: kernel\error_kernel
mensaje: SHUTDOWN
traza: [TRAZA]

---[ 0 ]-----------------------------------------

- function: kernel\nucleo\acceso_web::shutdown
- file: /usr/local/proyectos/3w/2.8.3/src/siu/lib/kernel/nucleo/acceso_web.php, linea 166



--F<0>:E<2>:W<0>:T<0 s>:M<0 Mb>--

Por lo que veo en los logs no llego a registrar estos dos logs que agregamos:

klog2('id_persona', $id_persona);
klog2('nombre_persona', $persona->get_nombre());

lo que si estoy viendo es otro error de configuración que por ahí este relacionado con esto otro, te pediría que me pases del archivo src/siu/bootstrap.php el código de la función protected function cargar_proyecto(), parecería que esta faltando la configuración de ‘usa_proxy’.


 private function cargar_proyecto()
        {
                // VALORES por DEFECTO
                if (!isset($this->config['intentos_login_captcha'])) {
                        $this->config['intentos_login_captcha'] = 3;
                }
                $produccion = $this->config['produccion'];
                $id_bloque_acceso = $this->get_id_bloque_acceso();
                $dir_log = self::get_dir_instalacion() . '/log/' . $id_bloque_acceso;
                $dir_cache = self::get_dir_instalacion() . '/cache/' . $id_bloque_acceso;
                $dir_instalacion = self::get_dir_instalacion();
                $dir_temp = (isset($this->config['dir_temp'])) ? $this->config['dir_temp'] : self::get_dir_instalacion() . '/temp/' . $id_bloque_acceso;
                $dir_attachment = (isset($this->config['dir_attachment'])) ? $this->config['dir_attachment'] : $dir_temp;
                $clase_persona = "modelo\\entidades\\persona";
                $clase_fuente_usuarios = "modelo\\autenticacion\\fuente_usuarios_guarani";
                $clase_pagina = "extension_kernel\\pagina";
                $clase_logger = "extension_kernel\\log";
        $url_recursos = (isset($this->config['url_recursos']))  ? $this->config['url_recursos'] : $this->get_alias().'/_comp';
        $ssl =                  (isset($this->config['ssl']))                   ? $this->config['ssl']                  : false;
                $ssl_login =    (isset($this->config['force_ssl_login']))? $this->config['force_ssl_login']     : false;
                $memcached =    (isset($this->config['memcached']))             ? $this->config['memcached']    : null;
                $smtp =                 (isset($this->config['smtp']))                  ? $this->config['smtp']                 : null;
                $login_config = $this->cargar_login_config();
                $server_name = (isset($this->config['server_name'])) ? $this->config['server_name'] : null;

                $usa_captcha = (isset($this->config['captcha']['activo']) && $this->config['captcha']['activo'] === true);
                $intentos_login_captcha = ($usa_captcha) ?  $this->config['captcha']['intentos_login'] : 0;
                $puk_captcha = ($usa_captcha) ?  $this->config['captcha']['public_key'] : 0;
                $prk_captcha = ($usa_captcha) ?  $this->config['captcha']['private_key'] : 0;
                $salt = ($this->config['salt']) ?  $this->config['salt'] : 'no_salt';

                $url_kolla = isset($this->config['url_kolla']) ? $this->config['url_kolla']: "http://localhost/kolla/3.3/";

                //$rest = isset($this->config['rest']) ? $this->config['rest']: array();
                // Fotos
                if(isset($this->config['imagen_alumno_dir'])){
                        $imagen_alumno_dir = $this->config['imagen_alumno_dir'];
                }else{
                        $imagen_alumno_dir = $this->get_dir_siu()."/www/_comp/" . self::URL_IMAGENES_ALUMNOS;
                }
                if(isset($this->config['imagen_alumno_url'])){
        $imagen_alumno_url = $this->config['imagen_alumno_url'];
                }else{
                        $imagen_alumno_url = $url_recursos.'/'.self::URL_IMAGENES_ALUMNOS;
                }
                $personalizacion = '';
                if ($this->existe_pers()) {
                        $personalizacion = reset($this->get_pers());
                }

                $proyecto = new extension_kernel\proyecto(array(
            'db'                                => $this->bloque_acceso['database'],
            'alias'                             => $this->get_alias(),
            'produccion'                => $produccion,
                        'personalizacion'       => $personalizacion,
            'sesion_maxtime'    => $this->config['sesion_maxtime'],
            'sesion_timeout'    => $this->config['sesion_timeout'],
            'url_recursos'              => $url_recursos,
                        'memcached'                     => $memcached,
            'dir_instalacion'   => $dir_instalacion,
            'bloque_acceso'     => self::get_id_bloque_acceso(),
            'dir_log'                   => $dir_log,
            'dir_cache'                 => $dir_cache,
            'dir_temp'                  => $dir_temp,
            'imagen_alumno_dir' => $imagen_alumno_dir,
            'imagen_alumno_url' => $imagen_alumno_url,
            'salt'                              => $salt,
            'ws_config'                 => $this->ws_config,
            'dir_attachment'    => $dir_attachment,
            'fuente_usuarios'   => $clase_fuente_usuarios,
            'clase_persona'             => $clase_persona,
            'clase_persona_anonima' => false,
            'clase_pagina'              => $clase_pagina,
            'clase_logger'              => $clase_logger,
            'server_name'               => $server_name,
                        'usa_captcha'           => $usa_captcha,
            'intentos_login_captcha' => $intentos_login_captcha,
                        'captcha_public_key' => $puk_captcha,
                        'captcha_private_key' => $prk_captcha,
                        'force_ssl_login' => $ssl_login,
                        'barra_dev'             =>
                                        isset($this->config['log']['activo'])           &&
$this->config['log']['activo'] == true          &&
                                        isset($this->config['log']['barra_dev'])        &&
                                        $this->config['log']['barra_dev'] == true,
            'smtp'  => $smtp,
            'ssl'  => $ssl,
                //      'rest' => $rest,
                        'login_config'=>$login_config,
                        'url_kolla' => $url_kolla
        ));

        try {
            $eventos = kernel::localizador()->instanciar('extension_kernel\eventos_aplicacion');
        } catch (\Exception $e) {
            die('Debe crear la clase eventos_aplicacion a partir del archivo eventos_aplicacion_template.php. Mensaje: "'.$e->getMessage().'"');
        }

                // registro el proyecto
        kernel::set_tipo_archivos_acceso(kernel::$tipo_archivo_acceso_php);
                guarani::set_ua_id($this->bloque_acceso['ua']);
        kernel::registrar_proyecto($proyecto, $eventos);
                kernel::proyecto()->set_encoding('iso-8859-1');
                kernel::proyecto()->set_bloque_acceso($id_bloque_acceso);
                // Inicializacion del LOG
                if(isset($this->config['log']['activo']) &&
                                $this->config['log']['activo'] == true){
                        kernel::log()->set_activo(true);
                        if(isset($this->config['log']['nivel'])){
                                try {
                                        kernel::log()->set_nivel($this->config['log']['nivel']);
                                } catch (\Exception $e) {
                                        die($e->getMessage());
                                }
                        }
                }

                // Inicializacion handle de debug
                if(isset($this->config['ini_debug']) &&
                                $this->config['ini_debug'] == true){
                        $debug = kernel::localizador()->instanciar('debug');
                        $debug->ini();
                        kernel::log()->add_debug('Perfil de debug', get_class($debug));
                }

                if (!$this->acceso_consola && ! version::es_valida()) {
                        $ver_requerida = version::requerida();
                        die("La base no está actualizada, se requiere que se haya ejecutado alguno de los siguientes scripts: '$ver_requerida'");
                }
        }



El primer error que mencionabas creo que ocurre porque ocurre un error muy temprano en el request, y la persona es null como te decia leo.

Modificá el archivo ese a algo asi.

/usr/local/proyectos/3w/2.8.3/src/siu/lib/kernel/kernel.php on line 385

        $locale_persona = kernel::persona() != null? kernel::persona()->get_locale(): false;
        if ($locale_persona === false) {
            $locale_persona = $default_locale;
        }

Eso solo va a resolver que se muestre bien el error real.

Saludos

Hicimos ese cambio pero no aparece nada nuevo en los logs.
Lo que cambio es que ahora al intentar loguear dice “Ha ocurrido un error”

Esta bien, es el comportamiento esperado. Ese es el error generico que se le muestra al usuario en producción. El error ‘real’ es lo del proxy, esto no era un error en si mismo, era un error que se producía al mostrar el error.

Lo otro del proxy creo que ya lo habías preguntado - es lo mismo que pasaba al querer recuperar la contraseña. Fue un error del captcha - Lo tenemos fixeado el 9/9/2014 por lo que en 2.8.3 quedó afuera.

Si no usan proyx podés agregarle en el arreglo que se le pasa al proyecto

$proyecto = new extension_kernel\proyecto(array(

      'usa_proxy' => false,

Saludos!

Donde se debe agregar ese codigo?

En la función cargar_proyecto que pegaste. La porción ‘$proyecto = new extension_kernel\proyecto(array(’ ya está, hay que agregarle la otra entrada al arreglo ese.

Si, como dice Ale, vas al archivo src/siu/bootstrap.php, función protected function cargar_proyecto(), debajo de donde dice:

$url_kolla = isset($this->config['url_kolla']) ? $this->config['url_kolla']: "http://localhost/kolla/3.3/";

agregar esto:

$usa_proxy = (isset($this->config['proxy']['activo']) && $this->config['proxy']['activo'] === true);
$parametros_proxy = ($usa_proxy) ?  $this->config['proxy'] : 0;

luego en el array:

$proyecto = new extension_kernel\proyecto(array(
            'db'                            => $this->bloque_acceso['database'],
            'alias'                         => $this->get_alias(),
            'produccion'                => $produccion,
            ...
            ...
));

agrega estas entradas en el array de arriba:

'usa_proxy' => $usa_proxy,
'parametros_proxy' => $parametros_proxy,

luego para configurar el proxy (en el caso que uses proxy) vas al archivo instalacion/config.php y agregas esto si no es que ya existe:

...
'proxy' =>
    array(
        'activo' => false,
 	    'proxy_host' => 'proxy.xxxxxxxxx',
 	    'proxy_port' => 8080,
 	    'proxy_username' => 'PROXY-USERNAME',
 	    'proxy_password' => 'PROXY-PASSWORD'
    ),
...

cualquier cosa decime.