From fabcc296ff8b58a152f7063e0b417e648abb05a1 Mon Sep 17 00:00:00 2001 From: Marco Antonio Vivas Date: Fri, 8 Aug 2025 22:13:35 -0300 Subject: [PATCH] Initial commit --- .gitattributes | 2 + README.md | 68 ++++++++++++ assets/css/admin-ramais.css | 16 +++ assets/css/ramais.css | 116 +++++++++++++++++++++ assets/js/ramais.js | 58 +++++++++++ basedados/bancodados.csv | 161 +++++++++++++++++++++++++++++ includes/class-ramais-admin.php | 99 ++++++++++++++++++ includes/class-ramais-ajax.php | 43 ++++++++ includes/class-ramais-database.php | 140 +++++++++++++++++++++++++ includes/class-ramais-frontend.php | 39 +++++++ ramais-telefonicos.php | 117 +++++++++++++++++++++ templates/lista-ramais.php | 105 +++++++++++++++++++ 12 files changed, 964 insertions(+) create mode 100644 .gitattributes create mode 100644 README.md create mode 100644 assets/css/admin-ramais.css create mode 100644 assets/css/ramais.css create mode 100644 assets/js/ramais.js create mode 100644 basedados/bancodados.csv create mode 100644 includes/class-ramais-admin.php create mode 100644 includes/class-ramais-ajax.php create mode 100644 includes/class-ramais-database.php create mode 100644 includes/class-ramais-frontend.php create mode 100644 ramais-telefonicos.php create mode 100644 templates/lista-ramais.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/README.md b/README.md new file mode 100644 index 0000000..d4eb1a3 --- /dev/null +++ b/README.md @@ -0,0 +1,68 @@ +# Sistema de Ramais Telefônicos + +Plugin WordPress para gerenciar e exibir ramais telefônicos com busca, filtros e paginação. + +## Funcionalidades +- Exibição de lista de ramais com filtros por Secretaria, Setor e busca por texto +- Paginação dos resultados +- Adição de novos ramais via painel administrativo +- Armazenamento dos dados em arquivo CSV +- Shortcode para exibição em páginas ou posts +- Interface responsiva e amigável + +## Instalação +1. Faça upload da pasta `ramais-telefonicos` para o diretório `wp-content/plugins/` do seu WordPress. +2. Certifique-se de que o arquivo de dados `bancodados.csv` está localizado em: + + ``` + wp-content/uploads/ramais-telefonicos/bancodados.csv + ``` + > O plugin cria automaticamente o diretório e o arquivo na primeira ativação, se não existirem. + +3. Ative o plugin no painel do WordPress. + +## Uso +### Shortcode +Adicione o shortcode abaixo em qualquer página ou post para exibir a lista de ramais: + +``` +[lista_ramais] +``` + +Você pode definir o número de ramais por página: + +``` +[lista_ramais per_page="10"] +``` + +### Painel Administrativo +- Acesse o menu **Ramais** no painel do WordPress para adicionar novos ramais. + +## Estrutura dos Dados +O arquivo `bancodados.csv` deve conter as seguintes colunas: + +- ramal +- responsavel +- secretaria +- setor +- email + +O plugin gerencia automaticamente a leitura e escrita neste arquivo. + +## Localização do Arquivo CSV +O arquivo de dados deve estar em: + +``` +wp-content/uploads/ramais-telefonicos/bancodados.csv +``` + +## Dependências +- WordPress 5.0 ou superior +- PHP 7.2 ou superior + +## Créditos +Desenvolvido por Marco Antonio Vivas. + +--- + +Para dúvidas ou sugestões, abra uma issue ou entre em contato. \ No newline at end of file diff --git a/assets/css/admin-ramais.css b/assets/css/admin-ramais.css new file mode 100644 index 0000000..de2376d --- /dev/null +++ b/assets/css/admin-ramais.css @@ -0,0 +1,16 @@ +.wrap h1 { + margin-bottom: 20px; +} + +.form-table th { + width: 200px; +} + +.form-table input.regular-text { + width: 100%; + max-width: 400px; +} + +.notice { + margin: 5px 0 15px; +} \ No newline at end of file diff --git a/assets/css/ramais.css b/assets/css/ramais.css new file mode 100644 index 0000000..5a382e9 --- /dev/null +++ b/assets/css/ramais.css @@ -0,0 +1,116 @@ +.ramais-container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; +} + +.ramais-filtros { + display: flex; + gap: 15px; + margin-bottom: 20px; + flex-wrap: wrap; +} + +.ramais-filtros input, +.ramais-filtros select { + flex: 1; + min-width: 200px; + padding: 10px; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 14px; +} + +.ramais-filtros input:focus, +.ramais-filtros select:focus { + outline: none; + border-color: #2271b1; + box-shadow: 0 0 0 1px #2271b1; +} + +.ramais-table { + width: 100%; + border-collapse: collapse; + margin-bottom: 20px; +} + +.ramais-table th, +.ramais-table td { + padding: 12px 15px; + text-align: left; + border-bottom: 1px solid #ddd; +} + +.ramais-table th { + background-color: #f5f5f5; + font-weight: 600; +} + +.ramais-table tr:hover { + background-color: #f9f9f9; +} + +.ramais-table a { + color: #2271b1; + text-decoration: none; +} + +.ramais-table a:hover { + text-decoration: underline; +} + +.ramais-no-results, +.ramais-loading, +.ramais-error { + padding: 20px; + text-align: center; + background-color: #f5f5f5; + border-radius: 4px; + margin: 20px 0; + color: #666; +} + +.ramais-pagination { + display: flex; + justify-content: center; + gap: 5px; + margin-top: 20px; +} + +.ramais-page-link { + padding: 8px 12px; + background-color: #f5f5f5; + border-radius: 4px; + text-decoration: none; + color: #333; +} + +.ramais-page-link:hover { + background-color: #e5e5e5; +} + +.ramais-page-link.active { + background-color: #2271b1; + color: white; +} + +@media (max-width: 768px) { + .ramais-filtros { + flex-direction: column; + } + + .ramais-filtros input, + .ramais-filtros select { + width: 100%; + } + + .ramais-table { + font-size: 14px; + } + + .ramais-table th, + .ramais-table td { + padding: 8px 10px; + } +} \ No newline at end of file diff --git a/assets/js/ramais.js b/assets/js/ramais.js new file mode 100644 index 0000000..3aa2f64 --- /dev/null +++ b/assets/js/ramais.js @@ -0,0 +1,58 @@ +jQuery(document).ready(function($) { + const debounceDelay = 300; + let debounceTimer; + + function filterRamais(page = 1) { + clearTimeout(debounceTimer); + + debounceTimer = setTimeout(() => { + const search = $('#ramais-search').val(); + const secretaria = $('#ramais-secretaria').val(); + const setor = $('#ramais-setor').val(); + + $('.ramais-results').html('

