function obtener_clave_pura_fila($fila) { $id_fila = ""; foreach ($this->columnas_clave as $clave) { $id_fila .= $this->datos[$fila][$clave] . apex_qs_separador; } $id_fila = substr($id_fila, 0, strlen($id_fila) - strlen(apex_qs_separador)); if (apex_pa_encriptar_qs) { $encriptador = toba::encriptador(); //ATENCION: me faltaria ponerle un uniqid("") para que sea mas robusto; $id_fila = $encriptador->cifrar($id_fila); } return $id_fila; }
/** * Generacion directa de una URL que representa un posible futuro acceso a la infraestructura * No se chequean permisos * * @param string $item_proyecto Proyecto al que pertenece el ítem destino (por defecto el actual) * @param string $item ID. del ítem destino (por defecto el actual) * @param array $parametros Párametros enviados al ítem, arreglo asociativo de strings * @param boolean $zona Activa la propagación automática del editable en la zona * @param boolean $cronometrar Indica si la solicitud generada por este vinculo debe cronometrarse * @param array $param_html * @param boolean $menu El vinculo esta solicitado por el menu? * @param string $celda_memoria Namespace de memoria a utilizar, por defecto el actual * @param string $nombre_ventana Nombre con que se abrira la ventana hija en caso de ser popup * @return string URL hacia el ítem solicitado * @deprecated Desde 1.0 usar get_url o get_url_ */ protected function generar_solicitud($item_proyecto = null, $item = null, $parametros = null, $zona = false, $cronometrar = false, $param_html = null, $menu = null, $celda_memoria = null, $servicio = null, $objetos_destino = null, $prefijo = null, $nombre_ventana = null) { $separador = '&'; //-[1]- Determino ITEM //Por defecto se propaga el id de la operación actual, o una operación del mismo proyecto $autovinculo = false; if ($item_proyecto == null || $item == null) { $item_solic = toba::memoria()->get_item_solicitado(); if ($item_proyecto == null) { $item_proyecto = $item_solic[0]; } if ($item == null) { $item = $item_solic[1]; $autovinculo = true; } } //Controlo que el usuario posea permisos para acceder al ITEM if (!$autovinculo) { //El control es solo dentro del proyecto actual if (toba::proyecto()->get_id() == $item_proyecto && !toba::proyecto()->puede_grupo_acceder_item($item)) { toba::logger()->notice("VINCULADOR: Fallo la creacion de un vinculo al item '{$item}' porque el usuario no posee permisos para acceder al mismo."); return null; } } $item_a_llamar = $item_proyecto . apex_qs_separador . $item; //-[2]- Determino parametros $parametros_formateados = ""; if ($zona) { //Hay que propagar la zona? $parametros_formateados .= $this->get_qs_zona(); } //Cual es el tipo de salida? if (isset($servicio) && $servicio != apex_hilo_qs_servicio_defecto) { $parametros_formateados .= $separador . apex_hilo_qs_servicio . "=" . $servicio; } if (isset($objetos_destino) && is_array($objetos_destino)) { $objetos = array(); foreach ($objetos_destino as $obj) { $objetos[] = $obj[0] . apex_qs_separador . $obj[1]; } $qs_objetos = implode(',', $objetos); $parametros_formateados .= $separador . apex_hilo_qs_objetos_destino . "=" . $qs_objetos; } //Cual es la celda de memoria del proximo request? if (!isset($celda_memoria)) { $celda_actual = toba::memoria()->get_celda_memoria_actual_id(); //Si es la celda por defecto, no explicitar ya que se asume if ($celda_actual != apex_hilo_qs_celda_memoria_defecto) { $celda_memoria = toba::memoria()->get_celda_memoria_actual_id(); } } if (isset($celda_memoria)) { $parametros_formateados .= $separador . apex_hilo_qs_celda_memoria . "=" . $celda_memoria; } //La proxima pagina va a CRONOMETRARSE? if ($cronometrar) { $parametros_formateados .= $separador . apex_hilo_qs_cronometro . "=1"; } //Formateo paremetros directos if (isset($parametros) && is_array($parametros)) { foreach ($parametros as $clave => $valor) { $parametros_formateados .= $separador . "{$clave}={$valor}"; } } //Obtengo el prefijo del vinculo if (!isset($prefijo)) { $prefijo = $this->prefijo; } else { if (strpos($prefijo, '?') === false) { $prefijo = $prefijo . '?'; } } //Genero la URL que invoca la solicitud $vinculo = $prefijo . $separador . apex_hilo_qs_item . "=" . $item_a_llamar; if (trim($parametros_formateados) != "") { $encriptar_qs = toba::proyecto()->get_parametro('encriptar_qs'); if ($encriptar_qs) { //Le concateno un string unico al texto que quiero encriptar asi evito que conozca //la clave alguien que ve los parametros encriptados y sin encriptar $parametros_formateados .= $parametros_formateados . $separador . "jmb76=" . uniqid(""); $vinculo = $vinculo . $separador . apex_hilo_qs_parametros . "=" . toba::encriptador()->cifrar($parametros_formateados); } else { $vinculo = $vinculo . $parametros_formateados; } } //El vinculo esta solicitado por el menu? //Esto se maneja directamente $_GET por performance (NO encriptar todo el menu) if ($menu) { $vinculo .= $separador . apex_hilo_qs_menu . "=1"; } //Genero HTML o devuelvo el VINCULO if (is_array($param_html)) { return $this->generar_html($vinculo, $param_html, $nombre_ventana); } else { return $vinculo; } }
private function __construct() { //toba::logger()->debug("TOBA MEMORIA: Inicializacion.", 'toba'); //dump_session(); $this->id = uniqid('st', true); $this->url_actual = texto_plano($_SERVER["PHP_SELF"]); //-[1]- Busco el ID de referencia de la instanciacion anterior del HILO // Este ID me permite ubicar la memoria correcta para el request ACTUAL if (isset($_GET[apex_hilo_qs_id])) { $this->hilo_referencia = $_GET[apex_hilo_qs_id]; } else { //Atencion, no hay hilo de referencia. CONTROLAR!! //Esto tiene sentido solo para la pagina de logon (?) para el resto //del sistema implica que las cosas funcionen mal! } //-[2]- Que ITEM se solicito? $this->item_solicitado = self::get_item_solicitado_original(); //-[3]- Recupero los parametros $this->parametros = array(); foreach (array_keys($_GET) as $clave) { $this->parametros[utf8_decode($clave)] = utf8_decode($_GET[$clave]); } // $this->parametros = $_GET; //FALTA hacer un URL decode!!! $encriptar_qs = toba::proyecto()->get_parametro('encriptar_qs'); if ($encriptar_qs) { if (isset($_GET[apex_hilo_qs_parametros])) { $encriptador = toba::encriptador(); parse_str($encriptador->descifrar($_GET[apex_hilo_qs_parametros]), $parametros); $this->parametros = array_merge($this->parametros, $parametros); unset($this->parametros[apex_hilo_qs_parametros]); unset($this->parametros["jmb76"]); //Clave agregada para complicar la encriptacion } } unset($this->parametros[apex_hilo_qs_id]); unset($this->parametros[apex_hilo_qs_item]); //------- MEMORIA -- Hago el bindeo con $_SESSION ---------------------------- // Determino el ID de la celda de memoria actual if (isset($this->parametros[apex_hilo_qs_celda_memoria])) { $this->celda_memoria_actual_id = $this->parametros[apex_hilo_qs_celda_memoria]; unset($this->parametros[apex_hilo_qs_celda_memoria]); } else { $this->celda_memoria_actual_id = apex_hilo_qs_celda_memoria_defecto; } // Apunto las referencias a session $this->memoria_celdas =& toba::manejador_sesiones()->segmento_memoria_proyecto(); // Celda ACTUAL if (!isset($this->memoria_celdas[$this->celda_memoria_actual_id])) { $this->memoria_celdas[$this->celda_memoria_actual_id] = array(); } $this->celda_memoria_actual =& $this->memoria_celdas[$this->celda_memoria_actual_id]; // Memoria GLOBAL if (!isset($this->memoria_celdas['__toba__global_proyecto'])) { $this->memoria_celdas['__toba__global_proyecto'] = array(); } $this->memoria_global =& $this->memoria_celdas['__toba__global_proyecto']; // Memoria de la INSTANCIA $this->memoria_instancia =& toba::manejador_sesiones()->segmento_datos_instancia(); //----------------------------------------------------------------------------- if (isset($this->parametros[apex_hilo_qs_servicio])) { $this->servicio = substr($this->parametros[apex_hilo_qs_servicio], 0, 60); unset($this->parametros[apex_hilo_qs_servicio]); } if (isset($this->parametros[apex_hilo_qs_objetos_destino])) { $objetos = $this->parametros[apex_hilo_qs_objetos_destino]; $lista_obj = explode(",", $objetos); $this->objetos_destino = array(); foreach ($lista_obj as $obj) { if (trim($obj) != '') { $this->objetos_destino[] = explode(apex_qs_separador, $obj); } } unset($this->parametros[apex_hilo_qs_servicio]); } //Guardo el FLAG que indica si se accedio por el menu if (isset($_GET[apex_hilo_qs_menu])) { $this->acceso_menu = true; } else { $this->acceso_menu = false; } $this->inicializar_memoria(); if (isset($this->celda_memoria_actual['hilo'])) { //Si la página requerida es una que ya se genero, se descartan los siguientes pedidos //Esto permite manejar el caso del refresh y el back, aunque se pierde la posibilidad de re-hacer con forward //ya que cada back que se ingresa genera un nuevo estado (porque se realiza una nueva ejecución) $claves = array_keys($this->celda_memoria_actual['hilo']); if (in_array($this->hilo_referencia, $claves) && $this->hilo_referencia != end($claves)) { //No provengo desde la ultima generacion (seria el caso normal) $encontrado = false; foreach ($claves as $clave) { if ($encontrado) { unset($this->celda_memoria_actual['hilo'][$clave]); //Borro aquellos que quedan en 'sandwich' } if ($clave == $this->hilo_referencia) { $encontrado = true; } } } } }