Example #1
0
 /**
  *	Realiza la autentificacion.
  *	@return $value	Retorna TRUE o FALSE de acuerdo al estado de la autentifiacion
  */
 static function autenticar($id_usuario, $clave, $datos_iniciales = null, $usar_log = true)
 {
     $datos_usuario = toba::instancia()->get_info_autenticacion($id_usuario);
     if (empty($datos_usuario)) {
         if ($usar_log) {
             toba::logger()->error("El usuario '{$id_usuario}' no existe", 'toba');
         }
         return false;
     } else {
         //--- Autentificación
         $algoritmo = $datos_usuario['autentificacion'];
         if ($algoritmo != 'plano') {
             if ($algoritmo == 'md5') {
                 $clave = hash($algoritmo, $clave);
             } else {
                 $clave = encriptar_con_sal($clave, $algoritmo, $datos_usuario['clave']);
             }
         }
         if (!($datos_usuario['clave'] === $clave)) {
             if ($usar_log) {
                 toba::logger()->error("El usuario '{$id_usuario}' ingreso una clave incorrecta", 'toba');
             }
             return false;
         }
     }
     return true;
 }
Example #2
0
 function run(&$reporter)
 {
     $reporter->paintGroupStart($this->getLabel(), $this->getSize());
     for ($i = 0, $count = count($this->_test_cases); $i < $count; $i++) {
         if ($this->separar_casos) {
             toba::logger()->debug("\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" . "\n%%%%%%%%%%% INICIO caso: " . $this->_test_cases[$i]->getLabel() . " %%%%%%%%%%%%%%%%%%%" . "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", 'toba');
         }
         if (is_string($this->_test_cases[$i])) {
             $class = $this->_test_cases[$i];
             $test = new $class();
             if ($this->separar_pruebas) {
                 $test->separar_pruebas(true);
             }
             $test->run($reporter);
         } else {
             if ($this->separar_pruebas) {
                 $this->_test_cases[$i]->separar_pruebas(true);
             }
             $this->_test_cases[$i]->run($reporter);
         }
         if ($this->separar_casos) {
             toba::logger()->debug("\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" . "\n%%%%%%%%%%% FIN caso: " . $this->_test_cases[$i]->getLabel() . " %%%%%%%%%%%%%%%%%%%" . "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", 'toba');
         }
     }
     $reporter->paintGroupEnd($this->getLabel());
     return $reporter->getStatus();
 }
 function run()
 {
     $methods = get_class_methods(get_class($this->_test_case));
     $invoker =& $this->_test_case->createInvoker();
     foreach ($methods as $method) {
         if (!$this->_isTest($method)) {
             continue;
         }
         if ($this->_isConstructor($method)) {
             continue;
         }
         if ($this->_scorer->shouldInvoke($this->_test_case->getLabel(), $method)) {
             if ($this->separar_pruebas) {
                 toba::logger()->debug("\n\n%%%%%%%%%%%--------- INICIO prueba: {$method} ---------%%%%%%%%%%%%%%%%%%%\n", 'toba');
             }
             try {
                 $rsp = $invoker->invoke($method);
                 $asrt = $invoker->getTestCase()->get_assert_status();
                 //Recupero si el caso, usa Assert o no internamente.
                 if (!is_null($rsp) && is_array($rsp) && !$asrt) {
                     //En base a ello, uso o no los datos devueltos.
                     $result = isset($rsp['resultado']) ? $rsp['resultado'] : false;
                     $msg = $this->parsear_extra_resultado($rsp);
                     $invoker->getTestCase()->assertTrue($result, $msg);
                 }
             } catch (PHPWebDriver_WebDriverCurlException $e) {
                 toba::logger()->debug($e->getMessage());
                 throw new toba_error_usuario('Inicie el servidor Selenium por favor');
             }
             if ($this->separar_pruebas) {
                 toba::logger()->debug("\n\n%%%%%%%%%%%--------- FIN prueba: {$method} ---------%%%%%%%%%%%%%%%%%%%", 'toba');
             }
         }
     }
 }
