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.
*
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License v.2
* @version $Id: IgepComunicaIU.php,v 1.33 2018-08-11 11:22:49 belenguer_jor Exp $
* @author David Pascual
* @author Keka Bermejo
* @author Vero Navarro
* @author Raquel Borjabad
* @author Toni Felix
* @author Jorge Belenguer
*
* @package gvHidra
*/
class IgepComunicaIU extends IgepComunicaUsuario
{
/**
* Contiene el código JS que se va a ejecutar.
* @access protected
* @var string
*/
protected $script;
/**
* Prefijo para obtener los campos adaptado sen pantalla.
* @access protected
* @var string
*/
protected $_prefijoAdaptacion;
/**
* Prefijo para obtener los campos adaptados en pantalla.
* @access protected
* @var string
*/
protected $_sufijoAdaptacion;
/**
* Variable que contiene el nombre del campo que dispara la acción en el caso de las acciones de interfaz
* @access protected
* @var string
*/
protected $_campoDisparador;
/**
* Constructor. Recibe como parámetro una instancia viva de la clase
* IgepComunicacion.
*
* @param IgepComunicacion $comunica
* @param array $datosPreinsertados
* @param gvHidraList[] $listasPanel
* @param string $campoOrigen
*/
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]}";
}
} //Fin del constructor
/**
* 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 );
} //Fin de destinosAdaptados
/**
* 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;*/
if( $this->_prefijoAdaptacion == '')
{
return $nombreCampo;
}
return( $this->_prefijoAdaptacion . $nombreCampo . $this->_sufijoAdaptacion );
} //Fin de getCheckName
/**
* 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 )
{
if( $this->_prefijoAdaptacion == '' )
{
//Panel fil
return $nombreCampo;
}
elseif( $this->_prefijoAdaptacion == 'cam___' )
{
//Panel modo edi
return "cam___{$nombreCampo}{$this->_sufijoAdaptacion}";
}
else
{
//Panel modo ins
return "hins___{$nombreCampo}{$this->_sufijoAdaptacion}";
}
} //Fin de getCheckHiddenName
/**
* Establece el valor de un campo de texto en una accion de interfaz.
*
* @param string $nombreCampo Nombre del campo en la TPL.
* @param string $valor nuevo valor del campo.
* @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara.
*/
public function setValue( $nombreCampo, $valor, $parametroOperacion='' )
{
//Recogemos el tipo
$tipo = $this->comunica->descCampoPanel[$nombreCampo]['tipo'];
//Recogemos la parte decimal (si exite) para adaptar la presentación
$parteDecimal = $this->comunica->descCampoPanel[$nombreCampo]['parteDecimal'];
$nombreDestino = $nombreCampo;
$campoDestino = $nombreCampo;
if( $parametroOperacion != 'external' )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
}
$valor = IgepComunicaUsuario::prepararPresentacion( $valor, $tipo, $parteDecimal );
$campoOrigen = $this->_campoDisparador;
$this->script .= IgepSmarty::getJsSetCampoTexto( $campoDestino, $nombreDestino, $campoOrigen, $valor );
} // Fin de setValue
/**
* Establece el foco sobre el elemento elegido en una accion de interfaz.
*
* @param string $nombreCampo Nombre del campo en la TPL.
* @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara.
*/
public function setFocus( $nombreCampo, $parametroOperacion='' )
{
$nombreDestino = $nombreCampo;
$campoDestino = $nombreCampo;
if( $parametroOperacion != 'external' )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
}
$campoOrigen = $this->_campoDisparador;
$this->script .= IgepSmarty::getJsSetFocus( $campoDestino, $nombreDestino, $campoOrigen );
} //Fin de setFocus
/**
* Establece el atributo src de una imagen.
*
* @param string $nombreCampo Nombre del campo en la TPL.
* @param string $valor Nuevo valor del campo.
* @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara.
*/
public function setSrcImg( $nombreCampo, $valor, $parametroOperacion='' )
{
//Recogemos el tipo
$tipo = $this->comunica->descCampoPanel[$nombreCampo]['tipo'];
//Recogemos la parte decimal (si exite) para adaptar la presentación
$parteDecimal = $this->comunica->descCampoPanel[$nombreCampo]['parteDecimal'];
$nombreDestino = $nombreCampo;
$campoDestino = $nombreCampo;
if( $parametroOperacion != 'external' )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
}
$valor = IgepComunicaUsuario::prepararPresentacion( $valor, $tipo, $parteDecimal );
$campoOrigen = $this->_campoDisparador;
$this->script .= IgepSmarty::getJsSetSrcImg( $campoDestino, $nombreDestino, $campoOrigen, $valor );
$this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino, $nombreDestino, $campoOrigen );
} //Fin de setSrcImg
/**
* Establece el icono de un CWLabel en una accion de interfaz.
*
* @param string $nombreCampo Nombre del campo en la TPL.
* @param string $valor Nuevo valor del campo.
* @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara.
*/
public function setIcon( $nombreCampo, $valor, $parametroOperacion='' )
{
$campoDestino = $nombreCampo;
if( $parametroOperacion != 'external' )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
}
$this->script .= IgepSmarty::getJsSetIcon( $campoDestino, $valor );
} //Fin de setIcon
/**
* Establece el class(css) de un CWLabel en una accion de interfaz.
*
* @param string $nombreCampo Nombre del campo en la TPL.
* @param string $valor Nuevo valor del campo.
* @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara.
*/
public function setLabelClass( $nombreCampo, $valor, $parametroOperacion='' )
{
$campoDestino = $nombreCampo;
if( $parametroOperacion != 'external' )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
}
$this->script .= IgepSmarty::getJsSetLabelClass( $campoDestino, $valor );
$this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino );
} //End de setLabelClass
/**
* Establece 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.
*
* @param string $nombreCampo Nombre del campo.
* @param string $valor Valor del campo.
* @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara.
*/
public function setSelected( $nombreCampo, $valor, $parametroOperacion='' )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
$this->script .= IgepSmarty::getJsSetSelected( $campoDestino, $valor );
$this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino );
} //End de setSelected
/**
* Establece 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.
*
*
* @param string $nombreCampo Nombre del componente lista.
* @param gvHidraList $objListaStruc Estructura de la lista.
* @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara.
*/
public function setList( $nombreCampo, $objListaStruc, $parametroOperacion= '' )
{
$v_lista = $objListaStruc->getEstructuraListaIgep();
$campoDestino = $this->destinosAdaptados( $nombreCampo );
$this->script .= IgepSmarty::getJsLista( $campoDestino, $v_lista );
//$this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino );
} //Fin de setList
/**
* Estalece el valor del un check en una accion de interfaz.
*
* @param string $nombreCampo Nombre del campo check.
* @param boolean $check Checked sí o no.
*/
public function setChecked( $nombreCampo, $check, $parametroOperacion='' )
{
$idCheck = $this->getCheckName( $nombreCampo );
$hiddenName = $this->getCheckHiddenName( $nombreCampo );
//Seleccionamos el valor dependiendo si esta seleccionado
$desc = $this->comunica->descCampoPanel[$idCheck];
$value = ($check ? $desc['valueChecked'] : $desc['valueUnchecked']);
$this->script.= IgepSmarty::getJsSetCheck( $idCheck, $check, $hiddenName, $value );
} //Fin de setChecked
/**
* Establece la visibilidad de un componente en una accion de interfaz.
*
* @param string $nombreCampo Nombre del campo/componente.
* @param boolean $valor Indica si se quiere ver o no.
*/
public function setVisible( $nombreCampo, $valor )
{
//Obtenemos el tipo de widget
$desc = $this->comunica->descCampoPanel[$nombreCampo];
if( $desc['component'] == 'CheckBox' )
{
$campoDestino = $this->getCheckName( $nombreCampo );
}
else
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
}
$this->script .= IgepSmarty::getJsSetVisible( $campoDestino, $valor );
} //Fin de setVisible
/**
* setEnable metodo que permite modificar la accesibilidad de un componente en una accion de interfaz.
*
* @param string $nombreCampo Nombre del campo/componente.
* @param boolean $valor Indica si es editable o no.
*/
public function setEnable( $nombreCampo, $valor )
{
//Obtenemos el tipo de widget
$desc = $this->comunica->descCampoPanel[$nombreCampo];
$tipoComponente = null;
$campoDestino = $this->destinosAdaptados($nombreCampo);
if ($desc['component'] == 'CheckBox')
{
$tipoComponente = 'CheckBox';
$campoDestino = $this->getCheckName( $nombreCampo );
}
elseif( $desc['radio'] )
{
$tipoComponente = 'Radio';
}
$this->script .= IgepSmarty::getJsSetEnable( $campoDestino, $valor, $tipoComponente );
} //Fin de setEnable
/**
* Establece si un botón es dependiente del estado del panel o no
*
* @param string $nombreCampo Nombre del campo botón.
* @param boolean $valor Booleano que indica si es dependiente o no.
*/
public function setDependPanel( $nombreCampo, $valor )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
$this->script .= IgepSmarty::getJsSetDependPanel( $campoDestino, $valor );
} //Fin de setDependPanel
/**
* Establece el tabindex de un componente de pantalla de forma dinámica.
*
* @param string $nombreCampo Nombre del campo/componente.
* @param boolean $value Valor asignado.
*/
public function setTabIndex( $nombreCampo, $value )
{
$campoDestino = $this->destinosAdaptados( $nombreCampo );
$this->script .= IgepSmarty::getJsSetOrder( $campoDestino, $value );
} //Fin de setTabIndex
/**
* Establece el estado del boton Tooltip correspondiente a activado (true) o desactivado (false).
*
* @param string $idPanel 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.
*/
public function setBttlState( $idPanel, $nameBttl, $on )
{
$this->script .= IgepSmarty::getJsSetBttlState( $idPanel, $nameBttl, $on );
} //Fin de setBttlState
/**
* Establece el nombre del campo que dispara la acción en las acciones de interfaz.
*
* @param string $nombreCampo Nombre del campo/componente.
*/
public function setTriggerField( $nombreCampo )
{
$this->_campoDisparador = $nombreCampo;
} //Fin de setTriggerField
/**
* Devuelve el nombre del campo que dispara la acción en las acciones de interfaz.
*
* @return string
*/
public function getTriggerField()
{
return $this->_campoDisparador;
} //return getTriggerField
/**
* Establece la posición (índice) de la ficha activa
*
* @param integer $indiceFila
*/
public 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 );
} //Fin de posicionarEnFicha
/**
* 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 getScript
*/
//
//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;
} //Fin de getScript
/**
* {@inheritDoc}
* @see IgepComunicaUsuario::getForward()
*/
public function getForward( $name )
{
die( 'Error: no se puede hacer uso de esta funcionalidad desde una acción de interfaz.' );
} //Fin de getForward
} //End IgepComunicaIU