'); + + $.ajax({ + url: ramaisVars.ajaxurl, + type: 'POST', + data: { + action: 'filtrar_ramais', + nonce: ramaisVars.nonce, + search: search, + secretaria: secretaria, + setor: setor, + page: page + }, + success: function(response) { + if (response.success) { + $('.ramais-results').html(response.data); + } else { + $('.ramais-results').html('

'); + } + }, + error: function() { + $('.ramais-results').html('

'); + } + }); + }, debounceDelay); + } + + // Eventos de filtro + $('#ramais-search').on('input', function() { + filterRamais(1); + }); + + $('#ramais-secretaria, #ramais-setor').on('change', function() { + filterRamais(1); + }); + + // Paginação + $(document).on('click', '.ramais-page-link', function(e) { + e.preventDefault(); + const page = $(this).data('page'); + filterRamais(page); + }); + + // Carregamento inicial + filterRamais(1); +}); \ No newline at end of file diff --git a/basedados/bancodados.csv b/basedados/bancodados.csv new file mode 100644 index 0000000..2ace0c0 --- /dev/null +++ b/basedados/bancodados.csv @@ -0,0 +1,161 @@ +ramal,responsavel,secretaria,setor,email +98812-3776,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL CAPITÃO MORBELLO VENDRAMINI",morbellovendramini@seduc.trescoracoes.mg.gov.br +98802-4602,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL MARIA JOSÉ COELHO NETO",coelhoneto@seduc.trescoracoes.mg.gov.br +98868-9155,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL RIO DO PEIXE II",riodopeixe@seduc.trescoracoes.mg.gov.br +99161-3141,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL RIO DO PEIXE II (SEGUNDO ENDEREÇO FAZENDA COBIÇA)",oneidajunqueira@seduc.trescoracoes.mg.gov.br +98802-4145,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL PROFESSORA MARIA EVANI GOMES TELES",mariaevani@seduc.trescoracoes.mg.gov.br +98861-4948,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL SAGRADO CORAÇÃO DE JESUS",sagradocoracao@seduc.trescoracoes.mg.gov.br +98821-2543,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL PROFESSORA CÂNDIDA JUNQUEIRA",caic@seduc.trescoracoes.mg.gov.br +98802-3451,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL PROFESSORA HENRIQUETA GOMES",henriquetagomes@seduc.trescoracoes.ng.gov.br +98812-3158,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL JOSÉ JOAQUIM ALVES PEREIRA",josejoaquim@seduc.trescoracoes.mg.gov.br +98821-8541,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL NELSON REZENDE FONSECA",nelsonrezende@seduc.trescoracoes.mg.gov.br +98812-4391,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL PREFEITO CELSO BANDA",celsobanda@seduc.trescoracoes.mg.gov.br +98812-4850,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL ROTARY",rotary@seduc.trescoracoes.mg.gov.br +98861-2693,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL DONA MARIA LAURA",marialaura@seduc.trescoracoes.mg.gov.br +98861-2496,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL ZILAH REZENDE PINTO",zilahrezende@seduc.trescoracoes.mg.gov.br +98802-6284,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL MONSENHOR JOSÉ GUIMARÃES FONSECA",monsenhor@seduc.trescoracoes.mg.gov.br +98821-6760,Daniel Santos Ribeiro,SEDUC,"ESCOLA MUNICIPAL PROFESSOR OSCAR FRATTINI AMZALACK",oscarfrattini@seduc.trescoracoes.mg.gov.br +98802-6116,Daniel Santos Ribeiro,SEDUC,"CEMEI AFONSINA FONSECA MUSA",afonsinamusa@seduc.trescoracoes.mg.gov.br +98802-1391,Daniel Santos Ribeiro,SEDUC,"CEMEI MARISTELA MELIATO I",maristelameliato@seduc.trescoracoes.mg.gov.br +98802-4952,Daniel Santos Ribeiro,SEDUC,"CEMEI MARISTELA MELIATO II",maristelameliato2@seduc.trescoracoes.mg.gov.br +98821-7675,Daniel Santos Ribeiro,SEDUC,"CEMEI PROFESSOR JOSÉ DOS SANTOS NETO",joseneto@seduc.trescoracoes.mg.gov.br +98802-6395,Daniel Santos Ribeiro,SEDUC,"CEMEI PROFESSOR JOSÉ MARIA FERREIRA MACIEL",josemaciel@seduc.trescoracoes.mg.gov.br +98861-2467,Daniel Santos Ribeiro,SEDUC,"CEMEI PROFESSORA JOANA BRANCA NASCIMENTO",joanabranca@seduc.trescoracoes.mg.gov.br +98802-6236,Daniel Santos Ribeiro,SEDUC,"CEMEI PROFESSORA TEREZINHA APARECIDA VILELA POMPEU",terezinhapompeu@seduc.trescoracoes.mg.gov.br +98802-6548,Daniel Santos Ribeiro,SEDUC,"CEMEI STEFANIA FALCÃO MARGOTTI",margotti@seduc.trescoracoes.mg.gov.br +98802-3693,Daniel Santos Ribeiro,SEDUC,"CEMEI PROFESSOR JÚLIO BRENO NASCIMENTO",juliobreno@seduc.trescoracoes.mg.gov.br +98812-5036,Daniel Santos Ribeiro,SEDUC,INFORMÁTICA,informatica@seduc.trescoracoes.mg.gov.br +99812-4265,Daniel Santos Ribeiro,SEDUC,"REDE FÍSICA, MATERIAIS DIDÁTICOS E PATRIMÔNIO",redefisica@seduc.trescoracoes.mg.gov.br +3691-1141,Daniel Santos Ribeiro,SEDUC,"CENTRO DE REFERÊNCIA DO PROFESSOR - UNIDADE DE CURSOS E IMPRESSÃO",impressao@seduc.trescoracoes.mg.gov.br +3691-1093,Daniel Santos Ribeiro,SEDUC,"CENTRO DE REFERÊNCIA DO PROFESSOR - UNIDADE ADMINISTRATIVA, CERTIFICADOS, PROJETOS E CONVÊNIOS",capacitacao@seduc.trescoracoes.mg.gov.br +98812-4432,Daniel Santos Ribeiro,SEDUC,"TRANSPORTE ESCOLAR (PREFEITURA)",transporte@seduc.trescoracoes.mg.gov.br +98812-4303,Daniel Santos Ribeiro,SEDUC,"MERENDA ESCOLAR",merenda@seduc.trescoracoes.mg.gov.br +98861-4418,Daniel Santos Ribeiro,SEDUC,"ESCRITURAÇÃO ESCOLAR",escrituracao@seduc.trescoracoes.mg.gov.br +98802-5428,Daniel Santos Ribeiro,SEDUC,GABINETE,gabinete@seduc.trescoracoes.mg.gov.br +98802-5428,Daniel Santos Ribeiro,SEDUC,"CONTROLE INTERNO",interno@seduc.trescoracoes.mg.gov.br +98812-3386,Daniel Santos Ribeiro,SEDUC,"PEDAGÓGICO I - ADMINISTRATIVO",supervisao.escolar@seduc.trescoracoes.mg.gov.br +98812-4542,Daniel Santos Ribeiro,SEDUC,"PEDAGÓGICO II - EQUIPE GIDE E ATENDIMENTO AOS GESTORES ESCOLARES",inspecao.escolar@seduc.trescoracoes.mg.gov.br +98821-6328,Daniel Santos Ribeiro,SEDUC,"GESTÃO DE PESSOAL",pessoal@seduc.trescoracoes.mg.gov.br +98802-5428,Daniel Santos Ribeiro,SEDUC,CONTABILIDADE,contabilidade@seduc.trescoracoes.mg.gov.br +98812-4304,Daniel Santos Ribeiro,SEDUC,"NÚCLEO PSICOSSOCIAL E AGENDAMENTOS AO ESTUDANTE - CIEC",nucleopsicossocial@seduc.trescoracoes.mg.gov.br +98861-4081,Rachid Gadbem Neto,SEMS,"ATENÇÃO PRIMÁRIA",coordapsaudetc@gmail.com +3239-7178,Rachid Gadbem Neto,SEMS,COMPRAS,comprassaudepmtc@yahoo.com.br +98821-6013,Rachid Gadbem Neto,SEMS,COMPRAS,comprassaudepmtc@yahoo.com.br +98821-3875,Rachid Gadbem Neto,SEMS,FATURAMENTO,info@trescoracoes.mg.gov.br +98812-4997,Rachid Gadbem Neto,SEMS,"CEM - CENTRO DE ESPECIALIDADES MÉDICAS",info@trescoracoes.mg.gov.br +98812-4423,Rachid Gadbem Neto,SEMS,"VIGILÂNCIA SANITÁRIA",epidemiologiatc@gmail.com +3691-1065,Rachid Gadbem Neto,SEMS,"VIGILÂNCIA EPIDEMIOLÓGICA",epidemiologiatc@gmail.com +98821-8538,Rachid Gadbem Neto,SEMS,"VIGILÂNCIA EPIDEMIOLÓGICA",epidemiologiatc@gmail.com +98802-3481,Rachid Gadbem Neto,SEMS,"RAIO-X",info@trescoracoes.mg.gov.br +98821-5580,Rachid Gadbem Neto,SEMS,"ESF AMADEU MIGUEL",info@trescoracoes.mg.gov.br +988215554,Rachid Gadbem Neto,SEMS,"ESF BOA VENTURA",info@trescoracoes.mg.gov.br +98821-5310,Rachid Gadbem Neto,SEMS,"ESF CAIC",info@trescoracoes.mg.gov.br +98821-4120,Rachid Gadbem Neto,SEMS,"ESF CINTURÃO VERDE",info@trescoracoes.mg.gov.br +98821-4607,Rachid Gadbem Neto,SEMS,"ESF COLINAS I",info@trescoracoes.mg.gov.br +98821-7515,Rachid Gadbem Neto,SEMS,"ESF COLINAS II",info@trescoracoes.mg.gov.br +98821-4285,Rachid Gadbem Neto,SEMS,"ESF COLINAS III",info@trescoracoes.mg.gov.br +98812-2749,Rachid Gadbem Neto,SEMS,"ESF FÁTIMA I",info@trescoracoes.mg.gov.br +98821-5532,Rachid Gadbem Neto,SEMS,"ESF FLORA",info@trescoracoes.mg.gov.br +98821-6016,Rachid Gadbem Neto,SEMS,"ESF JARDIM PARAÍSO",info@trescoracoes.mg.gov.br +98821-4829,Rachid Gadbem Neto,SEMS,"ESF MONTE ALEGRE I",info@trescoracoes.mg.gov.br +98821-4783,Rachid Gadbem Neto,SEMS,"ESF MONTE ALEGRE II",info@trescoracoes.mg.gov.br +98821-4269,Rachid Gadbem Neto,SEMS,"ESF NOVO HORIZONTE",info@trescoracoes.mg.gov.br +98821-4287,Rachid Gadbem Neto,SEMS,"ESF RIO DO PEIXE",info@trescoracoes.mg.gov.br +98821-5569,Rachid Gadbem Neto,SEMS,"ESF SÃO PEDRO",info@trescoracoes.mg.gov.br +98861-3574,Rachid Gadbem Neto,SEMS,"UBS NOVA TRÊS CORAÇÕES",info@trescoracoes.mg.gov.br +988218990,Rachid Gadbem Neto,SEMS,"CER IV",info@trescoracoes.mg.gov.br +98821-5772,Rachid Gadbem Neto,SEMS,"CEO - CENTRO DE ESPECIALIDADES ODONTOLÓGICAS",info@trescoracoes.mg.gov.br +98802-3591,Rachid Gadbem Neto,SEMS,"CEO - CENTRO DE ESPECIALIDADES ODONTOLÓGICAS (WhatsApp)",info@trescoracoes.mg.gov.br +98812-3631,Rachid Gadbem Neto,SEMS,"COORDENAÇÃO SETOR ODONTOLOGIA - SEMS",coordenaodontotc@gmail.com +98821-5837,Rachid Gadbem Neto,SEMS,"CAP II",capsdoistc@gmail.com +3691-1075,Rachid Gadbem Neto,SEMS,"CAP AD",capsad.sems@trescoracoes.mg.gov.br +98861-3281,Rachid Gadbem Neto,SEMS,"CAP AD",capsad.sems@trescoracoes.mg.gov.br +98821-2372,Rachid Gadbem Neto,SEMS,"CAP IJ",capsijtc@gmail.com +98861-2610,Rachid Gadbem Neto,SEMS,"FARMÁCIA DE ALTO CUSTO",info@trescoracoes.mg.gov.br +98812-2251,Rachid Gadbem Neto,SEMS,"ASSISTÊNCIA FARMACÊUTICA",info@trescoracoes.mg.gov.br +3232-4051,Rachid Gadbem Neto,SEMS,"FARMÁCIA DE MINAS",info@trescoracoes.mg.gov.br +98821-9221,Rachid Gadbem Neto,SEMS,"REGULAÇÃO / TFD",info@trescoracoes.mg.gov.br +3239-7176,Lisa Paula de Andrade Vilela,SEDESO,"SEDE DA SECRETARIA",info@trescoracoes.mg.gov.br +98812-4165,Lisa Paula de Andrade Vilela,SEDESO,"SEDE DA SECRETARIA",info@trescoracoes.mg.gov.br +98821-9488,Lisa Paula de Andrade Vilela,SEDESO,"AUXILIO BRASIL / BOLSA FAMILIA",info@trescoracoes.mg.gov.br +3691-7139,Lisa Paula de Andrade Vilela,SEDESO,"ABRIGO MUNICIPAL - UNIDADE I",info@trescoracoes.mg.gov.br +3239-7138,Lisa Paula de Andrade Vilela,SEDESO,"ALMOXARIFADO - SEDESO",info@trescoracoes.mg.gov.br +3239-7139,Lisa Paula de Andrade Vilela,SEDESO,"CASA DE PASSAGEM",info@trescoracoes.mg.gov.br +3691-1167,Lisa Paula de Andrade Vilela,SEDESO,"CONSELHO TUTELAR",info@trescoracoes.mg.gov.br +98861-4077,Lisa Paula de Andrade Vilela,SEDESO,"CONSELHO TUTELAR (Plantão após expediente)",info@trescoracoes.mg.gov.br +98821-7973,Lisa Paula de Andrade Vilela,SEDESO,"CONSELHO TUTELAR (Plantão aos finais de semana)",info@trescoracoes.mg.gov.br +98821-6768,Lisa Paula de Andrade Vilela,SEDESO,"CENTRO DE CONVIVÊNCIA DO IDOSO",info@trescoracoes.mg.gov.br +98821-4839,Lisa Paula de Andrade Vilela,SEDESO,"CENTRO DE CONVIVÊNCIA DO CURUMIM",info@trescoracoes.mg.gov.br +3234-3015,Lisa Paula de Andrade Vilela,SEDESO,"CRAS - JARDIM PARAISO",info@trescoracoes.mg.gov.br +98821-7293,Lisa Paula de Andrade Vilela,SEDESO,"CRAS - JARDIM PARAISO",info@trescoracoes.mg.gov.br +98821-9467,Lisa Paula de Andrade Vilela,SEDESO,"CRAS - PARQUE JUSSARA",info@trescoracoes.mg.gov.br +3691-1098,Lisa Paula de Andrade Vilela,SEDESO,"CRAS - RIO DO PEIXE",info@trescoracoes.mg.gov.br +98821-7013,Lisa Paula de Andrade Vilela,SEDESO,"CRAS - RIO DO PEIXE",info@trescoracoes.mg.gov.br +3232-8351,Lisa Paula de Andrade Vilela,SEDESO,"CREAS - UNIDADE CENTRO DE REFERÊNCIA ESPECIALIZADO DE ASSISTÊNCIA SOCIAL",info@trescoracoes.mg.gov.br +98812-3041,Lisa Paula de Andrade Vilela,SEDESO,"CREAS - UNIDADE CENTRO DE REFERÊNCIA ESPECIALIZADO DE ASSISTÊNCIA SOCIAL",info@trescoracoes.mg.gov.br +3239-7100,Alexsandro Henrique de Souza,SARH,"RECEPÇÃO GERAL",recepcao.geral@trescoracoes.mg.gov.br +3239-7147,Alexsandro Henrique de Souza,SARH,"RECEPÇÃO SARH",recepcao.sarh@trescoracoes.mg.gov.br +98802-0475,Alexsandro Henrique de Souza,SARH,"RECEPÇÃO SARH",recepcao.sarh2@trescoracoes.mg.gov.br +98821-4273,Alexsandro Henrique de Souza,SARH,"RECEPÇÃO SARH",recepcao.sarh3@trescoracoes.mg.gov.br +3239-7141,Alexsandro Henrique de Souza,SARH,"FOLHA DE PAGAMENTO",folha.pagamento@trescoracoes.mg.gov.br +3239-7143,Alexsandro Henrique de Souza,SARH,"BENEFÍCIOS, ATOS E DOCUMENTOS",beneficios@trescoracoes.mg.gov.br +3239-7146,Alexsandro Henrique de Souza,SARH,"GP - GESTÃO DE PESSOAS",gestao.pessoas@trescoracoes.mg.gov.br +3239-7158,Alexsandro Henrique de Souza,SARH,ARQUIVO,arquivo@trescoracoes.mg.gov.br +3691-1156,Alexsandro Henrique de Souza,SARH,"RECEPÇÃO RH/SESMT",recepcao.sesmt@trescoracoes.mg.gov.br +98821-3836,Alexsandro Henrique de Souza,SARH,"RECEPÇÃO RH/SESMT",recepcao.sesmt2@trescoracoes.mg.gov.br +3691-1157,Alexsandro Henrique de Souza,SARH,"RH/SESMT",rh.sesmt@trescoracoes.mg.gov.br +3691-1029,Alexsandro Henrique de Souza,SARH,"RECEPÇÃO - IPRECOR",recepcao.iprecor@trescoracoes.mg.gov.br +3691-1029,Alexsandro Henrique de Souza,SARH,"BENEFÍCIOS / CONTABILIDADE - IPRECOR",beneficios.iprecor@trescoracoes.mg.gov.br +3691-1029,Alexsandro Henrique de Souza,SARH,"PRESIDENTE - IPRECOR",presidente.iprecor@trescoracoes.mg.gov.br +98812-4483,Gustavo João Roberto Gorgulho Franco,SEDEC,"DIRETORIA DE ATRAÇÃO DE INVESTIMENTOS E EMPREENDEDORISMO",invest.tc@trescoracoes.mg.gov.br +98821-4026,Gustavo João Roberto Gorgulho Franco,SEDEC,"PROTEÇÃO AO CONSUMIDOR - PROCON",procon@trescoracoes.mg.gov.br +98802-6659,Gustavo João Roberto Gorgulho Franco,SEDEC,"MINAS FÁCIL",mfalvara@trescoracoes.mg.gov.br +3239-7156,Thiago Mesquita Pereira,SEMCI,ADMINISTRATIVO,semci@trescoracoes.mg.gov.br +3239-7157,Thiago Mesquita Pereira,SEMCI,"CONTROLE ADMINISTRATIVO DO PATRIMÔNIO",semci@trescoracoes.mg.gov.br +3239-7155,Thiago Mesquita Pereira,SEMCI,GABINETE,semci@trescoracoes.mg.gov.br +3239-7500,Thiago Mesquita Pereira,SEMCI,OUVIDORIA,ouvidoria@trescoracoes.mg.gov.br +3239-7136,Ana Carolina Mafra Simões,SEFIN,CONTABILIDADE,protocolo.sefin@trescoracoes.mg.gov.br +98821-9011,Ana Carolina Mafra Simões,SEFIN,"DÍVIDA ATIVA",dividaativa.pmtc@trescoracoes.mg.gov.br +3239-7217,Ana Carolina Mafra Simões,SEFIN,"DÍVIDA ATIVA",dividaativa.pmtc@trescoracoes.mg.gov.br +98821-4779,Ana Carolina Mafra Simões,SEFIN,IPTU,iptu@trescoracoes.mg.gov.br +3239-7134,Ana Carolina Mafra Simões,SEFIN,ISS,fiscalpmtc@trescoracoes.mg.gov.br +3239-7234,Ana Carolina Mafra Simões,SEFIN,"PAV (POSTO DE ATENDIMENTO VIRTUAL DA RECEITA FEDERAL)",pav@trescoracoes.mg.gov.br +98812-3086,Ana Carolina Mafra Simões,SEFIN,TESOURARIA,leila@trescoracoes.mg.gov.br +3239-7101,Ana Carolina Mafra Simões,SEFIN,"TECNOLOGIA DA INFORMAÇÃO",dtipmtc@trescoracoes.mg.gov.br +98802-6664,Ana Carolina Mafra Simões,SEFIN,"TECNOLOGIA DA INFORMAÇÃO",dtipmtc@trescoracoes.mg.gov.br +98861-2859,Claudinei Ferreira,SELTC,"SECRETARIA MUNICIPAL DE LAZER, TURISMO E CULTURA",administrativo.seltc@trescoracoes.mg.gov.br +3691-1041,Claudinei Ferreira,SELTC,"CASA DA CULTURA GODOFREDO RANGEL",info@trescoracoes.mg.gov.br +3234-2179,Claudinei Ferreira,SELTC,"CASA PELÉ",info@trescoracoes.mg.gov.br +3239-7172,André Luis Ribeiro,SEPLAN,"ANÁLISE DE PROJETO",analisedeprojeto.seplan@trescoracoes.mg.gov.br +3239-7171,André Luis Ribeiro,SEPLAN,ADMINISTRATIVO,protocolo.seplan@trescoracoes.mg.gov.br +98861-4222,André Luis Ribeiro,SEPLAN,"ILUMINAÇÃO PÚBLICA",info@trescoracoes.mg.gov.br +3239-7174,André Luis Ribeiro,SEPLAN,"ENGENHARIA E ARQUITETURA",info@trescoracoes.mg.gov.br +3239-7175,André Luis Ribeiro,SEPLAN,"PROTOCOLO DE PROJETOS E FISCALIZAÇÃO",analisedeprojeto.seplan@trescoracoes.mg.gov.br +3239-7170,André Luis Ribeiro,SEPLAN,"PROTOCOLO DE PROJETOS E FISCALIZAÇÃO",analisedeprojeto.seplan@trescoracoes.mg.gov.br +3239-7122,Jorge Vitor da Costa,SEGOV,"DEPARTAMENTO ADMINISTRATIVO",info@trescoracoes.mg.gov.br +3239-7120,Jorge Vitor da Costa,SEGOV,"DEPARTAMENTO JURÍDICO",info@trescoracoes.mg.gov.br +3239-7144,Jorge Vitor da Costa,SEGOV,"DEPARTAMENTO DE ATOS",info@trescoracoes.mg.gov.br +3239-7160,Jorge Vitor da Costa,SEGOV,"DEPARTAMENTO DE COMPRAS",info@trescoracoes.mg.gov.br +3239-7161,Jorge Vitor da Costa,SEGOV,"DEPARTAMENTO DE COMPRAS",info@trescoracoes.mg.gov.br +3239-7162,Jorge Vitor da Costa,SEGOV,"DEPARTAMENTO DE LICITAÇÃO",info@trescoracoes.mg.gov.br +3239-7163,Jorge Vitor da Costa,SEGOV,"DEPARTAMENTO DE LICITAÇÃO",info@trescoracoes.mg.gov.br +3239-7110,Jorge Vitor da Costa,SEGOV,"RECEPÇÃO DO GABINETE DO PREFEITO",info@trescoracoes.mg.gov.br +3239-7205,Rogerio Ferraz Rivello,SEMMA,"Secretaria de Meio Ambiente e Defesa Animal",semmada@trescoracoes.mg.gov.br +98861-3145,Rogerio Ferraz Rivello,SEMMA,"Defesa Civil",semmada@trescoracoes.mg.gov.br +98861-4422,Rogerio Ferraz Rivello,SEMMA,"Defesa Animal (WhatsApp)",semmada@trescoracoes.mg.gov.br +98811-8286,Rogerio Ferraz Rivello,SEMMA,"IEF - Instituto Estadual de Florestas",semmada@trescoracoes.mg.gov.br +3232-3441,Rogerio Ferraz Rivello,SEMMA,CODEMA,semmada@trescoracoes.mg.gov.br +98861-4525,Rogerio Ferraz Rivello,SEMMA,"CODEMA (WhatsApp)",semmada@trescoracoes.mg.gov.br +98821-8462,Carlos Henrique Xavier Vilani,SEMOSP,"Departamento Pessoal, Reclamações e Solicitações",engenharia.semosp@trescoracoes.mg.gov.br +988124765,Carlos Henrique Xavier Vilani,SEMOSP,"Cemitério Municipal São João Batista",info@trescoracoes.mg.gov.br +3239-7190,Letícia Aparecida Belato Martins,SECOM,"Secretaria de Comunicação e Relações Institucionais",secom@trescoracoes.mg.gov.br +3239-7154,Letícia Aparecida Belato Martins,SECOM,"Secretaria de Comunicação e Relações Institucionais",secom@trescoracoes.mg.gov.br +98812-4004,Claudinei Ferreira,SESP,"SETOR ADMINISTRATIVO",esportetc01@gmail.com +98812-4004,Claudinei Ferreira,SESP,ESPORTIVO,esportetc01@gmail.com +98821-7438,Rogerio Ferraz Rivello,SEMAP,"Secretaria de Agricultura e Pecuária",semap@trescoracoes.mg.gov.br +98868-4016,André Luis Ribeiro,SEMOB,"Secretaria de Segurança Pública e Mobilidade Urbana",segurancapublica.semob@trescoracoes.mg.gov.br +3691-1170,André Luis Ribeiro,SEMOB,"Secretaria de Segurança Pública e Mobilidade Urbana",segurancapublica.semob@trescoracoes.mg.gov.br +98868-4016,André Luis Ribeiro,SEMOB,"SETOR DE DEFESA DA ATUAÇÃO, FICI E JARI",atendimento.semob@trescoracoes.mg.gov.br +3239-7152,Rudolfo de Souza Pereira,PGM,"Procuradoria Geral do Município",procuradoria@trescoracoes.mg.gov.br +3239-7177,Rudolfo de Souza Pereira,PGM,"EXECUÇÃO FISCAL",info@trescoracoes.mg.gov.br991687008,"Marco Antonio Vivas",SEFIN,DTI,markovivas@gmail.com + diff --git a/includes/class-ramais-admin.php b/includes/class-ramais-admin.php new file mode 100644 index 0000000..47be4c7 --- /dev/null +++ b/includes/class-ramais-admin.php @@ -0,0 +1,99 @@ +database = $database; + $this->init_hooks(); + } + + private function init_hooks() { + add_action('admin_menu', array($this, 'add_admin_menu')); + add_action('admin_post_add_ramal', array($this, 'handle_add_ramal')); + } + + public function add_admin_menu() { + add_menu_page( + __('Ramais Telefônicos', 'ramais-telefonicos'), + __('Ramais', 'ramais-telefonicos'), + 'manage_options', + 'ramais-telefonicos', + array($this, 'render_admin_page'), + 'dashicons-phone', + 20 + ); + } + + public function render_admin_page() { + if (!current_user_can('manage_options')) { + wp_die(__('Você não tem permissão para acessar esta página.', 'ramais-telefonicos')); + } + + $status = isset($_GET['status']) ? sanitize_text_field($_GET['status']) : ''; + ?> +
+