Example #4
0
 function __construct($item, $usuario)
 {
     toba::cronometro()->marcar('Inicio Solicitud');
     $this->item = $item;
     $this->usuario = $usuario;
     for ($a = 0; $a < count($this->info['objetos']); $a++) {
         $indice = $this->info['objetos'][$a]["clase"];
         $this->indice_objetos[$indice][] = $a;
         $objetos[] = $this->info['objetos'][$a]["objeto"];
     }
     $this->id = toba::instancia()->get_id_solicitud();
     //-- Cargo los OBJETOS que se encuentran asociados
     $this->log = toba::logger();
     //---------- LOG de SOlICITUDES --------------------
     //Se debe cronometrar la pagina?
     if (toba::memoria()->usuario_solicita_cronometrar()) {
         $this->cronometrar = true;
     }
     //-- Identifico si la solicitd se deber registrar
     if (toba::proyecto()->get_parametro('registrar_solicitud') || $this->info['basica']['item_solic_registrar']) {
         $this->registrar_db = true;
     }
     //-- Hago un registro temprano del acceso por si hay algun fatal en medio de la ejecucion
     $this->registro_temprano();
     /*
     		//-- Observaciones automaticas? -> en espera a algun requerimiento que le de forma al esquema
     		if( $this->info['basica']['item_solic_registrar'] && $this->info['basica']['item_solic_obs_tipo']){
     			$tipo = array($this->info['basica']['item_solic_obs_tipo_proyecto'],$this->info['basica']['item_solic_obs_tipo']);
     			$this->observar($this->info['basica']['item_solic_observacion'],$tipo);
     		}*/
 }
Example #5
0
 function ejecutar(&$parametros)
 {
     $this->set_resultado(false);
     $this->set_mensaje('Ocurrió un error con ' . get_class($this) . ' parametros: ' . print_r($parametros, true));
     toba::logger()->info('SOY ' . get_class($this) . ' !!!' . print_r($parametros, true));
     return true;
 }
 /**
  *  Cicla por los gadgets pidiendoles que generen su HTML
  * @ignore
  */
 protected function generar_html_gadgets()
 {
     toba::logger()->debug('Gadgets cargados: ' . count($this->gadgets));
     foreach ($this->gadgets as $gadget) {
         $gadget->generar_html();
     }
 }
Example #7
0
 /**
  * Agrega un mensaje a mostrar al usuario
  * @param string $mensaje Mensaje completo a mostrar
  * @param string $nivel Determina el estilo del mensaje, 'error' o 'info' 
  */
 function agregar($mensaje, $nivel = 'error', $extras = null)
 {
     if (!is_null($mensaje) && trim($mensaje) != '') {
         $this->mensajes[] = array($mensaje, $nivel, $extras);
         toba::logger()->debug("Mensaje a usuario: " . $mensaje, 'toba');
     }
 }
Example #8
0
 private function getSalt()
 {
     switch (strtoupper($this->metodo)) {
         case 'BCRYPT':
             $str_inicial = version_compare(PHP_VERSION, '5.3.7') < 0 ? "\$2a\$" : "\$2y\$";
             $salt = sprintf($str_inicial . '%02d$', $this->rounds);
             break;
         case 'SHA512':
             $vueltas = $this->rounds < 1000 ? $this->rounds * 1000 : $this->rounds + 5000;
             $salt = sprintf('$6$rounds=%d$', $this->rounds);
             break;
         case 'SHA256':
             $vueltas = $this->rounds < 1000 ? $this->rounds * 1000 : $this->rounds + 5000;
             $salt = sprintf('$5$rounds=%d$', $this->rounds);
             break;
         case 'MD5':
             $salt = '$1$';
         default:
             toba::logger()->debug("Se suministro un algoritmo no esperado para el hash: {$this->metodo}");
             $salt = '';
     }
     $bytes = $this->getRandomBytes(16);
     $salt .= $this->encodeBytes($bytes);
     return $salt;
 }
Example #9
0
 /**
  * @todo Se desactiva el logger porque no corre como proyecto toba sino como el de la aplicacion
  * 		Cuando el admin sea un proyecto hay que sacar la desactivación
  */
 function ini()
 {
     toba::logger()->desactivar();
     if (!isset($this->s__opciones)) {
         $this->s__opciones['proyecto'] = toba_editor::get_proyecto_cargado();
         $this->s__opciones['fuente'] = 'fs';
         $this->s__seleccion = 'ultima';
     }
     $this->cargar_analizador();
 }
