/*
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"+p.titulo+":
";
//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