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 | ... | ... |