Example #10
0
 /**
  * Navega hacia la operación destino indicada en el vinculo
  * @param toba_vinculo $vinculo
  */
 function navegar(toba_vinculo $vinculo)
 {
     $id = toba::vinculador()->registrar_vinculo($vinculo);
     if (isset($id)) {
         $accion = "vinculador.invocar('{$id}');\n";
         $this->encolar($accion);
     } else {
         toba::logger()->warning("El usuario no puede acceder a la operación " . $vinculo->get_item());
     }
 }
Example #11
0
 function set_subclase($nombre, $archivo, $pm)
 {
     $db = toba_contexto_info::get_db();
     $nombre = $db->quote($nombre);
     $archivo = $db->quote($archivo);
     $pm = $db->quote($pm);
     $sql = "\n\t\t\tUPDATE apex_objeto_db_registros\n\t\t\tSET \n\t\t\t\tap = 0,\n\t\t\t\tap_clase = {$nombre},\n\t\t\t\tap_archivo = {$archivo},\n\t\t\t\tpunto_montaje = {$pm}\n\t\t\tWHERE\n\t\t\t\t\tobjeto_proyecto = '{$this->datos['proyecto']}'\n\t\t\t\tAND\tobjeto = '{$this->datos['objeto']}'\n\t\t";
     toba::logger()->debug($sql);
     $db->ejecutar($sql);
 }
 function set_subclase($nombre, $archivo, $pm)
 {
     $db = toba_contexto_info::get_db();
     $proyecto = quote($this->_id['proyecto']);
     $nombre = quote($nombre);
     $archivo = quote($archivo);
     $pm = quote($pm);
     $sql = "UPDATE  apex_proyecto\n\t\t\t\t\tSET  contexto_ejecucion_subclase = {$nombre},\n\t\t\t\t\tcontexto_ejecucion_subclase_archivo = {$archivo},\n\t\t\t\t\tpm_contexto = {$pm}\n\t\t\t\t\tWHERE\tproyecto = {$proyecto};";
     toba::logger()->debug($sql);
     $db->ejecutar($sql);
 }
Example #13
0
 function set_subclase($nombre, $archivo, $pm)
 {
     $db = toba_contexto_info::get_db();
     $nombre = $db->quote($nombre);
     $archivo = $db->quote($archivo);
     $pm = $db->quote($pm);
     $id = $db->quote($this->_id['proyecto']);
     $sql = "\n\t\t\tUPDATE apex_proyecto\n\t\t\tSET\n\t\t\t\tusuario_subclase = {$nombre},\n\t\t\t\tusuario_subclase_archivo = {$archivo},\n\t\t\t\tpm_usuario = {$pm}\n\t\t\tWHERE\n\t\t\t\t\tproyecto = {$id};";
     toba::logger()->debug($sql);
     $db->ejecutar($sql);
 }
Example #14
0
 function set_subclase($nombre, $archivo, $pm)
 {
     $proyecto = quote($this->_id['proyecto']);
     $tipo_pagina = quote($this->_id['id']);
     $nombre = quote($nombre);
     $archivo = quote($archivo);
     $pm = quote($pm);
     $sql = "UPDATE  apex_pagina_tipo\n\t\t\t\t\tSET\n\t\t\t\t\t\t\tclase_nombre = {$nombre}, \n\t\t\t\t\t\t\tclase_archivo = {$archivo},\n\t\t\t\t\t\t\tpunto_montaje = {$pm}\n\t\t\t\t\tWHERE\tproyecto = {$proyecto}\n\t\t\t\t\tAND pagina_tipo = {$tipo_pagina};";
     toba::logger()->debug($sql);
     $db->ejecutar($sql);
 }
Example #15
0
 function evt__formulario__alta($datos)
 {
     $t = $this->get_tabla();
     $t->nueva_fila($datos);
     try {
         $t->sincronizar();
         $this->resetear();
     } catch (toba_error $e) {
         toba::notificacion()->agregar('Error insertando');
         toba::logger()->error($e->getMessage());
     }
 }
