* @author Vero: * @author Toni: * @package gvHIDRA **/ class IgepSmarty { public $preScript; public $v_eventosPesos; public $v_eventos; public $postScript; public $scriptLoadIgep; public $scriptLoadUsuario; public function __construct() { $this->IgepSmarty(); } //FIN constructor public function IgepSmarty() { $this->preScript=''; $this->postScript=''; $this->v_eventos = array(); $this->v_eventosPesos = array(); $configuration = ConfigFramework::getConfig(); $customDirname = $configuration->getCustomDirName(); define("APP_PATH",''); define("IMG_PATH_CUSTOM",APP_PATH.'custom/'.$customDirname.'/images/'); } //FIN constructor public function addPreScript($script) { $this->preScript .= $script."\n"; } //FIN addPreScript public function getPreScript($conCabecera=true) { $retorno =''; if ($this->preScript!='') { if ($conCabecera) { $retorno.="\n"; } else { $retorno.= $this->preScript; } } return ($retorno); } //FIN getPreScript public function addPostScript($script) { $this->postScript .= $script."\n"; } //FIN addPostScript public function getPostScript($conCabecera=true) { $retorno =''; if ($this->postScript!='') { if ($conCabecera) { $retorno.="\n"; } else { $retorno.=$this->postScript; } } return($retorno); } //FIN getPostScript /** * Esta función se encarga de almacenar el script que se ejecutará en el evento onLoad. * @param string $script String el codigo que se quiere añadir al evento OnLoad * @param string $escIni Indica el tipo de Script. Por definición de IGEP tenemos dos tipos: IGEP y USUARIO. * El primero corresponde con los scripts puntuales que IGEP tiene que inyectar en la ventana. El segundo * responde a los scripts que el usuario quiere que se carguen en la ventana durante toda su ejecución. * @access public */ public function addScriptLoad($script, $tipo='IGEP') { if($tipo=='USUARIO') $this->scriptLoadUsuario.=$script; else $this->scriptLoadIgep.=$script; }//Fin addScriptLoad public function getScriptLoad($conCabecera=true) { $script=''; if (($this->scriptLoadUsuario!='')or($this->scriptLoadIgep!='')) { if ($conCabecera) { $script .="\n"; } else $script .= $this->scriptLoadIgep."\n".';'.$this->scriptLoadUsuario; $this->scriptLoadIgep = ''; return $script; } else return ''; }//Fin de getScriptLoad /** * _validaEvento: Esta función se asegura de que el evento Javascript exista y este correctamente escrito * @param string $evento Cadena de texto con el nombre del evento * @access private */ public function _validaEvento(&$evento) { $v_eventos = array ( 'onfocus' => 'onFocus', 'onblur' => 'onBlur', 'onchange' => 'onChange', 'onabort' => 'onAbort', 'onclick' => 'onClick', 'ondblclick' => 'onDblClick', 'ondragdrop' => 'onDragDrop', 'onerror' => 'onError', 'onfocus' => 'onFocus', 'onkeydown' => 'onKeyDown', 'onkeypress' => 'onKeyPress', 'onkeyup' => 'onKeyUp', 'onload' => 'onLoad', 'onmousedown' => 'onMouseDown', 'onmousemove' => 'onMouseMove', 'onmouseout' => 'onMouseOut', 'onmouseover' => 'onMouseOver', 'onmouseup' => 'onMouseUp', 'onmove' => 'onMove', 'onresize' => 'onResize', 'onreset' => 'onReset', 'onselect' => 'onSelect', 'onsubmit' => 'onSubmit', 'onunload' => 'onUnLoad' ); if (array_key_exists(trim(strtolower($evento)), $v_eventos)) { $evento = $v_eventos[trim(strtolower($evento))]; return true; } else { $evento ='EVENTOINEXISTENTE'; return false; } } /** * addAccionEvento: Esta función registra una llamada a una función * javaScript en un evento determinado, opcionalmente puede introducirse * "importancia" o peso que servira para ordenar las distintas invocaciones * asociadas a un mismo evento * @param string $evento Cadena de texto con el nombre del Evento * @param string $script Cadena de texto con el nombre del Evento * @param int $pesoAccion Importancia o peso del script. Ordena los scrips asociados a un evento * @access public */ public function addAccionEvento($evento, $script, $pesoAccion=-1) { if (!$this->_validaEvento($evento)) die ('Error JAVASCRIPT, evento '.$evento.' inexistente.'); if ($pesoAccion== -1) { if (!is_array($this->v_eventos[$evento])) { $this->v_eventos[$evento] = array(); } array_push($this->v_eventos[$evento], $script); } else { while (isset($this->v_eventosPesos[$evento][$pesoAccion])) { ++$pesoAccion; } $this->v_eventosPesos[$evento][$pesoAccion] = $script; } } //FIN addAccionEvento public function _getAccion($nombreEvento, $v_Scripts) { $script=' '; if (is_array($v_Scripts) ) { foreach($v_Scripts as $accion) { $script.= $accion.';'; } //Añadimos la comprobacion de estado, si soy READONLY no disparo acciones: $iniScriptEstado = "if (this.readOnly != true) {"; $script = $nombreEvento.'="javascript:'.$iniScriptEstado.$script.'};" '; } return($script); } //FIN _getAccion public function getAcciones() { $script = ' '; $v_eventosFinal = array(); foreach($this->v_eventosPesos as $evento=>$vScriptPesos) { krsort($vScriptPesos); $v_eventosFinal[$evento] = $vScriptPesos; } foreach($this->v_eventos as $evento=>$valor) { foreach($valor as $scriptEjecutable){ if(empty($v_eventosFinal[$evento])) $v_eventosFinal[$evento] = array(); array_push($v_eventosFinal[$evento], $scriptEjecutable); } } $numEventos = count($v_eventosFinal); if ($numEventos>0) $v_nombreEvento = array_keys($v_eventosFinal); for($i=0; $i<$numEventos; $i++) { $nombreEvento = $v_nombreEvento[$i]; $script.=$this->_getAccion($nombreEvento,$v_eventosFinal[$nombreEvento]); } return($script); } //FIN getAcciones /** * escapeIgep: Funcion para sustituir carácteres especiales. * La funcion sustituye los carácteres problemáticos por una cadena * formada por un prefijo ($escIni), la raiz (letra de representación * del carácter) y un sufijo ($escFin) * Los carácteres a sustituir son: * \b Backspace raíz: b * \f Form feed raíz: f * \r Retorno de carro raíz: r * \n Linea Nueva raíz: n * \t Tabulador raíz: t * \' Comilla simple raíz: cs * \" Comilla doble raíz: cd * \\ Contrabarra raíz: cb * * La funcion antagónica es desescapeIGEP. * Existen funciones similares en javascript para poder enviar * o recibir cadenas problemáticas en entre los dos lenguajes * @access public * @param string $cadena String donde se realiza el reemplazo * @param string $escIni Prefijo de sustitución para el caracter * @param string $escFin Sufijo de sustitución para el caracter */ public static function escapeIGEP(&$cadena, $escIni="!_", $escFin="_!") { $cadena = str_replace("\n", $escIni.'n'.$escFin, $cadena); $cadena = str_replace("'", $escIni.'cs'.$escFin, $cadena); $cadena = str_replace("\"", $escIni.'cd'.$escFin, $cadena); $cadena = str_replace("\\", $escIni.'cb'.$escFin, $cadena); return($cadena); } //FIN escapeIGEP /** * desescapeIgep: Funcion para restablecer los carácteres especiales. * La funcion restablece los carácteres problemáticos de una cadena donde * se ha llevado acabo una sustituyción especial de escapeIgep() * Los carácteres remplazados son: * \b Backspace raíz: b * \f Form feed raíz: f * \r Retorno de carro raíz: r * \n Linea Nueva raíz: n * \t Tabulador raíz: t * \' Comilla simple raíz: cs * \" Comilla doble raíz: cd * \\ Contrabarra raíz: cb * * La funcion antagónica es escapeIGEP. * Existen funciones similares en javascript para poder enviar * o recibir cadenas problemáticas en entre los dos lenguajes * * @access public * @param string $cadena String donde se realiza el reemplazo * @param string $escIni Prefijo de sustitución para el caracter * @param string $escFin Sufijo de sustitución para el caracter */ public function desescapeIGEP(&$cadena, $escIni="!_", $escFin="_!") { $cadena = str_replace($escIni.'n'.$escFin, "\n", $cadena); $cadena = str_replace($escIni.'cs'.$escFin, "'", $cadena); $cadena = str_replace($escIni.'cd'.$escFin, "\"", $cadena); $cadena = str_replace($escIni.'cb'.$escFin, "\\", $cadena); return($cadena); } //FIN escapeIGEP /** * Método que genera el javascript para actualizar un componente CWCheckBox desde una acción de interfaz. * @param string idCheck nombre del check * @param boolean check Checked si o no * @param string hiddenName Nombre del hidden creado por el CWCheckBox * @param string value Valor del si o no * @return string cadena de Javascript */ public static function getJsSetCheck($idCheck, $check, $hiddenName, $value) { if ($check == '') $check = 0; $cadenaJs = << $idCheck'); $('#$idCheck').prop('checked',$check); gvh.changeField($('#$idCheck')); jquery; return $cadenaJs; } /** * IgepSmarty::getJsOpenWindow * * @access * @param * @return */ public static function getJsOpenWindow($path) { $x = rand(1,10000); $nomVentana = "ventana".$x; $cadenaJs = << 0) { campoDestino.removeClass(); campoDestino.addClass(newVal); } jquery; return $cadenaJs; } /** * IgepSmarty::getJsSetIcon * * @access * @param * @return */ public static function getJsSetIcon($campoDestino, $valor='') { $valueEsc = '"'.IgepSmarty::escapeIGEP($valor).'"'; $cadenaJs = << 0) { campoDestino.removeClass(); campoDestino.addClass(newVal); } jquery; return $cadenaJs; } /** * IgepSmarty::getJsSetFilterRules * * @access * @param * @return */ public static function getJsSetFilterRules($campoDestino, $rule) { IgepDebug::setDebug(DEBUG_USER, "
getJsSetFilterRules ".print_r($rule,true)."
"); $cadenaJs = << 0) && (txtMsgLength <= 0)) { if ($('textarea[id=$campoDestino]').parent().parent().find(".jqte_editor").length > 0) { $('textarea[id=$campoDestino]').parent().parent().find(".jqte_editor").html(newVal); $('textarea[id=$campoDestino]').parent().parent().find(".jqte_editor").jqteVal(newVal); $('#$campoDestino').val(newVal); // $('#$campoDestino').trigger('change'); gvh.changeField($('#$campoDestino'), newVal); } else { if ($('label[id=$campoDestino]').length > 0) { $('label[id=$campoDestino]').text(newVal); gvh.changeField($('label[id=$campoDestino]')); } else if ($('#$campoDestino').attr('data-content')) { $('#$campoDestino').attr('data-content', newVal); $('#$buttonInfo').html(); } else { $('#$campoDestino').val(newVal); gvh.changeField($('#$campoDestino'), newVal); } } } else if (txtMsgLength > 0) { $('#$txtMsg').html(newVal); } jquery; $cadenaJs .= << 0) { $("#$campoDestino").focus(); }; jquery; return $cadenaJs; } /** * IgepSmarty::getJsSetSrcImg * * @access * @param * @return */ public static function getJsSetSrcImg($campoDestino, $nombreDestino, $campoOrigen, $valor='',$valueIcon='') { $valueEsc = '"'.IgepSmarty::escapeIGEP($valor).'"'; $valueIcon = '"'.IgepSmarty::escapeIGEP($valueIcon).'"'; $cadenaJs = << 0) { $('#$campoDestino').attr('src',newVal); $('#bumpbox_$campoDestino').attr('href',newVal); } jquery; return $cadenaJs; } /** * IgepSmarty::getJsMensaje Genera un mensaje HTML/Js a partir de un objeto mensaje de * REVIEW Queda pendiente de discutir con el equipo de negocio si se deja aquí, * o se lleva a otra clase intermedia (IgepPantalla... etc...) * * @access public * @param Object $objMensaje Objeto Mansaje de gvHidra * @return string Cadena JavaScrip HTML correspondiente al mensaje */ public static function getJsMensaje($objMensaje) { $cadenaJS =""; $codigo = $objMensaje->getCodigo(); $titulo = $objMensaje->getDescripcionCorta(); $titulo = IgepSmarty::escapeIGEP($titulo); $descripcion = $objMensaje->getDescripcionLarga(); $descripcion = IgepSmarty::escapeIGEP($descripcion); $descripcion = ( empty($descripcion) ? 'none' : $descripcion ); //var alertify = parent.alertify; $tipo = strtolower($objMensaje->getTipo()); $cadenaJS = << 0) { idBtn = btn.attr('id'); } } else { var panelEdiLength = $('div[id=P_edi][data-gvhClaseManejadora=$claseManejadora]').length; var panelLisLength = $('div[id=P_lis][data-gvhClaseManejadora=$claseManejadora]').length; var panelEdiDetalleLength = $('div[id=P_ediDetalle][data-gvhClaseManejadora=$claseManejadora]').length; var panelLisDetalleLength = $('div[id=P_lisDetalle][data-gvhClaseManejadora=$claseManejadora]').length; if (panelEdiLength > 0) { var panelEdi = $('div[id=P_edi][data-gvhClaseManejadora=$claseManejadora]'); idBtn = panelEdi.attr('id'); } else if (panelLisLength > 0) { var panelLis = $('div[id=P_lis][data-gvhClaseManejadora=$claseManejadora]'); idBtn = panelLis.attr('id'); } else if (panelEdiDetalleLength > 0) { var panelEdiDetalle = $('div[id=P_ediDetalle][data-gvhClaseManejadora=$claseManejadora]'); idBtn = panelEdiDetalle.attr('id'); } else if (panelLisDetalleLength > 0) { var panelLisDetalle = $('div[id=P_lisDetalle][data-gvhClaseManejadora=$claseManejadora]'); idBtn = panellisDetalle.attr('id'); } } if ((claseM == '') || (claseM === undefined)) claseM = '$claseManejadora'; if (idBtn != '') { var objElemento = $('#'+idBtn+'[data-gvhClaseManejadora=$claseManejadora]'); gvh.formOnInsert(objElemento); } $('#blockPanel[data-gvhWindow='+gvh.ambito+'][data-gvhClaseManejadora=$claseManejadora]').hide(); } js; return $cadenaJs; } /** * IgepSmarty::getJsSetBttlState Establece el estado del boton Tooltip situado en la barra superior del panel * correspondiente a activado (true) o desactivado (false) * @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 String JavaScript HTML correspondiente al mensaje */ /* VERO: jQuery Faltará crear un nuevo método para habilitar/inhabilitar botones tooltip en el interior de la tabla/ficha * necesitará componer el nombre completo del botón ej. cam___nomCampo___panel_reg */ public static function getJsSetBttlState($idPanel, $nameBttl, $on=true) { $cadenaJs = << 0) $('#$campoDestino').attr('tabindex',$orden); jquery; return $cadenaJs; }//Fin getJsSetOrder /** * IgepSmarty::getJsSetVisible * * @access * @param * @return */ public static function getJsSetVisible($campoDestino, $valor='0') { $cadenaJs = << 0) { var visible = $('#IGEPVisible$campoDestino').is(":visible"); if (visible == false) { $('#IGEPVisible$campoDestino').show(); } } if (buttonVSLength > 0) { $('#vs_$campoDestino').show(); } if (buttonLength > 0) { $('#$campoDestino').show(); } jquery; } else { $cadenaJs .= << 0) { var visible = $('#IGEPVisible$campoDestino').is(":visible"); if (visible == true) { $('#IGEPVisible$campoDestino').hide(); } } if (buttonLength > 0) { $('#$campoDestino').hide(); } if (buttonVSLength > 0) { $('#vs_$campoDestino').hide(); } jquery; } $cadenaJs .= << campo destino: $campoDestino / enable $valor'); jquery; if (($valor == 1) || ($valor)) { $cadenaJs .= << 0) { var objElemento = $('input[name=$campoDestino]'); } gvh.setFieldEnable(objElemento,'true'); jquery; } else { $cadenaJs .= << 0) { var objElemento = $('input[name=$campoDestino]'); } gvh.setFieldEnable(objElemento,'false'); jquery; } $cadenaJs .= << botón destino: $campoDestino enable $valor'); var button = $('button[id=$campoDestino]'); var buttonLength = button.length; if (buttonLength > 0) { jquery; if (($valor == 1) || ($valor)) { $cadenaJs .= << $v) { $resultado[$k] = self::utf8ize($v); } } elseif(is_object($vArr)) { $resultado = clone $vArr; foreach ($vArr as $k => $v) { $resultado->$k = self::utf8ize($v); } } else { $resultado = gvHidraUTF8::toUTF8($vArr); } return $resultado; }//Fin utf8ize //A partir de un resultado genera el JavaScript necesario para que la lista se recargue por el oculto public static function getJsLista($campoDestinoJs, $resultado) { $jsAddOption .= << 0) { var campoDestino = $('#$campoDestinoJs').filter('[data-gvhWindow='+gvh.ambito+']'); var valueList = ''; var valueMultList = []; var claseM = $('#$campoDestinoJs').filter('[data-gvhWindow='+gvh.ambito+']').attr('data-gvhClaseManejadora'); var panel = $('#$campoDestinoJs').filter('[data-gvhWindow='+gvh.ambito+']').attr('data-gvhPanelOn'); var panelJSON = panel.substring(0,3); var raizJSON = gvh.datosJSON[claseM][panelJSON]; var css = $('#$campoDestinoJs').attr('class'); var tipoLista = campoDestino.attr('data-gvhCWSource'); if (tipoLista == 'cwlista') { jsAddOption; if (count($resultado['lista']) == 0) { $jsAddOption .= <<', {value: '',text: '',selected: 1})); jsAddOption; } else { $jsAddOption .= <<', {value: '$valor',text: desescapeIGEPjs('$descripcion'),class: 'text edit'})); jsAddOption; $selectOptions = $resultado['seleccionado']; $vField = explode( '___', $campoDestinoJs); $field = $campoDestinoJs; $row = 0; if (count($vField) > 1) { $field = $vField[1]; $row = explode('_',$vField[2])[1]; } // Lista múltiple $jsAddOption .= << option[value="$valor"]').attr('selected', 'selected'); valueMultList.push("$valor"); jsAddOption; } } } else { if ($selectOptions == $valor) { $jsAddOption .= << option[value="$valor"]').attr('selected', 'selected');\n jsAddOption; } } $jsAddOption .= << 0) gvh.setValue(raizJSON, field, reg, valueMultList); else gvh.setValue(raizJSON, field, reg, valueList); jsAddOption; } $jsAddOption .= << option[value="$valor"]').trigger('change'); gvh.changeField($('#$campoDestinoJs > option[value="$valor"]'),"$valor"); jsAddOption; } $jsAddOption .= << 0) { foreach($resultado['lista'] as $fila) { $valor = $fila["valor"]; $descripcion = self::utf8ize(IgepSmarty::escapeIGEP($fila["descripcion"])); $selectOptions = $resultado['seleccionado']; //new Option(text, value, defaultSelected, selected); if (is_array($selectOptions)) { if (in_array($valor, $selectOptions)) { $jsAddOption .= << 1) { $field = $vField[1]; $row = explode('_',$vField[2])[1]; } // Lista múltiple $jsAddOption .= << 0) gvh.setValue(raizJSON, field, reg, valueMultList); else gvh.setValue(raizJSON, field, reg, valueList); //campoDestino.trigger('change'); gvh.changeField(campoDestino); jsAddOption; } $jsAddOption .= <<