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; /** * Variable booleana que indica si se está paginando entre registros o no * @access protected * @var string */ protected $_onPagination; /** * 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( is_array($v_auxDestino) && (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 $label nuevo valor para la etiqueta que acompaña al 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, $label = false, $parametroOperacion='' ) { $nombreDestino = $nombreCampo; $campoDestino = $nombreCampo; if( $parametroOperacion != 'external' ) { $campoDestino = $this->destinosAdaptados( $nombreCampo ); } $campoOrigen = $this->_campoDisparador; // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; if ($label) { $this->script .= IgepSmarty::getJsSetLabelCampo( $campoDestino, $nombreDestino, $campoOrigen, $claseM, $valor ); } else { //Recogemos el tipo $tipo = ''; $parteDecimal = ''; if (isset($this->comunica->descCampoPanel[$nombreCampo])) { if (isset($this->comunica->descCampoPanel[$nombreCampo]['tipo'])) { $tipo = $this->comunica->descCampoPanel[$nombreCampo]['tipo']; } if (isset($this->comunica->descCampoPanel[$nombreCampo]['parteDecimal'])) { //Recogemos la parte decimal (si exite) para adaptar la presentación $parteDecimal = $this->comunica->descCampoPanel[$nombreCampo]['parteDecimal']; } } $valor = IgepComunicaUsuario::prepararPresentacion( $valor, $tipo, $parteDecimal ); $this->script .= IgepSmarty::getJsSetCampoTexto( $campoDestino, $nombreDestino, $campoOrigen, $claseM, $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; // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetFocus( $campoDestino, $nombreDestino, $campoOrigen, $claseM ); } //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; // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetSrcImg( $campoDestino, $nombreDestino, $campoOrigen, $claseM, $valor ); $this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino, $claseM, 'setSrcImg'); } //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 ); } // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetIcon( $campoDestino, $valor, $claseM ); } //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 ); } // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetLabelClass( $campoDestino, $claseM, $valor ); $this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino, $claseM, 'setLabelClass' ); } //End de setLabelClass /** * Establece el valor de una lista en una acción de interfaz. * *

Este método 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 ); // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetSelected( $campoDestino, $valor, $claseM ); $this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino, $claseM, 'setSelected' ); } //End de setSelected /** * Deselecciona todos los valores seleccionados de una lista en una acción de interfaz. * *

Este método se debe utilizar si se quiere eliminar todos los valores seleccionados de una lista.

* * @param string $nombreCampo Nombre del campo. */ public function setUnselected( $nombreCampo ) { $campoDestino = $this->destinosAdaptados( $nombreCampo ); // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetUnSelected( $campoDestino, $claseM ); $this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino, $claseM, 'setUnSelected' ); } //End de setSelected /** * 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 $index Índice de la opción a seleccionar en la lista. * @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara. */ public function setSelectedIndex( $nombreCampo, $index, $parametroOperacion='' ) { $campoDestino = $this->destinosAdaptados( $nombreCampo ); $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']; } // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetSelected( $campoDestino, $valor, $claseM ); $this->script .= IgepSmarty::getJsSetEstadoModificado( $campoDestino, $claseM, 'setSelectedIndex' ); } //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 ); // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsLista( $campoDestino, $v_lista, $claseM ); } //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']); // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script.= IgepSmarty::getJsSetCheck( $idCheck, $check, $hiddenName, $value, $claseM ); } //Fin de setChecked /** * Selecciona un nodo del árbol * * @param string $nombreCampo Nombre del campo árbol. * @param string $key * @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara. */ public function setSelectedNodeByKey( $nombreCampo, $key, $parametroOperacion='' ) { $nombreDestino = $nombreCampo; $campoDestino = $nombreCampo; if( $parametroOperacion != 'external' ) { $campoDestino = $this->destinosAdaptados( $nombreCampo ); } $campoOrigen = $this->_campoDisparador; // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetSelectedNodeByKey( $campoDestino, $nombreDestino, $campoOrigen, $key, $claseM ); } //Fin de setSelectedNodeByKey /** * Asignación del json a un elemento árbol * * @param string $nombreCampo Nombre del campo árbol. * @param string $json * @param string $parametroOperacion (Opcional) El tipo de operación: insertar, borrar, actualizar, ... hay que dar una lista fija y clara. */ public function setTree( $nombreCampo, $json, $parametroOperacion='' ) { $nombreDestino = $nombreCampo; $campoDestino = $nombreCampo; if ( $parametroOperacion != 'external' ) { $campoDestino = $this->destinosAdaptados( $nombreCampo ); } $campoOrigen = $this->_campoDisparador; // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetJsonTree( $campoDestino, $nombreDestino, $campoOrigen, $json, $claseM ); } //Fin de setTree /** * 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( isset($desc['component']) && ($desc['component'] == 'CheckBox') ) { $campoDestino = $this->getCheckName( $nombreCampo ); } else { $campoDestino = $this->destinosAdaptados( $nombreCampo ); } // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetVisible( $campoDestino, $valor, $claseM ); } //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. */ // REDMINE #23133: inputDate public function setEnable( $nombreCampo, $valor, $inputDate = 'both' ) { //Obtenemos el tipo de widget $desc = $this->comunica->descCampoPanel[$nombreCampo]; $tipoComponente = null; $campoDestino = $this->destinosAdaptados($nombreCampo); if (isset($desc['component']) && ($desc['component'] == 'CheckBox')) { $tipoComponente = 'CheckBox'; $campoDestino = $this->getCheckName( $nombreCampo ); } elseif( isset($desc['radio']) && ($desc['radio']) ) { $tipoComponente = 'Radio'; } // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetEnable( $campoDestino, $valor, $tipoComponente, $inputDate, $claseM ); } //Fin de setEnable /** * setEnableTriggerEvent 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. */ // REDMINE #23133: inputDate public function setEnableTrigger( $nombreCampo, $valor, $external = false ) { //Obtenemos el tipo de widget $desc = $this->comunica->descCampoPanel[$nombreCampo]; $tipoComponente = null; $campoDestino = $this->destinosAdaptados($nombreCampo); if (isset($desc['component']) && ($desc['component'] == 'CheckBox')) { $tipoComponente = 'CheckBox'; $campoDestino = $this->getCheckName( $nombreCampo ); } elseif( isset($desc['radio']) && ($desc['radio']) ) { $tipoComponente = 'Radio'; } if ($external == 'external') { $external = true; } // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetEnableTrigger( $campoDestino, $valor, $claseM, $external); } //Fin de setEnableTriggerEvent /** * Establece si el campo es de tipo password o no * * @param string $nombreCampo Nombre del campo/componente. * @param boolean $valor Indica si es de tipo password o no. */ public function setPasswordType( $nombreCampo, $valor ) { //Obtenemos el tipo de widget $desc = $this->comunica->descCampoPanel[$nombreCampo]; if( isset($desc['component']) && ($desc['component'] == 'CheckBox') ) { $campoDestino = $this->getCheckName( $nombreCampo ); } else { $campoDestino = $this->destinosAdaptados( $nombreCampo ); } // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetPasswordType( $campoDestino, $valor, $claseM); } //Fin de setPasswordType /** * 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 ); // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetDependPanel( $campoDestino, $valor, $claseM ); } //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 ); // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetOrder( $campoDestino, $claseM, $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 ) { // REDMINE #23228 $claseM = $this->comunica->_infoPanel['claseM']; $this->script .= IgepSmarty::getJsSetBttlState( $idPanel, $nameBttl, $claseM, $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 // REDMINE #23367 /** * Fija si se ha paginado o no * * @param boolean $pag */ public function setOnPagination( $pag ) { if (($pag == 'true') || ($pag === true)) { $pag = true; } else { $pag = false; } $this->_onPagination = $pag; } //Fin de setOnPagination /** * Devuelve si se ha paginado o no. * * @return boolean */ public function getOnPagination() { return $this->_onPagination; } //return getOnPagination /** * 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 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 devuelve el nombre de la clase manejadora * @return string */ // REDMINE #23228 public function getClaseMPanel() { return $this->comunica->_infoPanel['claseM']; } //Fin de getClaseMPanel /** * Método getScript */ // //PROVISIONAL // public function getScript() { if(! empty($this->script) ) { 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( is_array($remove) && (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