$cadena"; } } class ComponentesWeb extends FuncionesComponentesWeb { var $name; // nombre del componente web var $aParametrosComponente; //matriz, para cada instancia de un componente => copia de $params del componente var $cadena_parametros; //varchar, contendra los parametros (exceptuando los propios) bien estructurados y en html del componente var $estilo; //varchar, indica propiedades establecidas para el componente en montarEstado y montarEstilo. var $sololectura; //varchar unico contendra "readonly" (de momento) si se indica var $numInstancia; // int, identificador unico de instancia del objeto //Coleccion de variables temporales para guardar los eventos para su posterior montaje. var $eventoOnBlur; var $eventoOnFocus; var $eventoOnClick; var $eventoOnDBLClick; var $eventoOnSelect; var $eventoOnChange; var $eventoOnMouseOver; var $eventoOnMouseOut; var $eventoOnMouseMove; var $eventoOnMouseUp; var $eventoOnMouseDown; var $eventoOnKeyUp; var $eventoOnKeyDown; var $eventoOnKeyPress; var $conVentanaModal; //Muestra los mensajes de error con ventana Modal en lugar de con alert. function ComponentesWeb() { /* Constructor que llamara al constructor de la clase padre, en php no se ejecuta automaticamente */ FuncionesComponentesWeb::FuncionesComponentesWeb(); //Inicializamos algunas variables de la clase $this->aParametrosComponente = array(); }//FIN constructor function setManejadoresBasicos($params) { /* Esta funcion realiza la composici�n de la cadena que devolvera al componente, combinando todos los eventos junto al estado y los estilos que el componente lleve asociado mediante su $params. */ //Inicializamos las variables, para cada llamada de un componente $this->cadena_parametros=""; $this->estilo=""; $this->sololectura=""; $this->eventoOnBlur=""; $this->eventoOnFocus=""; $this->eventoOnClick=""; $this->eventoOnDBLClick=""; $this->eventoOnSelect=""; $this->eventoOnChange=""; $this->eventoOnMouseOver=""; $this->eventoOnMouseOut=""; $this->eventoOnMouseMove=""; $this->eventoOnMouseUp=""; $this->eventoOnMouseDown=""; $this->eventoOnKeyUp=""; $this->eventoOnKeyDown=""; $this->eventoOnKeyPress=""; //Obtenemos el identificador unico del componente $num_instancia = end(array_keys($this->aInstanciasComponentes)); $this->setNumInstancia($num_instancia); $this->aParametrosComponente[$num_instancia] = $params; //A partir de aqui vamos a descomponer todo el vector de parametros del componente //Se llama a montarEstilo, siempre primero! Pues si tiene estado, montarEstado debe machacar la variable $this->montarEstilo(); $this->montarEstado(); //Montamos todos los eventos, se encarga el metodo montarEventos foreach ($this->aParametrosComponente[$num_instancia] as $clave => $valor) { //Se convierten todos los parametros a "eventos", si algun parametro no es un evento //que este almacenado en el metodo montarEventos, no pasa nada. $this->montarEventos($clave,$valor); }//FIN foreach }//Fin manejadoresBasicos //SET's Y GET's function setName($nombre) { $this->name=$nombre; } function setNumInstancia($instancia) { $this->numInstancia=$instancia; } function getName() { return $this->name; } function getNumInstancia() { return $this->numInstancia; } //FIN SET's Y GET's function montarEstado() { //Esta funcion se encarga de almacenar en el buffer de cadena_parametros los parametros del estado del componente //Obtenemos el identificador unico del componente y si nombre $num_instancia = end(array_keys($this->aInstanciasComponentes)); if($this->aParametrosComponente[$num_instancia]['estado']) { $estado=strtoupper($this->aParametrosComponente[$num_instancia]['estado']); if ($estado=="INACTIVO") { $this->estilo="INACTIVO"; $this->sololectura = "readonly"; } if ($estado=="DESACTIVADO") { $this->estilo="INACTIVO"; } if ($estado=="OPCIONAL") { $this->estilo="OPCIONAL"; } if ($estado=="OBLIGATORIO") { //Solo si el componente es de tipo CWCampoTexto, CWCampoTextoNumerico, CWAreaTexto $tipo_componente=end(array_keys($this->aComponentes)); if (($tipo_componente=="CWCampoTexto") || ($tipo_componente=="CWCampoTextoNumerico") || ($tipo_componente=="CWAreaTexto")) { $this->generarJS("onBlur","comprobarVacio",array("this",$this->name." ".ERRORNOVACIO),$conVentanaModal); /*$conVentanaModal=strtoupper($this->aParametrosComponente[$num_instancia]['conVentanaModal']); if($conVentanaModal=="TRUE"){ $this->generarJS("onBlur","capaErrorSH",array("?view=views/modo_alerta.php&err_cod=".ERRORNOVACIO."&err_bre=".ERRORNOVACIO,250,350)); }else{ $this->generarJS("onBlur","comprobarVacio",array("this",$this->name." ".ERRORNOVACIO)); }*/ } // Guardamos que es obligatorio, para poder verificarlo en el momento en que se haga submit $this->ponerCampoObligatorio($this->name); $this->estilo="OBLIGATORIO"; } if($estado=="NO_PERMISO") { $conVentanaModal=strtoupper($this->aParametrosComponente[$num_instancia]['conVentanaModal']); $tipo_componente=end(array_keys($this->aComponentes)); if (($tipo_componente=="CWCampoTexto") || ($tipo_componente=="CWCampoTextoNumerico") || ($tipo_componente=="CWAreaTexto")) { $this->generarJS("onKeyPress","sinPermiso",array("this",$this->name." ".ERRORSINPERMISO),$conVentanaModal); $this->estilo="SIN_PERMISO"; } } if($estado=="ERROR") { //El JS es generado por el componente, requiere longuitudMinima $this->estilo="ERROR"; } if($estado=="ACTIVADO") { $this->estilo="ACTIVADO"; } } else { //Si no tiene estado definido ni estilo, por defecto estara ACTIVADO if(!isset($this->aParametrosComponente[$num_instancia]['class'])) { $this->estilo="ACTIVADO"; } } }//FIN funcion montarEstado function generarJS($evento,$nombreFuncion,$parametros,$mensaje="") { /** Generar� un c�digo javascript para el evento q le digamos, con la funcion que queremos que llame, los parametros que queramos que le pasen, y el mensaje de error o informacion apropiado, en el lenguaje correspondiente (espa�ol/valenciano....). No devolver� ningun resultado, sera almacenado en las variables temporales de eventos Hay que especificarlos tal cual se llaman. El nombreFuncion es el de una funcion que se encontrara en alguno de los .js q necesita ese componente. Los par�metros son un array y se incluiran uno por uno en la llamada a la funcion (Si uno de los componentes del array es otro array deberia mandarse como un array(???) Por ahora el mensaje es una cadena de texto, mas adelante veremos para hacer la localizacion */ $numpar=count($parametros); //Para algunas funciones js es necesario montarlo de diferente forma if (strtolower($nombreFuncion)=="sinpermiso") { $cadena="return "; } $cadena.="$nombreFuncion("; for($i=0;$i<$numpar;$i++) { // Segun el tipo del parametro tendre q pasarselo entre comillas simples $par=trim($parametros[$i]); if(!is_numeric($par)) { // si es "this" o "event", lo pondr� sin '' if($par!="this" && $par!="event") { $cadena.="'$par'"; } else { $cadena.="$par"; } } else { $cadena.="$par"; } if($i<$numpar-1) { // si no es el ultimo parametro, le a�ado una coma. $cadena.=", "; } }//FIN for if ($this->getConVentanaModal()=="true") { $cadena.=","; $cadena.="'$mensaje'"; $cadena.=","; $cadena.="'TRUE'"; }else { $cadena.=","; $cadena.="'$mensaje'"; } // Fin de la llamada a la funcion $cadena.=");"; //Llamamos al metodo encargado de almacenar correctamente el parametro $this->montarEventos($evento,$cadena); }//FIN funcion generarJS function generarJSComprobacionFormulario() { /** genera el c�digo javascript encargado de comprobar que todos los campos obligatorios del formulario activo han sido completados, y lo devuelve como una cadena para que el componente situe este fragmento en el c�digo que lo muestra en HTML */ $resultado=""; //var_dump($this->aFormRangosFechas); $numElem=count($this->aFormCamposObligatorios); $numElem2=count($this->aFormRangosFechas); //var_dump($numElem2); if($numElem<=0 && $numElem2<=0) { return $resultado; } else { $resultado.="javascript:var a=new Array(), b=new Array();"; for($i=0;$i<$numElem;$i++) { $resultado.="a.push(".$this->obtenerNombreForm().".elements['".$this->aFormCamposObligatorios[$i]."']);"; } for($i=0;$i<$numElem2;$i=$i+3) { $resultado.="b.push(".$this->obtenerNombreForm().".elements['".$this->aFormRangosFechas[$i]."']);"; $resultado.="b.push('".$this->aFormRangosFechas[$i + 1]."');"; $resultado.="b.push('".$this->aFormRangosFechas[$i + 2]."');"; } $resultado.="var resultado=compruebaObligatorios(".$this->obtenerNombreForm().",a,'".ERRORNOVACIO."');"; $resultado.="var resultado2=compruebaRangos(".$this->obtenerNombreForm().",b,'".ERRORRANGOFECHAS."','".$conVentanaModal."');"; $resultado.="if((resultado==true)&&(resultado2==true)){document.".$this->obtenerNombreForm().".submit();}"; $this->montarEventos("onClick",$resultado); } }//FIN funcion generarJSComprobacionFormulario function montarEventos($evento,$cadena) { //Metodo encargado de almacenar correctamente el parametro de evento //Se filtrara por el tipo de evento dispuesto $evento = strtolower($evento); //para asegurarnos que funcionara correctamente switch ($evento) { case 'onblur': $this->eventoOnBlur.="$cadena"; break; case 'onfocus': $this->eventoOnFocus.="$cadena"; break; case 'onclick': $this->eventoOnClick.="$cadena"; break; case 'ondblclick': $this->eventoOnDBLClick.="$cadena"; break; case 'onselect': $this->eventoOnSelect.="$cadena"; break; case 'onchange': $this->eventoOnChange.="$cadena"; break; case 'onmouseover': $this->eventoOnMouseOver.="$cadena"; break; case 'onmouseout': $this->eventoOnMouseOut.="$cadena"; break; case 'onmousemove': $this->eventoOnMouseMove.="$cadena"; break; case 'onmouseup': $this->eventoOnMouseUp.="$cadena"; break; case 'onmousedown': $this->eventoOnMouseDown.="$cadena"; break; case 'onkeyup': $this->eventoOnKeyUp.="$cadena"; break; case 'onkeydown': $this->eventoOnKeyDown.="$cadena"; break; case 'onkeypress': $this->eventoOnKeyPress.="$cadena"; break; }//FIN switch evento }//FIN funcion montarEventos function montarParametros() { // Se encarga de montar la cadena de parametros, del componente respectivo que realiza la llamada, // que contiene los eventos y/o propiedades de estado if ($this->eventoOnBlur != "") { $this->cadena_parametros.="OnBlur=\"".$this->eventoOnBlur."\" "; } if ($this->eventoOnFocus != "") { $this->cadena_parametros.="OnFocus=\"".$this->eventoOnFocus."\" "; } if ($this->eventoOnClick != "") { $this->cadena_parametros.="OnClick=\"".$this->eventoOnClick."\" "; } if ($this->eventoOnDBLClick != "") { $this->cadena_parametros.="OnDBLClick=\"".$this->eventoOnDBLClick."\" "; } if ($this->eventoOnSelect != "") { $this->cadena_parametros.="OnSelect=\"".$this->eventoOnSelect."\" "; } if ($this->eventoOnChange != "") { $this->cadena_parametros.="OnChange=\"".$this->eventoOnChange."\" "; } if ($this->eventoOnMouseOver != "") { $this->cadena_parametros.="OnMouseOver=\"".$this->eventoOnMouseOver."\" "; } if ($this->eventoOnMouseOut != "") { $this->cadena_parametros.="OnMouseOut=\"".$this->eventoOnMouseOut."\" "; } if ($this->eventoOnMouseMove != "") { $this->cadena_parametros.="OnMouseMove=\"".$this->eventoOnMouseMove."\" "; } if ($this->eventoOnMouseUp != "") { $this->cadena_parametros.="OnMouseUp=\"".$this->eventoOnMouseUp."\" "; } if ($this->eventoOnMouseDown != "") { $this->cadena_parametros.="OnMouseDown=\"".$this->eventoOnMouseDown."\" "; } if ($this->eventoOnKeyUp != "") { $this->cadena_parametros.="OnKeyUp=\"".$this->eventoOnKeyUp."\" "; } if ($this->eventoOnKeyDown != "") { $this->cadena_parametros.="OnKeyDown=\"".$this->eventoOnKeyDown."\" "; } if ($this->eventoOnKeyPress != "") { $this->cadena_parametros.="OnKeyPress=\"".$this->eventoOnKeyPress."\" "; } if ($this->estilo != "") { $this->cadena_parametros.="class=\"".$this->estilo."\" "; } if ($this->sololectura != "") { $this->cadena_parametros.= $this->sololectura; } }//FIN funcion montarParametros function getManejadoresBasicos() { //Se monta la cadena de parametros que requerira el componente, se monta aqui debido a que // las funciones que generan JS pueden ser llamadas desde cuqlquier parte $this->montarParametros(); //Devuelve la cadena de parametros que ha debido de montarse previamente return $this->cadena_parametros; }//FIN funcion getManejadoresBasicos function montarEstilo() { //Esta funcion se encarga de almacenar en el buffer de cadena_parametros los parametros del estilo del componente //Obtenemos el identificador unico del componente y si nombre $num_instancia = end(array_keys($this->aInstanciasComponentes)); if(isset($this->aParametrosComponente[$num_instancia]['class'])) { $this->estilo = $this->aParametrosComponente[$num_instancia]['class']; } } /* FUNCIONES QUE ALGUN DIA SE PODRAN UTILIZAR, DE MOMENTO SE COMENTAN function montarEventosRaton() { } function montarEventosKeys() { } function montarEventosTexto() { } function montarEventosFoco() { } */ //SET's Y GET's function setConVentanaModal($conVentanaModal) { $this->conVentanaModal=$conVentanaModal; } function getConVentanaModal() { return $this->conVentanaModal; } //FIN SET's Y GET's }//FIN CLASE ComponentesWeb ?>