*
  • $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) ?>