Se proporcionará una instancia de esta clase en los metodos abstractos que el * programador puede utilizar para cambiar el comportamiento de las acciones genericas * del framework. También en el metodo correspondiente a las acciones particulares. *

* *

Con los metodos proporcionados se podran manejar los datos obtenidos desde la REQUEST * de una forma racional (por campo, por tupla o por matriz de datos). Toda esta informacion * viene organizada por operacion; de modo que se proporcionara la informacion segun la accion * que este ejecutandose. *

* * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License v.2 * @version $Id: IgepComunicaUsuario.php,v 1.59 2018-08-11 11:48:43 belenguer_jor Exp $ * @author David Pascual * @author Keka: Bermejo * @author Vero Navarro * @author Raquel Borjabad * @author Toni Felix * @author Jorge Belenguer * * @package gvHidra */ class IgepComunicaUsuario { const OPERACION_EXTERNAL = 'external'; const OPERACION_ACTUALIZAR = 'actualizar'; const ATRIBUTO_TIPO = 'tipo'; const ATRIBUTO_PARTE_DECIMAL = 'parteDecimal'; const ATRIBUTO_COMPONENTE = 'component'; const ATRIBUTO_VALUECHECKED = 'valueChecked'; const ATRIBUTO_VALUEUNCHECKED = 'valueUnchecked'; const ATRIBUTO_RADIO = 'Radio'; /** * Instancia de IgepComunicacion * @var IgepComunicacion */ public $comunica; /** * Datos utilizados en las inseciones para las listas * @var array */ public $datosPreinsertados; /** * Coleccion (array) de las listas definidas en el panel * @var gvHidraList[] */ public $listasPanel; /** * Objeto de la clase IgepMensaje que se creará en el caso de que el programador haga uso del método showMessage * @var IgepMensaje */ public $obj_mensaje = null; /** * Información del panel que llega a través del JSON. * * @var array */ // REDMINE #23228 public $_infoPanel; /** * Constructor. Recibe como parámetro una instancia viva de la clase * IgepComunicacion. * * @param IgepComunicacion $comunica * @param array $datosPreinsertados * @param gvHidraList[] $listasPanel */ public function __construct( & $comunica, & $datosPreinsertados, & $listasPanel ) { $this->comunica = & $comunica; $this->datosPreinsertados = & $datosPreinsertados; $this->listasPanel = & $listasPanel; } //Fin del constructor /** * Reinicializa el acceso a datos. * * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) */ public function reset( $parametroOperacion='' ) { $this->comunica->reset( $parametroOperacion ); } //Fin de reset /** * Establece la operación que va a ser origen de los datos. * * @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar) */ public function setOperation( $parametroOperacion ) { $this->comunica->setOperation( $parametroOperacion ); } //Fin de setOperation /** * Devuelve cual es el origen de los datos actual. * * @return string */ public function getOperation() { return $this->comunica->getOperation(); } //Fin de getOperation /** * Devuelve el modo activo para una acción de interfaz dada. * *

Los modos posibles son

*
    *
  • fil : Filtro o modo de búsqueda ,
  • *
  • lis : Listado o modo de tabla ,
  • *
  • strong>edi : Edición o modo de ficha .
  • *
* @return string */ public function getActiveMode() { return $this->comunica->getPanel(); } //Fin de getActiveMode /** * 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.
  • *
* @return string */ public function getStatePanel() { return $this->comunica->getStatePanel(); } //Fin de getStatePanel /** * 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.
  • *
* @return string */ // REDMINE #23120 public function setStatePanel($state) { $this->comunica->setStatePanel($state); } //Fin de setStatePanel /** * Cuando se trabaja con un conjunto de fichas múltiple, se utiliza para establecer la fila * (registro/tupla del conjunto) sobre la que estamos trabajando, por defecto, es la ficha que * se está visializando (esta activa) * * @param integer $indice Indice de 0..nRegs que indica la tuplas */ public function setIndex( $indice ) { $this->comunica->int_filaActual = $indice; } //Fin de setIndex /** * Devuelve el valor del indice del cursor sobre el origen de datos actual. * * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return integer */ public function getIndex( $parametroOperacion='' ) { return $this->comunica->getIndex( $parametroOperacion ); } //Fin de getIndex /** * Devuelve el registro activo sobre el origen de datos actual (cursor) * * @param string $parametroOperacion (Opcional) El tipo de operación, si no se indica se coge el fijado para la instancia * @return array */ public function currentTupla( $parametroOperacion='' ) { return $this->comunica->currentTupla( $parametroOperacion ); } ///Fin de currentTupla /** * Devuelve el campo indicado como párametro del registro activo sobre el * origen de datos actual (cursor) * * @param string $nombreCampo Nombre del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function getSrcImg( $nombreCampo, $parametroOperacion='' ) { return $this->comunica->getCampo( $nombreCampo, $parametroOperacion ); } //Fin de getSrcImg /** * Devuelve el campo indicado como párametro del registro activo sobre el * origen de datos actual (cursor) * * @param string $nombreCampo Nombre del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function getValue( $nombreCampo, $parametroOperacion='' ) { return $this->comunica->getCampo( $nombreCampo, $parametroOperacion ); } //Fin de getValue /** * Devuelve el campo indicado como párametro del registro activo sobre el * origen de datos actual (cursor) * * El id del botón se encuentra en la matriz m_datos_externalTpl con clave 'idBtn' * p.ej. * [m_datos_externalTpl] => Array ( [0] => Array ( [action] => Registro__accionParticular [idBtn] => miBoton [checkForm] => 1 [claseManejadora] => Registro [gvhpanel] => edi ) ) * @return string */ // REDMINE #23120 public function getIdBtn( ) { return $this->comunica->getIdBtn( ); } //Fin de getIdBtn /** * Devuelve el campo indicado como párametro del registro activo sobre el * origen de datos actual (cursor) * * @param string $nombreCampo Nombre del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function getSelected( $nombreCampo, $parametroOperacion='' ) { return $this->comunica->getCampo( $nombreCampo, $parametroOperacion ); } //Fin de getSelected /** * Devuelve el campo indicado como párametro del registro activo sobre el * origen de datos actual (cursor) * * @param string $nombreCampo Nombre del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function getNodeSelected( $nombreCampo, $parametroOperacion='' ) { return $this->comunica->getNodeSelectedTree( $nombreCampo, $parametroOperacion ); } //Fin de getSelected /** * Devuelve el valor antiguo del campo indicado como párametro del registro activo * * @param string $nombreCampo Nombre del campo * @return mixed */ public function getOldValue( $nombreCampo ) { return $this->comunica->getOldValue( $nombreCampo ); } //Fin de getOldValue /** * Establece el valor de una lista * * @param string $nombreCampo Nombre del campo * @param string $valorCampo Valor del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function setSelected( $nombreCampo, $valorCampo, $parametroOperacion='' ) { return $this->comunica->setCampo( $nombreCampo, $valorCampo, $parametroOperacion ); } //Fin de setSelected /** * Establece el valor de una lista * * @param string $nombreCampo Nombre del campo * @param string $index Índice de la opción de la lista a marcar como seleccionada * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ // REDMINE #23167 public function setSelectedIndex( $nombreCampo, $index, $parametroOperacion='' ) { $defLista = $this->getList($nombreCampo); $lista = $defLista->getList(); // REDMINE #23263 if (is_array($index)) // lista múltiple { $num = count($index); for($i=0;$i<$num;$i++) { $valor[] = $lista[$index[$i]]['valor']; } } else { $valor = $lista[$index]['valor']; } return $this->comunica->setCampo( $nombreCampo, $valor, $parametroOperacion ); } //Fin de setSelectedIndex /** * Establece el valor del un campo check. * * @param string $name Nombre del check * @param boolean $check Checked si o no * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return void */ public function setChecked( $name, $check, $parametroOperacion='' ) { $idCheck = $this->getCheckName( $name ); //Seleccionamos el valor dependiendo si esta seleccionado $desc = $this->comunica->descCampoPanel[$idCheck]; $value = ($check ? $desc[self::ATRIBUTO_VALUECHECKED] : $desc[self::ATRIBUTO_VALUEUNCHECKED] ); return $this->comunica->setCampo( $name, $value, $parametroOperacion ); } //Fin de setChecked /** * Devuelve si un campo check esta marcado o no * * @param string $name Nombre del check * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return boolean */ public function isChecked( $name, $parametroOperacion='' ) { //Devolvemos true o false dependiendo del valor del check $value = $this->comunica->getCampo( $name, $parametroOperacion ); $desc = $this->comunica->descCampoPanel[$name]; $result = ($value == $desc[self::ATRIBUTO_VALUECHECKED]); return $result; } //Fin de isChecked /** * Establece el valor pasado como parámetro sobre el campo indicado como párametro del * registro activo sobre el origen de datos actual (cursor) * * @param string $nombreCampo Nombre del campo * @param string $valorCampo Valor del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function setSrcImg( $nombreCampo, $valorCampo, $parametroOperacion='' ) { return $this->comunica->setCampo( $nombreCampo, $valorCampo, $parametroOperacion ); } //Fin de setSrcImg /** * Establece el valor pasado como parámetro sobre el campo indicado como párametro del * registro activo sobre el origen de datos actual (cursor) * * @access public * @param string $nombreCampo Nombre del campo * @param string $valorCampo Valor del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function setValue( $nombreCampo, $valorCampo, $parametroOperacion='' ) { return $this->comunica->setCampo( $nombreCampo, $valorCampo, $parametroOperacion ); } //Fin de setValue /** * Establece el valor pasado como parámetro sobre el campo indicado como párametro del * registro activo sobre el origen de datos actual (cursor) * * @access public * @param string $nombreCampo Nombre del campo * @param string $valorCampo Valor del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function setTree( $nombreCampo, $valorCampo, $parametroOperacion='' ) { return $this->comunica->setArbol( $nombreCampo, $valorCampo, $parametroOperacion ); } //Fin de setTree /** * Establece el foco en el campo indicado ocmo parámetro del registro activo * * @param string $nombreCampo Nombre del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function setFocus( $nombreCampo, $parametroOperacion='' ) { return $this->comunica->setFocus( $nombreCampo, $parametroOperacion ); } //Fin de setFocus /** * Avanza la posición del cursor sobre el origen de datos * actual (cursor) y devuelve el registro/tupla correspondiente * * @param string $nombreCampo Nombre del campo * @param string $valorCampo Valor del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function nextTupla( $parametroOperacion='' ) { return $this->comunica->nextTupla( $parametroOperacion ); } //Fin de nextTupla /** * Devuelve el registro/tupla correspondiente y * avanza la posición del cursor sobre el origen de datos * * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function fetchTupla( $parametroOperacion='' ) { return $this->comunica->fetchTupla( $parametroOperacion ); } //Fin de fetchTupla /** * Sustituye el registro actual de la fuente de datos * prestablecida por el registro/tupla (array asociativo) pasado * como parámetro * * @param string $nombreCampo Nombre del campo * @param string $valorCampo Valor del campo * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar). Si no se indica se coge el fijado para la instancia * @return mixed */ public function setTupla( $tupla, $parametroOperacion='' ) { return $this->comunica->setTupla( $tupla, $parametroOperacion ); } //Fin de setTupla /** * Devuelve la matriz de registros correspondiente * al origen de datos pasado como argumento o prestablecido * * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function getAllTuplas( $parametroOperacion='' ) { return $this->comunica->getAllTuplas( $parametroOperacion ); } //Fin de getAllTuplas /** * Devuelve la matriz de registros original correspondiente * al origen de datos pasado como argumento o prestablecido * * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function getAllTuplasAntiguas( $parametroOperacion='' ) { return $this->comunica->getAllTuplasAntiguas( $parametroOperacion ); } //Fin de getAllTuplasAntiguas /** * Devuelve la matriz de registros original correspondiente * al origen de datos pasado como argumento o prestablecido * * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function getAllOldTuplas( $parametroOperacion='' ) { return $this->comunica->getAllTuplasAntiguas( $parametroOperacion ); } //Fin de getAllOldTuplas /** * Establece la matriz de registros correspondiente * al origen de datos pasado como argumento o prestablecido * * @param array $vTuplas Conjunto de tuplas/registros a asignar * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return mixed */ public function setAllTuplas( $vTuplas, $parametroOperacion='' ) { return $this->comunica->setAllTuplas( $vTuplas, $parametroOperacion ); } //Fin de setAllTuplas /** * Devuelve los campos correspondientes a la matriz de datos de la operación activa. * * @param string $parametroOperacion (Opcional) Indica la operacion de la que se quiere obtener la matriz. * @return array */ public function getAllFields( $parametroOperacion='' ) { return $this->comunica->getAllFields( $parametroOperacion ); } //Fin de getAllFields /** * Devuelve si el origen de datos prestablecido esta vacio o no. * * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar) * @return boolean */ public function isEmpty( $parametroOperacion='' ) { return $this->comunica->isEmpty( $parametroOperacion ); } //Fin de isEmpty /** * Devuelve el nombre del componente asociado al campo indicado como párametro * * @param string $nombreCampo Nombre del campo. * @return string */ public function getComponent( $nombreCampo ) { return $this->comunica->getComponent( $nombreCampo ); } //Fin de getComponent /** * Devuelve un array con los atributos del componente asociado al campo indicado como párametro * * @param string $nombreCampo Nombre del campo. * @return array */ public function getComponentAttributes( $nombreCampo ) { return $this->comunica->getComponentAttributes( $nombreCampo ); } //Fin de getComponentAttributes /** * getList obtiene la estructura de la lista * * @access public * @param string $nombreCampo Nombre del campo de la lista. * @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar). * @return IgepEstructuraLista */ public function getList( $nombreCampo, $parametroOperacion='' ) { //Comprobamos si es una lista if( get_class($this->listasPanel[$nombreCampo]) != 'gvHidraList' ) { return null; } $objLista = & $this->listasPanel[$nombreCampo]; //Recogemos el valor del campo $valorSeleccionado = $this->getValue( $nombreCampo, $parametroOperacion ); //Montamos la lista //Si no tiene dependencia cogemos el valor de camposPreInsertados if( !$objLista->hayDependencia() ) { $listaResultado = $this->datosPreinsertados[$nombreCampo]; } else { //Tenemos que construir la dependencia $tupla = $this->comunica->currentTupla( $parametroOperacion ); $listaResultado = $objLista->construyeLista( $tupla ); } $listaResultado['seleccionado'] = $valorSeleccionado; //Modificar aqui $objListaStruc = new IgepEstructuraLista( $listaResultado ); return $objListaStruc; } //Fin de getList /** * Establece el contenido de una lista. * * @param string $nombreCampo Nombre del campo de la lista. * @param IgepEstructuraLista $objListaStruc Estructura de la lista * @param string $parametroOperacion (Opcional) Origen de datos (datos para insertar, para modificar, para borrar). */ public function setList( $nombreCampo, $objListaStruc, $parametroOperacion= '' ) { $v_lista = $objListaStruc->getEstructuraListaIgep(); $this->comunica->setList( $nombreCampo, $v_lista, $parametroOperacion ); } //Fin de setList /** * Devuelve para una tupla dada la información de un campo de tipo 'FILE' * que se ha subido al servidor. * * @param string $nombreCampo Nombre del campo FILE del que se quiere obtener la información * @param string $parametroOperacion (Opcional) Indica la operación sobre la que se quiere la tupla * @return array */ public function getFileInfo( $nombreCampo, $pametroOperacion ='' ) { return $this->comunica->getFileInfo( $nombreCampo, $pametroOperacion ); } //Fin de getFileInfo /** * Dada una tupla, establece el color para poder ser representado en una tabla de gvHidra. * * @param array $row Tupla a la que se le quiere dar color. * @param string $color Color que se le va a dar a la tupla. */ public function setRowColor( & $row, $color ) { if( !is_array($row) ) { die( 'setColorRow_Error: el parámetro row no es un array' ); } $row['__gvHidraRowColor'] = $color; } //Fin de setRowColor /** * Dada una tupla, establece si ese registro del panel tabular se marca como seleccionado o no. * * @param array $row Tupla a la que se le quiere dar color. * @param boolean $check chequeado o no */ public function setRowChecked( & $row, $check ) { if( !is_array($row) ) { die( 'setRowChecked_Error: el parámetro row no es un array' ); } $row['__gvHidraRowChecked'] = $check; } //Fin de setRowChecked /* --------------------------FUNCIONES AUXILIARES -------------------------- */ /** * Prepara los datos antes de realizar una operacion en la BD. * * @access private * @param IgepConexion $conexion * @param array|string $v_desCampos */ private function _prepararOperacion( $conexion, $v_desCampos ) { $m_datos = $this->getAllTuplas(); $conexion->prepararOperacion( $m_datos, $v_desCampos ); $this->setAllTuplas( $m_datos ); $this->reset(); if( $this->getOperation() == self::OPERACION_ACTUALIZAR ) { $m_datosAnt = $this->getAllTuplasAntiguas(); $conexion->prepararOperacion( $m_datosAnt, $v_desCampos ); $this->comunica->m_datos_antiguosTpl = $m_datosAnt; $this->reset(); } } //Fin de _prepararOperacion /** * Este método prepara los datos que vienen de estado FW y los pasa a estado presentación * Devuelve el resultado por referencia y como valor de retorno. * * @param mixed $a_parametros * @param mixed $a_tipo * @param mixed $a_decimales Usado cuando convertimos valor individual * @return mixed */ public static function prepararPresentacion( & $a_parametros, $a_tipo, $a_decimales='2' ) { if( $a_decimales==='' ) { $a_decimales = '2'; } if( !is_array($a_parametros) and $a_parametros!=='' and $a_tipo!='' ) { // le doy estructura de vector para no repetir el codigo $vector = false; $a_parametros = array( array( 'col' => $a_parametros, ), ); $a_tipo = array( 'col' => array( self::ATRIBUTO_TIPO => $a_tipo, self::ATRIBUTO_PARTE_DECIMAL => $a_decimales ), ); } else { $vector = true; } if( is_array($a_tipo) ) { $transformer = new IgepTransformer(); $carfw = ConfigFramework::getNumericSeparatorsFW(); $caruser = ConfigFramework::getNumericSeparatorsUser(); $transformer->setDecimal( $carfw['DECIMAL'] , $caruser['DECIMAL'] , $carfw['GROUP'] , $caruser['GROUP'] ); $fechafw = ConfigFramework::getDateMaskFW(); $fechauser = ConfigFramework::getDateMaskUser(); $transformer->setDate( $fechafw,$fechauser ); foreach( $a_parametros as $fila => $tupla ) { foreach( $a_tipo as $campo => $descTipo ) { if( !isset($tupla[$campo]) ) { continue; } //ignoramos las listas if( is_array($a_parametros[$fila][$campo]) ) { continue; } $tipo_efectivo = ( empty($descTipo[self::ATRIBUTO_TIPO]) ? TIPO_CARACTER : $descTipo[self::ATRIBUTO_TIPO] ); if( $tipo_efectivo == TIPO_DECIMAL ) { $a_parametros[$fila][$campo] = $transformer->expandExponent( $a_parametros[$fila][$campo] , $carfw['DECIMAL'] , $carfw['GROUP'] ); } if( isset($descTipo[self::ATRIBUTO_TIPO]) && ($descTipo[self::ATRIBUTO_TIPO] == TIPO_DECIMAL) ) { $a_parametros[$fila][$campo] = $transformer->decimalPad( $a_parametros[$fila][$campo], $descTipo[self::ATRIBUTO_PARTE_DECIMAL] ); } if( empty($a_parametros[$fila][$campo]) ) { continue; } elseif( ($tipo_efectivo == TIPO_FECHA or $tipo_efectivo == TIPO_FECHAHORA) and is_object($a_parametros[$fila][$campo]) ) { $a_parametros[$fila][$campo] = $a_parametros[$fila][$campo]->format($fechauser.($tipo_efectivo==TIPO_FECHAHORA? ' H:i:s':'')); } else { $a_parametros[$fila][$campo] = $transformer->process($tipo_efectivo, $a_parametros[$fila][$campo]); } } } } if( !$vector ) { $a_parametros = $a_parametros[0]['col']; } return $a_parametros; } //Fin de prepararPresentacion /** * Este método permite recuperar un ActionForward (un destino). Esto permite cambiar el destino de * una accion. * * @param string $name Identificador del ActionForward que se quiere recuperar. * @return ActionForward */ public function getForward( $name ) { $forward = $this->comunica->getForward( $name ); if( empty($forward) ) { die('Error: no existe el retorno '.$name.', consulte el fichero de mapeo.'); } return $forward; } //Fin de getForward } //End IgepComunicaUsuario