Example #16
0
 function set_subclase($nombre, $archivo, $pm)
 {
     $db = toba_contexto_info::get_db();
     $nombre = $db->quote($nombre);
     $archivo = $db->quote($archivo);
     $pm = $db->quote($pm);
     $proyecto = $db->quote($this->_id['proyecto']);
     $zona = $db->quote($this->_id['id']);
     $sql = "\n\t\t\tUPDATE apex_item_zona\n\t\t\tSET\n\t\t\t\tarchivo = {$archivo},\n\t\t\t\tpunto_montaje = {$pm}\n\t\t\tWHERE\n\t\t\t\t\tproyecto = {$proyecto}\n\t\t\tAND zona = {$zona};";
     toba::logger()->debug($sql);
     $db->ejecutar($sql);
 }
Example #17
0
 function evt__aceptar()
 {
     try {
         $r = $this->dep('relacion');
         $r->sincronizar();
         $r->resetear();
         $this->controlador->set_pantalla('pant_listado');
     } catch (toba_error $e) {
         toba::notificacion()->agregar('Error procesando');
         toba::logger()->error($e->getMessage());
     }
 }
Example #18
0
 function impr_documento($nombre = null, &$conexion)
 {
     toba::logger()->ocultar();
     $this->nombre = $nombre;
     $this->conexion =& $conexion;
     $this->hoja_ancho = 210.0;
     $this->hoja_alto = 297.0;
     $this->hoja_orientacion = 'portrait';
     $this->hoja_nombre = 'A4';
     $this->_recuperar_configuracion();
     $this->doc_pdf =& new Cezpdf($this->hoja_nombre, $this->hoja_orientacion);
 }
Example #19
0
 function enviar_repositorio($img)
 {
     $srv = toba::rdi()->servicio(RDITipos::FOTO);
     $attr = array('tipoIdentificacion' => md5($img), 'numeroIdentificacion' => rand(100, 5000), 'alto' => 500, 'ancho' => 600, 'color' => true);
     if (file_exists($img)) {
         $cont = file_get_contents($img);
         $ecm_resource_id = $srv->crear($attr, $cont);
         toba::logger()->debug("El id del ECM es" . var_export($ecm_resource_id, true));
         if (!is_null($ecm_resource_id)) {
             $this->s__id_recurso = $ecm_resource_id;
         }
     }
 }
Example #20
0
 function evt__generar()
 {
     //Luego invocar los metodos que generan el certificado y la exportacion de clave publica.
     $proyecto = $this->get_modelo_proyecto();
     if ($this->verificar_existencia_private_key($proyecto) && !$this->pisa_archivo) {
         throw new toba_error_usuario('El archivo ya existe, no se permitira la generación a menos que se reemplace');
     }
     try {
         toba_modelo_servicio_web::generar_certificados($proyecto);
     } catch (toba_error_usuario $e) {
         toba::logger()->error($e->getMessage());
         toba::notificacion()->agregar('Se ha producido un error generando el certificado, verifique los logs', 'error');
     }
 }
Example #21
0
 function get_entidad()
 {
     //Acceso al DATOS_RELACION
     if ($this->cambio_objeto && !$this->falla_carga) {
         toba::logger()->debug($this->get_txt() . '*** se cargo la relacion: ' . $this->id_objeto['objeto']);
         if ($this->dependencia('datos')->cargar($this->id_objeto)) {
             $this->cambio_objeto = false;
             //Sino sigue entrando aca por cada vez que se solicita la entidad
         } else {
             toba::notificacion()->agregar('El elemento seleccionado no existe.', 'error');
             $this->falla_carga = true;
         }
     }
     return $this->dependencia('datos');
 }
