En aquest xicotet article et deixe un script escrit en Javascript que he preparat a la feina per al gestor d'assistències Mantis Bug Tracker mostre els telèfons de les Entitats Locals.
En la nostra configuració de Mantis Bug Tracker, un gestor de peticions desenvolupat amb PHP i que tenim a la feina des de fa 12 anys, vam crear diverses personalitzacions. Entre aquestes personalitzacions tenim un camp personalitzat amb el nom de totes les Entitats Locals de la província de Castelló de manera que anem categoritzant (o geolcalitzant, per dir algo) cada petició segons l'Entitat d'on vinga la petició.
I fins ara també teniem un camp afegit, de tipus text, on ompliem a mà el telèfon de l'Entitat Local que ens enviava la petició. Doncs bé, aquest script ompli automàticament en este camp de text el telèfon de l'Entitat Local quan fem click en el seu nom:

Haurem d'afegir an fitxer /bug_report_page.php del teu projecte mantis afegint:
< !-- Script per a reomplir telèfons -->
< script type="text/javascript" src="reomplirTelefons.js">< /script>
El codi de l'script és el següent:
// Función para normalizar texto mejorada
function normalizarTexto(texto) {
if (!texto) return '';
return texto
.normalize("NFD") // Separar caracteres y tildes
.replace(/[\u0300-\u036f]/g, "") // Quitar tildes
.replace(/\s+/g, ' ') // Reemplazar múltiples espacios por uno
.replace(/\//g, ' ') // Reemplazar barras por espacios (IMPORTANTE!)
.replace(/[.,'()]/g, '') // Quitar otros caracteres especiales
.replace(/\s+/g, ' ') // Otra vez por si hay espacios dobles
.trim() // Quitar espacios al inicio y final
.toLowerCase(); // Convertir a minúsculas
}
// Diccionario mejorado - Añadidas variantes con y sin barra
var telefonosDict = {
// Formato: 'texto_normalizado': 'teléfono'
'dipcas': '964359894',
'ain': '964629040',
'albocasser': '964428001',
'alcala de xivert': '964410301',
"alcora l": '964360002', // Para "l'Alcora" y "Alcora, l'"
'alcudia de veo': '964629056',
'alfondeguilla': '964661998',
'algimia de almonacid': '964139031',
'almassora': '964560001',
'almedijar': '964137018',
'almenara': '962624801',
'alquerias del nino perdido': '964592000',
'altura': '964146384',
'aranuel': '964143156',
'ares del maestrat': '964443064',
'argelita': '964612139',
'artana': '964611011',
'atzeneta del maestrat': '964370018',
'ayodar': '964618129',
'azuebar': '964650006',
'barracas': '964121001',
'bejis': '964120161',
'benafer': '964764111',
'benafigos': '964370120',
'benassal': '964431002',
// VARIANTES PARA BENICASIM/BENICÀSSIM
'benicasim benicassim': '964300962',
'benicasim': '964300962', // Solo primera parte
'benicassim': '964300962', // Solo segunda parte
'benlloch': '964339001',
// VARIANTES PARA BETXÍ
'betxi': '964620002',
'betxi': '964620002',
// VARIANTES PARA BORRIANA/BURRIANA
'borriana burriana': '964510062',
'borriana': '964510062', // Solo primera parte
'burriana': '964510062', // Solo segunda parte
'borriol': '964321461',
'cabanes': '964331001',
'calig': '964492001',
'canet lo roig': '964494241',
'castell de cabres': '977729015',
'castellfort': '964445781',
'castellnovo': '964137305',
// VARIANTES PARA CASTELLÓN/CASTELLÓ
'castellon de la plana castello de la plana': '964355100',
'castellon de la plana': '964355100', // Solo castellón
'castello de la plana': '964355100', // Solo castelló
'castillo de villamalefa': '964375309',
'cati': '964409081',
'caudiel': '964144049',
'cervera del maestre': '964498001',
// VARIANTES PARA CHERT/XERT
'chert xert': '964490001',
'chert': '964490001',
'xert': '964490001',
// VARIANTES PARA CHILCHES/XILXES
'chilches xilxes': '964590002',
'chilches': '964590002',
'xilxes': '964590002',
// VARIANTES PARA CHODOS/XODOS
'chodos xodos': '964370156',
'chodos': '964370156',
'xodos': '964370156',
'chovar': '964651024',
'cinctorres': '964181001',
'cirat': '964143113',
'cortes de arenoso': '964383110',
'costur': '964388013',
'coves de vinroma les': '964426009',
'culla': '964446325',
'e.l.m. el ballestar': '977729181',
'el toro': '964123001',
'eslida': '964628000',
'espadilla': '964619033',
'fanzara': '964619001',
'figueroles': '964381573',
'forcall': '964171001',
'fuente la reina': '964145700',
'fuentes de ayodar': '964618034',
'gaibiel': '964142425',
'geldo': '964711209',
// VARIANTES PARA HERBÉS (con tilde)
'herbes': '978856602',
'higueras': '964145509',
'jana la': '964497049',
// VARIANTES PARA JÉRICA (con tilde)
'jerica': '964129177',
'lucena del cid': '964380001',
'ludiente': '964375031',
'llosa la': '962610542',
'mata la': '964180001',
'manc alt maestrat': '964442004',
'manc alto mijares': '964613000',
'manc alto palancia': '964132740',
'manc baix maestrat': '964495505',
'manc castello nord': '964416171',
'manc els ports': '964440306',
'manc espadan mijares': '964613000',
'manc penyagolosa': '964370018',
'manc plana alta': '964701100',
'manc turist maestrazgo': '964177070',
'matet': '964142537',
'moncofa': '964580421',
'montan': '964131002',
'montanejos': '964131032',
'morella': '964160034',
'navajas': '964710801',
'nules': '964670001',
'ofisam benassal': '96442000',
'ofisam montanejos': '964131312',
'ofisam morella': '964173172',
'ofisam onda': '964770792',
'ofisam segorbe': '964712728',
'ofisam traiguera': '964468000',
'olocau del rey': '964178417',
'onda': '964600050',
'orpesa': '964310100',
'otros': '[INTRODUCE TELÉFONO]',
'palanques': '964173172',
// VARIANTES PARA PAVÍAS (con tilde)
'pavias': '964145542',
// VARIANTES PARA PENÍSCOLA/PEÑÍSCOLA
'peniscola peníscola': '964480050',
'peniscola': '964480050',
'peñíscola': '964480050',
'pina de montalgrao': '964121031',
'pobla de benifassa la': '977729051',
'pobla tornesa la': '964338150',
'portell de morella': '964178779',
'puebla de arenoso': '964124601',
'ribesalbes': '964625001',
'rossell': '977571202',
'sacanyet': '964120088',
'la salzadella': '964419282',
// VARIANTES PARA SANT JORDI/SAN JORGE
'sant jordi san jorge': '964499001',
'sant jordi': '964499001',
'san jorge': '964499001',
// VARIANTES PARA SANT JOAN DE MORÓ
'sant joan de moro': '964701100',
// VARIANTES PARA SAN RAFAEL DEL RÍO
'san rafael del rio': '977713703',
'sant mateu': '964416171',
'santa magdalena de pulpis': '964415070',
'la serratella': '964708320',
'segorbe': '964132020',
'sepam': '964359894',
'sierra engarceran': '964706601',
'soneja': '964135004',
'sot de ferrer': '964135127',
// VARIANTES PARA SUERAS/SUERA
'sueras suera': '964617033',
'sueras': '964617033',
'suera': '964617033',
'tales': '964613008',
'teresa': '964141192',
// VARIANTES PARA TÍRIG (con tilde)
'tirig': '964418612',
'todolella': '964171178',
'toga': '964612031',
'toras': '964120238',
'torralba del pinar': '964618106',
'torre den besora la': '964446001',
'torre den domec la': '964707249',
'torreblanca': '964420411',
'torrechiva': '964612218',
'traiguera': '964495125',
// VARIANTES PARA USERAS/LES USERES
'useras les useres': '964388609',
'useras': '964388609',
'les useres': '964388609',
"vall dalba": '964320001',
'vall de almonacid': '964139004',
"vall duixo la": '964690184',
'vallat': '964619194',
'vallibona': '964172020',
// VARIANTES PARA VILA-REAL (con guión)
'vila real': '964547000',
'vilafames': '964329001',
'vilafranca': '964441004',
'vilanova dalcolea': '964707032',
'vilavella la': '964677448',
'vilar de canes': '964431109',
'villahermosa del rio': '964382613',
'villamalur': '964618061',
'villanueva de viver': '964145751',
'villores': '964171085',
// VARIANTES PARA VINARÒS (con tilde)
'vinaros': '964407700',
'vistabella del maestrazgo': '964389007',
'viver': '964141006',
'zorita del maestrazgo': '964177070',
'zucaina': '964375051'
};
// Función mejorada para buscar teléfono
function buscarTelefono(valorPueblo) {
if (!valorPueblo) return '';
// Normalizar el valor
var valorNormalizado = normalizarTexto(valorPueblo);
console.log('Buscando teléfono para:', valorPueblo, '→ Normalizado:', valorNormalizado);
// Intentar primero con el valor completo normalizado
var telefon = telefonosDict[valorNormalizado];
if (telefon) {
console.log('Teléfono encontrado (completo):', telefon);
return telefon;
}
// Si no encuentra, probar dividir por espacios y buscar partes
var partes = valorNormalizado.split(' ');
if (partes.length > 1) {
// Probar con cada parte por separado
for (var i = 0; i < partes.length; i++) {
if (partes[i].length > 2) { // Solo si la parte tiene al menos 3 letras
telefon = telefonosDict[partes[i]];
if (telefon) {
console.log('Teléfono encontrado (parte ' + partes[i] + '):', telefon);
return telefon;
}
}
}
}
console.log('No se encontró teléfono para:', valorNormalizado);
return '';
}
// Esperar a que el DOM esté completamente cargado
document.addEventListener('DOMContentLoaded', function() {
console.log('DOM cargado, buscando elementos...');
// Buscar el campo de pueblo (custom_field_1) y el de teléfono (custom_field_7)
var campoPueblo = document.querySelector('[name^="custom_field_1"], [id^="custom_field_1"]');
var campoTelefono = document.querySelector('[name^="custom_field_7"], [id^="custom_field_7"]');
if (campoPueblo) {
console.log('Campo pueblo encontrado:', campoPueblo);
// Agregar evento onChange al campo de pueblo
campoPueblo.addEventListener('change', afegirTelefon);
// Ejecutar una vez al cargar la página por si ya hay un valor seleccionado
setTimeout(function() {
afegirTelefon();
}, 100);
} else {
console.log('No se encontró el campo custom_field_1');
// Intentar otra estrategia - buscar por etiqueta o nombre
var selects = document.querySelectorAll('select');
selects.forEach(function(select) {
if (select.innerHTML.includes('DIPCAS') || select.innerHTML.includes('Aín')) {
select.addEventListener('change', afegirTelefon);
console.log('Evento añadido a select:', select);
}
});
}
if (campoTelefono) {
console.log('Campo teléfono encontrado:', campoTelefono);
} else {
console.log('No se encontró el campo custom_field_7');
}
});
// Función mejorada para obtener el valor del campo de pueblo
function obtenerValorPueblo() {
// Intentar múltiples formas de encontrar el campo
var campo = document.querySelector('[name^="custom_field_1"]');
if (!campo) campo = document.getElementById('custom_field_1');
if (!campo) campo = document.querySelector('select[name*="custom_field"]');
if (campo) {
console.log('Valor RAW del campo pueblo:', campo.value);
return campo.value;
}
return null;
}
// Versión mejorada de afegirTelefon
function afegirTelefon() {
console.log('Ejecutando afegirTelefon...');
var valorPueblo = obtenerValorPueblo();
if (!valorPueblo) {
console.log('No se pudo obtener el valor del pueblo');
return;
}
// Buscar el teléfono usando la función mejorada
var telefon = buscarTelefono(valorPueblo);
// Buscar el campo de teléfono
var campoTelefono = document.querySelector('[name^="custom_field_7"], [id^="custom_field_7"]');
if (campoTelefono) {
campoTelefono.value = telefon;
console.log('Campo teléfono actualizado con:', telefon);
// Disparar evento change por si hay otras dependencias
var event = new Event('change', { bubbles: true });
campoTelefono.dispatchEvent(event);
} else {
console.log('No se encontró el campo de teléfono (custom_field_7)');
}
}
// Función para depurar qué opciones hay en el select
function depurarOpcionesSelect() {
var campo = obtenerValorPueblo();
if (campo && campo.tagName === 'SELECT') {
console.log('=== OPCIONES DEL SELECT ===');
for (var i = 0; i < campo.options.length; i++) {
console.log('Opción ' + i + ': "' + campo.options[i].text + '" → Valor: "' + campo.options[i].value + '"');
}
console.log('=== FIN OPCIONES ===');
}
}
// Para probar rápidamente desde consola
window.depurarOpcionesSelect = depurarOpcionesSelect;





