Example #1
0
 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;
 }
Example #2
0
 /**
  * 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;
     }
 }
Example #3
0
 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;
                 }
             }
         }
     }
 }