obj_errorNegocio = & $g_error; //Cogemos la referencia de la variable del nombre de la aplicación. global $g_aplicacion; $this->str_aplicacion = $g_aplicacion; /*manejador de conexión*/ //¡¡Ojo!! falta prepararlo para varias conexiones $this->v_nombreTablas= $nombreTablas; $this->obj_conexion = new IgepConexion($dsn); /*manejadores de tablas*/ $i=0; foreach($this->v_nombreTablas as $tabla) { $this->v_tablas[$i] = new IgepPersistencia($this->obj_conexion->getConexion(),$tabla); $i++; } } /*función principal donde se ejecuta el comportamiento marcado para cada acción*/ function perform($actionMapping, $actionForm) { //Recogemos la accion y le quitamos el prefijo que nos viene de la ventana $str_accion = $actionForm->get('action'); if(strpos($str_accion,"__")>0) { $auxiliar = explode("__",$str_accion); $str_accion = $auxiliar[1]; } //creamos la instancia de hablaPlugin $this->comunica = new IgepComunicacion($this->matching); switch ($str_accion) { case 'camposDependientes': $this->comunica->construirArrayCamposDependientes($actionForm); $actionForward = $this->calcularCamposDependientes($actionMapping); break; case 'abrirVentanaSeleccion': $this->comunica->construirArrayAbrirVentanaSeleccion($actionForm); $actionForward = $this->abrirVentanaSeleccion($actionMapping); break; case 'buscarVentanaSeleccion': $this->comunica->construirArrayBuscarVentanaSeleccion($actionForm); $actionForward = $this->buscarVentanaSeleccion($actionMapping); break; case 'buscar': $actionForward = $this->buscar($actionMapping); break; case 'nuevo': $actionForward = $this->nuevo($actionMapping); break; case 'editar': //En las fichas cuando se quiere ver unos registros en concreto. $this->comunica->construirArraySeleccionar(); $actionForward = $this->editar($actionMapping); break; case 'borrar': //En las tablas de la ventanas de 3 paneles $this->comunica->construirArrayBorrar(); $actionForward = $this->borrar($actionMapping); if(isset($this->str_nombrePadre)) $this->recargarDesdeHijo(); break; case 'recargar': $actionForward = $this->recargar($actionMapping); break; case 'operarTabla': $this->comunica->construirArrays(); $actionForward = $this->borrar($actionMapping); if (!(isset($this->obj_mensaje))) { $actionForward = $this->modificar($actionMapping); if (!(isset($this->obj_mensaje))) { $actionForward = $this->insertar($actionMapping); } } //Si se trata de un maestro (tiene paneles dependientes) if(isset($this->v_hijos)){ $this->int_filaActual = $this->comunica->dameFilaActual(); //Si no ha habido error actualizaremos los detalles if (!(isset($this->obj_mensaje))) { foreach ($this->v_hijos as $claseHija => $val) unset($_SESSION[$this->str_aplicacion][$claseHija]); } } //Si se trata de un panel dependiente if(isset($this->str_nombrePadre)) $this->recargarDesdeHijo(); break; case 'cancelarListado': unset($this->obj_ultimaConsulta); //Si se trata de un maestro (tiene paneles dependientes unset a todos los hijos) if(isset($this->v_hijos)){ foreach ($this->v_hijos as $claseHija => $val) unset($_SESSION[$this->str_aplicacion][$claseHija]); } $actionForward = $actionMapping->get('correcto'); break; case 'cancelarEdicion': unset($this->obj_ultimaEdicion); //No queremos perder la última consulta $this->obj_ultimaConsulta = $_SESSION[$this->str_aplicacion][$this->str_claseActual]->obj_ultimaConsulta; $actionForward = $actionMapping->get('correcto'); break; default: $actionForward = $this->comportamientosParticulares($actionMapping, $str_accion, $actionForm); break; }//FIN switch $this->limpiarInstancia(); $_SESSION[$this->str_aplicacion][$this->str_claseActual]= $this; return $actionForward; }// Fin de perform function comportamientosParticulares($actionMapping, $str_accion, $actionForm) { //función abstracta (o virtual) que sobreescribe el hijo. die("Error: La acción $str_accion no se reconoce."); } /******************************FUNCIONES DE LAS ACCIONES******************************/ function preNuevo(){ return 1; } function postNuevo(){ return 0; } //Funcion nuevo function nuevo($actionMapping){ $valido = $this->preNuevo(); if(!$valido) { $actionForward = $actionMapping->get('incorrecto'); return $actionForward; } //para no perder el valor de la ultima consulta realizada $this->obj_ultimaConsulta = $_SESSION[$this->str_aplicacion][$this->str_claseActual]->obj_ultimaConsulta; //Para vaciar la última edicion -> no permitimos modificar e insertar en la misma ficha unset($this->obj_ultimaEdicion); $actionForward = $actionMapping->get('correcto'); $this->postNuevo(); return $actionForward; } //Función encargada de realizar las consultas function buscar($actionMapping = ""){ /*Recogida de los datos de phrame*/ if(!(isset($this->comunica))) $this->comunica = new IgepComunicacion($this->matching); $m_datos = $this->comunica->dameDatos("buscar"); //Componemos la WHERE de la consulta. if (isset($m_datos)) { $ver_todo=0; $str_where = ""; foreach($m_datos as $v_datos) { $str_where = $this->construirWhere($v_datos,""); }//Fin de foreach } else { //Cuando el usuario no ha puesto condición de busqueda quiere ver toda la tabla. $ver_todo=1; } if (isset($str_where)){ if (isset($this->str_where)) $str_where = " WHERE ".$this->str_where." AND "."(".$str_where.")"; else $str_where = " WHERE ".$str_where; } else { if (isset($this->str_where)) $str_where = " WHERE ".$this->str_where; } if (isset($this->str_orderBy)) $orden = " ORDER BY ".$this->str_orderBy; $res = $this->v_tablas[0]->consultar($this->str_select.$str_where.$orden); //Guardamos los datos q hemos obtenido de la consulta //Tratamiento de listas if (isset($this->v_listas)) $this->obj_ultimaConsulta =$this->generarListas($res); else $this->obj_ultimaConsulta = $res; $error = DB::isError($res); if ((!$error)||($ver_todo==1)) { if (is_object($actionMapping)) $actionForward = $actionMapping->get('correcto'); } else { if (is_object($actionMapping)) $actionForward = $actionMapping->get('incorrecto'); $this->obj_mensaje = new IgepMensaje(); $this->obj_mensaje->setMensaje("IGEP-10"); } return $actionForward; }// Fin de buscar function recargar($actionMapping){ /*Esta función realiza la recarga desde el padre de todos sus hijos*/ //Capturamos los datos de la fila Seleccionada $this->comunica = new IgepComunicacion($this->matching); $this->comunica->construirArraySeleccionar(); /*Recogida de los datos de phrame para montar el where de la consulta con los datos del padre*/ $m_datosPadre = $this->comunica->dameDatos("editar"); //buscamos los datos if (!empty($m_datosPadre)){ //Para cada uno de los detalles foreach($this->v_hijos as $nombreClaseHija => $correspondenciaClaseHija){ //Creamos las instancias de la clase hija $obj_claseHija = new $nombreClaseHija; foreach ($correspondenciaClaseHija as $padre => $hijo){ //creamos el array de datos que pasamos a la Where de la consulta. $this->int_filaActual = $this->comunica->dameFilaActual(); $tablapadre = $this->matching[$padre]["tabla"]; $campopadre = $this->matching[$padre]["campo"]; $filapadre = array_keys($m_datosPadre); $campoConsultaPadre= $tablapadre.".".$campopadre; $tablahijo = $obj_claseHija->matching[$hijo]["tabla"]; $campohijo = $obj_claseHija->matching[$hijo]["campo"]; $campoConsultaHijo= $tablahijo.".".$campohijo; $v_datos[$campoConsultaHijo] = $m_datosPadre[$filapadre[0]][$campoConsultaPadre]; } //Componemos la WHERE de la consulta. $str_where = $this->construirWhere($v_datos,$str_where); //Cuando no hay datos para el where dara error if (isset($str_where)){ if (isset($obj_claseHija->str_where)) $str_where = " WHERE ".$obj_claseHija->str_where." AND "."(".$str_where.")"; else $str_where = " WHERE ".$str_where; } else { if (isset($obj_claseHija->str_where)) $str_where = " WHERE ".$obj_claseHija->str_where; } //dejo el ordeby de momento if (isset($obj_claseHija->str_orderBy)) $orden = " ORDER BY ".$obj_claseHija->str_orderBy; $res = $this->v_tablas[0]->consultar($obj_claseHija->str_select.$str_where.$orden); //Guardamos los datos //Tratamiento para las listas if (isset($obj_claseHija->v_listas)) $obj_claseHija->obj_ultimaConsulta =$obj_claseHija->generarListas($res); else $obj_claseHija->obj_ultimaConsulta = $res; $_SESSION[$this->str_aplicacion][$nombreClaseHija]->obj_ultimaConsulta = $obj_claseHija->obj_ultimaConsulta; }//Fin del Foreach }//Fin del If //Guardamos el resultado de la última consulta del padre para que no se pierda $this->obj_ultimaConsulta = $_SESSION[$this->str_aplicacion][$this->str_claseActual]->obj_ultimaConsulta; $actionForward = $actionMapping->get('correcto'); return $actionForward; } function recargarDesdeHijo(){ /*Como su nombre indica esta función se ejecuta cuando se ha realizado una operación sobre un detalle. Entonces este lanza esta función para realizar la busqueda con los valores del padre.*/ //Cogemos la referencia del padre de la Sesion $obj_padre = & $_SESSION[$this->str_aplicacion][$this->str_nombrePadre]; if (isset($obj_padre)){ $m_datosPadre = $obj_padre->obj_ultimaConsulta; $this->int_filaActual = $_SESSION[$this->str_aplicacion][$this->str_claseActual]->int_filaActual; foreach ($obj_padre->v_hijos[$this->str_claseActual] as $padre => $hijo){ //creamos el array de datos que pasamos a la Where de la consulta. $filapadre = $obj_padre->int_filaActual; $tablahijo = $this->matching[$hijo]["tabla"]; $campohijo = $this->matching[$hijo]["campo"]; $campoConsultaHijo= $tablahijo.".".$campohijo; $v_datos[$campoConsultaHijo] = $m_datosPadre[$filapadre][$padre]; } //Componemos la WHERE de la consulta. $str_where = $this->construirWhere($v_datos,$str_where); //Cuando no hay datos para el where dara error //********REVISARRRRRRRRRRRRR*/ if (isset($str_where)){ if (isset($this->str_where)) $str_where = " WHERE ".$this->str_where." AND "."(".$str_where.")"; else $str_where = " WHERE ".$str_where; } else { if (isset($this->str_where)) $str_where = " WHERE ".$this->str_where; } //dejo el ordeby de momento if (isset($this->str_orderBy)) $orden = " ORDER BY ".$this->str_orderBy; $res = $this->v_tablas[0]->consultar($this->str_select.$str_where.$orden); //Guardamos los datos //Tratamiento para las listas if (isset($this->v_listas)) $this->obj_ultimaConsulta =$this->generarListas($res); else $this->obj_ultimaConsulta = $res; if (count($this->obj_ultimaConsulta)>0) return 1; else return -1; } //Fin del if } function preInsertar() { //función abstracta (o virtual) que sobreescribe el hijo. //retorna 1 si es válido. 0 si es no válido. return 1; } function postInsertar(){ //función abstracta (o virtual) que sobreescribe el hijo. return 0; } //Función encargada de realizar los INSERTs function insertar($actionMapping){ /*Comprobamos si hay datos para operar*/ if($this->comunica->hayDatos("insertar") == 0) return $actionMapping->get('correcto'); /*Validaciones de los datos*/ $valido = $this->preInsertar(); if(!$valido) { $actionForward = $actionMapping->get('incorrecto'); return $actionForward; } /*Empezamos la transacción*/ $this->obj_conexion->empezarTransaccion(); foreach($this->v_tablas as $tabla) { $m_datos = $this->comunica->dameDatos("insertar",$tabla->getTabla()); $tabla->insertar($m_datos); } //Realizamos la operación de Post-Inserción. /*Comprobación de errores*/ $errores = $this->obj_errorNegocio->hayError(); if($errores) { $this->obj_mensaje = new IgepMensaje(); $this->obj_mensaje->setMensaje($this->obj_errorNegocio->getError()); $actionForward = $actionMapping->get('error'); $this->obj_errorNegocio->limpiarError(); } else $actionForward = $actionMapping->get('correcto'); $this->obj_conexion->acabarTransaccion($errores); $this->postInsertar(); return $actionForward; }// Fin de insertar function preModificar() { //retorna 1 si es válido. 0 si es no válido. //función abstracta (o virtual) que sobreescribe el hijo. return 1; } function postModificar() { //función abstracta (o virtual) que sobreescribe el hijo. return 0; } //Función encargada de realizar las UPDATEs function modificar($actionMapping){ /*Comprobamos si hay datos para operar*/ if($this->comunica->hayDatos("modificar") == 0) return $actionMapping->get('correcto'); /*Validaciones de los datos*/ $valido = $this->preModificar(); if(!$valido) { $actionForward = $actionMapping->get('incorrecto'); return $actionForward; } /*Empezamos transacción*/ $this->obj_conexion->empezarTransaccion(); foreach($this->v_tablas as $tabla) { $m_datos = $this->comunica->dameDatos("modificar",$tabla->getTabla()); //Ojo: Cuando trabajemos sobre varias tablas esto va a palmar $m_datosant = $this->comunica->dameDatosAntiguos($tabla->getTabla()); foreach($m_datos as $indice => $v_datos) { $tabla->actualizar($v_datos, $m_datosant[$indice]); } } $this->postModificar(); /*Comprobación de errores*/ $errores = $this->obj_errorNegocio->hayError(); if($errores) { $this->obj_mensaje = new IgepMensaje(); $this->obj_mensaje->setMensaje($this->obj_errorNegocio->getError()); $actionForward = $actionMapping->get('error'); $this->obj_errorNegocio->limpiarError(); } else $actionForward = $actionMapping->get('correcto'); $this->obj_conexion->acabarTransaccion($errores); return $actionForward; }//Fin de modificar //Función encargada de realizar la EDICIÓN!!!! function editar($actionMapping){ /*Recogida de los datos de phrame*/ $m_datos = $this->comunica->dameDatos("editar"); if (isset($m_datos)) { foreach($m_datos as $v_datos) { $str_where = $this->construirWhere($v_datos,$str_where); } } //********REVISARRRRRRRRRRRRR*/ if (isset($str_where)){ if (isset($this->str_whereEditar)) $str_where = " WHERE ".$this->str_whereEditar." AND "."(".$str_where.")"; else $str_where = " WHERE ".$str_where; } else { if (isset($this->str_whereEditar)) $str_where = " WHERE ".$this->str_whereEditar; } $res = $this->v_tablas[0]->consultar($this->str_selectEditar.$str_where." ORDER BY ".$this->str_orderByEditar); //Guardamos los resultados. //Tratamiento para las listas. Hay que modificar el DB:Result si tiene listas desplegables. if (isset($this->v_listas)) $this->obj_ultimaEdicion = $this->generarListas($res); else $this->obj_ultimaEdicion = $res; $this->obj_ultimaConsulta = $_SESSION[$this->str_aplicacion][$this->str_claseActual]->obj_ultimaConsulta; if (count($this->obj_ultimaEdicion)>0) $actionForward = $actionMapping->get('correcto'); else $actionForward = $actionMapping->get('incorrecto'); return $actionForward; }//Fin de editar function preBorrar() { //retorna 1 si es válido. 0 si es no válido. //función abstracta (o virtual) que sobreescribe el hijo. return 1; } function postBorrar(){ //función abstracta (o virtual) que sobreescribe el hijo. return 0; } //Función encargada de realizar los DELETEs function borrar($actionMapping){ /*Comprobamos si hay datos para operar*/ if($this->comunica->hayDatos("borrar") == 0) return $actionMapping->get('correcto'); /*Validaciones de los datos*/ $valido = $this->preBorrar(); if(!$valido) { $actionForward = $actionMapping->get('incorrecto'); return $actionForward; } $this->obj_conexion->empezarTransaccion(); foreach($this->v_tablas as $tabla) { $m_datos = $this->comunica->dameDatos("borrar",$tabla->getTabla()); foreach ($m_datos as $v_datos) $tabla->borrar($v_datos); } $this->postBorrar(); //Comprobación de errores $errores = $this->obj_errorNegocio->hayError(); if($errores) { $this->obj_mensaje = new IgepMensaje(); $this->obj_mensaje->setMensaje($this->obj_errorNegocio->getError()); $actionForward = $actionMapping->get('error'); $this->obj_errorNegocio->limpiarError(); } else $actionForward = $actionMapping->get('correcto'); $this->obj_conexion->acabarTransaccion($errores); return $actionForward; }//Fin de borrar function calcularCamposDependientes($actionMapping){ $datosCampoDependiente = $this->comunica->dameDatos("camposDependientes"); $campoOrigen = explode("___",$datosCampoDependiente["origen"]); if (isset($_SESSION[$this->str_aplicacion][$datosCampoDependiente["claseManejadora"]])){ //Generamos la SELECT $datosConsultaDependiente = $_SESSION[$this->str_aplicacion][$datosCampoDependiente["claseManejadora"]]->v_listas[$datosCampoDependiente["destino"]]; $consultaRegistro = $datosConsultaDependiente["consulta"]; $consultaRegistro.= " WHERE ".$datosConsultaDependiente["dependencia"]["campoConsulta"]." = '".$datosCampoDependiente["valor"]."' ORDER BY descripcion;"; //Hacemos la nueva conexión y lanzamos la consulta. $dsn = $_SESSION[$this->str_aplicacion][$datosCampoDependiente["claseManejadora"]]->obj_conexion->getDsn(); $nuevaConexion = new IgepConexion($dsn); $nuevaPersistencia = new IgepPersistencia($nuevaConexion->getConexion(),""); $resultado = $nuevaPersistencia->consultar($consultaRegistro); } //Creamos el insertar opcion. $opciones = ""; foreach($resultado as $fila){ //Para cada una de las filas $opciones.="insertar_opcion(\"".$fila["valor"]."\",\"".$fila["descripcion"]."\");\n"; } $_SESSION[$this->str_aplicacion]["camposDependientes"]["formulario"] = $datosCampoDependiente["formulario"]; $_SESSION[$this->str_aplicacion]["camposDependientes"]["destino"] = $datosCampoDependiente["destino"]; $_SESSION[$this->str_aplicacion]["camposDependientes"]["origen"] = $datosCampoDependiente["origen"]; $_SESSION[$this->str_aplicacion]["camposDependientes"]["opciones"] = $opciones; $actionForward = $actionMapping->get('correcto'); return $actionForward; } function abrirVentanaSeleccion($actionMapping){ //Esta función se encargará de pasar los parámetros necesarios a la ventana de selección //Vaciamos la anterior búsqueda unset($_SESSION[$this->str_aplicacion]["ventanaSeleccion"]); $datosVentanaSeleccion = $this->comunica->dameDatos("abrirVentanaSeleccion"); if (isset($_SESSION[$this->str_aplicacion][$datosVentanaSeleccion["claseManejadora"]])){ //Creamos la dependencia si existe $dependencia = $_SESSION[$this->str_aplicacion][$datosVentanaSeleccion["claseManejadora"]]->v_ventanasSeleccion[$datosVentanaSeleccion["nomCampo"]]["dependencia"]; $str_dependencia = ""; if(isset($dependencia)) { foreach($dependencia as $campoTpl => $campoBD) { $nombreCampo = str_replace($datosVentanaSeleccion["nomCampo"],$campoTpl,$datosVentanaSeleccion["nombreCompleto"]); if ($str_dependencia !="") $str_dependencia.= " AND "; $str_dependencia.= $campoBD."= '".$_REQUEST[$nombreCampo]."' "; } $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["dependencia"] = $str_dependencia; } //Guardamos en la SESSION los datos $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["nomForm"] = $datosVentanaSeleccion["nomForm"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["filaActual"] = $datosVentanaSeleccion["filaActual"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["panelActua"] = $datosVentanaSeleccion["panelActua"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["nomCampo"] = $datosVentanaSeleccion["nomCampo"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["claseManejadora"] = $datosVentanaSeleccion["claseManejadora"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["actionOrigen"] = $datosVentanaSeleccion["actionOrigen"]; } $actionForward = $actionMapping->get('correcto'); return $actionForward; } function buscarVentanaSeleccion($actionMapping){ $datosVentanaSeleccion = $this->comunica->dameDatos("buscarVentanaSeleccion"); if (isset($_SESSION[$this->str_aplicacion][$datosVentanaSeleccion["claseManejadora"]])){ //Creamos la Select con los parámetros correspondientes. $defVentanaSeleccion = $_SESSION[$this->str_aplicacion][$datosVentanaSeleccion["claseManejadora"]]->v_ventanasSeleccion[$datosVentanaSeleccion["nomCampo"]]; //Creamos la consulta //Construimos la parte de la búsqueda. $whereBusqueda = ""; foreach ($defVentanaSeleccion["camposBusqueda"] as $campo){ if ($whereBusqueda != "") $whereBusqueda.= " OR "; $whereBusqueda.=" $campo like '%".$datosVentanaSeleccion["valor"]."%' "; } if($datosVentanaSeleccion["dependencia"]!="") $str_dependencia = " AND ".$datosVentanaSeleccion["dependencia"]; $consulta = $defVentanaSeleccion["consulta"]." WHERE ($whereBusqueda)".$str_dependencia; //Hacemos la nueva conexión y lanzamos la consulta. $dsn = $_SESSION[$this->str_aplicacion][$datosVentanaSeleccion["claseManejadora"]]->obj_conexion->getDsn(); $nuevaConexion = new IgepConexion($dsn); $nuevaPersistencia = new IgepPersistencia($nuevaConexion->getConexion(),""); $resultado = $nuevaPersistencia->consultar($consulta); if(count($resultado)==0){ $obj_mensaje = new IgepMensaje(); $obj_mensaje->setMensaje("IGEP-10"); $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["mensaje"] = $obj_mensaje; } //Devolvemos valores $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["nomForm"] = $datosVentanaSeleccion["nomForm"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["filaActual"] = $datosVentanaSeleccion["filaActual"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["panelActua"] = $datosVentanaSeleccion["panelActua"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["nomCampo"] = $datosVentanaSeleccion["nomCampo"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["resultado"] = $resultado; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["camposRellenables"] = $defVentanaSeleccion["camposRellenables"]; $_SESSION[$this->str_aplicacion]["ventanaSeleccion"]["actionOrigen"] = $datosVentanaSeleccion["actionOrigen"]; } $actionForward = $actionMapping->get('correcto'); return $actionForward; } /********************************************FUNCIONES AUXILIARES*******************************************/ function generarListas($res){ /* Dado un DB:Result esta función añade los arrays correspondientes a cada uno de los campos resultado. Esta función se gasta en todas las funciones de Negocio que realicen consultas a la Base de Datos. Concretamente buscar, editar y recargar. El array que se añade a cada uno de los campos listas del DB:Result tienen la siguiente estructura: array("seleccionado" => '46' //valor actual del campo "lista" => array( //Lista de valores array("valor"='46', "descripcion"='Valencia'), array("valor"='12', "descripcion"='Castellón'), array("valor"='03', "descripcion"='Alicante'), ... ) ) */ if (count($res)>0){ foreach ($this->v_listas as $campo => $lista ){ //Comprobamos que el campo esté en el DB:Result que vamos a modificar if(array_key_exists($campo,$res[0])){ //if (isset($res[0][$campo])){ //Comprobamos si es una lista fija o viene de una consulta if(is_array($lista["consulta"])) $res2 = $lista["consulta"]; else $res2 = $this->v_tablas[0]->consultar($lista["consulta"]." ORDER BY descripcion"); //Realizamos la actualización del DB:Result para cada una sus filas foreach(array_keys($res) as $indice){ //Si hay dependencia hay que ejecutar la SELECT para cada fila. if (isset($lista["dependencia"])){ //Tenemos que ejecutar la consulta para cada campo con la Where que corresponda $consultaRegistro = $lista["consulta"]; $campoTpl = $lista["dependencia"]["campoTpl"]; //No sabemos si viene de una lista o de un campo. if(is_array($res[$indice][$campoTpl])) $valorDependencia = $res[$indice][$campoTpl]["seleccionado"]; else $valorDependencia = $res[$indice][$campoTpl]; //Ponemos en la consulta las comillas.Sin comillas no funciona. Tenemos que probarlo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $consultaRegistro.= " WHERE ".$lista["dependencia"]["campoConsulta"]." = '".$valorDependencia."' ORDER BY descripcion"; $res2 = $this->v_tablas[0]->consultar($consultaRegistro); }//Fin de if de dependencia //Tratamiento: cogemos el valor y lo marcamos. $lista_resultante = array("seleccionado"=>$res[$indice][$campo],"lista"=>$res2); unset($res[$indice][$campo]); $res[$indice][$campo] = $lista_resultante; }//fin del foreach }//fin del if }//fin de foreach }//fin del if de count($res)>0 return $res; } //Fin de generarListas function addMatching($campoTpl,$campoBD,$tablaBD){ /*Función que enmascara la creación del array de matching*/ //Comprobamos que la tabla está en nuestra lista de tablas if(!in_array($tablaBD,$this->v_nombreTablas)) die("Error de Programación: Se ha definido un Matchig que contiene la tabla $tablaBD de la BD. Esta tabla no está en la lista de tablas de la clase. Compruebe que la definición de las SELECT está antes que el matching"); //Comprobamos que exista una referencia a ese campo en una SELECT $cond1 = strpos($this->str_select,$campoTpl); $cond2 = strpos($this->str_selectEditar,$campoTpl); if (($cond1===false) and ($cond2===false)) die("Error de Programación: Ha incluido el campo $campoTpl que no tiene ninguna referencia en las SELECT de la clase. Compruebe que la definición de tablas está antes que el matching"); //lo pasamos a minúsculas para evitar el problema del PEAR //!!!!!!!!!!!!!!!!!!!!!!$campoTpl = strtolower($campoTpl); $this->matching[$campoTpl] = array("campo"=>$campoBD,"tabla"=>$tablaBD); } function construirWhere($v_datos,$str_where){ if (isset($v_datos)){ if($str_where!="") //$str_where.=") OR ("; $str_where.=" OR ("; else $str_where=" ("; $str_condicion=""; foreach($v_datos as $prop => $val) { if ($str_condicion!="") { $str_condicion.=" AND "; } $str_condicion.=$prop; if (gettype($val)=="string") { if($val!="") $str_condicion.="='".$val."'"; else $str_condicion.=" is null"; } else { if($val!="") $str_condicion.="=".$val; else $str_condicion.=" is null"; } }//FIN foreach $str_where.=$str_condicion; $str_where.=")"; } return $str_where; } //Fin de construirWhere function limpiarInstancia(){ //Esta función se encargará de liberar de carga la instancia de la clase antes de ponerla en la SESSION unset($this->obj_conexion->obj_conexion); unset($this->obj_conexion->obj_errorConexion); unset($this->v_tablas); unset($this->obj_errorNegocio); unset($this->comunica); }//Fin de limpiarClase }//Fin clase IgepNegocio ?>