Example #22
0
 function conf_evt__cuadro__crear_auditoria(toba_evento_usuario $evt, $fila)
 {
     $existe = false;
     try {
         $existe = $this->existe_auditoria($evt->get_parametros());
     } catch (toba_error $e) {
         toba::logger()->debug($e->getMessage());
     }
     if ($existe) {
         $evt->set_etiqueta('Actualizar Schema');
         $evt->set_msg_ayuda('Migra el schema de auditoria tomando campos nuevos o modificados');
     } else {
         $evt->set_etiqueta('Activar Auditoría');
         $evt->set_msg_ayuda('Crea un schema paralelo con la misma estructura que el schema de datos original, conteniendo todas las modificaciones a los datos del mismo');
     }
 }
 function servicio__ejecutar()
 {
     toba::memoria()->desactivar_reciclado();
     $id_nodo = toba::memoria()->get_parametro('id_nodo');
     $nodo = $this->reportar_evento_interno('cargar_nodo', $id_nodo);
     if (isset($nodo) && $nodo !== apex_ei_evt_sin_rpta) {
         $html = $this->recorrer_hijos(current($nodo), 0);
         $html .= '[--toba--]';
         $html .= toba_js::abrir();
         $html .= $this->actualizar_estado_js(current($nodo));
         $html .= toba_js::cerrar();
         $html .= '[--toba--]';
         echo $html;
     } else {
         toba::logger()->warning("toba_ei_arbol: No se pudo obtener el nodo que representa al ID {$id_nodo}");
     }
 }
Example #24
0
 function ejecutar($id_item, $retorno_opciones_generacion = null, $con_transaccion = true)
 {
     try {
         abrir_transaccion();
         foreach ($this->moldes as $molde) {
             $molde->generar();
         }
         $this->generar_archivos_consultas();
         $this->guardar_log_elementos_generados();
         cerrar_transaccion();
         toba::notificacion()->agregar('La generación se realizó exitosamente', 'info');
         return $this->log_elementos_creados;
     } catch (toba_error $e) {
         toba::logger()->error($e);
         toba::notificacion()->agregar("Fallo en la generación: " . $e->getMessage(), 'error');
         abortar_transaccion();
     }
 }
