domingo, agosto 02, 2026

Script javascript para marcar todos los checkbox

Este script lo uso en el caso que necesito marcar todos los checks en una página web. Lo aplico usando la extensión de Chrome User JavaScript and CSS.



```
// Añade un botón flotante que, al pulsarlo, marca todos los checkboxes de la página.
// Pensado para "User JavaScript and CSS": pégalo como script nuevo,
// dominio/patrón de URL: *://*/*  (o el que prefieras), inyección en "document-end".

(function () {
  const BTN_ID = '__check_all_boxes_btn__';
  if (document.getElementById(BTN_ID)) return; // evita duplicados si el script corre más de una vez

  const CHECK_SELECTOR = 'input[type="checkbox"]';

  function markAll() {
    const boxes = document.querySelectorAll(CHECK_SELECTOR);
    boxes.forEach((cb) => {
      if (cb.checked || cb.disabled) return;
      cb.checked = true;
      // Dispara eventos para que frameworks (React, Vue, listeners nativos) se enteren del cambio
      cb.dispatchEvent(new Event('input', { bubbles: true }));
      cb.dispatchEvent(new Event('change', { bubbles: true }));
    });
    flashFeedback(boxes.length);
  }

  function flashFeedback(count) {
    const original = btn.textContent;
    btn.textContent = `✓ ${count} marcados`;
    setTimeout(() => { btn.textContent = original; }, 1200);
  }

  const btn = document.createElement('button');
  btn.id = BTN_ID;
  btn.textContent = '☑ Marcar todo';
  Object.assign(btn.style, {
    position: 'fixed',
    bottom: '20px',
    right: '20px',
    zIndex: 2147483647,
    padding: '10px 16px',
    background: '#2563eb',
    color: '#fff',
    border: 'none',
    borderRadius: '8px',
    fontSize: '14px',
    fontFamily: 'system-ui, sans-serif',
    boxShadow: '0 2px 8px rgba(0,0,0,0.25)',
    cursor: 'pointer',
  });
  btn.addEventListener('click', markAll);

  document.body.appendChild(btn);
})();
```

martes, mayo 12, 2026

Usar campo de entidad padre en reporte o informe

Para este caso se está usando la funcionalidad de Reporte de Advanced Pack

Si se necesita utilizar un campo de una entidad padre en un reporte o informe, para usarlo como filtro por ejemplo, es necesario crear un campo en la entidad objetivo que copie el dato de la entidad padre.

Ejemplo

1. La entidad Movimiento tiene como padre la entidad Account. Para poder usar el campo estado en el filtro de reporte se debe crear el campo: estadoOrigen

Si es una lista, usar la opción para que herede los valores de la entidad padre (Options Reference).

2. Luego añadir en fórmula la actualización del campo:

---
estadoOrigen = record\attribute('Account', origenId, 'estado');
---

3. Recalcular fórmula en los registros que se necesite usar para el reporte.

4. Utilizar el nuevo campo en el reporte. Ejemplo:

martes, mayo 05, 2026

Cómo bloquear países en WHM con Imunify 360



Configuración del bloqueo geográfico de tráfico desde WHM usando Imunify360. Restricción de acceso por país en servidores cPanel. Imunify360 incluye una función de bloqueo geográfico que permite restringir el acceso al servidor según el país de origen del tráfico. Esta configuración se gestiona directamente desde WHM, sin necesidad de editar reglas de firewall manualmente. El proceso cubre cómo acceder al módulo de Imunify360 dentro de WHM, identificar la sección de gestión de listas negras por país, y aplicar el bloqueo de forma efectiva. La configuración tiene efecto inmediato sobre las conexiones entrantes. Este tipo de restricción es útil para reducir tráfico no deseado, intentos de acceso desde regiones sin actividad legítima, y mejorar la postura general de seguridad del servidor sin configuraciones adicionales en el sistema operativo.

viernes, abril 17, 2026

Quitar saltos de línea en campos de un csv

 En los casos que algunos datos de un campo dentro de un csv tiene saltos de línea como por ejemplo:



___
id,campo1,campo2
1,"lorem ipsum","Nullam rhoncus erat leo"
2," Maecenas ut dapibus orci, 
sed hendrerit lacus. Mauris dolor velit","Cras aliquet urna nec tincidunt sollicitudin."
___
En la línea 2 el campo1 tiene salto de línea.



Se debe hacer este reempazo todas las veces que sea necesario en el archivo utilizando sublime o similar:

Reemplazar esto:
(?<=,")([^"]*?)\n([^"]*?)(?=",)

Por esto:
$1$2

Guardar e importar en Excel.

martes, noviembre 25, 2025

Funciones ocultas para utilizar en reportes de EspoCRM

En este archivo se pueden encontrar funciones para filtrar los reportes que se usan en el paquete avanzado de EspoCRM.

Por ejemplo me sirvió para obtener registros modificados dentro de los últimos 15 minutos:

 LESS_THAN_OR_EQUAL:(
    TIMESTAMPDIFF_MINUTE:(
        modifiedAt,
        NOW:()
    ),
    15

viernes, noviembre 21, 2025

ALERT: (0) Could not handle 'order' for 'Entidad'

El error está relacionado a la falta del parámetro de ordenamiento (probablemente bug de Espo ya que en la documentación se ve que es opcional), por ejemplo:


$idActivoPuente=record\findRelatedOne('Entidad', id, 'relacion');


Produce el error: 

ALERT: (0) Could not handle 'order' for 'EntidadRelacionada'


Se soluciona agregando el parámetro faltante (por ejemplo createdAt):


$idActivoPuente=record\findRelatedOne('Entidad', id, 'relacion', 'createdAt', 'asc');

jueves, noviembre 20, 2025

Obtener datos de una entidad

 No hagas esto en EspoCRM

$dato1 = record\attribute('Entidad', $id, 'campo1');

$dato2 = record\attribute('Entidad', $id, 'campo2');

Cada vez se trae un dato ¡Se realiza una consulta a la base de datos!


En reemplazo haz esto

$o = record\fetch('Account', $accountId);

if ($o) {

    $dato1 = object\get($o, 'campo1');

    $dato2 = object\get($o, 'campo2');

}

ref: https://docs.espocrm.com/administration/formula/record/#recordfetch