Commit 27fa92dac88700b47bfe42ca887a64fb1f682855

Authored by Edmar Moretti
1 parent a6982646

Incluida opção para elaboração de mapa de visitantes. Veja no wiki mais informações.

O programa ms_registraip.php é incluido pelo ms_criamapa.php.
Para funcionar em sua instalação é necessário editar o arquivo temas/visitantes.map e a string de conexão com o banco e sqls existentes em ms_registraip.php
classesphp/funcoes_gerais.php
... ... @@ -1023,15 +1023,15 @@ parameters:
1023 1023  
1024 1024 $ip - Número do IP.
1025 1025 */
1026   -function ip2geo($ip)
  1026 +function ip2geo($ip,$locaplic="..")
1027 1027 {
1028 1028 //$ip="200.252.111.1";
1029 1029 $resultado = array();
1030   - if (file_exists("../pacotes/geoip/geoipcity.inc"))
  1030 + if (file_exists($locaplic."/pacotes/geoip/geoipcity.inc"))
1031 1031 {
1032   - require_once("../pacotes/geoip/geoipcity.inc");
1033   - require_once("../pacotes/geoip/geoipregionvars.php");
1034   - $gi = geoip_open("../pacotes/geoip/GeoLiteCity.dat",GEOIP_STANDARD);
  1032 + require_once($locaplic."/pacotes/geoip/geoipcity.inc");
  1033 + require_once($locaplic."/pacotes/geoip/geoipregionvars.php");
  1034 + $gi = geoip_open($locaplic."/pacotes/geoip/GeoLiteCity.dat",GEOIP_STANDARD);
1035 1035 $record = geoip_record_by_addr($gi,$ip);
1036 1036 $resultado["country_code"] = $record->country_code . " " . $record->country_code3 . " " . $record->country_name;
1037 1037 $resultado["region"] = $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region];
... ...
ms_criamapa.php
... ... @@ -468,6 +468,10 @@ for($i=0;$i<($mapa->numlayers);$i++)
468 468 }
469 469 $mapa->save($tmpfname);
470 470 //
  471 +//obtem o IP do usuário e registra no banco de dados
  472 +//essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo
  473 +require_once($caminho."ms_registraip.php");
  474 +//
471 475 // gera a url para abrir o mapa
472 476 // interface = arquivo html que será aberto
473 477 //
... ...
ms_registraip.php
... ... @@ -0,0 +1,99 @@
  1 +<?php
  2 +/*
  3 +Title: Registra o IP do usuário para criação do mapa de visitantes.
  4 +
  5 +Se vc não quiser que essa operação seja executada, basta comentar o código todo ou retirar o include existente em ms_criamapa.php.
  6 +
  7 +Para mostrar os visitantes, basta usar o tema temas/visitantes.map. Exemplo:
  8 +
  9 +http://host/i3geo/ms_criamapa.php?temasa=visitantes&layers=visitantes
  10 +
  11 +Esse mapfile deve ser editado para refletir a conexão correta ao banco de dados.
  12 +
  13 +Para o funcionamento correto dessa função, deve-se ter o pacote geoip instalado em i3geo/pacotes.
  14 +
  15 +É necessário também alterar os parâmetros de query no banco de dados e conexão para refletir as configurações locais do banco de dados.
  16 +
  17 +As informações sobre o IP do cliente são armazenados em uma tabela em seu banco de dados. Essa tabela deve ser criada e estar acessível para leitura e escrita.
  18 +
  19 +Exemplo de script para criação da tabela:
  20 +
  21 +CREATE TABLE visitantes_i3geo
  22 +(
  23 + gid serial NOT NULL,
  24 + latitude numeric,
  25 + longitude numeric,
  26 + n integer,
  27 + CONSTRAINT i3geo_visitantes_pkey PRIMARY KEY (gid)
  28 +)
  29 +WITHOUT OIDS;
  30 +ALTER TABLE visitantes_i3geo OWNER TO pgsql;
  31 +GRANT ALL ON TABLE visitantes_i3geo TO pgsql;
  32 +GRANT SELECT ON TABLE visitantes_i3geo TO geodados;
  33 +GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE visitantes_i3geo TO geoeditor;
  34 +COMMENT ON TABLE visitantes_i3geo IS 'Registra as coordenadas dos usuários que acessam o I3Geo. É mantido pelo i3geo/ms_criamapa.php.';
  35 +
  36 +File: ms_registraip.php
  37 +
  38 +About: Licença
  39 +
  40 +I3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
  41 +
  42 +Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
  43 +Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
  44 +
  45 +Este programa é software livre; você pode redistribuí-lo
  46 +e/ou modificá-lo sob os termos da Licença Pública Geral
  47 +GNU conforme publicada pela Free Software Foundation;
  48 +tanto a versão 2 da Licença.
  49 +Este programa é distribuído na expectativa de que seja útil,
  50 +porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
  51 +de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
  52 +Consulte a Licença Pública Geral do GNU para mais detalhes.
  53 +Você deve ter recebido uma cópia da Licença Pública Geral do
  54 +GNU junto com este programa; se não, escreva para a
  55 +Free Software Foundation, Inc., no endereço
  56 +59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  57 +
  58 +*/
  59 +if (file_exists($locaplic."/pacotes/geoip"))
  60 +{
  61 + $r["latitude"] = "";
  62 + require_once($locaplic."/classesphp/funcoes_gerais.php");
  63 + $conexao = "host=10.1.1.36 port=5432 dbname=geodados user=pgsql password=pgsql";
  64 + //identifica o IP do usuário
  65 + $ip = pegaIPcliente();
  66 + //$ip="200.252.111.1";
  67 + $r = ip2geo($ip,$locaplic);
  68 + if($r["latitude"] == null)
  69 + {
  70 + $ip = pegaIPcliente2();
  71 + $r = ip2geo($ip);
  72 + }
  73 + //registra no banco o IP
  74 + if(($r["latitude"] != null) && ($r["latitude"] != ""))
  75 + {
  76 + $pgconn = pg_connect($conexao);
  77 + //
  78 + $sqlVerificaExistencia = "select * from visitantes_i3geo where latitude = ".$r["latitude"]." and longitude = ".$r["longitude"];
  79 + //
  80 + $result = pg_query($pgconn, $sqlVerificaExistencia);
  81 + $numrows = pg_num_rows($result);
  82 + if ($numrows != 0)
  83 + {
  84 + //
  85 + $sqlGravaMaisUm = "update visitantes_i3geo set n = n+1 where (latitude = ".$r["latitude"]." and longitude = ".$r["longitude"].")";
  86 + //
  87 + $result = pg_query($pgconn, $sqlGravaMaisUm);
  88 + }
  89 + else
  90 + {
  91 + //
  92 + $sqlGravaNovo = "insert into visitantes_i3geo (gid,latitude,longitude,n) values(default,".$r["latitude"].",".$r["longitude"].",1)";
  93 + //
  94 + $result = pg_query($pgconn, $sqlGravaNovo);
  95 + }
  96 + pg_close($pgconn);
  97 + }
  98 +}
  99 +?>
