Commit 4e42537b5f61a1dd9692df36a0bcdffef69a7ca1

Authored by Edmar Moretti
1 parent f062122b

Verificação dos acessos aos temas bloqueados ou não publicados

admin/admin.db
No preview for this file type
admin/hiperbolica.php
... ... @@ -4,7 +4,7 @@
4 4  
5 5 Cria um arquivo no formato XML para o aplicativo arvore hiperbolica.
6 6  
7   -A �rvore hiperbolica e montada por um applet que carrega um XML contendo a estrutura de nos.
  7 +A arvore hiperbolica e montada por um applet que carrega um XML contendo a estrutura de nos.
8 8  
9 9 Esse programa le o banco de administração e monta o XML contendo os menus, grupos, subgrupos e temas.
10 10  
... ... @@ -34,7 +34,7 @@ Este programa é distribuído na expectativa de que seja útil
34 34 porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
35 35 de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
36 36 Consulte a Licença Pública Geral do GNU para mais detalhes.
37   -Você deve ter recebido uma cópia da Licença Pública Geral do
  37 +Você deve ter recebido uma copia da Licença Pública Geral do
38 38 GNU junto com este programa; se não, escreva para a
39 39 Free Software Foundation, Inc., no endereço
40 40 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
... ... @@ -68,19 +68,14 @@ $xml .= "<capa>";
68 68 //
69 69 //obtem a lista de menus
70 70 //
71   -$menus = pegaDados("SELECT * from ".$esquemaadmin."i3geoadmin_menus order by nome_menu ",$locaplic);
  71 +$menus = pegaDados("SELECT * from ".$esquemaadmin."i3geoadmin_menus where publicado_menu != 'NAO' order by nome_menu ",$locaplic);
