* El framework proporcionará una instancia de esta clase en todas las acciones de interfaz.
* Mediante los métodos que proporciona el programador podrá hacer operaciones sobre la IU
* y el FW se encargará de traducirlas en el Javascript pertinente.
*
*
* @version $Id: IgepComunicaIU.php,v 1.32 2010-02-03 11:22:49 afelixf Exp $
* @author David:
* @author Keka:
* @author Vero:
* @author Raquel:
* @author Toni:
* @package gvHIDRA
*/
class IgepComunicaIU extends IgepComunicaUsuario {
/*
* Contiene el código JS que se va a ejecutar
* @access private
* @var string
*/
var $script;
/*
* Prefijo para obtener los campos adaptados
* en pantalla
* @access private
* @var string
*/
var $prefijoAdaptacion;
/*
* Prefijo para obtener los campos adaptados
* en pantalla
* @access private
* @var string
*/
var $sufijoAdaptacion;
/*
* Variable que contiene el nombre del campo que dispara la acción en el caso de las acciones de interfaz
* @access private
* @var string
*/
var $_campoDisparador;
/**
* Constructor. Recibe como parámetro una instancia viva de la clase
* IgepComunicacion
*
* @access public
* @param object $comunica
*/
public function __construct(& $comunica, & $datosPreinsertados, & $listasPanel, $campoOrigen) {
parent::__construct($comunica, $datosPreinsertados, $listasPanel);
$this->script = '';
//Almacenamos los destinosAdaptados en un array indexado por el nombre del campo
$this->prefijoAdaptacion ='';
$this->sufijoAdaptacion ='';
$auxDestino = $campoOrigen;
$v_auxDestino = explode('___',$auxDestino,3);
if (count($v_auxDestino)>2) {
$this->prefijoAdaptacion = $v_auxDestino[0].'___';
$this->sufijoAdaptacion = '___'.$v_auxDestino[2];
}
}
/**
* destinosAdaptados. Devuelve el nombre del campo en formato HTML
*
* @access private
* @param string $nombreCampo
* @return string
*/
private function destinosAdaptados($nombreCampo) {
return ($this->prefijoAdaptacion.$nombreCampo.$this->sufijoAdaptacion);
}
/**
* Método que devuelve el nombre de un check en HTML
*
* @access private
* @param string $nombreCampo Nombre del campo
* @return string devuelve el id del check en formato HTML
*/
private function getCheckName($nombreCampo) {
//Panel fil
if($this->prefijoAdaptacion=='')
return 'chkbfil_'.$nombreCampo;
//Panel modo edi
elseif($this->prefijoAdaptacion == 'cam___')
return 'ccam___'.$nombreCampo.$this->sufijoAdaptacion;
//Panel modo ins
else
return 'cins___'.$nombreCampo.$this->sufijoAdaptacion;
}
/**
* Método que devuelve el nombre del hidden de un check
*
* @access private
* @param string $nombreCampo Nombre del campo
* @return string devuelve el campo en formato HTML
*/
private function getCheckHiddenName($nombreCampo) {
//Panel fil
if($this->prefijoAdaptacion=='')
return $nombreCampo;
//Panel modo edi
elseif($this->prefijoAdaptacion == 'cam___')
return 'cam___'.$nombreCampo.$this->sufijoAdaptacion;
//Panel modo ins
else
return 'hins___'.$nombreCampo.$this->sufijoAdaptacion;
}
/**
* setValue método que fija el valor de un campo de texto en una accion de interfaz.
*
* @access public
* @param string $nombreCampo Nombre del campo en la TPL
* @param string $valor nuevo valor del campo
* @return void
*/
public function setValue($campo, $valor, $parametroOperacion='')
{
//Recogemos el tipo
$tipo = $this->comunica->descCampoPanel[$campo]['tipo'];
//Recogemos la parte decimal (si exite) para adaptar la presentación
$parteDecimal = $this->comunica->descCampoPanel[$campo]['parteDecimal'];
$nombreDestino = $campo;
if ($parametroOperacion == 'external')
$campoDestino = $campo;
else
$campoDestino = $this->destinosAdaptados($campo);
$valor = IgepComunicaUsuario::prepararPresentacion($valor, $tipo, $parteDecimal);
$campoOrigen = $this->_campoDisparador;
$this->script.= IgepSmarty::getJsSetCampoTexto($campoDestino, $nombreDestino, $campoOrigen, $valor);
$this->script .= IgepSmarty::getJsSetEstadoModificado($campoDestino,$nombreDestino, $campoOrigen);
}
/**
* setFocus método que fija el foco sobre el elemento elegiso en una accion de interfaz.
*
* @access public
* @param string $nombreCampo Nombre del campo en la TPL
* @return void
*/
public function setFocus($campo, $parametroOperacion='')
{
$nombreDestino = $campo;
if ($parametroOperacion == 'external')
{
$campoDestino = $campo;
}
else
{
$campoDestino = $this->destinosAdaptados($campo);
}
$campoOrigen = $this->_campoDisparador;
$this->script.= IgepSmarty::getJsSetFocus($campoDestino, $nombreDestino, $campoOrigen);
}//Fin setFocus
/**
* setSrcImg método que fija el atributo src de una imagen
*
* @access public
* @param string $nombreCampo Nombre del campo en la TPL
* @param string $valor nuevo valor del campo
* @return void
*/
public function setSrcImg($campo, $valor, $parametroOperacion='')
{
//Recogemos el tipo
$tipo = $this->comunica->descCampoPanel[$campo]['tipo'];
//Recogemos la parte decimal (si exite) para adaptar la presentación
$parteDecimal = $this->comunica->descCampoPanel[$campo]['parteDecimal'];
$nombreDestino = $campo;
if ($parametroOperacion == 'external')
$campoDestino = $campo;
else
$campoDestino = $this->destinosAdaptados($campo);
$valor = IgepComunicaUsuario::prepararPresentacion($valor, $tipo, $parteDecimal);
$campoOrigen = $this->_campoDisparador;
$this->script.= IgepSmarty::getJsSetSrcImg($campoDestino, $nombreDestino, $campoOrigen, $valor);
$this->script .= IgepSmarty::getJsSetEstadoModificado($campoDestino,$nombreDestino, $campoOrigen);
}
/**
* setIcon método que fija el icono de un CWLabel en una accion de interfaz.
*
* @access public
* @param string $nombreCampo Nombre del campo en la TPL
* @param string $valor nuevo valor del campo
* @return void
*/
public function setIcon($campo, $valor, $parametroOperacion='')
{
if ($parametroOperacion == 'external')
$campoDestino = $campo;
else
$campoDestino = $this->destinosAdaptados($campo);
$this->script.= IgepSmarty::getJsSetIcon($campoDestino, $valor);
$this->script .= IgepSmarty::getJsSetEstadoModificado($campoDestino);
}
/**
* setLabelClass método que fija el class(css) de un CWLabel en una accion de interfaz.
*
* @access public
* @param string $nombreCampo Nombre del campo en la TPL
* @param string $valor nuevo valor del campo
* @return void
*/
public function setLabelClass($campo, $valor, $parametroOperacion='')
{
if ($parametroOperacion == 'external')
$campoDestino = $campo;
else
$campoDestino = $this->destinosAdaptados($campo);
$this->script.= IgepSmarty::getJsSetLabelClass($campoDestino, $valor);
$this->script .= IgepSmarty::getJsSetEstadoModificado($campoDestino);
}
/**
* setSelected fija el valor de una lista en una acción de interfaz.
*
* Este metodo se debe utilizar si se quiere cambiar el valor seleccionado de una lista.
*
* @access public
* @param string $campo Nombre del campo
* @param string $valor Valor del campo
* @return none
*/
public function setSelected($campo, $valor, $parametroOperacion='') {
$campoDestino = $this->destinosAdaptados($campo);
$this->script.= IgepSmarty::getJsSetSelected($campoDestino, $valor);
$this->script .= IgepSmarty::getJsSetEstadoModificado($campoDestino);
}
/**
* setList cambia el contenido de una lista en una accion de interfaz.
*
* Este metodo se debe utilizar si se quiere cambiar el contenido entero de una lista.
* Suele venir combinado con la obtencion de la lista con el metodo getList.
*
*
* @access public
* @param string $campo nombre del componente lista
* @param string $objListaStruc estructura de la lista
* @return none
*/
public function setList($campo, $objListaStruc, $parametroOperacion= '') {
$v_lista = $objListaStruc->getEstructuraListaIgep();
$campoDestino = $this->destinosAdaptados($campo);
$this->script.= IgepSmarty::getJsLista($campoDestino, $v_lista);
$this->script .= IgepSmarty::getJsSetEstadoModificado($campoDestino);
}
/**
* setChecked metodo que permite modificar el valor del un check en una accion de interfaz.
*
* @access public
* @param string name nombre del check
* @param boolean check Checked si o no
* @return void
*/
public function setChecked($name, $check, $parametroOperacion='') {
$idCheck = $this->getCheckName($name);
$hiddenName = $this->getCheckHiddenName($name);
//Seleccionamos el valor dependiendo si esta seleccionado
$desc = $this->comunica->descCampoPanel[$name];
($check)?$value=$desc['valueChecked']:$value=$desc['valueUnchecked'];
$this->script.= IgepSmarty::getJsSetCheck($idCheck, $check, $hiddenName, $value);
}
/**
* setVisible metodo que permite modificar la visibilidad de un componente en una accion de interfaz.
*
* @access public
* @param string $name nombre del componente
* @param boolean $valor booleano que indica si se quiere ver o no.
* @return void
*/
public function setVisible($campo, $valor)
{
//Obtenemos el tipo de widget
$desc = $this->comunica->descCampoPanel[$campo];
if($desc['component'] == 'CheckBox')
$campoDestino = $this->getCheckName($campo);
else
$campoDestino = $this->destinosAdaptados($campo);
$this->script.= IgepSmarty::getJsSetVisible($campoDestino, $valor);
}
/**
* setEneble metodo que permite modificar la accesibilidad de un componente en una accion de interfaz.
*
* @access public
* @param string $name nombre del componente
* @param boolean $valor booleano que indica si es editable o no
* @return void
*/
public function setEnable($campo, $valor)
{
//Obtenemos el tipo de widget
$desc = $this->comunica->descCampoPanel[$campo];
$tipoComponente = null;
$campoDestino = $this->destinosAdaptados($campo);
if ($desc['component'] == 'CheckBox')
{
$tipoComponente = 'CheckBox';
$campoDestino = $this->getCheckName($campo);
}
else if ($desc['radio']==true)
{
$tipoComponente = 'Radio';
}
$this->script.= IgepSmarty::getJsSetEnable($campoDestino, $valor, $tipoComponente);
}
/**
* setTabIndex metodo que permite modificar el tabindex de un componente de pantalla de forma dinamica.
*
* @access public
* @param string $name nombre del componente
* @param boolean $value valor asignado
* @return void
*/
public function setTabIndex($name, $value)
{
$campoDestino = $this->destinosAdaptados($name);
$this->script.= IgepSmarty::getJsSetOrder($campoDestino, $value);
}
/**
* setBttlState Establece el estado del boton Tooltip correspondiente a activado (true) o desactivado (false)
* Botón situado en la barra superior del panel
*
* @access public
* @param String $panel Indica el panel sobre el que se sitúa el botonTooltip |||
* @param String $nameBttl Nombre del boton tooltip
* @param Boolean $on True para activar, false para desahabilitar
* @return void
*/
public function setBttlState($idPanel, $nameBttl, $on) {
$this->script.=IgepSmarty::getJsSetBttlState($idPanel, $nameBttl, $on);
}
/**
* _setCampoDisparador método interno para fijar el nombre del campo que dispara la acción en las acciones de interfaz
*
* @access private
* @param string $nombreCampo
* @return void
*/
function _setCampoDisparador($nombreCampo) {
$this->_campoDisparador = $nombreCampo;
}
/**
* getTriggerField método para obtener el nombre del campo que dispara la acción en las acciones de interfaz
*
* @access public
* @return string
*/
public function getTriggerField(){
return $this->_campoDisparador;
}
/**
* posicionarEnFicha permite cambiar la ficha activa
*
* @access private
* @return void
*/
function posicionarEnFicha($indiceFila) {
if($this->sufijoAdaptacion!=''){
$v_auxUno = explode('___',$this->sufijoAdaptacion);
$v_auxDos = explode('_',$v_auxUno[1]);
$this->sufijoAdaptacion = '___'.$v_auxDos[0].'_'.$indiceFila;
}
$this->comunica->posicionarEnTupla($indiceFila);
}
/**
* getActiveMode obtenemos 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.
* - edi : Edición o modo de ficha.
*
* @access public
* @return string
*/
public function getActiveMode() {
return $this->comunica->damePanelActivo();
}
//PROVISIONAL
public function getScript() {
if(!empty($this->script)) {
var_dump(libxml_use_internal_errors(true));
$dom = new DOMDocument();
@$dom->loadHTML($this->script);
$script = @$dom->getElementsByTagName('script');
$remove = array();
foreach($script as $item) {
$remove[] = $item;
}
if(count($remove)>0)
{
foreach ($remove as $item) {
$cadenaBorrable = $item->nodeValue;
$this->script=str_replace($cadenaBorrable,'',$this->script);
}
$this->script=str_replace('','',$this->script);
$this->script=str_replace('','',$this->script);
}
libxml_clear_errors();
}
return $this->script;
}
//REVIEW: Toni Para poder conseguir que las acciones de negocio tengan acceso a mapeos diferentes a los ya especificados por gvHidra
public function getForward($name){
die('Error: no se puede hacer uso de esta funcionalidad desde una acción de interfaz.');
}
}
?>