From afd6a4d82a2defac2697b487cdd3df15683e3be8 Mon Sep 17 00:00:00 2001 From: Max-Rohrer20 Date: Sun, 18 Aug 2024 17:16:42 -0300 Subject: [PATCH] =?UTF-8?q?Corrigindo=20o=20bug=20do=20marcador=20no=20map?= =?UTF-8?q?a=20de=20cadastro=20no=20formul=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lgbtq_connect/assets/js/script.js | 112 ++++++++++++------------------ lgbtq_connect/index.php | 18 ++--- 2 files changed, 52 insertions(+), 78 deletions(-) diff --git a/lgbtq_connect/assets/js/script.js b/lgbtq_connect/assets/js/script.js index 81b59996..afd7b9c3 100644 --- a/lgbtq_connect/assets/js/script.js +++ b/lgbtq_connect/assets/js/script.js @@ -54,7 +54,7 @@ class Mapa { this.mapa.addControl(new CustomControl()); } - adicionarMarcador(marcador) { + adicionarMarcador(marcador) { marcador.addTo(this.mapa); this.marcadores.push(marcador); } @@ -124,7 +124,11 @@ class PaginaComPopup extends Pagina { // Usa a função getMarcador passando o tipo de serviço const icon = getMarcador(formulario.servico); - this.mapa.adicionarMarcador(L.marker([formulario.latitude, formulario.longitude], { icon: icon }).bindPopup(popupConteudo)); + if (icon) { + this.mapa.adicionarMarcador(L.marker([formulario.latitude, formulario.longitude], { icon: icon }).bindPopup(popupConteudo)); + } else { + console.error('Erro ao criar o ícone para:', formulario.servico); + } } } } @@ -136,22 +140,18 @@ class PaginaFormulario extends Pagina { var self = this; this.mapa.mapa.on('click', function (e) { - if (self.marcador == null) { - // Usa o valor do serviço selecionado para definir o ícone - const icon = getMarcador(document.getElementById('servico').value); + if (self.marcador === null) { + const icon = getMarcador(undefined, true); self.marcador = L.marker(e.latlng, { icon: icon }).addTo(self.mapa.mapa); + } else { + self.marcador.setLatLng(e.latlng); } - self.marcador.setLatLng(e.latlng); - - var lat = e.latlng.lat; // Latitude - var lng = e.latlng.lng; // Longitude - - // Atualiza os valores dos campos de entrada ocultos - document.getElementById('latitude').value = lat; - document.getElementById('longitude').value = lng; - + document.getElementById('latitude').value = e.latlng.lat; + document.getElementById('longitude').value = e.latlng.lng; + Verificador.verificarCoordenadas(); }); + this.mapa.mapa.on('contextmenu', function (e) { // Verifica se existe um marcador atual @@ -169,7 +169,11 @@ class PaginaFormulario extends Pagina { for (var i = 0; i < formularios_aprovados.length; i++) { var formulario = formularios_aprovados[i]; const icon = getMarcador(formulario.servico); - this.mapa.adicionarMarcador(L.marker([formulario.latitude, formulario.longitude], { icon: icon })); + if (icon) { + this.mapa.adicionarMarcador(L.marker([formulario.latitude, formulario.longitude], { icon: icon })); + } else { + console.error('Erro ao criar o ícone para:', formulario.servico); + } } } } @@ -190,17 +194,32 @@ class FabricaPagina { return new (FabricaPagina.CLASSES.get(tipo))(id); } } -// Função getMarcador -function getMarcador(tipoServico) { - const url = marcadores[tipoServico] || marcadores['outro']; // Pega o marcador específico ou o marcador padrão - const icon = L.icon({ + +// Define a URL do ícone padrão +const DEFAULT_ICON_URL = marcador_mapa; // Usa a URL definida pelo PHP + +// Função para obter o ícone do marcador +function getMarcador(tipoServico = 'outro', usarPadrao = false) { + const url = usarPadrao ? marcadores['outro'] : (marcadores[tipoServico] || marcadores['outro']); + + // Verifica se a URL está definida e válida + if (!url) { + console.error('URL do ícone não foi definida corretamente:', { tipoServico, usarPadrao }); + return L.icon({ + iconUrl: DEFAULT_ICON_URL, // Usa a URL do ícone padrão + iconSize: [60, 60], + popupAnchor: [1, -10] + }); + } + + return L.icon({ iconUrl: url, - iconSize: [60, 60], // tamanho do ícone + iconSize: [60, 60], popupAnchor: [1, -10] }); - return icon; } + // Definindo o ícone personalizado no escopo global usando a função getMarcador const personalIcon = getMarcador(); @@ -242,7 +261,6 @@ function abrirFiltroServico(){ botao.style.backgroundColor = '#f5f5f5'; botao.style.border = '1px solid rgb(209, 216, 212)'; } - } @@ -257,56 +275,12 @@ document.querySelectorAll('.name_servico').forEach(checkbox => { window.onclick = function(event) { const modal = document.getElementById('modal_filtro'); const botao = document.getElementById('filtro_servico'); - if (event.target !== modal && event.target !== document.getElementById('filtro_servico')) { + if (event.target === modal) { modal.style.display = "none"; botao.style.backgroundColor = '#f5f5f5'; botao.style.border = '1px solid rgb(209, 216, 212)'; } -}; - -// Capturando o checklist para gerar marcadores -document.querySelectorAll('.name_servico').forEach(function(checkbox) { - checkbox.addEventListener('change', function() { - filtrarServicos(); - }); -}); - -function filtrarServicos() { - // Obter os serviços selecionados - const servicosSelecionados = Array.from(document.querySelectorAll('.name_servico:checked')).map(cb => cb.value); - - // Se "Outros" estiver selecionado, adicionar lógica para filtrar todos os serviços não pré-definidos - const servicosPreDefinidos = ["bar/restaurante", "entretenimento", "bar", "beleza", "hospedagem", "ensino", "academia"]; - const outrosSelecionado = servicosSelecionados.includes("outros"); - - // Filtrar os formulários aprovados com base nos serviços selecionados - const filtrados = formularios_aprovados.filter(formulario => { - return servicosSelecionados.includes(formulario.servico) || - (outrosSelecionado && !servicosPreDefinidos.includes(formulario.servico)); - }); - - // Chamar a função para atualizar o mapa com os serviços filtrados - atualizarMapaComFiltrados(filtrados); } - -function atualizarMapaComFiltrados(filtrados) { - // Limpar marcadores do mapa antes de aplicar o filtro - pagina.mapa.marcadores.forEach(marcador => pagina.mapa.mapa.removeLayer(marcador)); - pagina.mapa.marcadores = []; - - // Aplicar o filtro e adicionar os novos marcadores - filtrados.forEach(formulario => { - // Define o ícone com base no serviço do formulário - const icon = getMarcador(formulario.servico); - const popupConteudo = ` -
-

${formulario.nome}

- ${formulario.servico} -
-

${formulario.descricao}

-
- `; - pagina.mapa.adicionarMarcador(L.marker([formulario.latitude, formulario.longitude], { icon: icon }).bindPopup(popupConteudo)); - }); -} +// Adiciona a lógica para o botão de filtro +document.getElementById("filtro_servico").addEventListener("click", abrirFiltroServico); diff --git a/lgbtq_connect/index.php b/lgbtq_connect/index.php index ad166613..28df4218 100644 --- a/lgbtq_connect/index.php +++ b/lgbtq_connect/index.php @@ -102,11 +102,14 @@ function enfileirar_scripts() { global $wpdb; // Enfileira o script JavaScript - wp_enqueue_script('script.js', plugins_url('/assets/js/script.js', __FILE__), array('jquery'), '1.0', true); + wp_enqueue_script('script-js', plugins_url('/assets/js/script.js', __FILE__), array('jquery'), '1.0', true); // Obtém os formulários aprovados $formularios_aprovados = obter_formularios_aprovados($wpdb); + // Url para o marcador que irá aparecer quando ele for clicado no mapa de cadastro + $marcadormapa = plugin_dir_url(__FILE__) . 'assets/imgs/Marker_Padrao.png'; + // Url dos Marcadores $marcadores = array( 'academia' => plugin_dir_url(__FILE__) . 'assets/imgs/Marker_Academia.png', @@ -121,14 +124,11 @@ function enfileirar_scripts() { // Obtém todos os formulários $formularios = obter_formularios($wpdb); - // Passa os dados dos formulários aprovados para o script JavaScript - wp_localize_script('script.js', 'formularios_aprovados', $formularios_aprovados); - - // Passa os dados de todos os formulários para o script JavaScript - wp_localize_script('script.js', 'formularios_todos', $formularios); - - // Passa o url do marcador - wp_localize_script('script.js', 'marcadores', $marcadores); + // Passa os dados para o script JavaScript + wp_localize_script('script-js', 'formularios_aprovados', $formularios_aprovados); + wp_localize_script('script-js', 'formularios_todos', $formularios); + wp_localize_script('script-js', 'marcadores', $marcadores); + wp_localize_script('script-js', 'marcador_mapa', $marcadormapa); } add_action('admin_enqueue_scripts', 'enfileirar_scripts_admin');