* insertar * borrar * actualizar * seleccionar * borrar * visibles * * * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License v.2 * @version $Id: IgepComunicacion.php,v 1.156 2011-02-21 09:45:03 afelixf Exp $ * @author David Pascual * @author Keka Bermejo * @author Vero Navarro * @author Raquel Borjabad * @author Toni Felix * * @package gvHidra */ class IgepComunicacion { /** * Información del panel que llega a través del JSON. * * @var array */ // REDMINE #23228 public $_infoPanel; /** * Fila actual. * * @var integer */ public $int_filaSeleccionada; /** * Matriz de datos relativos a los campos Dependientes o Calculados. * * @var array */ public $m_datosCamposDependientes; /** * Matriz de datos relativos a la ventana de Seleccion. * * @var array */ public $m_datosVentanaSeleccion; /** * Matriz de datos relativos a la ventana de Live Search. * * @var array */ public $m_datosVentanaLiveSearch; /** * 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 */ public $m_datos_visiblesTpl; /** * Array de definición de los campos que aparecen en un panel * * @var array */ public $descCampoPanel; /** * Array que contiene un conjunto de punteros que recrean los datos insertados en la tpl * * @var array */ public $m_datos_selectedTreeTpl; /** * Array que contiene un conjunto de punteros que recrean los datos insertados en la tpl * * @var array */ public $m_datos_insertarTpl; /** * Array que contiene un conjunto de punteros que recrean los datos modificados en la tpl * * @var array */ public $m_datos_actualizarTpl; /** * Array que contiene un conjunto de punteros que recrean los datos borrados en la tpl * * @var array */ public $m_datos_borrarTpl; /** * Array que contiene un conjunto de punteros que recrean los datos external, tanto los que puedan venir en $_REQUEST como los externos en un panel tabular de la tpl * * @var array */ public $m_datos_externalTpl; /** * Array que contiene un conjunto de punteros que recrean los datos a ser editados en la tpl * * @var array */ public $m_datos_seleccionarTpl; /** * Array que contiene un conjunto de punteros que recrean los datos a ser editados en la tpl * * @var array */ public $m_datos_postConsultarTpl; /** * Array que contiene un conjunto de punteros que recrean los datos seleccionados del padre * en el método recargar. Se gasta para almacenar la tupla seleccionada por el padre para que * el programador tenga acceso a esta información. * * @var array */ public $m_datos_seleccionarPadreTpl; /** * Array que contiene los datos del panel de busqueda en el formato TPL * * @var array */ public $m_datos_buscarTpl; /** * Array que contiene los datos de los ficheros que se han subido por Upload * * @var array */ public $m_datosFicherosUpLoad; /** * Array * * @var array */ public $m_datos_iniciarVentanaTpl; // REDMINE #23348 public $patron; public $int_rowSelectedLis; public $int_pagActive; /** * Objeto que contiene los destinos de posibles de la acción. * * @var array */ private $_actionMapping; /** * variable para acumular los errores de transformacion en data2Arrays y leerlos en checkDataTypes */ private $_transformErrors; /** * variable para saber si desde el formulario quieren realizar la validación de datos */ private $_checkForm = 1; /** * variable privada para identificar el panel gvhidra que está operando * fil Filtro * lis Listado * edi Ficha */ private $_panel = null; /** * variable privada para identificar el estado del panel gvhidra que está operando * R lectura * W escritura * I inserción */ private $_statePanel = null; private $_requestDataJSON = null; /** * Constructor. Recibe como parámetro el matching con el que trabajará el objeto * * @access public * @param array $descCampoPanel */ public function __construct( $descCampoPanel = '' ) { $this->descCampoPanel = $descCampoPanel; $this->m_auxIndices_insertar = array (); $this->m_auxIndices_borrar = array (); $this->m_auxIndices_actualizar = array (); $this->m_auxIndices_seleccionar = array (); $this->_panel = (isset($_REQUEST['gvhpanel']) ? $_REQUEST['gvhpanel'] : null); $this->_requestDataJSON = json_decode(@$_REQUEST['data'],true); // VERO // REDMINE #23228 $this->_infoPanel = json_decode(@$_REQUEST['panel'],true); // VERO if (isset($_REQUEST['panel'])) { $this->_infoPanel = json_decode(@$_REQUEST['panel'],true); // VERO } else { if (isset($this->_requestDataJSON['panel'])) { $this->_infoPanel = $this->_requestDataJSON['panel']; } } $this->_statePanel = (isset($this->_requestDataJSON['panel']['state']) ? $this->_requestDataJSON['panel']['state'] : null); } /**************************************FUNCIONES DE CONSTRUCCIÓN**************************************/ /** * Recupera los datos de pantalla y los almacena en estructuras conocidas por el Framework. * Esto permite un acceso coherente a los datos por parte del programador y del propio sistema. * * @access public * @return void */ public function data2Arrays() { //Checkform if(isset($_REQUEST['checkForm'])) { $this->_checkForm = $_REQUEST['checkForm']; unset($_REQUEST['checkForm']); } if (isset($_REQUEST['gvhpanel'])) { $this->_panel = $_REQUEST['gvhpanel']; } $this->data2ArraysJson(); } private function fileUploadConvert($obj) { $arr = array(); $this->transform_User2FW($obj->name,TIPO_CARACTER); $arr['name'] = $obj->name; $this->transform_User2FW($obj->type,TIPO_CARACTER); $arr['type'] = $obj->type; $this->transform_User2FW($obj->tmp_name,TIPO_CARACTER); $arr['tmp_name'] = $obj->tmp_name; $arr['error'] = $obj->error; $arr['size'] = $obj->size; return $arr; } private function data2ArraysJson() { /*La estructura de los arrays es la siguiente: [data] => [fila] => [estado]=> valor, [campos]=> valor */ //Como la forma de seleccionar cambia de un Ficha a un Tabla, tenemos q comprobar de donde viene //Para que el indice de insertar parta de 0 $indexInsertar = 0; $filaActual = 0; if(isset($_REQUEST['claseManejadora'])) { //$claseManejadora = $_REQUEST['claseManejadora']; $this->_infoPanel['claseM'] = $_REQUEST['claseManejadora']; //Si la variable pagActual tiene valor entonces se trata de un Ficha. if($this->_panel=='edi') { if (isset($this->_requestDataJSON['panel'])) { // REDMINE #23228 $this->_infoPanel = $this->_requestDataJSON['panel']; $filaActual = $this->_requestDataJSON['panel']['pagActive']; } } // REDMINE #23348 $this->patron = $this->_requestDataJSON['panel']['patron']; if ($this->patron == 'TR') { $this->int_rowSelectedLis = $this->_requestDataJSON['panel']['rowSelectedLis']; } } $this->_transformErrors = array(); $errs_tr = null; if(isset($this->_requestDataJSON['data'])) { foreach ($this->_requestDataJSON['data'] as $index => $row) { if (isset($row['gvhJS_state'])) { switch($row['gvhJS_state']) { case 'insertada': if($row['gvhJS_selected'] == 'selected') { // VERO if (is_array($row['gvhJS_fields'])) { foreach($row['gvhJS_fields'] as $name => $value) { if(isset($value['CWPlugin']) && ($value['CWPlugin']=='cwupload' || $value['CWPlugin']=='cwuploadmanager')) { if(empty($value['files'])) { $this->m_datosFicherosUpLoad[$index][$name] = array('error' =>array('0'=>4)); } else { $val = json_decode($value['files']); $this->m_datosFicherosUpLoad[$index][$name] = $this->fileUploadConvert($val->file); $this->m_datos_insertarTpl[$index][$name] = $this->fileUploadConvert($val->file); } } else { $val = ($value['value']); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); if ($val != '') { //m_datos_insertar $this->m_datos_insertarTpl[$index][$name] = $val; //Vamos acumularlos como datos Visibles $this->m_datos_visiblesTpl[$index][$name] = $val; } else { //Para controlar el tema de los obligatorios en estos casos lo introducimos para que salte el error if(@$this->descCampoPanel[$name]['required']) $this->m_datos_insertarTpl[$index][$name] = $val; } } if (isset($value['CWPlugin']) && ($value['CWPlugin'] == 'cwarbol')) { $this->m_datos_selectedTreeTpl[$index][$name] = IgepSmarty::utf8ize($value['nodeSelected']); } } } array_push($this->m_auxIndices_insertar, $index); //Para almacenar la fila actual // REVIEW: VERO, almacenar la fila actual sólo si es panel tabular??? En panel ficha dejar a 0??? // REDMINE #23378 if($this->_panel == 'lis') { $this->int_filaActual = $index; } } $indexInsertar++; break; case 'modificada': if (is_array($row['gvhJS_fields'])) { foreach($row['gvhJS_fields'] as $name => $value) { if(isset($value['CWPlugin']) && ($value['CWPlugin']=='cwupload'|| $value['CWPlugin']=='cwuploadmanager')) { if(empty($value['files'])) { $this->m_datosFicherosUpLoad[$index][$name] = array('error' =>array('0'=>4)); } else { $val = json_decode($value['files']); $this->m_datosFicherosUpLoad[$index][$name] = $this->fileUploadConvert($val->file); } } else { $val = ($value['value']); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); $this->m_datos_actualizarTpl[$index][$name] = $val; $valueAnterior = ($value['valueOld']); $this->transform_User2FW($valueAnterior,@$this->descCampoPanel[$name]['tipo']); $this->m_datos_antiguosTpl[$index][$name] = $valueAnterior; //Vamos acumularlos como datos Visibles y Seleccionados $this->m_datos_visiblesTpl[$index][$name] = $val; if($row['gvhJS_selected'] == 'selected') { $this->m_datos_seleccionarTpl[$index][$name] = $val; array_push($this->m_auxIndices_seleccionar, $index); } } if (isset($value['CWPlugin']) && ($value['CWPlugin'] == 'cwarbol')) { $this->m_datos_selectedTreeTpl[$index][$name] = IgepSmarty::utf8ize($value['nodeSelected']); } } $errs_tr = ConfigFramework::getTransformErrors(); array_push($this->m_auxIndices_actualizar, $index); if($row['gvhJS_selected'] == 'selected') { $this->int_filaActual = $index; } else { $this->int_filaActual = $filaActual; } } break; case 'borrada': if (is_array($row['gvhJS_fields'])) { foreach($row['gvhJS_fields'] as $name => $value) { $val = ($value['value']); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); $this->m_datos_borrarTpl[$index][$name] = $val; $valueAnterior = ($value['valueOld']); $this->transform_User2FW($valueAnterior,@$this->descCampoPanel[$name]['tipo']); $this->m_datos_antiguosTpl[$index][$name] = $valueAnterior; //Vamos acumularlos como datos Visibles y Seleccionados $this->m_datos_visiblesTpl[$index][$name] = $val; if($row['gvhJS_selected'] == 'selected') { $this->m_datos_seleccionarTpl[$index][$name] = $val; array_push($this->m_auxIndices_seleccionar, $index); } if (isset($value['CWPlugin']) && ($value['CWPlugin'] == 'cwarbol')) { $this->m_datos_selectedTreeTpl[$index][$name] = IgepSmarty::utf8ize($value['nodeSelected']); } } $errs_tr = ConfigFramework::getTransformErrors(); array_push($this->m_auxIndices_borrar, $index); if($row['gvhJS_selected'] == 'selected') { $this->int_filaActual = 0; } else { $this->int_filaActual = $filaActual; } } break; case 'nada': if (is_array($row['gvhJS_fields'])) { foreach($row['gvhJS_fields'] as $name => $value) { $val = ($value['value']); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); //Vamos acumularlos como datos Visibles $this->m_datos_visiblesTpl[$index][$name] = $val; if($row['gvhJS_selected'] == 'selected') { $this->m_datos_seleccionarTpl[$index][$name] = $val; array_push($this->m_auxIndices_seleccionar, $index); } if (isset($value['CWPlugin']) && ($value['CWPlugin'] == 'cwarbol')) { $this->m_datos_selectedTreeTpl[$index][$name] = IgepSmarty::utf8ize($value['nodeSelected']); } } } break; case 'buscar': if (is_array($row['gvhJS_fields'])) { foreach($row['gvhJS_fields'] as $name => $value) { $val = ($value['value']); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); //Vamos acumularlos como datos Buscar $this->m_datos_buscarTpl[0][$name] = $val; //Vamos acumularlos como datos Visibles $this->m_datos_visiblesTpl[0][$name] = $val; if (isset($value['CWPlugin']) && ($value['CWPlugin'] == 'cwarbol')) { $this->m_datos_selectedTreeTpl[0][$name] = IgepSmarty::utf8ize($value['nodeSelected']); } elseif(isset($value['CWPlugin']) && ($value['CWPlugin']=='cwupload'|| $value['CWPlugin']=='cwuploadmanager')) { if(empty($value['files'])) { $this->m_datosFicherosUpLoad[$index][$name] = array('error' =>array('0'=>4)); } else { $val = json_decode($value['files']); $this->m_datosFicherosUpLoad[$index][$name] = $this->fileUploadConvert($val->file); } } } } break; default: break; } } // si no se ha llamado a getTransformErrors (en cam), lo hago ahora if (isset($errs_tr) && (is_null($errs_tr))) { $errs_tr = ConfigFramework::getTransformErrors(); } if (isset($errs_tr) && !empty($errs_tr)) { $this->_transformErrors = array_merge($this->_transformErrors, $errs_tr); } } //fin del foreach //Externals if(isset($this->_requestDataJSON['external']) && is_array($this->_requestDataJSON['external'])) { //Añadimos los externals que me pasan los plugins foreach ($this->_requestDataJSON['external'] as $name => $value) { $val = ($value['value']); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); $this->m_datos_externalTpl[0][$name] = $val; } } //Añadimos los externals que me pasan los plugins $this->_limpiarRequest(); foreach ($_GET as $name => $value) { $this->transform_User2FW($value,TIPO_CARACTER); $this->m_datos_externalTpl[0][$name] = $value; } } $this->reset(); } //Fin de data2ArraysJSON /** * 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 */ public function construirArraySeleccionar() { //Checkform if(isset($_REQUEST['checkForm'])) { $this->_checkForm = $_REQUEST['checkForm']; unset($_REQUEST['checkForm']); } $this->construirArraySeleccionarJson(); } private function construirArraySeleccionarJson() { /*La estructura de los arrays es la siguiente: [data] => [fila] => [estado]=> valor, [campos]=> valor */ //Como la forma de seleccionar cambia de un Ficha a un Tabla, tenemos q comprobar de donde viene //if(isset($_REQUEST['claseManejadora'])) { // $claseManejadora = $_REQUEST['claseManejadora']; //} $this->_transformErrors = array(); // REDMINE #23348 if (isset($this->_requestDataJSON['panel']['patron'])) { $this->patron = $this->_requestDataJSON['panel']['patron']; if ($this->patron == 'TR') { if ($this->_panel == 'lis') { $this->int_rowSelectedLis = $this->_requestDataJSON['panel']['rowActive']; } else { $this->int_rowSelectedLis = $this->_requestDataJSON['panel']['rowSelectedLis']; } } } foreach ($this->_requestDataJSON['data'] as $index => $row) { if (is_array($row['gvhJS_fields'])) { foreach($row['gvhJS_fields'] as $name => $value) { if(isset($row['gvhJS_selected']) && ($row['gvhJS_selected'] == 'selected')) { $val = ($value['value']); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); $this->m_datos_seleccionarTpl[$index][$name] = $val; array_push($this->m_auxIndices_seleccionar, $index); $this->int_filaActual = $index; } } } // si no se ha llamado a getTransformErrors (en cam), lo hago ahora $errs_tr = ConfigFramework::getTransformErrors(); if (!empty($errs_tr)) { $this->_transformErrors = array_merge($this->_transformErrors, $errs_tr); } } //fin del foreach $this->reset(); } //Fin de construirArraySeleccionarJson /** * método privado que utilizamos para quitar del REQUEST las variables internas de IGEP * @access private */ public function _limpiarRequest() { unset ($_REQUEST['modActv']); unset ($_REQUEST['action']); unset ($_REQUEST[session_name()]); unset ($_REQUEST['claseManejadora']); unset ($_REQUEST['TreeMenuBranchStatus']); unset ($_REQUEST['checkForm']); unset ($_REQUEST['gvhpanel']); } public function _getPosicionRegistroPantalla($nombreCampoEnTpl) { //Hay que utilizar los explode porque un campo del panel Fil puede tener un _ en el nombre. $partesCampo = explode("___", $nombreCampoEnTpl); if (is_array($partesCampo) && (count($partesCampo) == 3)) { $subCampo = explode("_", $partesCampo[2]); $registro = $subCampo[1]; //En el caso de las listas multiples tenemos que eliminar el sufijo [] if(substr($registro,-2)=='[]') $registro = substr($registro,0,-2); } else { //Es un campo de filtro $registro = 0; } return ($registro); } public function construirArrayBuscar() { $this->construirArrayBuscarJson(); } public function construirArrayBuscarJson() { /*La estructura de los arrays es la siguiente: [data] => [fila] => [estado]=> valor, [campos]=> valor */ //Como la forma de seleccionar cambia de un Ficha a un Tabla, tenemos q comprobar de donde viene //if(isset($_REQUEST['claseManejadora'])) { // $claseManejadora = $_REQUEST['claseManejadora']; //} $this->_transformErrors = array(); if(is_array($_REQUEST) && (count($_REQUEST)>0)) { if (isset($_REQUEST['menuActv'])) { foreach ($_REQUEST as $prop => $val) { $this->transform_User2FW($val,TIPO_CARACTER); $this->m_datos_buscarTpl[0][$prop] = $val; } } if (isset($this->_requestDataJSON['data'][0]['gvhJS_fields']) && is_array($this->_requestDataJSON['data'][0]['gvhJS_fields'])) { foreach($this->_requestDataJSON['data'][0]['gvhJS_fields'] as $name => $value) { $val = IgepSmarty::utf8ize(($value['value'])); $this->transform_User2FW($val,@$this->descCampoPanel[$name]['tipo']); $errs_tr = ConfigFramework::getTransformErrors(); if (!empty($errs_tr)) { $this->_transformErrors = array_merge($this->_transformErrors, $errs_tr); } $this->m_datos_buscarTpl[0][$name] = $val; if (isset($value['CWPlugin']) && ($value['CWPlugin'] == 'cwarbol')) { $this->m_datos_selectedTreeTpl[0][$name] = IgepSmarty::utf8ize($value['nodeSelected']); } } } // REDMINE #23348 $this->patron = $this->_requestDataJSON['panel']['patron']; } $this->reset(); return 0; } /** * Carga los datos al iniciar la ventana. No tiene m_datos normal porque ningún campo puede tener matching */ public function construirArrayIniciarVentana() { //Limpiamos el REQUEST. $this->_limpiarRequest(); $this->m_datos_iniciarVentanaTpl = null; foreach ($_REQUEST as $prop => $val) { $this->transform_User2FW($val,TIPO_CARACTER); $this->m_datos_iniciarVentanaTpl[0][$prop] = $val; } return 0; } /** * Construye el array especial para los campos Dependientes. Esta función hace uso de los métodos proporcionados por phrame. * * @access private */ public function buildDataRefreshUI($actionForm) { $this->m_datosCamposDependientes['formulario'] = $actionForm->get('gvHfname'); $this->m_datosCamposDependientes['origen'] = $actionForm->get('gvHfrom'); $this->m_datosCamposDependientes['destino'] = $actionForm->get('gvHtarget'); $this->m_datosCamposDependientes['valor'] = $actionForm->get('gvHvalue'); $this->m_datosCamposDependientes['claseManejadora'] = $actionForm->get('gvHclass'); $this->m_datosCamposDependientes['estadoPanel'] = $actionForm->get('gvHpanelState'); $this->m_datosCamposDependientes['gvhPaginando'] = $actionForm->get('gvhPaginando'); //Calculamos la posicion del registro en la matriz. $posicionReal = null; //if (isset($_REQUEST['panel'])) if(isset($this->_requestDataJSON['panel'])) { $panel = $this->_requestDataJSON['panel']; if (!isset($panel['rowsPag']) || ($panel['rowsPag'] == -1)) { //es una ficha if( $this->m_datosCamposDependientes['estadoPanel'] == 'I' ) { //ins // $posicionReal = $this->_getPosicionRegistroPantalla($this->m_datosCamposDependientes['origen']); // Obtenemos la página de inserción ya que ya no se puede obtener descomponiendo el identificador del campo $posicionReal = $panel['pagInsercion']; } else { $posicionReal = $panel['pagActive']; } } else { //Es una tabla $position = $actionForm->get('gvhPosition'); if (($position != 'panel') && ($position != '')) { $regSelected = $this->_requestDataJSON['data']['gvhJS_selected']; $posicionRelativa = $regSelected[0]; } else { $posicionRelativa = $this->_getPosicionRegistroPantalla($this->m_datosCamposDependientes['origen']); } $posicionReal = ($panel['pagActive']*$panel['rowsPag']) + $posicionRelativa; } } $this->m_datosCamposDependientes['registroActivo'] = $posicionReal; unset ($_REQUEST['gvHfname']); unset ($_REQUEST['gvHfrom']); unset ($_REQUEST['gvHtarget']); unset ($_REQUEST['gvHvalue']); unset ($_REQUEST['gvHclass']); unset ($_REQUEST['gvHpanelState']); } public function construirArrayOrdenarTabla($actionForm) { $this->m_datosOrdenarTabla['claseManejadora'] = $actionForm->get('claseManejadora'); $this->m_datosOrdenarTabla['columna'] = $actionForm->get('orderField'); $this->m_datosOrdenarTabla['orden'] = $actionForm->get('orderTable'); $this->m_datosOrdenarTabla['idVentana'] = $actionForm->get('idVentana'); } /** * Método privado de igep que gastamos para construir los datos necesarios para abrir una ventana de Selección * * @access private */ public function construirArrayAbrirVentanaSeleccion($actionForm) { $this->m_datosVentanaSeleccion['claseManejadora'] = $actionForm->get('claseManejadora'); //Capturamos el nombre del campo $campo = $actionForm->get('nomCampo'); $this->m_datosVentanaSeleccion['nomCampo'] = $campo; $this->m_datosVentanaSeleccion['nomForm'] = $actionForm->get('nomForm'); //Calculamos el índice $this->m_datosVentanaSeleccion['filaActual'] = $actionForm->get('filaActual'); $this->m_datosVentanaSeleccion['panelActua'] = $actionForm->get('panelActua'); $this->m_datosVentanaSeleccion['actionOrigen'] = $actionForm->get('actionOrigen'); $this->m_datosVentanaSeleccion['modoPanelOrigen'] = $actionForm->get('modoPanelOrigen'); } /** * Método privado de igep que gastamos para construir los datos necesarios para buscar en una ventana de Selección * * @access private * @return integer */ public function construirArrayBuscarVentanaSeleccion($actionForm) { $this->m_datosVentanaSeleccion['nomForm'] = $actionForm->get('nomForm'); $this->m_datosVentanaSeleccion['nomCampo'] = $actionForm->get('nomCampo'); $this->m_datosVentanaSeleccion['camposBusqueda'] = $actionForm->get('camposBusqueda'); /* Redmine #23032 */ $campoBuscar = $this->_requestDataJSON['data'][0]['gvhJS_fields']['campoBuscar']['value']; $this->transform_User2FW($campoBuscar,TIPO_CARACTER); $this->m_datosVentanaSeleccion['valor'] = $campoBuscar; //$this->m_datosVentanaSeleccion['valor'] = $this->_requestDataJSON['data'][0]['gvhJS_fields']['campoBuscar']['value']; //$actionForm->get('campoBuscar'); $this->m_datosVentanaSeleccion['filaActual'] = $actionForm->get('filaActual'); $this->m_datosVentanaSeleccion['panelActua'] = $actionForm->get('panelActua'); $this->m_datosVentanaSeleccion['claseManejadora'] = $actionForm->get('claseManejadoraOrigen'); $this->m_datosVentanaSeleccion['actionOrigen'] = $actionForm->get('actionOrigen'); $this->m_datosVentanaSeleccion['modoPanelOrigen'] = $actionForm->get('modoPanelOrigen'); } /** * Método privado de igep que gastamos para construir los datos necesarios para abrir una ventana de Live Search * @access private * REDMINE #23002 Ventana Live Search */ public function construirArrayAbrirVentanaLiveSearch($field, $idField, $value, $claseM) { $this->m_datosVentanaLiveSearch['claseManejadora'] = $claseM; $this->m_datosVentanaLiveSearch['nomCampo'] = $field; $this->m_datosVentanaLiveSearch['idCampo'] = $idField; $this->transform_User2FW($value,TIPO_CARACTER); $this->m_datosVentanaLiveSearch['valor'] = $value; } /** * Método privado de igep que gastamos para construir los datos necesarios para buscar en una ventana de Live Search * * @access private * @return integer * REDMINE #23002 Ventana Live Search */ public function construirArrayBuscarVentanaliveSearch($actionForm) { // Nombre del campo de la ventana padre $this->m_datosVentanaLiveSearch['nomCampo'] = $actionForm->get('nomCampo'); $this->m_datosVentanaLiveSearch['camposBusqueda'] = $actionForm->get('camposBusqueda'); $valor = $_REQUEST['valor']; $this->transform_User2FW($valor,TIPO_CARACTER); $this->m_datosVentanaLiveSearch['valor'] = $valor; $this->m_datosVentanaLiveSearch['filaActual'] = $actionForm->get('filaActual'); // Panel de la ventana padre $this->m_datosVentanaLiveSearch['panelActua'] = $actionForm->get('panelActua'); // Clase manejadora de la ventana padre $this->m_datosVentanaLiveSearch['claseManejadora'] = $actionForm->get('claseManejadoraOrigen'); //$this->m_datosVentanaLiveSearch['actionOrigen'] = $actionForm->get('actionOrigen'); // Modo del panel de la ventana padre $this->m_datosVentanaLiveSearch['modoPanelOrigen'] = $actionForm->get('modoPanelOrigen'); $this->m_datosVentanaLiveSearch['DBSource'] = $actionForm->get('DBSource'); } /*----------------------------------------------FUNCIONES DE ENTREGA----------------------------------------------*/ /** * Esta funcion se encargará de realizar la validación de los datos en el servidor * antes de realizar una operación de inserción o actualización en la BD * Si ha habido errores previamente en la transformacion, estan en ConfigFramework * * @access private * @return int|string Devuelve 0 si no hay errores y un string con el error en caso de error. */ public function checkDataTypes() { $mensajeErrorValidacion = $this->_transformErrors; //En el caso de no tener operacion, fijamos como operacion los visibles. $noOperationFixed = false; if($this->getOperation()=='') { $noOperationFixed = true; $this->setOperation('visibles'); } $datos = $this->getAllTuplas(); $etiquetas = array(); $mensajes = array(); if(is_array($datos) and count($datos)>0) { foreach($datos as $tupla){ foreach($tupla as $campo => $valor){ //Si el campo tiene descripción lo validamos: if(isset($this->descCampoPanel[$campo]['instance'])){ $typeValidator = unserialize($this->descCampoPanel[$campo]['instance']); try{ $typeValidator->validate($valor); } catch(Exception $e){ //Si tiene etiqueta utilizamos esa $nombreEtiqueta = $typeValidator->getLabel(); $error = array(); if(empty($nombreEtiqueta)) { $nombreEtiqueta = $campo; } if (!in_array($nombreEtiqueta,$etiquetas)) { $etiquetas[] = $nombreEtiqueta; $error['campo'] = $nombreEtiqueta; $error['error'] = $e->getMessage(); $mensajes[] = $error; } } }//fin del if si existe definición del campo }//fin del foreach de los campos de la tupla }//fin del foreach de las tuplas foreach($mensajes as $mensaje) { $mensajeErrorValidacion[] = "Campo ".$mensaje['campo'].": ".$mensaje['error'].""; } } //Si no había operacion fijada, lo dejamos asi. $noOperationFixed = false; if($noOperationFixed) $this->setOperation(''); if(empty($mensajeErrorValidacion)) return 0; else return '
- '.implode('
- ', $mensajeErrorValidacion); } /** * Devuelve los datos que con anterioridad se han recuperado y clasificado. Para ello solicita una operación y una tabla de la BD. * * @access private * @param string $operacion * @param string $nombreTabla * @return array */ public function dameDatos( $operacion, $nombreTabla = '' ) { switch( $operacion ) { case 'camposDependientes' : return $this->m_datosCamposDependientes; break; case 'abrirVentanaLiveSearch' : return $this->m_datosVentanaLiveSearch; break; case 'buscarVentanaLiveSearch' : return $this->m_datosVentanaLiveSearch; break; case 'abrirVentanaSeleccion' : return $this->m_datosVentanaSeleccion; break; case 'buscarVentanaSeleccion' : return $this->m_datosVentanaSeleccion; break; case 'ordenarTabla' : return $this->m_datosOrdenarTabla; break; default : die('Dame Datos.Operacion desconocida.'); break; } } //Fin de dameDatos /** * Devuelve los datos Antiguos para una tabla dada. * * @access private * @param string $nombreTabla * @return array */ public function dameDatosAntiguos( $nombreTabla ) { return $this->m_datos_antiguos[$nombreTabla]; } //Fin de dameDatosAntiguos /** * Retorna el valor de la fila actual * * @access private * @return integer */ public function dameFilaActual() { return $this->int_filaActual; } //Fin de dameFilaActual // REDMINE #23348 public function damePagActive() { return $this->int_pagActive; } //Fin de damePagActive public function dameRowSelectedLis() { return $this->int_rowSelectedLis; } //Fin de dameRowSelectedLis public function damePatron() { return $this->patron; } //Fin de damePagActive /*PROVISIONAL HASTA Q LO COJAMOS DE PLUGINS*/ /** * Método que devuelve el panel de trabajo de gvhidra. * * @deprecated * @return string $panel Panel de entre los tipos soportados: *
    *
  • fil : Filtro o modo de búsqueda ,
  • *
  • lis : Listado o modo de tabla ,
  • *
  • edi : Edición o modo de ficha.
  • *
*/ /* public function damePanelActivo() { IgepDebug::setDebug( WARNING, 'DEPRECATED '. __METHOD__ . '. Usar ' . __CLASS__ . '::getPanel en su lugar.' ); return $this->getPanel(); }*///Fin de damePanelActivo /************************************* NUEVO *********************************************/ /** * String que contiene la operación que se está realizando * * @var string * @access private */ public $str_operacionActual; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de inserciones * * @var int * @access private */ public $int_insertarIndice; /** * Matriz de referencias a las tuplas insertadas * * @var array * @access private */ public $m_auxIndices_insertar; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de modificaciones * * @var int * @access private */ public $int_actualizarIndice; /** * Matriz de referencias a las tuplas modificadas * * @var array * @access private */ public $m_auxIndices_actualizar; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de borrados * * @var int * @access private */ public $int_borrarIndice; /** * Matriz de referencias a las tuplas borradas * * @var array * @access private */ public $m_auxIndices_borrar; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de seleccionados * * @var int * @access private */ public $int_seleccionarIndice; /** * Matriz de referencias a las tuplas seleccionadas * * @var array * @access private */ public $m_auxIndices_seleccionar; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de postConsultar * * @var int * @access private */ public $int_postConsultarIndice; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de postConsultar * * @var int * @access private */ public $int_seleccionarPadreIndice; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de buscar * * @var int * @access private */ public $int_buscarIndice; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de iniciarVentana * * @var int * @access private */ public $int_iniciarVentanaIndice; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de external * * @var int * @access private */ public $int_externalIndice; /** * Integer indice de 2o nivel para referenciar la matriz "ficticia" de visibles * * @var int * @access private */ public $int_visiblesIndice; /** * Este método se encarga de inicializar el indice del cursor que pertenece a la operación. * * @access public * @params $parametroOperacion la operación sobre la que se quiere reinicializar el cursor * @return void */ public function reset($parametroOperacion = '') { //Seleccionamos la operacion if ($parametroOperacion != '') { $operacion = $parametroOperacion; //Inicializamos el indice de la operacion a 0 $indice = 'int_'.$operacion.'Indice'; $this-> $indice = 0; } else { $operacionesBasicas = array ('insertar', 'borrar', 'actualizar', 'seleccionar', 'external', 'visibles'); foreach ($operacionesBasicas as $operacion) { $indice = 'int_'.$operacion.'Indice'; $this-> $indice = 0; } } } /** * Este método indica a la instancia cual es la operación en curso e inicializa el indice del cursor de dicha * operación. La operación en curso se utilizará siempre que no se especifique como parámetro para el resto de * métodos. OJO: Falta dar una lista clara de las operaciones para el usuario (internas puede haber más) * * @param string $parametroOperacion El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara. * @return void */ public function setOperation( $parametroOperacion ) { if( ($parametroOperacion == 'visibles') && ($this->isEmpty('visibles')) ) { $parametroOperacion = 'external'; } $this->str_operacionActual = $parametroOperacion; $this->reset( $parametroOperacion ); } //Fin de setOperacion /** * Establece la matriz de datos para la operación actual. * * @param array $m_datos */ public function setArrayOperacion( $m_datos ) { $str_operacion = $this->getOperation(); $nombreMatriz = "m_datos_{$str_operacion}Tpl"; if( is_array($m_datos) ) { $this-> $nombreMatriz = $m_datos; } else { $this-> $nombreMatriz = array (); } } //Fin de setArrayOperacion /** * Este método permite el acceso a la propiedad interna que indica la operación actual. * * @access public * @return string */ public function getOperation() { return $this->str_operacionActual; } //Fin function getOperation /** * Este método devuelve el valor del indice del cursor sobre la operación. * * @access public * @params $parametroOperacion el tipo de operación, si no se indica se coge el fijado para la instancia * @return integer */ public function getIndex($parametroOperacion = '') { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $indice = 'int_'.$operacion.'Indice'; return ($this-> $indice); } /** * posicionarEnTupla, coloca los índices en la fila/tupla que se le indique por parámetro * * @access private * @params $parametroOperacion el tipo de operación, si no se indica se coge el fijado para la instancia * @return integer */ public function posicionarEnTupla($indiceFila, $parametroOperacion = '') { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $indice = 'int_'.$operacion.'Indice'; if (!empty ($indiceFila)) $this-> $indice = $indiceFila; else $this-> $indice = 0; } /** * Este método avanza el indice del cursor sobre la operación y lo devuelve. * * @access private * @params $parametroOperacion el tipo de operación, si no se indica se coge el fijado para la instancia * @return integer */ public function _next($parametroOperacion = '') { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $indice = 'int_'.$operacion.'Indice'; $this-> $indice ++; return $this-> $indice; } /** * Este método, para un indice de cursor le devuelve el indice en la matriz de la operación. * * @access private * @params $indiceGlobal indica el valor del indice del cursor de la operación * @return integer */ public function _getIndiceInterno($operacion, $indiceGlobal = -1) { if ($indiceGlobal == -1) { $indiceGlobal = $this->getIndex($operacion); } if (($operacion == 'buscar') or ($operacion == 'postConsultar') or ($operacion == 'seleccionarPadre') or ($operacion == 'external') or ($operacion == 'visibles') or ($operacion == 'iniciarVentana')) { return $indiceGlobal; } //if( ($operacion=='buscar') ) return ($indiceGlobal+1); //if( ($operacion=='postConsultar') or ($operacion=='seleccionarPadre') or ($operacion=='external') or ($operacion=='visibles')) return $indiceGlobal; $matrizAuxIndice = 'm_auxIndices_'.$operacion; $matrizGlobal = & $this-> $matrizAuxIndice; if (isset ($matrizGlobal[$indiceGlobal])) { return $matrizGlobal[$indiceGlobal]; } else { return -1; } } /** * Este método devuelve una matriz con los campos que aparecen en la tpl para la tupla actual * dentro del cursor de la operacion. No avanza la posiccion en el cursor. * * @access public * @params $parametroOperacion el tipo de operación, si no se indica se coge el fijado para la instancia * @return array */ public function currentTupla($parametroOperacion = '') { if ($parametroOperacion != '') { $operacion = $parametroOperacion; } else { $operacion = $this->getOperation(); } $nombreMatriz = 'm_datos_'.$operacion.'Tpl'; $indiceInterno = $this->_getIndiceInterno($operacion); $matrizInterna = & $this-> $nombreMatriz; if (isset ($matrizInterna[$indiceInterno])) { //Para evitar el problema de referencias a objetos clonamos $row = $matrizInterna[$indiceInterno]; foreach($row as $field => $value){ if(is_object($value)) { $row[$field] = clone $value; } } return $row; } else { return 0; } } //Fin function currentTupla public function getCampo($nombreCampo, $parametroOperacion = '') { if ($parametroOperacion != '') { $operacion = $parametroOperacion; } else { $operacion = $this->getOperation(); } $resultado = $this->currentTupla($operacion); if (isset ($resultado[$nombreCampo])) { return $resultado[$nombreCampo]; } else { return null; } } //Fin function getCampo // REDMINE #23120 public function getIdBtn() { if (isset ($_REQUEST['idBtn'])) { $idBtn = filter_var($_REQUEST['idBtn'] ,FILTER_SANITIZE_STRING); return $idBtn; } else { return null; } } //Fin function getIdBtn public function getNodeSelectedTree($nombreCampo, $parametroOperacion = '') { $operacion = $this->getOperation(); $nombreMatriz = 'm_datos_'.$operacion.'Tpl'; $indiceInterno = $this->_getIndiceInterno($nombreMatriz); if (($operacion == 'visibles') || ($indiceInterno == -1)) $indiceInterno = 0; $matrizInterna = & $this-> m_datos_selectedTreeTpl; if (isset ($matrizInterna[$indiceInterno])) { //Para evitar el problema de referencias a objetos clonamos $row = $matrizInterna[$indiceInterno][$nombreCampo]; return $row; } else { return 0; } } //Fin function getNodeSelectedTree /** * Método que devuelve el nombre de la clase manejadora * @return string */ // REDMINE #23228 public function getClaseMPanel() { return $this->_infoPanel['claseM']; } //Fin de getClaseMPanel /** * Este método devuelve el componente asociado al campo especificado. * * @access public * @param string $nombreCampo El nombre del campo deseado. * @return string */ public function getComponent( $nombreCampo ) { if( !isset($this->descCampoPanel[$nombreCampo]) || ! isset($this->descCampoPanel[$nombreCampo]['component']) ) { return null; } return $this->descCampoPanel[$nombreCampo]['component']; } //Fin function getComponent /** * Este método devuelve un array con los atributos del componente asociado al campo especificado. * * @access public * @param string $nombreCampo El nombre del campo deseado. * @return array */ public function getComponentAttributes( $nombreCampo ) { if( !isset($this->descCampoPanel[$nombreCampo]) ) { return null; } return $this->descCampoPanel[$nombreCampo]; } //Fin function getComponentAttributes /** * Este método devuelve el valor antiguo de una campo para la operacion activa. * * @access public * @params $nombreCampo el nombre del campo del cual se quiere conocer el valor antiguo * @return string */ public function getOldValue($nombreCampo){ $operacion = $this->getOperation(); $indice = $this->_getIndiceInterno($operacion); return $this->m_datos_antiguosTpl[$indice][$nombreCampo]; } /** * Este método asigna el valor dado al campo * * @access public * @params $nombreCampo el nombre del campo del cual se quiere conocer el valor antiguo * @return string */ public function setCampo($nombreCampo, $valorCampo, $parametroOperacion = '') { if ($parametroOperacion != '') { $operacion = $parametroOperacion; } else { $operacion = $this->getOperation(); } $indiceInterno = $this->_getIndiceInterno($operacion); $nombreMatrizTpl = 'm_datos_'.$operacion.'Tpl'; $matrizInternaTpl = & $this-> $nombreMatrizTpl; //Tenemos que añadirlo en el array adecuado. $matrizInternaTpl[$indiceInterno][$nombreCampo] = $valorCampo; } //Fin function setCampo public function setArbol($nombreCampo, $valorCampo, $parametroOperacion = '') { if ($parametroOperacion != '') { $operacion = $parametroOperacion; } else { $operacion = $this->getOperation(); } $indiceInterno = $this->_getIndiceInterno($operacion); $nombreMatrizTpl = 'm_datos_'.$operacion.'Tpl'; $matrizInternaTpl = & $this-> $nombreMatrizTpl; //Tenemos que añadirlo en el array adecuado. $matrizInternaTpl[$indiceInterno][$nombreCampo] = $valorCampo; } //Fin function setArbol /** * Este método devuelve una matriz con los campos que aparecen en la tpl para la tupla actual * dentro del cursor de la operacion y avanza a la siguiente posición del cursor. * * @access public * @params $parametroOperacion el tipo de operación, si no se indica se coge el fijado para la instancia * @return array */ public function fetchTupla($parametroOperacion = '') { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $resultado = $this->currentTupla($operacion); $this->_next($operacion); return $resultado; } //Fin function fetchTupla /** * Este método avanza a la siguiente posición del cursor y devuelve verdadero * si quedan tuplas/registros en el cursor, y falso cuando se llega al final * * @access public * @params $parametroOperacion el tipo de operación, si no se indica se coge el fijado para la instancia * @return boolean */ public function nextTupla($parametroOperacion = '') { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $this->_next($operacion); $resultado = $this->currentTupla($operacion); return (!empty ($resultado)); } //Fin function nextTupla public function setTupla($tupla, $str_operacion = '') { if ($str_operacion != '') $operacion = $str_operacion; else $operacion = $this->getOperation(); $indiceGlobal = ($ind = $this->getIndex($operacion)) > 0 ? ($ind -1) : 0; $indiceInterno = $this->_getIndiceInterno($operacion, $indiceGlobal); $nombreMatrizTpl = 'm_datos_'.$operacion.'Tpl'; $matrizInternaTpl = & $this-> $nombreMatrizTpl; foreach ($tupla as $nombreCampo => $valorCampo) { $matrizInternaTpl[$indiceInterno][$nombreCampo] = $valorCampo; } return 1; } //Fin function setTupla /** * Devuelve la matriz de datos de la operación activa. * * Este metodo devuelve todo el conjunto de la operacion activa. Se le puede * pasar por parametro una operacion si no se quiere obtener los datos pertenecientes * a la operacion activa. * * @param string $parametroOperacion (Opcional) Indica la operacion de la que se quiere obtener la matriz. * @return mixed */ public function getAllTuplas( $parametroOperacion = '' ) { $operacion = $parametroOperacion; $operacion = (empty($operacion) ? $this->getOperation() : $operacion); $this->reset( $operacion ); $nombreMatriz = "m_datos_{$operacion}Tpl"; if( isset($this->$nombreMatriz) ) { return $this->array_values_with_clone( $this->$nombreMatriz ); } return 0; } //Fin de getAllTuplas /** * array_values_with_clone funcion creada para evitar pasar referencias a objetos con la matriz. * @access private * * Esta funcion evita que pasemos referencias a objetos cuando obtenemos la matriz de datos. Esto * evita que si un programador modifica el objeto obtenido y luego no hace el setAllTuplas, no tenga * problemas con dicha modificacion. * * @param mixed $matrix matriz de datos * @return mixed * */ private function array_values_with_clone($matrix) { //inicializamos la variables $clone = false; $result = array(); if(!is_array($matrix)) { return $result; } else { if(count($matrix)==0) { return array(); } } //Comprobamos en la primera fila si tiene objetos $validation = $matrix[key($matrix)]; if (is_array($validation)) foreach($validation as $field) { if(is_object($field)) { $clone = true; break; } } reset($matrix); //Construimos la matriz resultado clonando si es necesario foreach($matrix as $row) { if($clone) { foreach($row as $field => $value) { if(is_object($value)) $row[$field] = clone $value; } } $result[]=$row; } return $result; } /** * Este método devuelve todas las tuplas de antiguas para una operacion dada. */ public function getAllTuplasAntiguas($parametroOperacion = '') { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $this->reset($operacion); $indice = 0; $resultado = array (); while (($indiceInterno = $this->_getIndiceInterno($operacion)) != -1) { $resultado[$indice] = $this->m_datos_antiguosTpl[$indiceInterno]; ++$indice; $this->_next(); } return $resultado; } //Fin de getAllTuplasAntiguas public function setAllTuplas($vTuplas, $parametroOperacion = '') { if ($parametroOperacion != '') { $operacion = $parametroOperacion; } else { $operacion = $this->getOperation(); } $this->reset(); //Si tiene más tuplas de las que teniamos borramos el contenido de la matriz TPL47 $numTotalTuplas = 0; if (is_array($vTuplas)) { $numTotalTuplas = count($vTuplas); } else { throw new Exception('IgepComunicacion::setAllTuplas ha de recibir un array, ahora recibe: '.var_export($vTuplas,true)); } $numTuplas = 0; if (is_array($this->getAllTuplas($operacion))) { $numTuplas = count($this->getAllTuplas($operacion)); } if ($numTotalTuplas != $numTuplas ) { $matrizInternaTpl = 'm_datos_'.$operacion.'Tpl'; $matrizInterna = 'm_datos_'.$operacion; $this-> $matrizInternaTpl = array (); $this-> $matrizInterna = array (); //Regeneramos el indice de las tuplas //$numTotalTuplas = count($vTuplas); $matrizAuxIndices = 'm_auxIndices_'.$operacion; $this-> $matrizAuxIndices = array(); $i = 0; while($i<$numTotalTuplas) { array_push($this-> $matrizAuxIndices,$i); ++$i; } } foreach ($vTuplas as $tupla) { $this->_next($operacion); $this->setTupla($tupla, $operacion); } return 1; } //Fin de setAllTuplas /** * Este método guarda todas las tuplas de antiguas. */ public function _setAllTuplasAntiguas($vTuplas, $parametroOperacion = '') { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $this->reset($operacion); $indice = 0; $resultado = array (); while (($indiceInterno = $this->_getIndiceInterno($operacion)) != -1) { $this->m_datos_antiguosTpl[$indiceInterno] = $vTuplas[$indice]; ++$indice; $this->_next(); } return $resultado; } //Fin de getAllTuplasAntiguas /** * Método que devuelve los campos correspondientes a la matriz de datos de la operación activa. * * Este metodo devuelve los campos correspondientes a todo el conjunto de la operacion activa. * Se le puede pasar por parametro una operacion si no se quiere obtener los datos pertenecientes * a la operacion activa. * * @access public * @param string $parametroOperacion Indica la operacion de la que se quiere obtener la matriz, no es obligatorio. * @return array */ public function getAllFields( $parametroOperacion='' ) { $operacion = ( $parametroOperacion != '' ? $parametroOperacion : $this->getOperation() ); $this->reset( $operacion ); $nombreMatriz = "m_datos_{$operacion}Tpl"; if( !isset($this->{$nombreMatriz}) || empty($this->{$nombreMatriz}) || !is_array($this->{$nombreMatriz}) || (is_array($this->{$nombreMatriz}) && (count($this->{$nombreMatriz}) == 0) ) ) { return 0; } return array_keys( $this->{$nombreMatriz}[0] ); } //Fin de getAllFields public function setList($nombreCampo, $v_lista, $parametroOperacion = '') { //Este método sólo tiene sentido en un postConsultar (postBuscar, postEditar, postRecargar) //Por estar razón sólo se escribirá en la matriz TPL if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $indiceInterno = $this->_getIndiceInterno($operacion); $nombreMatrizTpl = 'm_datos_'.$operacion.'Tpl'; $matrizInternaTpl = & $this-> $nombreMatrizTpl; $matrizInternaTpl[$indiceInterno][$nombreCampo] = $v_lista; } public function isEmpty($parametroOperacion = '') { if ($parametroOperacion != '') { $operacion = $parametroOperacion; } else { $operacion = $this->getOperation(); } $nombreMatriz = 'm_datos_'.$operacion.'Tpl'; $matriz = $this->$nombreMatriz; if(!isset($matriz) OR ( is_array($matriz) && count($matriz) == 0) ) { return TRUE; } return FALSE; } //fin de isEmpty /** Método que devuelve para una tupla dada la información de un campo de tipo 'FILE' * que se ha subido al servidor. * @access private * @param string nombreCampo Nombre del campo FILE del que se quiere obtener la información * @param string parametroOperacion Indica la operación sobre la que se quiere la tupla * @return array */ public function getFileInfo($nombreCampo, $parametroOperacion) { if ($parametroOperacion != '') $operacion = $parametroOperacion; else $operacion = $this->getOperation(); $indiceInterno = $this->_getIndiceInterno($operacion); return $this->m_datosFicherosUpLoad[$indiceInterno][$nombreCampo]; } /** * Metodo para conseguir que las acciones de negocio tengan acceso a mapeos diferentes a los ya especificados. * * @param ActionMapping $actionMapping */ public function setMapping( $actionMapping ) { $this->_actionMapping = $actionMapping; } //Fin de setMapping /** * Devuelve el nombre del forward de la acción en curso. Buscará la respuesta identificada por name en la accion actual definida en mappings.php * * @param string $name Nombre de la respuesta deseada. * @return ActionForward */ public function getForward( $name ) { //Si no existe, lanzamos excepcion que informara en el debugger del error. if( !$this->_actionMapping->containsKey($name) ) { throw new Exception( "Error: actionForward {$name} no existe. Consulte el fichero de mapeos." ); } if( isset($this->_actionMapping) ) { return $this->_actionMapping->get( $name ); } } //Fin de getForward /** * Devuelve el valor de checkform para saber si se tiene que validar el formulario. * * @return integer */ public function getCheckForm() { return $this->_checkForm; } //Fin de getCheckForm /** * Realizar las conversiones desde formato usuario a formato FW. * * @access public * @param array $a_parametros Vector de asociativo de elementos a transformar. * @param string $a_tipo Nombre de la respuesta deseada. */ public static function transform_User2FW( & $a_parametros, $a_tipo=TIPO_CARACTER ) { ConfigFramework::setTransformErrors(array()); if (empty($a_tipo) and !is_array($a_tipo)) { $a_tipo = TIPO_CARACTER; } if (!is_array($a_parametros)) { // le doy estructura de vector para no repetir el codigo $vector = false; $a_parametros = array(array('col'=>$a_parametros,),); $a_tipo = array('col'=>array('tipo'=>$a_tipo,),); } else { $vector = true; } if (is_array($a_tipo)) { $transformer = new IgepTransformer(true); $car_i = ConfigFramework::getNumericSeparatorsUser(); $car_n = ConfigFramework::getNumericSeparatorsFW(); $transformer->setDecimal($car_i['DECIMAL'],$car_n['DECIMAL'],$car_i['GROUP'],$car_n['GROUP']); $fecha_i = ConfigFramework::getDateMaskUser(); $fecha_n = ConfigFramework::getDateMaskFW(); $transformer->setDate($fecha_i, $fecha_n); foreach ($a_parametros as $fila => $tupla) { foreach ($a_tipo as $campo => $descTipo) { $tipo_efectivo = ($descTipo['tipo']==TIPO_ENTERO? TIPO_DECIMAL: $descTipo['tipo']); if (empty($a_parametros[$fila][$campo])) { if($tipo_efectivo==TIPO_FECHA or $tipo_efectivo==TIPO_FECHAHORA) { $a_parametros[$fila][$campo] = null; } continue; } $num_errores = 0; if (is_array($transformer->getTransformErrors())) { $num_errores = count($transformer->getTransformErrors()); } $a_parametros[$fila][$campo] = $transformer->process($tipo_efectivo, $tupla[$campo]); if ($tipo_efectivo == TIPO_FECHA or $tipo_efectivo == TIPO_FECHAHORA) { // REVIEW comprobación if (count($transformer->getTransformErrors())==$num_errores) { $a_parametros[$fila][$campo] = new gvHidraTimestamp($a_parametros[$fila][$campo]); } else { $a_parametros[$fila][$campo] = null; } } } } ConfigFramework::setTransformErrors($transformer->getTransformErrors()); } if (!$vector) { $a_parametros = $a_parametros[0]['col']; } }//Fin IgepComunicacion /** * Método que permite indicar el panel de trabajo activo de gvhidra. * * @access public * @param string $panel Panel de entre los tipos soportados: *
    *
  • fil : Filtro o modo de búsqueda ,
  • *
  • lis : Listado o modo de tabla ,
  • *
  • edi : Edición o modo de ficha.
  • *
*/ public function setPanel( $panel ) { $this->_panel = $panel; } //Fin de setPanel /** * Método que devuelve el panel de trabajo activo de gvhidra. * * @return string $panel Panel de entre los tipos soportados: *
    *
  • fil : Filtro o modo de búsqueda ,
  • *
  • lis : Listado o modo de tabla ,
  • *
  • edi : Edición o modo de ficha.
  • *
*/ public function getPanel() { return $this->_panel; } //Fin de getPanel /** * Método que asigna el estado del panel de trabajo activo de gvhidra. * * @return string $state Panel de entre los tipos soportados: *
    *
  • R : Lectura ,
  • *
  • W : Edición ,
  • *
  • I : Inserción.
  • *
*/ // REDMINE #23120 public function setStatePanel($state) { $this->_statePanel = $state; } //Fin de getPanel /** * Método que devuelve el estado del panel de trabajo activo de gvhidra. * * @return string $panel Panel de entre los tipos soportados: *
    *
  • R : Lectura ,
  • *
  • W : Edición ,
  • *
  • I : Inserción.
  • *
*/ public function getStatePanel() { return $this->_statePanel; } //Fin de getPanel } //End IgepComunicacion