0) {
$id = $dados [0] ["id_tema"];
} else {
$id = "";
}
// verifica se o tema esta em uso
if ($id != "") {
$r = \admin\php\funcoesAdmin\pegaDados ( "SELECT id_tema from " . $esquemaadmin . "i3geoadmin_n3 where id_tema ='$id'", $dbhw, false );
if (count ( $r ) > 0) {
return "o tema e utilizado em algum subgrupo";
}
$r = \admin\php\funcoesAdmin\pegaDados ( "SELECT id_tema from " . $esquemaadmin . "i3geoadmin_raiz where id_tema ='$id'", $dbhw, false );
if (count ( $r ) > 0) {
return "o tema e utilizado em alguma raiz";
}
}
if (! file_exists ( "$locaplic/temas/" . $codigo . ".map" )) {
return "o arquivo mapfile nao existe";
}
// verifica se pode escrever
$handle = fopen ( "$locaplic/temas/" . $codigo . ".map", "r+" );
if ($handle == false) {
return "o arquivo nao pode ser apagado verifique as permissoes";
}
fclose ( $handle );
// tenta excluir do banco
$resultado = \admin\php\funcoesAdmin\i3GeoAdminExclui ( $esquemaadmin . "i3geoadmin_temas", "id_tema", $id, $dbhw, true );
if ($resultado === false) {
return "nao foi possivel excluir do banco de dados";
}
unlink ( "$locaplic/temas/" . $codigo . ".map" );
return true;
}
function alterar($locaplic, $id_tema, $titulolegenda, $link_tema, $codigo, $acessopublico, $metaestat, $titulo, $desc_tema, $tituloEN, $tituloES, $registraBanco, $dbhw) {
$convUTF = $_SESSION["convUTF"];
$esquemaadmin = $_SESSION["esquemaadmin"];
$arq = $locaplic . "/temas/" . $codigo . ".map";
if ($codigo == "" || ! file_exists ( $arq )) {
header ( "HTTP/1.1 400 arquivo nao existe" );
exit ();
}
$mapa = ms_newMapObj ( $arq );
$layer = @$mapa->getlayerbyname ( $codigo );
if ($layer == "") {
return false;
}
if (mb_detect_encoding ( $titulolegenda, 'UTF-8, ISO-8859-1' ) == "UTF-8") {
$titulolegenda = utf8_decode ( $titulolegenda );
}
if ($convUTF != true) {
$titulo = utf8_decode ( $titulo );
$desc_tema = utf8_decode ( $desc_tema );
}
if ($acessopublico == "on") {
$acessopublico = "SIM";
} else {
$acessopublico = "NAO";
}
$layer->setmetadata ( "permiteogc", $acessopublico );
$layer->setmetadata ( "permitedownload", $acessopublico );
$layer->setmetadata ( "permitekml", $acessopublico );
$layer->setmetadata ( "permitekmz", $acessopublico );
$layer->setmetadata ( "TEMA", $titulolegenda );
if (! empty ( $metaestat ) && $metaestat == "SIM") {
$layer->setmetadata ( "METAESTAT", "SIM" );
$tipoa_tema = "META";
} else {
$layer->setmetadata ( "METAESTAT", "" );
$tipoa_tema = "";
}
try {
$dataCol = array (
"link_tema" => $link_tema,
"kml_tema" => $acessopublico,
"kmz_tema" => $acessopublico,
"ogc_tema" => $acessopublico,
"download_tema" => $acessopublico,
"desc_tema" => $desc_tema,
"tipoa_tema" => $tipoa_tema,
"tags_tema" => '',
"nome_tema" => $titulo,
"codigo_tema" => $codigo,
"it" => "",
"es" => $tituloES,
"en" => $tituloEN
);
$resultado = \admin\php\funcoesAdmin\i3GeoAdminUpdate ( $dbhw, "i3geoadmin_temas", $dataCol, "WHERE id_tema = $id_tema" );
if ($resultado === false) {
return false;
}
$mapa->save ( $arq );
\admin\php\funcoesAdmin\removeCabecalhoMapfile ( $arq );
return true;
} catch ( PDOException $e ) {
return false;
}
}
function adicionar($locaplic, $titulolegenda, $link_tema, $codigo, $acessopublico, $metaestat, $titulo, $desc_tema, $tituloEN, $tituloES, $registraBanco, $dbhw) {
$convUTF = $_SESSION["convUTF"];
$esquemaadmin = $_SESSION["esquemaadmin"];
$arq = $locaplic . "/temas/" . $codigo . ".map";
if ($codigo == "" || file_exists ( $arq )) {
header ( "HTTP/1.1 400 arquivo ja existe" );
exit ();
}
if ($acessopublico == "on") {
$acessopublico = "SIM";
} else {
$acessopublico = "NAO";
}
if (mb_detect_encoding ( $titulolegenda, 'UTF-8, ISO-8859-1' ) == "UTF-8") {
$titulolegenda = utf8_decode ( $titulolegenda );
}
$tipoLayer = "line";
$dados [] = "MAP";
$dados [] = "SYMBOLSET ../symbols/simbolosv6.sym";
$dados [] = 'FONTSET "../symbols/fontes.txt"';
$dados [] = "LAYER";
$dados [] = ' NAME "' . $codigo . '"';
$dados [] = ' TEMPLATE "none.htm"';
if (! empty ( $metaestat ) && $metaestat == "SIM") {
$dados [] = ' CONNECTIONTYPE POSTGIS';
$tipoLayer = "polygon";
}
$dados [] = " TYPE " . $tipoLayer;
$dados [] = ' DATA ""';
$dados [] = ' CONNECTION ""';
$dados [] = ' STATUS DEFAULT';
$dados [] = ' METADATA';
$dados [] = ' TEMA "' . $titulolegenda . '"';
$dados [] = ' convcaracter "SIM"';
$dados [] = ' CLASSE "SIM"';
$dados [] = ' TILES "SIM"';
$tipoa_tema = "";
if (! empty ( $metaestat ) && $metaestat == "SIM") {
$dados [] = ' METAESTAT "SIM"';
// para marcar no banco de dados de administracao
$tipoa_tema = "META";
}
$dados [] = ' permiteogc "' . $acessopublico . '"';
$dados [] = ' permitedownload "' . $acessopublico . '"';
$dados [] = ' permitekml "' . $acessopublico . '"';
$dados [] = ' permitekmz "' . $acessopublico . '"';
$dados [] = ' END';
$dados [] = ' CLASS';
$dados [] = ' NAME ""';
$dados [] = ' STYLE';
$dados [] = ' COLOR 0 0 0';
$dados [] = ' SIZE 12';
$dados [] = ' END';
$dados [] = ' END';
$dados [] = "END";
$dados [] = "END";
// abre o arquivo para ver se nao deu erro antes de adicionar ao banco
$fp = fopen ( $arq, "w" );
if ($fp === false) {
return false;
}
if ($convUTF != true) {
$titulo = utf8_decode ( $titulo );
$desc_tema = utf8_decode ( $desc_tema );
}
if ($registraBanco == true) {
try {
$dataCol = array (
"link_tema" => $link_tema,
"kml_tema" => $acessopublico,
"kmz_tema" => $acessopublico,
"ogc_tema" => $acessopublico,
"download_tema" => $acessopublico,
"desc_tema" => $desc_tema,
"tipoa_tema" => $tipoa_tema,
"tags_tema" => '',
"nome_tema" => $titulo,
"codigo_tema" => $codigo,
"it" => "",
"es" => $tituloES,
"en" => $tituloEN
);
\admin\php\funcoesAdmin\i3GeoAdminInsert ( $dbhw, "i3geoadmin_temas", $dataCol );
// salva o arquivo mapfile
foreach ( $dados as $dado ) {
fwrite ( $fp, $dado . "\n" );
}
fclose ( $fp );
return true;
} catch ( PDOException $e ) {
return false;
}
} else {
return true;
}
}
function listar($dbh, $filtro = "", $palavra = "", $validar = "") {
$convUTF = $_SESSION["convUTF"];
$esquemaadmin = $_SESSION["esquemaadmin"];
$locaplic = $_SESSION["locaplic"];
$arquivosTemp = array ();
if (is_dir ( $locaplic . "/temas" )) {
if ($dh = opendir ( $locaplic . "/temas" )) {
while ( ($file = readdir ( $dh )) !== false ) {
if (! stristr ( $file, '.map' ) === FALSE) {
$file = str_replace ( ".map", "", $file );
// verifica se existe um filtro de palavra
if ($palavra != "") {
if (stripos ( $file, $palavra ) !== false) {
$arquivosTemp [] = $file;
}
} else {
$arquivosTemp [] = $file;
}
}
}
}
closedir ( $dh );
}
natcasesort( $arquivosTemp );
$arquivos = array ();
foreach($arquivosTemp as $arq){
$arquivos[] = array("nome"=>$arq);
}
//
// pega o nome de cada tema filtrando a listagem se for o caso
//
$regs = \admin\php\funcoesAdmin\pegaDados ( "select * from " . $esquemaadmin . "i3geoadmin_temas ", $dbh, false );
$nomes = array ();
$ids = array ();
$dadosBanco = array ();
foreach ( $regs as $reg ) {
if ($convUTF != true) {
$reg ["nome_tema"] = utf8_decode ( $reg ["nome_tema"] );
}
$nomes [$reg ["codigo_tema"]] = $reg ["nome_tema"];
$ids [$reg ["codigo_tema"]] = $reg ["id_tema"];
$dadosBanco [$reg ["id_tema"]] = $reg;
}
$lista = array ();
foreach ( $arquivos as $arq ) {
$arq = $arq ["nome"];
$nT = explode ( ".", $arq );
$n = "";
if(isset($nomes [$nT [0]])){
$n = $nomes [$nT [0]];
}
// o mapfile nao esta registrado no banco
$id = "";
if(isset($ids [$nT [0]])){
$id = $ids [$nT [0]];
}
if($id != "") {
// aplica as validacoes. Se nao passar na validacao $id ficara vazio, para nao mostrar no resultado final
switch ($validar) {
case 1 :
if ($dadosBanco [$id] ["link_tema"] !== "") {
$id = "";
}
break;
case 2 :
if ($dadosBanco [$id] ["nome_tema"] == "") {
$id = "-";
} else {
$id = "";
}
break;
case 3 :
if ($dadosBanco [$id] ["nome_tema"] == "") {
$id = "";
}
break;
case 4 :
if (strtolower ( $dadosBanco [$id] ["download_tema"] ) !== "sim") {
$id = "";
}
break;
case 5 :
if (strtolower ( $dadosBanco [$id] ["download_tema"] ) !== "nao") {
$id = "";
}
break;
case 6 :
if (strtolower ( $dadosBanco [$id] ["ogc_tema"] ) !== "sim") {
$id = "";
}
break;
case 7 :
if (strtolower ( $dadosBanco [$id] ["ogc_tema"] ) !== "nao") {
$id = "";
}
break;
case 8 :
if (strtolower ( $dadosBanco [$id] ["kml_tema"] ) !== "sim") {
$id = "";
}
break;
case 9 :
if (strtolower ( $dadosBanco [$id] ["kml_tema"] ) !== "nao") {
$id = "";
}
break;
case 10 :
if (strtolower ( $dadosBanco [$id] ["kmz_tema"] ) !== "sim") {
$id = "";
}
break;
case 11 :
if (strtolower ( $dadosBanco [$id] ["kmz_tema"] ) !== "nao") {
$id = "";
}
break;
}
}
$imagem = "";
if (file_exists ( $locaplic . "/temas/miniaturas/" . $arq . ".map.mini.png" )) {
$imagem = $arq . ".map.mini.png";
}
if ($validar == 12) {
if (file_exists ( $locaplic . "/temas/" . $arq . ".map" )) {
$handle = fopen ( $locaplic . "/temas/" . $arq . ".map", "r" );
while ( ! feof ( $handle ) ) {
$linha = fgets ( $handle );
if (stripos ( $linha, "'TEMA'" ) !== false || stripos ( $linha, '"TEMA"' ) !== false) {
$ntema = str_replace ( array (
"'TEMA'",
'"TEMA"',
"'tema'",
'"tema"'
), "", $linha );
$ntema = trim ( str_replace ( array (
"'",
'"'
), "", $ntema ) );
$temp = $n;
if ($n != $ntema && utf8_decode ( $temp ) != $ntema && $n != "") {
$n .= "" . utf8_encode ( $ntema ) . "";
} else {
$n .= "" . utf8_encode ( $ntema ) . "";
}
break;
}
}
fclose ( $handle );
}
}
if ($validar == 13) {
if (file_exists ( $locaplic . "/temas/" . $arq . ".map" )) {
$handle = fopen ( $locaplic . "/temas/" . $arq . ".map", "r" );
// deve buscar dentro de LAYER pois pode haver simbolos antes
$elayer = false;
while ( ! feof ( $handle ) ) {
$linha = trim ( fgets ( $handle ) );
if (stripos ( $linha, "LAYER" ) === 0) {
$elayer = true;
}
if ($elayer == true && stripos ( $linha, "NAME" ) === 0) {
$ntema = ltrim ( $linha, "NAMEname" );
$ntema = trim ( str_replace ( array (
"'",
'"'
), "", $ntema ) );
if ($arq != $ntema) {
$n .= "" . $ntema . "";
}
break;
}
}
fclose ( $handle );
}
}
// se id for vazio, nao consta no banco, por isso, se validar for definido, nao pode ser aplicado
if (empty ( $validar ) || (! empty ( $validar ) && $id != "")) {
$lista [] = array (
"id_tema" => $id,
"nome" => $n,
"codigo" => $arq,
"imagem" => $imagem,
"extensao" => ""
);
}
}
return $lista;
}
//usar dbhw pois pode ser necessario adicionar o registro
function listaUnico($dbhw, $codigo) {
$convUTF = $_SESSION["convUTF"];
$esquemaadmin = $_SESSION["esquemaadmin"];
$locaplic = $_SESSION["locaplic"];
if(!file_exists($locaplic."/temas/".$codigo.".map")){
header ( "HTTP/1.1 500 erro mapfile nao existe" );
exit ();
}
$mapa = ms_newMapObj ( $locaplic."/temas/".$codigo.".map" );
$layer = $mapa->getlayerbyname($codigo);
if($layer == ""){
header ( "HTTP/1.1 500 erro nao existe LAYER com o nome $codigo" );
exit ();
}
$titulolegenda = $layer->getmetadata("TEMA");
if ($convUTF != false) {
$titulolegenda = utf8_decode ( $titulolegenda );
}
$metaestat = $layer->getmetadata("METAESTAT");
$dados = \admin\php\funcoesAdmin\pegaDados ( "SELECT * from ".$esquemaadmin."i3geoadmin_temas WHERE codigo_tema = '$codigo' ", $dbhw, false );
//se nao existir no sistema de admin, faz o registro
if(count($dados) == 0){
$dataCol = array (
"kml_tema" => "SIM",
"kmz_tema" => "SIM",
"ogc_tema" => "SIM",
"download_tema" => "SIM",
"desc_tema" => "",
"tipoa_tema" => "",
"tags_tema" => "",
"nome_tema" => $titulolegenda,
"codigo_tema" => $codigo,
"it" => "",
"es" => "",
"en" => ""
);
$id_tema = \admin\php\funcoesAdmin\i3GeoAdminInsertUnico($dbhw,"i3geoadmin_temas",$dataCol,"link_tema","id_tema");
$dados = \admin\php\funcoesAdmin\pegaDados ( "SELECT * from ".$esquemaadmin."i3geoadmin_temas WHERE codigo_tema = '$codigo' AND id_tema = $id_tema ", $dbhw, false );
if(count($dados) == 0){
$dbhw = null;
$dbh = null;
header ( "HTTP/1.1 500 erro ao registrar no banco de dados" );
exit ();
}
}
if ($dados === false) {
$dbhw = null;
$dbh = null;
header ( "HTTP/1.1 500 erro ao consultar banco de dados" );
exit ();
}
$acessopublico = "";
if(strtolower($dados[0]["ogc_tema"]) !== "nao" || strtolower($dados[0]["download_tema"]) !== "nao"){
$acessopublico = "checked";
}
if($metaestat == ""){
$dados[0]["metaestatnao"] = "selected";
} else {
$dados[0]["metaestatsim"] = "selected";
}
$dados[0]["acessopublico"] = $acessopublico;
$dados[0]["metaestat"] = $metaestat;
//a pagina e utf e o texto pode ser iso
if(mb_detect_encoding($titulolegenda,'UTF-8, ISO-8859-1') == "ISO-8859-1"){
$titulolegenda = utf8_encode($titulolegenda);
}
$dados[0]["titulolegenda"] = $titulolegenda;
$dados[0]["codigo"] = $codigo;
return $dados[0];
}
function limpaCache($locaplic, $codigo, $cachedir, $dir_tmp){
$mapfile = $locaplic . "/temas/" . $codigo . ".map";
if (! file_exists ( $mapfile )) {
header ( "HTTP/1.1 403 arquivo nao existe" );
exit ();
}
$mapa = ms_newMapObj ( $mapfile );
$nomes = $mapa->getalllayernames ();
if ($cachedir != "") {
$d = $cachedir;
} else {
$d = $dir_tmp . "/cache";
}
foreach ( $nomes as $nome ) {
$nome = str_replace ( ".", "", $nome );
$nome = strip_tags ( $nome );
$nome = htmlspecialchars ( $nome, ENT_QUOTES );
$dirs [] = $d . "/" . $nome;
$dirs [] = $d . "/googlemaps/" . $nome;
$dirs [] = $d . "/wmts/" . $nome;
foreach ( $dirs as $dir ) {
\admin\catalogo\mapfile\rrmdir ( $dir );
}
}
$nome = $nomes[0];
if(file_exists($d . "/" . $nome) || file_exists($d . "/googlemaps/" . $nome) || file_exists($d . "/wmts/" . $nome)){
header ( "HTTP/1.1 403 cache nao removido" );
exit;
} else {
return true;
}
}
function clonarMapfile($codigo,$novocodigo,$titulo,$dbh,$dbhw){
$esquemaadmin = $_SESSION["esquemaadmin"];
$locaplic = $_SESSION["locaplic"];
$arq = $locaplic . "/temas/" . $codigo . ".map";
$arqnovo = $locaplic . "/temas/" . $novocodigo . ".map";
if ($codigo == "" || !file_exists ( $arq )) {
header ( "HTTP/1.1 400 arquivo nao existe" );
exit ();
}
if ($novocodigo == "" || file_exists ( $arqnovo )) {
header ( "HTTP/1.1 400 arquivo ja existe" );
exit ();
}
//obtem os dados do banco do tema existente
$dados = \admin\php\funcoesAdmin\pegaDados ( "SELECT * from " . $esquemaadmin . "i3geoadmin_temas WHERE codigo_tema = '" . $codigo . "'", $dbh, false );
if (count ( $dados ) > 0) {
//o mapfile esta registrado como um tema no banco de adm
$dataCol = array (
"link_tema" => $dados [0] ["link_tema"],
"kml_tema" => $dados [0] ["kml_tema"],
"kmz_tema" => $dados [0] ["kmz_tema"],
"ogc_tema" => $dados [0] ["ogc_tema"],
"download_tema" => $dados [0] ["download_tema"],
"desc_tema" => "",
"tipoa_tema" => $dados [0] ["tipoa_tema"],
"tags_tema" => '',
"nome_tema" => $_POST["titulo"],
"codigo_tema" => $novocodigo,
"it" => "",
"es" => "",
"en" => ""
);
$acessopublico = $dados [0] ["download_tema"];
} else {
$acessopublico = "";
}
//faz a copia do mapfile
$mapa = ms_newMapObj($arq);
$layer = @$mapa->getlayerbyname($codigo);
$layer->set("name",$novocodigo);
$layer->setmetadata("TEMA",$titulo);
$mapa->save($arqnovo);
\admin\php\funcoesAdmin\removeCabecalhoMapfile($arqnovo);
if (count ( $dados ) > 0) {
//registra no banco de dados caso nao tenha ocorrido erro ao criar o mapfile
\admin\php\funcoesAdmin\i3GeoAdminInsert ( $dbhw, "i3geoadmin_temas", $dataCol );
}
}
function rrmdir($dir) {
if (is_dir ( $dir )) {
$objects = scandir ( $dir );
foreach ( $objects as $object ) {
if ($object != "." && $object != "..") {
if (filetype ( $dir . "/" . $object ) == "dir") {
\admin\catalogo\mapfile\rrmdir ( $dir . "/" . $object );
} else {
$object = str_replace ( ".png", "", $object ) . ".png";
chmod ( $dir . "/" . $object, 077 );
unlink ( $dir . "/" . $object );
}
}
}
reset ( $objects );
}
}
?>