Example #25
0
 function analizar_cuerpo($log)
 {
     $cuerpo = array();
     $niveles = toba::logger()->get_niveles();
     $texto = trim(substr($log, strpos($log, toba_logger::fin_encabezado) + strlen(toba_logger::fin_encabezado), strlen($log)));
     $patron = "/\\[(";
     $patron .= implode("|", $niveles);
     $patron .= ")\\]/";
     $res = preg_split($patron, $texto, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
     //Se mezclan el nivel y el mensaje en un arreglo
     for ($i = 0; $i < count($res); $i += 2) {
         $mensaje = $res[$i + 1];
         $bracket_cierra = strpos($mensaje, ']');
         $proy = substr($mensaje, 1, $bracket_cierra - 1);
         $mens = trim(substr($mensaje, $bracket_cierra + 1));
         $cuerpo[] = array('nivel' => $res[$i], 'proyecto' => $proy, 'mensaje' => $mens);
     }
     return $cuerpo;
 }
 function registrar_autoload()
 {
     $path_autoload = $this->get_path_autoload();
     $nombre_clase = $this->get_clase_autoload();
     $nombre_metodo = $this->get_metodo_autoload();
     $existe_archivo = file_exists($path_autoload);
     if ($existe_archivo) {
         require_once $path_autoload;
         if (method_exists($nombre_clase, $nombre_metodo)) {
             spl_autoload_register(array($nombre_clase, $nombre_metodo));
             toba::logger()->debug("PUNTO DE MONTAJE: se cargó exitosamente el autoload del punto de montaje {$this->get_etiqueta()}");
         } else {
             throw new toba_error("PUNTO DE MONTAJE PROYECTO: el método {$nombre_clase}::{$nombre_metodo} de autoload no existe");
         }
     } else {
         throw new toba_error("PUNTO DE MONTAJE PROYECTO: no se encuentra el archivo de autoload, verifique su existencia. Path: {$path_autoload}");
         // La existencia del archivo, no la de uno mismo porque es demasiado pedir al usuario (ni siquiera podemos requerir php 5.3 :p)
     }
 }
Example #27
0
 function conf__mapa(toba_ei_mapa $mapa)
 {
     $parametros = toba::db('fuente_gis')->get_parametros();
     $dns_conexion = "user={$parametros['usuario']} dbname={$parametros['base']}  password={$parametros['clave']}  host={$parametros['profile']} port={$parametros['puerto']}";
     toba::logger()->debug(" Parametros conexion: \n {$dns_conexion}");
     $mapa->set_viewport('500', '500');
     $mapa->set_datos('Enviado en el CONF');
     //Obtengo el objeto de mapscript para setearle correctamente las direcciones de las imagenes
     $obj = $mapa->get_mapa();
     $ruta = toba::proyecto()->get_www_temp();
     $obj->web->set('imageurl', $ruta['url']);
     $obj->web->set('imagepath', $ruta['path']);
     //Obtengo los layers y ciclo para fijarle la conexion correcta de la base a modo de ejemplo
     $layers = $mapa->get_nombre_layers();
     //Aca accedo al objeto toba_ei_mapa
     foreach ($layers as $nombre) {
         $obj->getLayerByName($nombre)->set('connection', $dns_conexion);
         //Aca accedo al objeto de mapscript
     }
 }
Example #28
0
 function evt__guardar()
 {
     try {
         $datos = $this->dep('editor')->datos('basica')->get();
         // verifico que no existe el usuario en la creacion
         if (!$this->dep('datos')->esta_cargada() && isset($datos['usuario']) && consultas_instancia::get_existe_usuario($datos['usuario'])) {
             throw new toba_error('El usuario ya existe.');
         }
         $this->dep('datos')->sincronizar();
         $usuario_arai = $this->dep('editor')->get_usuario_arai();
         if (isset($usuario_arai)) {
             gestion_arai_usuarios::sincronizar_datos($datos['usuario'], $usuario_arai);
         }
         $this->dep('datos')->resetear();
         $this->set_pantalla('seleccionar');
     } catch (toba_error $e) {
         toba::notificacion()->agregar($e->getMessage());
         toba::logger()->error($e->getMessage());
     }
 }
Example #29
0
 function actualizar_script_roles($eliminados = array())
 {
     $usa_permisos_por_tabla = false;
     foreach (toba_info_editores::get_fuentes_datos($this->dep('editor_perfiles')->get_proyecto()) as $fuente) {
         //Miro si al menos una fuente usa permisos por tablas.
         $usa_permisos_por_tabla = $usa_permisos_por_tabla || $fuente['permisos_por_tabla'] == '1';
     }
     if ($usa_permisos_por_tabla) {
         $modelo = toba_modelo_catalogo::instanciacion();
         $modelo->set_db(toba::db());
         $proyecto = $modelo->get_proyecto(toba::instancia()->get_id(), $this->s__filtro['proyecto']);
         $dir = $proyecto->get_dir() . '/';
         try {
             $proyecto->crear_script_generacion_roles_db($dir, $eliminados);
             toba::notificacion()->agregar('Se han generado los scripts de actualización de roles de base de datos.\\n Los mismos se encuentran en el directorio raiz del proyecto, recuerde ejecutarlos', 'info');
         } catch (toba_error $e) {
             toba::logger()->debug('Falló la generacion del script' . $e->getMessage());
             toba::notificacion()->agregar('No se ha podido generar los scripts de actualización de roles de base de datos, por favor utilice el comando toba proyecto roles_script', 'error');
         }
     }
 }
Example #30
0
 function run()
 {
     $methods = get_class_methods(get_class($this->_test_case));
     $invoker =& $this->_test_case->createInvoker();
     foreach ($methods as $method) {
         if (!$this->_isTest($method)) {
             continue;
         }
         if ($this->_isConstructor($method)) {
             continue;
         }
         if ($this->_scorer->shouldInvoke($this->_test_case->getLabel(), $method)) {
             if ($this->separar_pruebas) {
                 toba::logger()->debug("\n\n%%%%%%%%%%%--------- INICIO prueba: {$method} ---------%%%%%%%%%%%%%%%%%%%\n", 'toba');
             }
             $invoker->invoke($method);
             if ($this->separar_pruebas) {
                 toba::logger()->debug("\n\n%%%%%%%%%%%--------- FIN prueba: {$method} ---------%%%%%%%%%%%%%%%%%%%", 'toba');
             }
         }
     }
 }