/* Title: Adiciona ao mapa uma camada e substituí parâmetros no item DATA do Mapfile Veja: Arquivo: i3geo/ferramentas/parametrossql/index.js.php About: Licença i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation; Este programa é distribuído na expectativa de que seja útil, porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do GNU para mais detalhes. Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto com este programa; se não, escreva para a Free Software Foundation, Inc., no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ if(typeof(i3GEOF) === 'undefined'){ var i3GEOF = {}; } /* Class: i3GEOF.parametrossql */ //TODO incluir a substituicao de parametros tambem no FILTER i3GEOF.parametrossql = { /* Variavel: aguarde Objeto DOM com a imagem de aguarde existente no cabeçalho da janela. */ aguarde: "", /* Variavel: tema Codigo do layer adicionado ao mapa */ tema: "", /** * Template no formato mustache. E preenchido na carga do javascript com o programa dependencias.php */ MUSTACHE : "", /** * Susbtitutos para o template */ mustacheHash : function() { var dicionario = i3GEO.idioma.objetoIdioma(i3GEOF.parametrossql.dicionario); return dicionario; }, /* Function: inicia Inicia a ferramenta. É chamado por criaJanelaFlutuante Parametro: iddiv {String} - id do div que receberá o conteudo HTML da ferramenta camada - objeto contendo os dados do plugin */ inicia: function(iddiv,camada){ $i(iddiv).innerHTML = i3GEOF.parametrossql.html(); var b, f = i3GEOF.parametrossql.formulario(camada); i3GEOF.parametrossql.tema = camada.name; //i3GEOFparametrosSQLForm e definido no template mustache $i("i3GEOFparametrosSQLForm").innerHTML = f; i3GEOF.parametrossql.buscaSelect(camada); b = new YAHOO.widget.Button( "i3GEOFparametrosSqlAplicar", {onclick:{fn: function(){i3GEOF.parametrossql.aplicar(camada);}}} ); b.addClass("rodar"); }, /* Function: html Gera o código html para apresentação das opções da ferramenta Retorno: String com o código html */ html:function() { var ins = Mustache.render(i3GEOF.parametrossql.MUSTACHE, i3GEOF.parametrossql.mustacheHash()); return ins; }, /* Function: iniciaJanelaFlutuante Cria a janela flutuante para controle da ferramenta. */ iniciaJanelaFlutuante: function(camada){ //verifica se deve ser aberto o formulario if(camada.plugini3geo.ativo != undefined && camada.plugini3geo.ativo === "nao"){ i3GEOF.parametrossql.iniciaDefault(camada); } else{ if(camada.plugini3geo.parametros){ var cabecalho,janela,divid,temp,titulo; if($i("i3GEOF.parametrossql")){ i3GEOF.parametrossql.inicia("i3GEOF.parametrossql_corpo",camada); return; } //funcao que sera executada ao ser clicado no cabeçalho da janela cabecalho = function(){ }; //cria a janela flutuante titulo = " "; janela = i3GEO.janela.cria( "290px", "auto", "", "", "", titulo, "i3GEOF.parametrossql", false, "hd", cabecalho, "", "", true ); divid = janela[2].id; temp = $i("i3GEOF.parametrossql_corpo").style; temp.paddingLeft = "0px"; temp.paddingRight = "0px"; i3GEOF.parametrossql.aguarde = $i("i3GEOF.parametrossql_imagemCabecalho").style; YAHOO.util.Event.addListener(janela[0].close, "click", i3GEOF.parametrossql.cancela); i3GEOF.parametrossql.inicia(divid,camada); } } }, //aplica os parametros default na camada //usado quando o formulario nao e aberto de imediato para o usuario digitar os valores iniciaDefault : function(camada){ var aplicaParametros; aplicaParametros = function(valores){ var atualiza, p, cp, par = []; for(var i in valores){ par.push(valores[i]); } atualiza = function(){ i3GEO.atualiza(); }; p = i3GEO.configura.locaplic+"/ferramentas/parametrossql/exec.php?g_sid="+i3GEO.configura.sid + "&funcao=aplicar" + "&tema=" + camada.name + "&chaves=&valores=" + par.join(","); cp = new cpaint(); cp.set_response_type("JSON"); cp.call(p,"foo",atualiza); }; i3GEOF.parametrossql.obtemParametrosDefault(camada,aplicaParametros); }, obtemParametrosDefault : function(camada, funcao){ var parametriza, p, cp, aplicaParametros, valores = {}; //aplica na camada os parametros de substituicao e atualiza o mapa aplicaParametros = function(){ funcao.call("",valores); }; parametriza = function(plugin){ var temp, i, pegaParametro, parametros; parametros = plugin.data.parametros; //funcao que faz a chamada AJAX que pega os valores caso seja um programa em PHP //numParametros e um contador pois as chamas para buscar os valores //sao assincronas pegaParametro = function(indice){ if(parametros.length == indice){ aplicaParametros(); } else{ var fim, p, cp, prog = parametros[indice].prog; if(prog != ""){ fim = function(retorno){ valores[indice] = retorno.data[0].v; indice += 1; pegaParametro(indice); }; p = i3GEO.configura.locaplic + "/ferramentas/parametrossql/exec.php?" + "g_sid=" + i3GEO.configura.sid + "&funcao=INCLUDEPROG&prog=" + prog; cp = new cpaint(); cp.set_response_type("JSON"); cp.call(p,"foo",fim); } else{ indice += 1; pegaParametro(indice); } } }; temp = parametros.length; //obtem os valores que nao precisam AJAX for(i = 0; i < temp; i++){ if(parametros[i].titulo != "" && parametros[i].prog === ""){ valores[i] = parametros[i].valores.split(",")[0]; } } //executa as chamadas ajax de modo assincrono para obter os demais parametros pegaParametro(0); }; // aqui e necessario buscar os parametros do plugin para pegar os valores default //de cada parametro. Quando termina, roda a funcao que monta os parametros p = i3GEO.configura.locaplic + "/ferramentas/parametrossql/exec.php?g_sid=" + i3GEO.configura.sid + "&funcao=PARAMETROSPLUGIN&tema=" + camada.name; cp = new cpaint(); cp.set_response_type("JSON"); cp.call(p, "foo", parametriza); }, formulario: function(camada){ //sobre os parametros ver em classe_plugini3geo var parametros = camada.plugini3geo.parametros, n = parametros.length, i, ins = "", p, j, nj, l; for(i=0; i"; //prog pode ser um php que precisa ser obtido via ajax //nesse caso e inserido um div com um id para permitir o preenchimento posterior if(p.prog === ""){ if(p.tipo === "input"){ ins += "
" + "" + "

"; } if(p.tipo === "select"){ ins += "
" + "

"; } } else{ ins += "
Auarde...
"; } } } return ins; }, buscaSelect: function(camada){ var parametros = camada.plugini3geo.parametros, n = parametros.length, i; for(i=0; i"; n = retorno.data.length; for(i=0; i"+ retorno.data[i].n +""; } ins += ""; onde.innerHTML = ins; }; p = i3GEO.configura.locaplic+"/ferramentas/parametrossql/exec.php?g_sid="+i3GEO.configura.sid + "&funcao=INCLUDEPROG&prog="+ plugin.prog; cp = new cpaint(); cp.set_response_type("JSON"); cp.call(p,"foo",temp); }, aplicar: function(camada){ var temp, fim,cp,p,onde = $i("i3GEOFparametrosSQLForm"), campos,n,i,chaves = [], valores = []; campos = onde.getElementsByTagName("input"); n = campos.length; for (i = 0; i