+ + +

+ +

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ $_POST['ramal'] ?? '', + 'responsavel' => $_POST['responsavel'] ?? '', + 'secretaria' => $_POST['secretaria'] ?? '', + 'setor' => $_POST['setor'] ?? '', + 'email' => $_POST['email'] ?? '' + ); + + $success = $this->database->add_ramal($data); + $status = $success ? 'success' : 'error'; + + wp_redirect(admin_url('admin.php?page=ramais-telefonicos&status=' . $status)); + exit; + } +} \ No newline at end of file diff --git a/includes/class-ramais-ajax.php b/includes/class-ramais-ajax.php new file mode 100644 index 0000000..e748226 --- /dev/null +++ b/includes/class-ramais-ajax.php @@ -0,0 +1,43 @@ +database = $database; + $this->init_hooks(); + } + + private function init_hooks() { + add_action('wp_ajax_filtrar_ramais', array($this, 'ajax_filter_ramais')); + add_action('wp_ajax_nopriv_filtrar_ramais', array($this, 'ajax_filter_ramais')); + } + + public function ajax_filter_ramais() { + check_ajax_referer('ramais_telefonicos_nonce', 'nonce'); + + $page = isset($_POST['page']) ? absint($_POST['page']) : 1; + $filters = [ + 'search' => isset($_POST['search']) ? sanitize_text_field($_POST['search']) : '', + 'secretaria' => isset($_POST['secretaria']) ? sanitize_text_field($_POST['secretaria']) : '', + 'setor' => isset($_POST['setor']) ? sanitize_text_field($_POST['setor']) : '' + ]; + + $data = $this->database->get_filtered_ramais($filters, $page); + $ramais = $data['data']; + $total_pages = $data['pages']; + $current_page = $data['current_page']; + + // Indica que é apenas a seção de resultados + $is_results_section = true; + + ob_start(); + include RAMAIS_TELEFONICOS_PLUGIN_DIR . 'templates/lista-ramais.php'; + $html = ob_get_clean(); + + wp_send_json_success($html); +} +} \ No newline at end of file diff --git a/includes/class-ramais-database.php b/includes/class-ramais-database.php new file mode 100644 index 0000000..e38d7f8 --- /dev/null +++ b/includes/class-ramais-database.php @@ -0,0 +1,140 @@ +csv_file = RAMAIS_TELEFONICOS_CSV_FILE; + $this->ensure_csv_exists(); + } + + private function ensure_csv_exists() { + if (!file_exists($this->csv_file)) { + wp_mkdir_p(RAMAIS_TELEFONICOS_CSV_DIR); + $this->write_csv_row($this->columns); + } + } + + public function get_all_ramais() { + if (!file_exists($this->csv_file)) { + return array(); + } + + $ramais = array(); + $handle = fopen($this->csv_file, 'r'); + + if ($handle !== false) { + // Pula o cabeçalho + fgetcsv($handle); + + while (($data = fgetcsv($handle)) !== false) { + if (count($data) === count($this->columns)) { + $ramais[] = array_combine($this->columns, $data); + } + } + fclose($handle); + } + + return $ramais; + } + + public function get_filtered_ramais($filters = array(), $page = 1, $per_page = RAMAIS_TELEFONICOS_PER_PAGE) { + $all_ramais = $this->get_all_ramais(); + $filtered = array(); + + foreach ($all_ramais as $ramal) { + $match = true; + + if (!empty($filters['search'])) { + $search = strtolower($filters['search']); + $match = false; + foreach ($ramal as $value) { + if (strpos(strtolower($value), $search) !== false) { + $match = true; + break; + } + } + } + + if ($match && !empty($filters['secretaria']) && $ramal['secretaria'] !== $filters['secretaria']) { + $match = false; + } + + if ($match && !empty($filters['setor']) && $ramal['setor'] !== $filters['setor']) { + $match = false; + } + + if ($match) { + $filtered[] = $ramal; + } + } + + $total = count($filtered); + $total_pages = ceil($total / $per_page); + $offset = ($page - 1) * $per_page; + $paginated = array_slice($filtered, $offset, $per_page); + + return array( + 'data' => $paginated, + 'total' => $total, + 'pages' => $total_pages, + 'current_page' => $page + ); + } + + public function add_ramal($data) { + $sanitized = array(); + foreach ($this->columns as $col) { + $sanitized[$col] = $this->sanitize_field($col, $data[$col] ?? ''); + } + + if ($this->validate_ramal($sanitized)) { + return $this->write_csv_row($sanitized); + } + + return false; + } + + private function sanitize_field($field, $value) { + switch ($field) { + case 'email': + return sanitize_email($value); + case 'ramal': + return preg_replace('/[^0-9]/', '', $value); + default: + return sanitize_text_field($value); + } + } + + private function validate_ramal($data) { + foreach ($data as $value) { + if (empty($value)) { + return false; + } + } + return is_email($data['email']); + } + + private function write_csv_row($data) { + $handle = fopen($this->csv_file, 'a'); + if ($handle === false) { + return false; + } + + $success = fputcsv($handle, $data); + fclose($handle); + return (bool)$success; + } + + public function get_unique_values($field) { + $ramais = $this->get_all_ramais(); + $values = array_column($ramais, $field); + $unique = array_unique($values); + sort($unique); + return $unique; + } +} \ No newline at end of file diff --git a/includes/class-ramais-frontend.php b/includes/class-ramais-frontend.php new file mode 100644 index 0000000..17b6d2d --- /dev/null +++ b/includes/class-ramais-frontend.php @@ -0,0 +1,39 @@ +database = $database; + $this->init_hooks(); + } + + private function init_hooks() { + add_shortcode('lista_ramais', array($this, 'render_ramais_list')); + } + + public function render_ramais_list($atts) { + $atts = shortcode_atts(array( + 'per_page' => RAMAIS_TELEFONICOS_PER_PAGE + ), $atts); + + $page = isset($_GET['ramais_page']) ? absint($_GET['ramais_page']) : 1; + $filters = array( + 'search' => isset($_GET['ramais_search']) ? sanitize_text_field($_GET['ramais_search']) : '', + 'secretaria' => isset($_GET['ramais_secretaria']) ? sanitize_text_field($_GET['ramais_secretaria']) : '', + 'setor' => isset($_GET['ramais_setor']) ? sanitize_text_field($_GET['ramais_setor']) : '' + ); + + $data = $this->database->get_filtered_ramais($filters, $page, $atts['per_page']); + $ramais = $data['data']; + $total_pages = $data['pages']; + $current_page = $data['current_page']; + + ob_start(); + include RAMAIS_TELEFONICOS_PLUGIN_DIR . 'templates/lista-ramais.php'; + return ob_get_clean(); + } +} \ No newline at end of file diff --git a/ramais-telefonicos.php b/ramais-telefonicos.php new file mode 100644 index 0000000..dea22dc --- /dev/null +++ b/ramais-telefonicos.php @@ -0,0 +1,117 @@ +init(); + } + + public static function get_instance() { + if (null === self::$instance) { + self::$instance = new self(); + } + return self::$instance; + } + + private function init() { + // Inicializa os componentes + $this->database = new Ramais_Database(); + $this->admin = new Ramais_Admin($this->database); + $this->frontend = new Ramais_Frontend($this->database); + $this->ajax = new Ramais_Ajax($this->database); + + // Hooks de ativação/desativação + register_activation_hook(__FILE__, array($this, 'activate')); + register_deactivation_hook(__FILE__, array($this, 'deactivate')); + + // Inicialização + add_action('plugins_loaded', array($this, 'load_textdomain')); + add_action('wp_enqueue_scripts', array($this, 'enqueue_assets')); + add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets')); + } + + public function activate() { + // Cria o diretório se não existir + if (!file_exists(RAMAIS_TELEFONICOS_CSV_DIR)) { + wp_mkdir_p(RAMAIS_TELEFONICOS_CSV_DIR); + } + + // Se o arquivo CSV não existe, cria com cabeçalho + if (!file_exists(RAMAIS_TELEFONICOS_CSV_FILE)) { + $header = array('Ramal', 'Responsável', 'Secretaria', 'Setor', 'Email'); + $this->database->write_csv_row($header); + } + } + + public function deactivate() { + // Nada a fazer por enquanto + } + + public function load_textdomain() { + load_plugin_textdomain('ramais-telefonicos', false, dirname(plugin_basename(__FILE__)) . '/languages/'); + } + + public function enqueue_assets() { + wp_enqueue_style( + 'ramais-telefonicos-css', + RAMAIS_TELEFONICOS_PLUGIN_URL . 'assets/css/ramais.css', + array(), + RAMAIS_TELEFONICOS_VERSION + ); + + wp_enqueue_script( + 'ramais-telefonicos-js', + RAMAIS_TELEFONICOS_PLUGIN_URL . 'assets/js/ramais.js', + array('jquery'), + RAMAIS_TELEFONICOS_VERSION, + true + ); + + wp_localize_script('ramais-telefonicos-js', 'ramaisVars', array( + 'ajaxurl' => admin_url('admin-ajax.php'), + 'nonce' => wp_create_nonce('ramais_telefonicos_nonce') + )); + } + + public function enqueue_admin_assets() { + wp_enqueue_style( + 'ramais-telefonicos-admin-css', + RAMAIS_TELEFONICOS_PLUGIN_URL . 'assets/css/admin-ramais.css', + array(), + RAMAIS_TELEFONICOS_VERSION + ); + } +} + +// Inicializa o plugin +Ramais_Telefonicos::get_instance(); \ No newline at end of file diff --git a/templates/lista-ramais.php b/templates/lista-ramais.php new file mode 100644 index 0000000..9de4911 --- /dev/null +++ b/templates/lista-ramais.php @@ -0,0 +1,105 @@ +database->get_unique_values('secretaria'); + $setores = $this->database->get_unique_values('setor'); +} + +// Filtros atuais +$current_search = isset($filters['search']) ? esc_attr($filters['search']) : ''; +$current_secretaria = isset($filters['secretaria']) ? esc_attr($filters['secretaria']) : ''; +$current_setor = isset($filters['setor']) ? esc_attr($filters['setor']) : ''; +?> + +
+ + +
+ + + + + +
+ + + +
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + - + +
+ + 1): ?> +
+ + + + + +
+ + +
+
\ No newline at end of file