72 72 $xml .= '<termo cor="#FFFFFF" id="00" nome="Dados geo">';
73 73 $contador = 0;
74 74 $xml .= '<item cor="#FFFFCC" id="'.$contador.'" tipo="TE1" nome="Menus" familia="1" /> '."\n";
75 75 //
76 76 //varre cada menu
77 77 //
78   -foreach ($menus as $menu)
79   -{
80   - if(strtolower($menu["publicado_menu"]) == "nao")
81   - {
82   - continue;
83   - }
  78 +foreach ($menus as $menu){
84 79 $id = $menu["id_menu"];
85 80 $nome = html_entity_decode($menu["nome_menu"]);
86 81 $nome = h_converteTexto($nome);
... ... @@ -89,7 +84,7 @@ foreach ($menus as $menu)
89 84 //
90 85 //obtem a lista de grupos
91 86 //
92   - $grupos = pegaDados("select i3geoadmin_grupos.nome_grupo,id_n1,id_menu from ".$esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo where id_menu='$id' order by ordem",$locaplic);
  87 + $grupos = pegaDados("select i3geoadmin_grupos.nome_grupo,id_n1,id_menu from ".$esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo where id_menu='$id' and i3geoadmin_n1.publicado != 'NAO' order by ordem",$locaplic);
93 88 for($i=0;$i < count($grupos);++$i)
94 89 {
95 90 $contador++;
... ... @@ -102,7 +97,13 @@ foreach ($menus as $menu)
102 97 //
103 98 //obtem os temas na raiz do grupo
104 99 //
105   - $temasRaizGrupo = pegaDados("select i3geoadmin_temas.tags_tema as tags_tema,i3geoadmin_temas.codigo_tema as codigo_tema,i3geoadmin_raiz.id_tema,nome_tema as nome_tema,perfil FROM ".$esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupos[$i]["id_n1"]." order by ordem");
  100 + $temasRaizGrupo = pegaDados("
  101 + select i3geoadmin_temas.tags_tema as tags_tema,i3geoadmin_temas.codigo_tema as codigo_tema,i3geoadmin_raiz.id_tema,nome_tema as nome_tema,perfil
  102 + FROM ".$esquemaadmin."i3geoadmin_raiz
  103 + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema
  104 + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON i3geoadmin_raiz.id_tema = i3geousr_grupotema.id_tema
  105 + where i3geousr_grupotema.id_grupo is null and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupos[$i]["id_n1"]." order by ordem");
  106 +
106 107 //var_dump($temasRaizGrupo);exit;
107 108 $t = obtemTemas($temasRaizGrupo,$contador,$id);
108 109 $xml .= $t[0];
... ... @@ -110,7 +111,7 @@ foreach ($menus as $menu)
110 111 //
111 112 //obtem os subgrupos
112 113 //
113   - $subgrupos = pegaDados("select i3geoadmin_subgrupos.nome_subgrupo,i3geoadmin_n2.id_n2 from ".$esquemaadmin."i3geoadmin_n2 LEFT JOIN ".$esquemaadmin."i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo where i3geoadmin_n2.id_n1='$idgrupo' order by ordem",$locaplic);
  114 + $subgrupos = pegaDados("select i3geoadmin_subgrupos.nome_subgrupo,i3geoadmin_n2.id_n2 from ".$esquemaadmin."i3geoadmin_n2 LEFT JOIN ".$esquemaadmin."i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo where i3geoadmin_n2.id_n1='$idgrupo' and i3geoadmin_n2.publicado != 'NAO' order by ordem",$locaplic);
114 115 if(count($subgrupos) > 0)
115 116 $xml .= '<item cor="#FF9966" id="'.$contador.'" tipo="TE4" nome="SUBGRUPOS" familia="'.$id.'" /> '."\n";
116 117 for($j=0;$j < count($subgrupos);++$j)
... ... @@ -123,7 +124,14 @@ foreach ($menus as $menu)
123 124 $contador++;
124 125 $xml .= '<item cor="#FF6633" id="'.$contador.'" tipo="TE6" nome="TEMAS" familia="'.$id.'" /> '."\n";
125 126 $id_n2 = $subgrupos[$j]["id_n2"];
126   - $temas = pegaDados("select i3geoadmin_temas.tags_tema,i3geoadmin_temas.nome_tema,i3geoadmin_temas.codigo_tema,i3geoadmin_n3.id_n3 from ".$esquemaadmin."i3geoadmin_n3 LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema where i3geoadmin_n3.id_n2='$id_n2' order by ordem",$locaplic);
  127 + $temas = pegaDados("
  128 + select i3geoadmin_temas.tags_tema,i3geoadmin_temas.nome_tema,i3geoadmin_temas.codigo_tema,i3geoadmin_n3.id_n3
  129 + from ".$esquemaadmin."i3geoadmin_n3
  130 + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema
  131 + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON i3geoadmin_n3.id_tema = i3geousr_grupotema.id_tema
  132 + where i3geousr_grupotema.id_grupo is null and i3geoadmin_n3.id_n2='$id_n2' and i3geoadmin_n3.publicado != 'NAO' order by ordem",$locaplic
  133 + );
  134 + //var_dump($temas);exit;
127 135 $t = obtemTemas($temas,$contador,$id);
128 136 $xml .= $t[0];
129 137 $contador += $t[1];
... ...
admin/php/parsemapfile.php
... ... @@ -292,9 +292,9 @@ function mapfile()
292 292 $nlayers = array();
293 293 foreach ($layers as $layer)
294 294 {
  295 + $layer = $mapa->getlayerbyname($layer);
295 296 if($objcontype[$layer->connectiontype] != MS_WMS )
296 297 {
297   - $layer = $mapa->getlayerbyname($layer);
298 298 if($layer->group == "")
299 299 {$nlayers[] = $layer->name;}
300 300 else
... ...
admin/php/xml.php
... ... @@ -33,9 +33,6 @@ Arquivo:
33 33  
34 34 i3geo/admin/php/xml.php
35 35 */
36   -if(!function_exists("verificaEditores")){
37   - include_once(__DIR__."/../../classesphp/funcoes_gerais.php");
38   -}
39 36 //
40 37 //processa a vari&aacute;vel $esquemaadmin definida em ms_configura.php
41 38 //essa vari&aacute;vel precisa ter um . no final quando n&atilde;o for vazia, evitando erros na inclus&atilde;o dentro dos SQLs
... ... @@ -146,7 +143,12 @@ RSS
146 143 function geraRSStemas($locaplic,$id_n2)
147 144 {
148 145 global $esquemaadmin;
149   - $sql = "select '' as tipo_ws, t.codigo_tema as id_ws,t.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||t.codigo_tema as link_ws,t.link_tema as autor_ws from ".$esquemaadmin."i3geoadmin_n3 as n3,".$esquemaadmin."i3geoadmin_temas as t where t.id_tema = n3.id_tema and n3.id_n2 = '$id_n2' and n3.n3_perfil = '' order by nome_ws";
  146 + $sql = "
  147 + select '' as tipo_ws, i3geoadmin_temas.codigo_tema as id_ws,i3geoadmin_temas.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||i3geoadmin_temas.codigo_tema as link_ws,i3geoadmin_temas.link_tema as autor_ws
  148 + from ".$esquemaadmin."i3geoadmin_n3 as n3
  149 + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = n3.id_tema
  150 + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON n3.id_tema = i3geousr_grupotema.id_tema
  151 + where i3geousr_grupotema.id_grupo is null and i3geoadmin_temas.id_tema = n3.id_tema and n3.id_n2 = '$id_n2' and n3.n3_perfil = '' and n3.publicado != 'NAO' order by nome_ws";
150 152 return geraXmlRSS($locaplic,$sql,"Lista de temas");
151 153 }
152 154 /*
... ... @@ -169,7 +171,12 @@ RSS
169 171 function geraRSStemasRaiz($locaplic,$id,$nivel)
170 172 {
171 173 global $esquemaadmin;
172   - $sql = "select '' as tipo_ws, t.codigo_tema as id_ws,t.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||t.codigo_tema as link_ws,t.link_tema as autor_ws from ".$esquemaadmin."i3geoadmin_raiz as r,".$esquemaadmin."i3geoadmin_temas as t where t.id_tema = r.id_tema and r.nivel = '$nivel' and r.id_nivel = '$id' order by nome_ws";
  174 + $sql = "
  175 + select '' as tipo_ws, i3geoadmin_temas.codigo_tema as id_ws,i3geoadmin_temas.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||i3geoadmin_temas.codigo_tema as link_ws,i3geoadmin_temas.link_tema as autor_ws
  176 + from ".$esquemaadmin."i3geoadmin_raiz as r
  177 + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = r.id_tema
  178 + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON r.id_tema = i3geousr_grupotema.id_tema
  179 + where i3geousr_grupotema.id_grupo is null and i3geoadmin_temas.id_tema = r.id_tema and r.nivel = '$nivel' and r.id_nivel = '$id' order by nome_ws";
173 180 return geraXmlRSS($locaplic,$sql,"Temas na raiz");
174 181 }
175 182 /*
... ... @@ -190,7 +197,8 @@ RSS
190 197 function geraRSSsubgrupos($locaplic,$id_n1)
191 198 {
192 199 global $esquemaadmin;
193   - $sql = "select '' as tipo_ws, n2.id_n2 as id_ws,g.nome_subgrupo as nome_ws,'' as desc_ws,'rsstemas.php?id='||n2.id_n2 as link_ws,'' as autor_ws from ".$esquemaadmin."i3geoadmin_n2 as n2,".$esquemaadmin."i3geoadmin_subgrupos as g where g.id_subgrupo = n2.id_subgrupo and n2.id_n1 = '$id_n1' and n2.n2_perfil = '' order by nome_ws";
  200 + $sql = "select '' as tipo_ws, n2.id_n2 as id_ws,g.nome_subgrupo as nome_ws,'' as desc_ws,'rsstemas.php?id='||n2.id_n2 as link_ws,'' as autor_ws from ".$esquemaadmin."i3geoadmin_n2 as n2,".$esquemaadmin."i3geoadmin_subgrupos as g ";
  201 + $sql .= " where g.id_subgrupo = n2.id_subgrupo and n2.id_n1 = '$id_n1' and n2.n2_perfil = '' and n2.publicado != 'NAO' order by nome_ws";
194 202 return geraXmlRSS($locaplic,$sql,"Lista de sub-grupos");
195 203 }
196 204 /*
... ... @@ -211,7 +219,7 @@ function geraRSSgrupos($locaplic)
211 219 global $esquemaadmin;
212 220 $sql = "select '' as tipo_ws, n1.id_n1 as id_ws, g.nome_grupo as nome_ws,'rsstemasraiz.php?nivel=1&id='||n1.id_n1 as desc_ws,'rsssubgrupos.php?id='||n1.id_n1 as link_ws,'' as autor_ws ";
213 221 $sql .= "from ".$esquemaadmin."i3geoadmin_n1 as n1,".$esquemaadmin."i3geoadmin_grupos as g ";
214   - $sql .= "where g.id_grupo = n1.id_grupo and n1.n1_perfil = '' group by id_ws,tipo_ws,nome_ws,desc_ws,link_ws,autor_ws order by nome_ws";
  222 + $sql .= "where g.id_grupo = n1.id_grupo and n1.n1_perfil = '' and n1.publicado != 'NAO' group by id_ws,tipo_ws,nome_ws,desc_ws,link_ws,autor_ws order by nome_ws";
215 223 return geraXmlRSS($locaplic,$sql,"Lista de grupos");
216 224 }
217 225 /*
... ... @@ -338,9 +346,12 @@ function geraRSStemasDownload($locaplic)
338 346 and n1.id_grupo = g.id_grupo
339 347 and (t.download_tema != 'nao' and t.download_tema != 'NAO')
340 348 and t.tipoa_tema != 'WMS'
341   - and n3.n3_perfil = ''
  349 + and n3.n3_perfil = ''
342 350 and n2.n2_perfil = ''
343 351 and n1.n1_perfil = ''
  352 + and n3.publicado != 'NAO'
  353 + and n2.publicado != 'NAO'
  354 + and n1.publicado != 'NAO'
344 355 ";
345 356 //echo $sql;exit;
346 357 return geraXmlRSS($locaplic,$sql,"Temas para download");
... ... @@ -376,6 +387,9 @@ function geraRSStemasKml($locaplic)
376 387 and n3.n3_perfil = ''
377 388 and n2.n2_perfil = ''
378 389 and n1.n1_perfil = ''
  390 + and n3.publicado != 'NAO'
  391 + and n2.publicado != 'NAO'
  392 + and n1.publicado != 'NAO'
379 393 ";
380 394 //echo $sql;exit;
381 395 return geraXmlRSS($locaplic,$sql,"Temas em KML");
... ... @@ -412,6 +426,9 @@ function geraRSStemasOgc($locaplic)
412 426 and n3.n3_perfil = ''
413 427 and n2.n2_perfil = ''
414 428 and n1.n1_perfil = ''
  429 + and n3.publicado != 'NAO'
  430 + and n2.publicado != 'NAO'
  431 + and n1.publicado != 'NAO'
415 432 ";
416 433 //echo $sql;exit;
417 434 return geraXmlRSS($locaplic,$sql,"Temas em KML");
... ...
classesphp/funcoes_gerais.php
... ... @@ -2466,6 +2466,7 @@ $salva - salva o mapfile com os layers removidos ou nao
2466 2466 Retorno: boolean indicando se o mapfile contem layers indevidos
2467 2467 */
2468 2468 function validaAcessoTemas($map_file,$salva = true){
  2469 + error_reporting(0);
2469 2470 $indevidos = listaLayersIndevidos($map_file);
2470 2471 $existeIndevidos = false;
2471 2472 if(count($indevidos) > 0){
... ... @@ -2491,16 +2492,15 @@ O retorno e um array com a chave sendo o codigo do tema e o valor um array com a
2491 2492 */
2492 2493 function listaTemasRestritos(){
2493 2494 include_once(__DIR__."/../admin/php/admin.php");
  2495 + error_reporting(0);
2494 2496 $res = pegaDados("select id_grupo,codigo_tema from ".$esquemaadmin."i3geousr_grupotema as gt,".$esquemaadmin."i3geoadmin_temas as te where gt.id_tema = te.id_tema");
2495 2497 $restritos = array();
2496 2498 foreach ($res as $r){
2497   - if(!empty ($restritos[$r["codigo_tema"]])){
2498   - if($restritos[$r["codigo_tema"]]){
2499   - array_push($restritos[$r["codigo_tema"]],$r["id_grupo"]);
2500   - }
2501   - else{
2502   - $restritos[$r["codigo_tema"]] = array($r["id_grupo"]);
2503   - }
  2499 + if(in_array($r["codigo_tema"],$restritos)){
  2500 + array_push($restritos[$r["codigo_tema"]],$r["id_grupo"]);
  2501 + }
  2502 + else{
  2503 + $restritos[$r["codigo_tema"]] = array($r["id_grupo"]);
2504 2504 }
2505 2505 }
2506 2506 return $restritos;
... ... @@ -2511,10 +2511,26 @@ Function: listaLayersIndevidos
2511 2511 Lista os layers de um mapfile que sao restritos e que nao sao permitidos ao usuario logado
2512 2512 */
2513 2513 function listaLayersIndevidos($map_file){
  2514 + error_reporting(0);
2514 2515 $indevidos = array();
2515 2516 $restritos = listaTemasRestritos();
  2517 + /*
  2518 + array(1) {
  2519 + ["_wlocalirestrito"]=>
  2520 + array(1) {
  2521 + [0]=>
  2522 + string(1) "1"
  2523 + }
  2524 + }
  2525 + */
2516 2526 if(count($restritos) > 0){
2517 2527 $gruposusr = listaGruposUsrLogin();
  2528 + /*
  2529 + array(1) {
  2530 + [0]=>
  2531 + string(1) "1"
  2532 + }
  2533 + */
2518 2534 $m = ms_newMapObj($map_file);
2519 2535 $c = $m->numlayers;
2520 2536 for ($i=0;$i < $c;++$i) {
... ... @@ -2525,9 +2541,18 @@ function listaLayersIndevidos($map_file){
2525 2541 $meta = str_replace(".map","",basename($map_file));
2526 2542 }
2527 2543 if($meta != ""){
2528   - $t = $restritos[$meta];
2529   - if($t && !in_array($t,$gruposusr)){
2530   - array_push($indevidos,$layer->name);
  2544 + if(in_array($meta,array_keys($restritos))){
  2545 + $indevido = true;
  2546 + foreach($gruposusr as $g){
  2547 + foreach($restritos[$meta] as $r){
  2548 + if($g == $r){
  2549 + $indevido = false;
  2550 + }
  2551 + }
  2552 + }
  2553 + if($indevido == true){
  2554 + array_push($indevidos,$layer->name);
  2555 + }
2531 2556 }
2532 2557 }
2533 2558 }
... ... @@ -2540,6 +2565,7 @@ function listaLayersIndevidos($map_file){
2540 2565 Lista os temas que sao restritos e que nao sao permitidos ao usuario logado
2541 2566 */
2542 2567 function listaTemasIndevidos(){
  2568 + error_reporting(0);
2543 2569 $indevidos = array();
2544 2570 $restritos = listaTemasRestritos();
2545 2571 if(count($restritos) > 0){
... ... @@ -2561,6 +2587,7 @@ function listaTemasIndevidos(){
2561 2587 Lista os grupos ao qual pertence o usuario atualmente logado
2562 2588 */
2563 2589 function listaGruposUsrLogin(){
  2590 + error_reporting(0);
2564 2591 if(empty($_COOKIE["i3geocodigologin"])){
2565 2592 return array();
2566 2593 }
... ...
classesphp/mapa_inicia.php
... ... @@ -110,7 +110,7 @@ function iniciaMapa()
110 110 if(!function_exists("validaAcessoTemas")){
111 111 include_once("funcoes_gerais.php");
112 112 }
113   - validaAcessoTemas($_SESSION["map_file"]);
  113 + validaAcessoTemas($map_file);
114 114 if(!isset($kmlurl))
115 115 {$kmlurl = "";}
116 116 error_reporting(0);
... ...
classesphp/wscliente.php
... ... @@ -430,7 +430,7 @@ function listaRSSws2()
430 430 }
431 431 else
432 432 {$canali = simplexml_load_file($rss);}
433   - $linhas[] = "<a href='".$endereco."' target=blank ><img style='border:0px solid white' src='../../imagens/rss.gif' /></a>####";
  433 + $linhas[] = "<a href='".$endereco."' target=blank ><img style='border:0px solid white' src='http://i3geo.com.br/i3geo/imagens/rss.gif' /></a>####";
434 434 //var_dump($canali);
435 435 foreach ($canali->channel->item as $item)
436 436 {
... ...
ms_criamapa.php
... ... @@ -645,7 +645,7 @@ function incluiTemasIniciais(){
645 645 if ($layern->name == "estadosl")
646 646 {$layern->set("data",$locaplic."/aplicmap/dados/estados.shp");}
647 647 $layern->setmetadata("nomeoriginal",$layern->name);
648   - $nNome = str_replace(".map","",basename($arqtemp)).
  648 + $nNome = str_replace(".map","",basename($arqtemp));
649 649 $layern->setmetadata("arquivotemaoriginal",$nNome);
650 650 autoClasses($layern,$mapn);
651 651 //
... ...
temas/_llocalirestrito.map
... ... @@ -20,7 +20,6 @@ MAP
20 20 "LTEMPOITEMLINK" ""
21 21 "METAESTAT_CODIGO_TIPO_REGIAO" ""
22 22 "palletefile" ""
23   - "nomeoriginal" "locali"
24 23 "permitedownload" "sim"
25 24 "permitecomentario" ""
26 25 "metaestat" ""
... ... @@ -34,7 +33,7 @@ MAP
34 33 "editorsql" ""
35 34 "legendaimg" ""
36 35 END # METADATA
37   - NAME "localirestrito"
  36 + NAME "_llocalirestrito"
38 37 STATUS DEFAULT
39 38 TEMPLATE "none.htm"
40 39 TILEITEM "location"
... ...
temas/_wlocalirestrito.map
... ... @@ -20,7 +20,6 @@ MAP
20 20 "LTEMPOITEMLINK" ""
21 21 "METAESTAT_CODIGO_TIPO_REGIAO" ""
22 22 "palletefile" ""
23   - "nomeoriginal" "locali"
24 23 "permitedownload" "sim"
25 24 "permitecomentario" ""
26 25 "metaestat" ""
... ... @@ -34,7 +33,7 @@ MAP
34 33 "editorsql" ""
35 34 "legendaimg" ""
36 35 END # METADATA
37   - NAME "localirestrito"
  36 + NAME "_wlocalirestrito"
38 37 STATUS DEFAULT
39 38 TEMPLATE "none.htm"
40 39 TILEITEM "location"
... ...