*
$m_datosInsertar - Matriz de datos donde se guardan los datos que van a intervenir en las diferentes operaciones de Inserción(INSERT) agrupados por las correspondientes tablas de la base de datos a las que pertencen.
* $m_datosActualizar - Matriz de datos donde se guardan los datos que van a intervenir en las diferentes operaciones de Actulización(UPDATE) agrupados por las correspondientes tablas de la base de datos a las que pertencen.
* $m_datosBorrar - Matriz de datos donde se guardan los datos que van a intervenir en las diferentes operaciones de Borrado(DELETE) agrupados por las correspondientes tablas de la base de datos a las que pertencen.
* $m_datosSeleccionados - Matriz de datos donde se guardan los datos que van a intervenir en las diferentes operaciones relacionadas con la Selección agrupados por las correspondientes tablas de la base de datos a las que pertencen.
* $m_datosAntiguos - Matriz de datos donde se guardan los datos anteriores a las modificaciones realizadas por el usuario. Sirven para llevar el control de concurrencia.
* $m_datosCamposDependientes - Matriz con estructura fija que contiene los datos necesarios para realizar la recarga de los campos dependientes (Ejemp. formulario, nombre del camp, ...).
* $m_matching - Matriz que contiene la matriz del matching TPL- BD con la que se va a trabajar.
* $int_filaSeleccionada - Puntero a la fila actual selecionada. Se utiliza para el caso de maestro-detalles
*
*
* @author David, Keka, Verónica, Raquel y Toni.
* @version $Id: IgepComunicacion.php,v 1.31 2004-10-05 19:04:19 afelixf Exp $
*/
class IgepComunicacion {
/**
* matriz de datos a Insertar
*
* @var array m_datosInsertar
*/
var $m_datosInsertar;
/**
* matriz de datos a Actulizar
*
* @var array m_datosActualizar
*/
var $m_datosActualizar;
/**
* matriz de datos a Borrar
*
* @var array m_datosBorrar
*/
var $m_datosBorrar;
/**
* matriz de datos Seleccionados
*
* @var array m_datosSeleccionados
*/
var $m_datosSeleccionados;
/**
* matriz de datos Antiguos
*
* @var array m_datosAntiguos
*/
var $m_datosAntiguos;
/**
* matriz de datos relativos a los campos Dependientes o Calculados
*
* @var array m_datosCamposDependientes
*/
var $m_datosCamposDependientes;
/**
* matriz de matching
*
* @var array m_matching
*/
var $m_matching;
/**
* Entero referencia a la fila actual
*
* @var integer int_filaSeleccionada
*/
var $int_filaSeleccionada;
/**
* matriz de datos relativos a la ventana de Seleccion
*
* @var array m_datosVentanaSeleccion
*/
var $m_datosVentanaSeleccion;
/**
* matriz de datos relativos a los campos External(q no se guardan en la Base de Datos)
*
* @var array m_datosExternal
*/
var $m_datosExternal;
/**
* matriz de datos visibles en el panel. Es decir que capturamos todo lo que se vea independientemente de si se les ha practicado algun cambio o no.
*
* @var array m_datosVisbles
*/
var $m_datosVisibles;
/**
* Constructor. Recibe como parámetro el matching con el que trabajará el objeto
*
* @access public
* @param array $matching
*/
function IgepComunicacion($matching){
$this->m_matching = $matching;
}
/**************************************FUNCIONES DE CONSTRUCCIÓN**************************************/
/**
* Construye todos los arrays de datos. Este método se invocará cuando se quieren realizar todas las operaciones
* (acción operarTabla), es decir, Inserción, Modificación y Borrado. También se creará el array de Seleccionados y el de
* datos Antiguos.
*
* @access public
* @return integer
*/
function construirArrays() {
/*La estructura de los arrays es la siguiente:
[Tabla] =>
[fila] =>
[campo1]=> valor, [campo2]=> valor
*/
foreach($_REQUEST as $prop => $val) {
/*Montamos el insertar*/
switch(substr($prop,0,3)){
//Para los campos insertados
case "ins":
//No nos interesan los vacios
if($val!="") {
//Para extraer el indice de la matriz
$posIndice= strrpos($prop,"_");
$i = substr($prop,$posIndice + 1);
$datos = explode("___",$prop);
$datos2 = explode("_",$datos[2]);
$estado = "est_".$datos2[0]."_".$i;
if($_REQUEST[$estado]=="insertada"){
$campo = $this->m_matching[$datos[1]]["campo"];
$tabla = $this->m_matching[$datos[1]]["tabla"];
if($campo!="")
$this->m_datosInsertar[$tabla][$i][$campo] = $val;
else
$this->m_datosExternal[$i][$datos[1]] = $val;
//Para almacenar la fila actual
$claseManejadora = $_REQUEST["claseManejadora"]; //Esto creo q sobra
$this->int_filaActual = $i;
}
}
break;
//Para los checks insertados
case "hin":
//No nos interesan los vacios
if($val!="") {
//Para extraer el indice de la matriz
$posIndice= strrpos($prop,"_");
$i = substr($prop,$posIndice + 1);
$datos = explode("___",$prop);
$datos2 = explode("_",$datos[2]);
$estado = "est_".$datos2[0]."_".$i;
if($_REQUEST[$estado]=="insertada"){
$campo = $this->m_matching[$datos[1]]["campo"];
$tabla = $this->m_matching[$datos[1]]["tabla"];
if($campo!="")
$this->m_datosInsertar[$tabla][$i][$campo] = $val;
else
$this->m_datosExternal[$i][$datos[1]] = $val;
}
}
break;
//para el resto de campos
case "cam":
/*Montamos las operaciones de borrado y actualizado*/
//Para extraer el indice de la matriz
$posIndice= strrpos($prop,"_");
$j = substr($prop,$posIndice + 1);
//cogemos el nombre del campo q contiene el valor antiguo
$campo_antiguo = str_replace("cam","ant",$prop);
$datos = explode("___",$prop);
$campo = $this->m_matching[$datos[1]]["campo"];
$tabla = $this->m_matching[$datos[1]]["tabla"];
$datos2 = explode("_",$datos[2]);
$estado = "est_".$datos2[0]."_".$j;
$check = "check_".$datos2[0]."_".$j;
//Comprobación de vacios
switch ($_REQUEST[$estado]) {
case "borrada":
if($campo!=""){
$this->m_datosBorrar[$tabla][$j][$campo] = $val;
$this->m_datosAntiguos[$tabla][$j][$campo] = $_REQUEST[$campo_antiguo];
}
else
$this->m_datosExternal[$i][$datos[1]] = $val;
//Para almacenar la fila actual
$claseManejadora = $_REQUEST["claseManejadora"];
if ($_REQUEST[$check] or $_REQUEST["pagActual___".$claseManejadora] == $j)
$this->int_filaActual = $j;
break;
case "modificada":
if($campo!=""){
$this->m_datosActualizar[$tabla][$j][$campo] = $val;
$this->m_datosAntiguos[$tabla][$j][$campo] = $_REQUEST[$campo_antiguo];
}
else
$this->m_datosExternal[$i][$datos[1]] = $val;
//Para almacenar la fila actual
$claseManejadora = $_REQUEST["claseManejadora"];
if ($_REQUEST[$check] or $_REQUEST["pagActual___".$claseManejadora] == $j)
$this->int_filaActual = $j;
break;
case "nada":
if ($_REQUEST[$check]){
if($campo!="")
$this->m_datosSeleccionados[$j][$tabla.".".$campo] = $val;
else
$this->m_datosExternal[$i][$datos[1]] = $val;
}
break;
default:
break;
}
break;
default:
break;
}
}//fin del foreach
return 0;
} //Fin de ConstruirArrays
/**
* Construye únicamente el array de Seleccionados. En este caso es importante tener en cuenta si se venimos de un panel
* Ficha o Tabla. Esto se debe a que la forma de marcar la fila seleccionada es diferente de uno a otro (la tabla permite los checks).
*
* @access public
* @return integer
*/
function construirArraySeleccionar() {
//Como la forma de seleccionar cambia de un Ficha a un Tabla, tenemos q comprobar de donde viene
$claseManejadora = $_REQUEST["claseManejadora"];
//Si la variable pagActual tiene valor entonces se trata de un Ficha.
if (isset($_REQUEST["pagActual___".$claseManejadora]))
$filaActual = $_REQUEST["pagActual___".$claseManejadora];
foreach($_REQUEST as $prop => $val) {
/*Montamos el seleccionar*/
if( substr($prop,0,3)=="cam") {
//de momento no dejamos que sean vacios
//Para extraer el indice de la matriz
$posIndice= strrpos($prop,"_");
$j = substr($prop,$posIndice + 1);
$datos = explode("___",$prop);
$campo = $this->m_matching[$datos[1]]["campo"];
$tabla = $this->m_matching[$datos[1]]["tabla"];
$datos2 = explode("_",$datos[2]);
$estado = "est_".$datos2[0]."_".$j;
$check = "check_".$datos2[0]."_".$j;
if ((($_REQUEST[$estado]=="nada") and ($_REQUEST[$check])) or ($filaActual == $j)) {
$this->m_datosSeleccionados[$j][$tabla.".".$campo] = $val;
//Para almacenar la fila seleccionada
$this->int_filaActual = $j;
}
}
}//fin del foreach
return 0;
} //Fin de ConstruirArraysSeleccionar
/**
* Construye el array de datos a Borrar y el de datos Antiguos para realizar las operaciones de DELETE correspondientes.
*
* @access public
* @return integer
*/
function construirArrayBorrar() {
foreach($_REQUEST as $prop => $val) {
/*Montamos el borrar*/
if ( substr($prop,0,3)=="cam") {
//Para extraer el indice de la matriz
$posIndice= strrpos($prop,"_");
$j = substr($prop,$posIndice + 1);
$datos = explode("___",$prop);
$campo = $this->m_matching[$datos[1]]["campo"];
$tabla = $this->m_matching[$datos[1]]["tabla"];
$datos2 = explode("_",$datos[2]);
$estado = "est_".$datos2[0]."_".$j;
if (($_REQUEST[$estado]=="borrada")) {
if($campo!=""){
$this->m_datosBorrar[$tabla][$j][$campo] = $val;
$this->m_datosAntiguos[$tabla][$j][$campo] = $_REQUEST[$campo_antiguo];
}
else
$this->m_datosExternal[$i][$datos[1]] = $val;
}
}
}//fin del foreach
return 0;
} //Fin de ConstruirArraysBorrar
/**
* Construye el array especial para los campos Dependientes. Esta función hace uso de los métodos proporcionados por phrame.
*
* @access public
* @return integer
*/
function construirArrayCamposDependientes($actionForm) {
$this->m_datosCamposDependientes["formulario"] = $actionForm->get('nomForm');
$this->m_datosCamposDependientes["origen"] = $actionForm->get('origen');
$this->m_datosCamposDependientes["destino"] = $actionForm->get('destino');
$this->m_datosCamposDependientes["valor"] = $actionForm->get('valor');
$this->m_datosCamposDependientes["claseManejadora"] = $actionForm->get('claseManejadora');
}
function construirArrayAbrirVentanaSeleccion($actionForm) {
$this->m_datosVentanaSeleccion["claseManejadora"] = $actionForm->get('claseManejadora');
//Capturamos el nombre del campo
$campo = $actionForm->get('nomCampo');
$this->m_datosVentanaSeleccion["nombreCompleto"] = $campo;
$datos = explode("___",$campo);
$datos2 = explode("_",$datos[1]);
$this->m_datosVentanaSeleccion["nomCampo"] = $datos2[0];
$this->m_datosVentanaSeleccion["nomForm"] = $actionForm->get('nomForm');
//Calculamos el índice
$posIndice= strrpos($campo,"_");
$indice = substr($campo,$posIndice + 1);
$this->m_datosVentanaSeleccion["filaActual"] = $indice;
$this->m_datosVentanaSeleccion["panelActua"] = $actionForm->get('panelActua');
$this->m_datosVentanaSeleccion["actionOrigen"] = $actionForm->get('actionOrigen');
}
function construirArrayBuscarVentanaSeleccion($actionForm) {
$this->m_datosVentanaSeleccion["nomForm"] = $actionForm->get('nomForm');
$this->m_datosVentanaSeleccion["nomCampo"] = $actionForm->get('nomCampo');
$this->m_datosVentanaSeleccion["camposBusqueda"] = $actionForm->get('camposBusqueda');
$this->m_datosVentanaSeleccion["valor"] = $actionForm->get('campoBuscar');
$this->m_datosVentanaSeleccion["dependencia"] = $actionForm->get('Dependencia');
$this->m_datosVentanaSeleccion["filaActual"] = $actionForm->get('filaActual');
$this->m_datosVentanaSeleccion["panelActua"] = $actionForm->get('panelActua');
$this->m_datosVentanaSeleccion["claseManejadora"] = $actionForm->get('claseManejadora');
$this->m_datosVentanaSeleccion["actionOrigen"] = $actionForm->get('actionOrigen');
}
function construirArrayDatosVisibles(){
foreach($_REQUEST as $prop => $val) {
/*Montamos el borrar*/
if ( substr($prop,0,3)=="cam") {
//Para extraer el indice de la matriz
$posIndice= strrpos($prop,"_");
$j = substr($prop,$posIndice + 1);
$datos = explode("___",$prop);
$campo = $this->m_matching[$datos[1]]["campo"];
$tabla = $this->m_matching[$datos[1]]["tabla"];
if($campo!=""){
$this->m_datosVisibles[$tabla][$j][$campo] = $val;
$this->m_datosAntiguos[$tabla][$j][$campo] = $_REQUEST[$campo_antiguo];
}
else
$this->m_datosExternal[$i][$datos[1]] = $val;
}
}//fin del foreach
return 0;
}
/**************************************FUNCIONES DE ENTREGA**************************************/
/**
* Devuelve los datos que con anterioridad se han recuperado y clasificado. Para ello solicita una operación y una tabla de la BD.
*
* @access public
* @param string $operacion
* @param string $nombreTabla
* @return array
*/
function dameDatos($operacion, $nombreTabla = "") {
switch($operacion){
case "insertar":
return $this->m_datosInsertar[$nombreTabla];
break;
case "modificar":
return $this->m_datosActualizar[$nombreTabla];
break;
case "borrar":
return $this->m_datosBorrar[$nombreTabla];
break;
case "editar":
return $this->m_datosSeleccionados;
break;
case "camposDependientes":
return $this->m_datosCamposDependientes;
break;
case "abrirVentanaSeleccion":
return $this->m_datosVentanaSeleccion;
break;
case "buscarVentanaSeleccion":
return $this->m_datosVentanaSeleccion;
break;
case "buscar":
//Recoger por Phrame todos los datos del panel
foreach ($this->m_matching as $campo => $datosCampos ) {
if(trim($_REQUEST[$campo])!="") {
$campoBD = $datosCampos["tabla"].".".$datosCampos["campo"];
$m_datosBuscar[0][$campoBD]=$_REQUEST[$campo];
}
}
return $m_datosBuscar;
break;
case "external":
return $this->m_datosExternal;
break;
case "visibles":
return $this->m_datosVisibles[$nombreTabla];
break;
default:
die("Dame Datos.Operacion desconocida.");
break;
}
}
/**
* Devuelve los datos Antiguos para una tabla dada.
*
* @access public
* @param string $nombreTabla
* @return array
*/
function dameDatosAntiguos($nombreTabla) {
return $this->m_datosAntiguos[$nombreTabla];
}//fin de dameDatosAntiguos
/**
* Retorna el valor de la fila actual
*
* @access public
* @return integer
*/
function dameFilaActual() {
return $this->int_filaActual;
}//fin de dameFilaActual
/**
* Retorna si hay datos para una operación dada
*
* @access public
* @return integer
*/
function hayDatos($operacion) {
switch($operacion){
case "insertar":
return count($this->m_datosInsertar);
break;
case "modificar":
return count($this->m_datosActualizar);
break;
case "borrar":
return count($this->m_datosBorrar);
break;
case "editar":
return count($this->m_datosSeleccionados);
break;
}
return 0;
}//fin de dameFilaActual
}//Fin de IgepComunicacion antigua IgepHablaPlugin (no te olvidaremos)
?>