Commit b2048c8c783621e843b8eb260834ab1a890f1b9f
1 parent
865209db
Exists in
master
and in
7 other branches
Corrige o download de temas quando o nome do mapfile é diferente do nome do layer
Showing
1 changed file
with
192 additions
and
0 deletions
Show diff stats
classesphp/funcoes_gerais.php
@@ -1995,6 +1995,198 @@ function downloadTema2($map_file,$tema,$locaplic,$dir_tmp,$postgis_mapa) | @@ -1995,6 +1995,198 @@ function downloadTema2($map_file,$tema,$locaplic,$dir_tmp,$postgis_mapa) | ||
1995 | $map_tmp->save($map_file); | 1995 | $map_tmp->save($map_file); |
1996 | $nomeRand = false; | 1996 | $nomeRand = false; |
1997 | } | 1997 | } |
1998 | + | ||
1999 | + // | ||
2000 | + //verifica se o tema existe no mapfile | ||
2001 | + //se não existir, tenta inserir com base no mapfile existente no diretório temas | ||
2002 | + //o tema pode existir se a função estiver sendo chamada da árvore de temas de um mapa já aberto | ||
2003 | + // | ||
2004 | + $temasdir = $locaplic."/temas"; | ||
2005 | + $map = ms_newMapObj($map_file); | ||
2006 | + // | ||
2007 | + //problema aqui | ||
2008 | + //$tema pode ser diferente do nome do mapfile | ||
2009 | + // | ||
2010 | + $teste = @$map->getlayerbyname($tema); | ||
2011 | + if ($teste == "") | ||
2012 | + { | ||
2013 | + $maptemp = ms_newMapObj($temasdir."/".$tema.".map"); | ||
2014 | + $temastemp = $maptemp->getalllayernames(); | ||
2015 | + foreach ($temastemp as $tt) | ||
2016 | + { | ||
2017 | + $ll = $maptemp->getlayerbyname($tt); | ||
2018 | + $permite = $ll->getmetadata("permitedownload"); | ||
2019 | + if($permite != "nao") | ||
2020 | + {ms_newLayerObj($map, $ll);} | ||
2021 | + } | ||
2022 | + $teste = @$map->getlayerbyname($tema); | ||
2023 | + if ($teste == "") | ||
2024 | + { | ||
2025 | + $ll = $maptemp->getlayer(0); | ||
2026 | + $permite = $ll->getmetadata("permitedownload"); | ||
2027 | + if($permite != "nao") | ||
2028 | + { | ||
2029 | + ms_newLayerObj($map, $ll); | ||
2030 | + $tema = $ll->name; | ||
2031 | + } | ||
2032 | + | ||
2033 | + } | ||
2034 | + } | ||
2035 | + else | ||
2036 | + { | ||
2037 | + //remove o metadata com um nome de arquivo opcional, pois a função de download pode estar sendo executada da árvore de camadas | ||
2038 | + $teste = $map->getlayerbyname($tema); | ||
2039 | + $teste->setmetadata("arquivodownload",""); | ||
2040 | + } | ||
2041 | + // | ||
2042 | + //salva o mapfile com um outro nome para evitar que o mapa atual, se estiver aberto, seja modificado | ||
2043 | + // | ||
2044 | + $map_file = str_replace(".map","tmp.map",$map_file); | ||
2045 | + $map->save($map_file); | ||
2046 | + substituiCon($map_file,$postgis_mapa); | ||
2047 | + $map = ms_newMapObj($map_file); | ||
2048 | + // | ||
2049 | + //verifica se existe mais de um tema (grupo) montando o array com os temas | ||
2050 | + //os grupos podem ter o nome do layer em GROUP ao invés de NAME | ||
2051 | + // | ||
2052 | + $multilayer = 0; | ||
2053 | + $grupos = $map->getAllGroupNames(); | ||
2054 | + foreach ($grupos as $grupo) | ||
2055 | + { | ||
2056 | + if ($grupo == $tema) | ||
2057 | + {$multilayer = 1;} | ||
2058 | + } | ||
2059 | + if ($multilayer == 1) | ||
2060 | + { | ||
2061 | + $temasnx = $map->getAllLayerNames(); | ||
2062 | + foreach ($temasnx as $l) | ||
2063 | + { | ||
2064 | + $gl = $map->getlayerbyname($l); | ||
2065 | + $g = $gl->group; | ||
2066 | + if (($g == $tema) || ($l == $tema)) | ||
2067 | + {$temas[] = $l;} | ||
2068 | + } | ||
2069 | + } | ||
2070 | + if ($multilayer == 0) | ||
2071 | + {$temas[] = $tema;} | ||
2072 | + $radtmp = dirname($dir_tmp); | ||
2073 | + foreach ($temas as $tema) | ||
2074 | + { | ||
2075 | + $l = $map->getlayerbyname($tema); | ||
2076 | + $novonomelayer = $tema; | ||
2077 | + $nomeshp = $dir_tmp."/".$novonomelayer; | ||
2078 | + if(file_exists($nomeshp.".dbf")){ | ||
2079 | + // | ||
2080 | + //verifica se o arquivo está vazio ou não | ||
2081 | + // | ||
2082 | + $verificaDBF = verificaDBF($nomeshp.".dbf"); | ||
2083 | + if($verificaDBF == false){ | ||
2084 | + unlink($nomeshp.".dbf"); | ||
2085 | + unlink($nomeshp.".shp"); | ||
2086 | + unlink($nomeshp.".shx"); | ||
2087 | + } | ||
2088 | + } | ||
2089 | + // | ||
2090 | + //se existir um arquivo já pronto, definido no metadata arquivodownload, irá ser utilizado | ||
2091 | + // | ||
2092 | + $meta = $l->getmetadata("arquivodownload"); | ||
2093 | + if($meta != "") | ||
2094 | + { | ||
2095 | + // | ||
2096 | + //se o arquivo não tiver sido copiado | ||
2097 | + // | ||
2098 | + $nomecopia = $dir_tmp."/".basename($meta); | ||
2099 | + if(file_exists($meta)) | ||
2100 | + { | ||
2101 | + if(!file_exists($nomecopia)) | ||
2102 | + {copy($meta,$nomecopia);} | ||
2103 | + } | ||
2104 | + $resultado[] = basename($dir_tmp)."/".basename($nomecopia); | ||
2105 | + } | ||
2106 | + else //se não existir arquivo definido | ||
2107 | + { | ||
2108 | + $dados = $l->data; | ||
2109 | + // | ||
2110 | + //se for imagem, copia o arquivo | ||
2111 | + // | ||
2112 | + if($l->type == MS_LAYER_RASTER) | ||
2113 | + { | ||
2114 | + if (file_exists($dados)) | ||
2115 | + { | ||
2116 | + $dir = dirname($dados); | ||
2117 | + $arq = explode(".",basename($dados)); | ||
2118 | + $nomecopia = $dir_tmp."/".$arq[0]; | ||
2119 | + $exts = array("jpg","jpw","tif","tifw","tfw","png","pngw","jpgw","wld","img"); | ||
2120 | + foreach($exts as $ext) | ||
2121 | + { | ||
2122 | + $copia = $nomecopia.".".$ext; | ||
2123 | + if(!file_exists($copia) && file_exists($dir."/".$arq[0].".".$ext)) | ||
2124 | + {copy($dir."/".$arq[0].".".$ext,$copia);} | ||
2125 | + if(file_exists($copia)) | ||
2126 | + $resultado[] = basename($dir_tmp)."/".basename($copia); | ||
2127 | + } | ||
2128 | + } | ||
2129 | + else | ||
2130 | + {return "erro";} | ||
2131 | + } | ||
2132 | + else //se for vetorial, extrai o arquivo | ||
2133 | + { | ||
2134 | + //define o nome correto do arquivo final | ||
2135 | + $sp = $map->shapepath; | ||
2136 | + $arq = ""; | ||
2137 | + if (file_exists($dados)) | ||
2138 | + {$arq = $dados;} | ||
2139 | + if (file_exists($dados.".shp")) | ||
2140 | + {$arq = $dados.".shp";} | ||
2141 | + if (file_exists($sp.$dados.".shp")) | ||
2142 | + {$arq = $sp.$dados.".shp";} | ||
2143 | + if (file_exists($sp.$dados)) | ||
2144 | + {$arq = $sp.$dados;} | ||
2145 | + // | ||
2146 | + //se o tema usa um arquivo shapefile, apenas faz a cópia | ||
2147 | + // | ||
2148 | + /* | ||
2149 | + if ($arq != "") | ||
2150 | + { | ||
2151 | + $arq = explode(".shp",$arq); | ||
2152 | + if(!file_exists($nomeshp.".shp")) | ||
2153 | + { | ||
2154 | + copy($arq[0].".shp",$nomeshp.".shp"); | ||
2155 | + copy($arq[0].".shx",$nomeshp.".shx"); | ||
2156 | + copy($arq[0].".dbf",$nomeshp.".dbf"); | ||
2157 | + } | ||
2158 | + $resultado[] = basename($dir_tmp)."/".$novonomelayer.".shp"; | ||
2159 | + $resultado[] = basename($dir_tmp)."/".$novonomelayer.".dbf"; | ||
2160 | + $resultado[] = basename($dir_tmp)."/".$novonomelayer.".shx"; | ||
2161 | + } | ||
2162 | + */ | ||
2163 | + $nomeshp = criaSHP($tema,$map_file,$locaplic,$dir_tmp,$nomeRand); | ||
2164 | + if($nomeshp == false) | ||
2165 | + {return array("arquivos"=>"<span style=color:red >Ocorreu um erro, tente novamente","nreg"=>0);} | ||
2166 | + $resultado[] = str_replace($radtmp."/","",$nomeshp).".shp"; | ||
2167 | + $resultado[] = str_replace($radtmp."/","",$nomeshp).".shx"; | ||
2168 | + $resultado[] = str_replace($radtmp."/","",$nomeshp).".dbf"; | ||
2169 | + } | ||
2170 | + } | ||
2171 | + } | ||
2172 | + $nreg = ""; | ||
2173 | + if(count($resultado) == 3){ | ||
2174 | + $arq = $radtmp."/".$resultado[2]; | ||
2175 | + if(function_exists("dbase_open")){ | ||
2176 | + $db = dbase_open($arq, 0); | ||
2177 | + if($db){$nreg = dbase_numrecords($db);} | ||
2178 | + } | ||
2179 | + else{ | ||
2180 | + $db = xbase_open($arq, 0); | ||
2181 | + if($db){$nreg = xbase_numrecords($db);} | ||
2182 | + } | ||
2183 | + } | ||
2184 | + return array("arquivos"=>implode(",",$resultado),"nreg"=>$nreg); | ||
2185 | + | ||
2186 | + | ||
2187 | + | ||
2188 | + | ||
2189 | + | ||
1998 | // | 2190 | // |
1999 | //verifica se o tema existe no mapfile | 2191 | //verifica se o tema existe no mapfile |
2000 | //se não existir, tenta inserir com base no mapfile existente no diretório temas | 2192 | //se não existir, tenta inserir com base no mapfile existente no diretório temas |