Commit b2048c8c783621e843b8eb260834ab1a890f1b9f

Authored by Edmar Moretti
1 parent 865209db

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