0 100 \ No newline at end of file
... ...
temas/visitantes.map 0 → 100644
... ... @@ -0,0 +1,48 @@
  1 +SYMBOLSET ../symbols/simbolos.sym
  2 +FONTSET "../symbols/fontes.txt"
  3 +LAYER
  4 + NAME visitantes # ok
  5 + TYPE point
  6 + STATUS OFF
  7 + TEMPLATE "none.htm"
  8 + CONNECTIONTYPE postgis
  9 + CONNECTION "user=geodados password=geodados dbname=geodados host=10.1.1.36 port=5432"
  10 + DATA "the_geom FROM (select PointFromText('POINT(' || longitude || ' ' || latitude || ')',4291) as the_geom,n,gid FROM public.visitantes_i3geo) as foo USING UNIQUE gid USING SRID=4291"
  11 + METADATA
  12 + TEMA "Usuários"
  13 + CLASSE "SIM"
  14 + END
  15 + CLASS
  16 + Name 'uma visita'
  17 + EXPRESSION ('[n]'eq '1')
  18 + SYMBOL 'ponto'
  19 + SIZE 6
  20 + COLOR 255 255 204
  21 + OUTLINECOLOR 50 50 50
  22 + END # CLASS
  23 + CLASS
  24 + Name 'mais de uma visita'
  25 + EXPRESSION (([n]>1)and([n]<=3))
  26 + SYMBOL 'ponto'
  27 + SIZE 8
  28 + COLOR 255 255 204
  29 + OUTLINECOLOR 50 50 50
  30 + END # CLASS
  31 + CLASS
  32 + Name 'mais de uma visita'
  33 + EXPRESSION (([n]>3)and([n]<=5))
  34 + SYMBOL 'ponto'
  35 + SIZE 10
  36 + COLOR 255 255 204
  37 + OUTLINECOLOR 50 50 50
  38 + END # CLASS
  39 + CLASS
  40 + Name 'mais de uma visita'
  41 + EXPRESSION ([n]>5)
  42 + SYMBOL 'ponto'
  43 + SIZE 11
  44 + COLOR 247 233 164
  45 + OUTLINECOLOR 50 50 50
  46 + END # CLASS
  47 +END
  48 +END
0 49 \ No newline at end of file
... ...