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.
*
*
* @version $Id: IgepComunicaUsuario.php,v 1.58 2011-01-20 11:48:43 vnavarro 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';
/**
* @access public
* @var IgepComunicacion $comunica Instancia de IgepComunicacion
*/
public $comunica;
/**
* @access public
* @var array $datosPreinsertados Datos utilizados en las inseciones para las listas
*/
public $datosPreinsertados;
/**
* @access public
* @var array $listasPanel Coleccion (array) de las listas definidas en el panel
*/
public $listasPanel;
/**
* @access public
* @var IgepMensaje $obj_mensaje Objeto de la clase IgepMensaje que se creará en el caso de que el programador haga uso del método showMessage
*/
public $obj_mensaje = null;
/**
* Constructor. Recibe como parámetro una instancia viva de la clase
* IgepComunicacion
*
* @access public
* @param IgepComunicacion $comunica
* @param array $datosPreinsertados
* @param array $listasPanel
*/
public function __construct( & $comunica, & $datosPreinsertados, & $listasPanel )
{
$this->comunica = & $comunica;
$this->datosPreinsertados = & $datosPreinsertados;
$this->listasPanel = & $listasPanel;
}
/**
* reset reinicializa el acceso a datos
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return void
*/
public function reset( $parametroOperacion='' )
{
$this->comunica->reset( $parametroOperacion );
}
/**
* setOperation Fija la operación que va a ser origen de los datos
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return void
*/
public function setOperation( $parametroOperacion )
{
$this->comunica->setOperation( $parametroOperacion );
}
/**
* getOperation Permite cual es el origen de los datos actual
*
* @access public
* @return string
*/
public function getOperation()
{
return $this->comunica->getOperation();
}
/**
* setIndex Cuando se trabaja con un conjunto de fichas múltiple, se utiliza para fijar la fila
* (registro/tupla del conjunto) sobre la que estamos trabajando, por defecto, es la ficha que
* se está visializando (esta activa)
*
* @access public
* @param integer $indice Indice de 0..nRegs que indica la tuplas
*/
public function setIndex( $indice )
{
$this->comunica->int_filaActual = $indice;
}
/**
* getIndex Devuelve el valor del indice del cursor sobre el origen de datos actual
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return integer
*/
public function getIndex( $parametroOperacion='' )
{
return $this->comunica->getIndex( $parametroOperacion );
}
/**
* currentTupla Este método devuelve el registro activo sobre el origen de datos actual (cursor)
*
* @access public
* @param string $parametroOperacion 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 );
}
/**
* getSrcImg devuelve 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 $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getSrcImg( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->getCampo( $nombreCampo, $parametroOperacion );
}
/**
* getValue devuelve 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 $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getValue( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->getCampo( $nombreCampo, $parametroOperacion );
}
/**
* getOldValue devuelve el valor antiguo del campo indicado como párametro del registro activo
*
* @access public
* @param string $nombreCampo Nombre del campo
* @return mixed
*/
public function getOldValue( $nombreCampo )
{
return $this->comunica->getOldValue( $nombreCampo );
}
/**
* setSelected fija el valor de una lista
*
* @access public
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion 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 );
}
/**
* setChecked método que permite modificar el valor del un check.
*
* @access public
* @param string $name Nombre del check
* @param boolean $check Checked si o no
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return void
*/
public function setChecked( $name, $check, $parametroOperacion='' )
{
//Seleccionamos el valor dependiendo si esta seleccionado
$desc = $this->comunica->descCampoPanel[$name];
$value = ($check ? $desc[self::ATRIBUTO_VALUECHECKED] : $desc[self::ATRIBUTO_VALUEUNCHECKED] );
return $this->comunica->setCampo( $name, $value, $parametroOperacion );
}
/**
* isChecked método que permite saber si un check esta marcado o no
*
* @access public
* @param string $name Nombre del check
* @param string $parametroOperacion 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;
}
/**
* setSrcImg fija 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 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 );
}
/**
* setValue fija 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 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 );
}
/**
* setFocus fija el foco en el campo indicado ocmo parámetro del registro activo
*
* @access public
* @param string $nombreCampo Nombre del campo
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setFocus( $nombreCampo, $parametroOperacion='' )
{
return $this->comunica->setFocus( $nombreCampo, $parametroOperacion );
}
/**
* nextTupla Avanza la posición del cursor sobre el origen de datos
* actual (cursor) y devuelve el registro/tupla correspondiente
*
* @access public
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function nextTupla( $parametroOperacion='' )
{
return $this->comunica->nextTupla( $parametroOperacion );
}
/**
* fetchTupla devuelve el registro/tupla correspondiente y
* avanza la posición del cursor sobre el origen de datos
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function fetchTupla( $parametroOperacion='' )
{
return $this->comunica->fetchTupla( $parametroOperacion );
}
/**
* setTupla sustituye el registro actual de la fuente de datos
* prestablecida por el registro/tupla (array asociativo) pasado
* como parámetro
*
* @access public
* @param string $nombreCampo Nombre del campo
* @param string $valorCampo Valor del campo
* @param string $parametroOperacion 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 );
}
/**
* getAllTuplas obtiene la matriz de registros correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getAllTuplas( $parametroOperacion='' )
{
return $this->comunica->getAllTuplas( $parametroOperacion );
}
/**
* getAllTuplasAntiguas obtiene la matriz de registros original correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getAllTuplasAntiguas( $parametroOperacion='' )
{
return $this->comunica->getAllTuplasAntiguas( $parametroOperacion );
}
/**
* getAllOldTuplas obtiene la matriz de registros original correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function getAllOldTuplas( $parametroOperacion='' )
{
return $this->comunica->getAllTuplasAntiguas( $parametroOperacion );
}
/**
* setAllTuplas establece obtiene la matriz de registros correspondiente
* al origen de datos pasado como argumento o prestablecido
*
* @access public
* @param array $vTuplas Conjunto de tuplas/registros a asignar
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return mixed
*/
public function setAllTuplas( $vTuplas, $parametroOperacion='' )
{
return $this->comunica->setAllTuplas( $vTuplas, $parametroOperacion );
}
/**
* getAllFields metodo que devuelve los campos correspondientes a la matriz de datos de la operación 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='' )
{
return $this->comunica->getAllFields( $parametroOperacion );
}//Fin getAllFields
/**
* isEmpty indica si el origen de datos prestablecido esta vacio o no
*
* @access public
* @param string $parametroOperacion Origen de datos (datos para insertar, para modificar, para borrar)
* @return boolean
*/
public function isEmpty( $parametroOperacion='' )
{
return $this->comunica->isEmpty( $parametroOperacion );
}
/**
* getComponent devuelve el nombre del componente asociado al campo indicado como párametro
*
* @access public
* @param string $nombreCampo Nombre del campo.
* @return string
*/
public function getComponent( $nombreCampo )
{
return $this->comunica->getComponent( $nombreCampo );
}
/**
* getComponentAttributes devuelve un array con los atributos del componente asociado al campo indicado como párametro
*
* @access public
* @param string $nombreCampo Nombre del campo.
* @return string
*/
public function getComponentAttributes( $nombreCampo )
{
return $this->comunica->getComponentAttributes( $nombreCampo );
}
/**
* 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 function getList
/**
* setList fija el contenido de una lista
*
* @access public
* @param string $nombreCampo Nombre del campo de la lista.
* @param _IgepEstructuraLista $objListaStruc Estructura de la lista
* @param string $parametroOperacion 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 function setList
/**
* getFileInfo método que devuelve para una tupla dada la información de un campo de tipo 'FILE'
* que se ha subido al servidor.
*
* @access public
* @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, $pametroOperacion ='' )
{
return $this->comunica->getFileInfo( $nombreCampo, $pametroOperacion );
} //Fin function getFileInfo
/**
* Método que dada una tupla, fija el color para poder ser representado en una tabla de gvHidra
*
* @access public
* @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 function setRowColor
/* --------------------------FUNCIONES AUXILIARES -------------------------- */
/**
* Método privado que 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 function _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.
*
* @access public
* @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 function prepararPresentacion
/**
* Este método permite recuperar un actionForward (un destino). Esto permite cambiar el destino de
* una accion.
*
* @access public
* @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 function getForward
}//End IgepComunicaUsuario