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 | 1995 | $map_tmp->save($map_file); |
| 1996 | 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 | 2191 | //verifica se o tema existe no mapfile |
| 2000 | 2192 | //se não existir, tenta inserir com base no mapfile existente no diretório temas | ... | ... |