* @author Keka: * @author Vero: * @author Raquel: * @author Toni: * @package igep **/ class IgepSmarty { var $preScript; var $v_eventosPesos; var $v_eventos; var $postScript; var $scriptLoadIgep; var $scriptLoadUsuario; function IgepSmarty() { $this->preScript=''; $this->postScript=''; $this->v_eventos = array(); $this->v_eventosPesos = array(); } //FIN constructor function addPreScript($script) { $this->preScript .= $script."\n"; } //FIN addPreScript function getPreScript($conCabecera=true) { if ($this->preScript!='') { if ($conCabecera) { return("\n"); } else { return ($this->preScript); } } else { return ''; } } //FIN getPreScript function addPostScript($script) { $this->postScript .= $script."\n"; } //FIN addPostScript function getPostScript($conCabecera=true) { if ($this->postScript!='') { if ($conCabecera) { return("\n"); } else { return ($this->postScript); } } else { return ''; } } //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 */ function addScriptLoad($script, $tipo='IGEP') { //$script = 'alert(document.lis_paginacion.nom_variable)'.$script; if($tipo=='USUARIO') $this->scriptLoadUsuario.=$script; else $this->scriptLoadIgep.=$script; }//Fin addScriptLoad 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 /** * * Se asegura que el evento JS exista y que no haya * problemas de mayúsculas, minúsculas... etc * * */ function _validaEvento(&$evento) { $v_eventos = array ( 'onblur' => 'onBlur', 'onchange' => 'onChange', 'onabort' => 'onAbort', 'onclick' => 'onClick', 'ondragdrop' => 'onDragDrop', 'onerror' => 'onError', 'onfocus' => 'onFocus', 'onkeydown' => 'onKeyDown', 'onkeypress' => 'onKeyPress', 'onkeyup' => 'onKeyUp', 'onload' => 'oLoad', '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)) { $eventos = $v_eventos[trim(strtolower($eventos))]; return true; } else { $evento ='EVENTOINEXISTENTE'; return false; } } 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 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 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 */ function escapeIGEP(&$cadena, $escIni="!_", $escFin="_!") { $cadena = str_replace("\b", $escIni.'b'.$escFin, $cadena); $cadena = str_replace("\f", $escIni.'f'.$escFin, $cadena); $cadena = str_replace("\r", $escIni.'r'.$escFin, $cadena); $cadena = str_replace("\n", $escIni.'n'.$escFin, $cadena); $cadena = str_replace('\t', $escIni.'t'.$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 /** * deescapeIgep: 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 */ function desescapeIGEP(&$cadena, $escIni="!_", $escFin="_!") { $cadena = str_replace($escIni.'b'.$escFin, "\b", $cadena); $cadena = str_replace($escIni.'f'.$escFin, "\f", $cadena); $cadena = str_replace($escIni.'r'.$escFin, "\r", $cadena); $cadena = str_replace($escIni.'n'.$escFin, "\n", $cadena); $cadena = str_replace($escIni.'t'.$escFin, "\t", $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 //A partir de un resultado genera el JavaScript necesario para que la lista se recargue por el oculto function getJsLista($campoDestinoJs, $resultado){ $opciones = ''; //Si no tiene resultado hay que indicar que el seleccionado de la lista es uno vacio if(count($resultado['lista'])==0) $opciones.="insertar_opcion(\"\",\"\",1);\n"; else { foreach($resultado['lista'] as $fila) { if($resultado['seleccionado']==$fila['valor']) $opciones.="insertar_opcion(\"".$fila["valor"]."\",desescapeIGEPjs('".IgepSmarty::escapeIGEP($fila["descripcion"])."'),1);\n"; else $opciones.="insertar_opcion(\"".$fila["valor"]."\",desescapeIGEPjs('".IgepSmarty::escapeIGEP($fila["descripcion"])."'),0);\n"; } } $opciones.= "cambia(formulario,'".$campoDestinoJs."',opciones);\n"; $opciones .= "opciones.length = 0;\n"; return $opciones; }//Fin de getJsLista /** * PENDIENTE DE REFACTORING: Devuelve el código JavaScript/HTML que * debe ejecutarse para mostrar un mensaje según la guía de estilo, * se incluye aquí para evitar las llamadas directas a javaScript * (alerts) en IgepNegocio, pues dicha clase debe aislar la presentación. * 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 string nombreForm Opcional, nombre del formulario si el mensaje * @param string cadAction * @return string Cadena JavaScrip HTML correspondiente al mensaje */ function getJsMensaje(&$objMensaje) { $cadenaJS =""; $cadenaJS .="aviso=parent.aviso;"; $cadenaJS .="aviso.set('aviso', 'capaAviso'"; $cadenaJS .=", '"; $cadenaJS .=$objMensaje->getTipo(); $cadenaJS .="', '"; $cadenaJS .=$objMensaje->getCodigo(); $cadenaJS .="', desescapeIGEPjs('"; $descripcion = $objMensaje->getDescripcionCorta(); $cadenaJS .=IgepSmarty::escapeIGEP($descripcion); $cadenaJS .="'), desescapeIGEPjs('"; $descripcion = $objMensaje->getDescripcionLarga(); $cadenaJS .=IgepSmarty::escapeIGEP($descripcion); $cadenaJS .="')"; $cadenaJS .=");aviso.mostrarAviso();"; return $cadenaJS; } function getJsSetCampoTexto($campoDestino, $valor='') { $cadenaJs = "eval('parent.document.forms[\"'+formulario+'\"]."; $cadenaJs.= $campoDestino.".value=desescapeIGEPjs(\""; $cadenaJs.= IgepSmarty::escapeIGEP($valor)."\")');\n"; return $cadenaJs; } function getJsSetVisible($campoDestino, $valor='') { //Inicializamos las varibles $cadenaJs = "\n"; if($valor===false) { //ocultamos el campo $cadenaJs .="var capaVi = documento.getElementById('"; $cadenaJs .='IGEPVisible'.$campoDestino."');\n"; $cadenaJs .="var capaIn = documento.getElementById('"; $cadenaJs .='IGEPInvisible'.$campoDestino."');\n"; $cadenaJs .='if (capaVi.style.display!="none"){'; $cadenaJs .="w = capaVi.offsetWidth;\n"; $cadenaJs .="h = capaVi.offsetHeight;\n"; $cadenaJs .="if (IE4)"; $cadenaJs .="capaIn.style.display='inline';\n"; $cadenaJs .="else "; $cadenaJs .="capaIn.style.display='-moz-inline-box';\n"; $cadenaJs .="capaIn.style.width = w+'px';\n"; $cadenaJs .="capaIn.style.height = h+'px';\n"; $cadenaJs .="capaVi.style.display='none';\n}"; } elseif ($valor===true) { //hacemos visible el campo $cadenaJs .="var capaVi = documento.getElementById('"; $cadenaJs .='IGEPVisible'.$campoDestino."');\n"; $cadenaJs .="var capaIn = documento.getElementById('"; $cadenaJs .='IGEPInvisible'.$campoDestino."');\n"; $cadenaJs .='if (capaVi.style.display=="none"){'; $cadenaJs .="capaVi.style.display='inline';\n"; $cadenaJs .="capaIn.style.display='none';\n}\n"; } else return ''; return $cadenaJs; }//Fin getJsSetVisible function getJsSetEnable($campoDestino, $valor='') { $cadenaJs = "\n"; if($valor===false) { //ocultamos el campo $cadenaJs .="var campo = documento.getElementById('"; $cadenaJs .=$campoDestino."');\n"; $cadenaJs .="if ((campo.type=='button')) "; $cadenaJs .="campo.style.display = 'none';"; $cadenaJs .="if ((campo.type=='select-one') || (campo.type=='select-multiple') || (campo.type=='checkbox')) \n{"; $cadenaJs .="eval('campo.disabled = true');"; $cadenaJs .="\n}"; $cadenaJs .="else \n{"; $cadenaJs .="campo.readOnly = 1;\n"; $cadenaJs .="campo.className=\"noEditable\" "; $cadenaJs .="\n}"; } elseif($valor===true) { //hacemos visible el campo ANTES de activarlo $cadenaJs .="var campo = documento.getElementById('"; $cadenaJs .=$campoDestino."');\n"; $cadenaJs .="if ((campo.type=='button')) "; $cadenaJs .="campo.style.display = 'inline';"; $cadenaJs .="if ((campo.type=='select-one') || (campo.type=='select-multiple') || (campo.type=='checkbox')) \n{"; $cadenaJs .="eval('campo.disabled = false');"; $cadenaJs .="\n}"; $cadenaJs .="else \n{"; $cadenaJs .="campo.readOnly = 0;\n"; $cadenaJs .="campo.className=\"editable\" "; $cadenaJs .="\n}"; } return $cadenaJs; }//Fin getJsSetEnable function getJsChecksMarcados($checksMarcados) { $js=''; foreach ($checksMarcados as $check) $js.="documento.getElementById('".$check."').checked='true';"; return $js; } function getJsSetEstadoModificado($p_campoOrigen) { // El campo puede tener prefijo (cam__ , ins__) o nada si está en un panel de busqueda. //Si tiene prefijo count(descCampoOrigen)>1 sino no $descCampoOrigen = explode('___', $p_campoOrigen); if(count($descCampoOrigen)<2) return; if ($descCampoOrigen[0]=='cam') $valor = 'modificada'; else if ($descCampoOrigen[0]=='ins') $valor = 'insertada'; else $valor = 'nada'; //Jamás llego aquí, pero.... $campo='est_'.$descCampoOrigen[2]; $cadenaJs= "eval('documento.forms[\"'+formulario+'\"].".$campo; $cadenaJs.= ".value=\"".$valor."\"');\n"; $campoAnt = str_replace('cam','ant',$p_campoOrigen); $cadenaJs .= "aux = documento.getElementById('".$p_campoOrigen."').value;\n"; $cadenaJs .= "auxAnt = documento.getElementById('".$campoAnt."').value;\n"; $cadenaJs .= "vTonkens = formulario.split('_');\n"; $cadenaJs .= "if (vTonkens.length > 1);\n"; $cadenaJs .= "{\n"; $cadenaJs .= "idFormulario = vTonkens[1];\n"; $cadenaJs .= "};\n"; $cadenaJs .= "nomObj = idFormulario+'_comp';\n"; $cadenaJs .= "var objComp = eval('documento.'+nomObj);"; $cadenaJs .="objComp.comprobarModificacion('".$p_campoOrigen."');"; /* $cadenaJs .= "if (aux!=auxAnt)\n{"; $cadenaJs .= "vTonkens = formulario.split('_');\n"; $cadenaJs .= "if (vTonkens.length > 1);\n"; $cadenaJs .= "{\nidImg = vTonkens[1]+'_imgModificado';\n"; $cadenaJs .= "};\n"; $cadenaJs .="marcaModificado = "; $cadenaJs .="parent.document.getElementById(idImg);"; $cadenaJs .="if (marcaModificado != null)"; $cadenaJs .="{\n marcaModificado.style.display=\"inline\";\n"; $cadenaJs .="capaMenuFalso = documento.getElementById('capa_menuFalso');\n"; $cadenaJs .="capaMenuReal = documento.getElementById('capa_menuReal');\n"; $cadenaJs .="capaMenuFalso.style.display=\"inline\";\n"; $cadenaJs .="capaMenuReal.style.display=\"none\";\n"; $cadenaJs .="ocultoPerCerrarApli=documento.getElementById('permitirCerrarAplicacion');\n"; $cadenaJs .="ocultoPerCerrarApli.value='no';\n"; $cadenaJs .="}\n"; $cadenaJs .= "}\n"; */ return $cadenaJs; } function getJsLanzarFocusChanged() { $cadenaJs = ""; $cadenaJs .= "\n//ATENCION: Esto lo arreglaremos posteriormente\n"; $cadenaJs .= "nombreFormulario ='F_edi';\n"; $cadenaJs .= "tipoCampo ='cam';\n"; $cadenaJs .= "idPanel ='FichaEdicion';\n"; $cadenaJs .= "filaActual =0;\n"; $cadenaJs .="formulario = eval('document.forms[nombreFormulario]');\n"; $cadenaJs .="if(formulario!=null){\n"; $cadenaJs .=" visible = eval('document.getElementById(\'P_edi\').style.display');\n"; $cadenaJs .=" if(visible!='none'){\n"; $cadenaJs .=" claseManejadora = formulario.claseManejadora.value;\n"; $cadenaJs .=" accionAntigua = formulario.action;\n"; $cadenaJs .=" formulario.action = 'phrame.php?action=focusChanged&claseManejadora='+claseManejadora+'&nomForm='+formulario.name+'&tipoCampo='+tipoCampo+'&idPanel='+idPanel+'&filaActual=-1&filaProxima=0';\n"; $cadenaJs .=" formulario.target = 'oculto';\n"; $cadenaJs .=" formulario.submit();\n"; $cadenaJs .=" formulario.action = accionAntigua;\n"; $cadenaJs .=" }\n"; $cadenaJs .="}\n"; return $cadenaJs; } function getJsFijarFichaActiva($nombrePanel,$claseManejadora,$fichaActiva) { $cadenaJs = "\n"; //Necesitamos el panel y la página if(($nombrePanel=='edi') or ($nombrePanel=='ediDetalle')){ $cadenaJs .="nombrePanel ='".$nombrePanel."';\n"; $cadenaJs .="nombreFormulario ='F_'+'".$nombrePanel."';\n"; $cadenaJs .="nombreCapa ='P_'+'".$nombrePanel."';\n"; $cadenaJs .="formulario = eval('document.forms[nombreFormulario]');\n"; $cadenaJs .="visible = eval('document.getElementById(nombreCapa).style.display');\n"; $cadenaJs .="if((formulario!=null)&&(visible!='none')){\n"; $cadenaJs .= "if (".$nombrePanel."_paginacion.hayError() == false){\n"; $cadenaJs .="document.forms[nombreFormulario].pagActual___".$claseManejadora.".value='".$fichaActiva."';\n"; $cadenaJs .=$nombrePanel."_paginacion.abrir_pagina(".$fichaActiva.");\n"; $cadenaJs .="};\n"; $cadenaJs .="};\n"; } return $cadenaJs; } function getJsSetBttlEnable($nombreBttl, $valor='') { //bttlModificar_lis, bttlEliminar_lis $cadenaJs = ""; $cadenaJs .= "var documento = document;"; $cadenaJs .= "if (document.getElementById('oculto') == null) // estoy en el oculto"; $cadenaJs .= "\n{ "; $cadenaJs .= " documento = parent.document"; $cadenaJs .= "}"; $cadenaJs .= "else \n"; $cadenaJs .= "{"; $cadenaJs .= ""; $cadenaJs .= "}"; } //FIN getJsSetBttlEnable }//Fin Class IgepSmarty ?>