Changeset 3782197
- Timestamp:
- 11/03/2026 04:16:32 PM (86 minutes ago)
- Location:
- cumpleconsent
- Files:
-
- 36 edited
- 1 copied
-
tags/1.0.20 (copied) (copied from cumpleconsent/trunk )
-
tags/1.0.20/assets/css/banner.css (modified) (2 diffs)
-
tags/1.0.20/cumpleconsent.php (modified) (2 diffs)
-
tags/1.0.20/includes/class-admin.php (modified) (4 diffs)
-
tags/1.0.20/includes/class-banner.php (modified) (3 diffs)
-
tags/1.0.20/includes/class-diagnostics.php (modified) (2 diffs)
-
tags/1.0.20/includes/class-mail.php (modified) (1 diff)
-
tags/1.0.20/includes/class-notice.php (modified) (1 diff)
-
tags/1.0.20/includes/class-plugin.php (modified) (1 diff)
-
tags/1.0.20/includes/class-policy.php (modified) (5 diffs)
-
tags/1.0.20/includes/class-provision.php (modified) (1 diff)
-
tags/1.0.20/includes/class-purposes.php (modified) (1 diff)
-
tags/1.0.20/includes/class-rat.php (modified) (2 diffs)
-
tags/1.0.20/includes/class-rights.php (modified) (2 diffs)
-
tags/1.0.20/includes/class-script-blocker.php (modified) (1 diff)
-
tags/1.0.20/includes/class-settings.php (modified) (1 diff)
-
tags/1.0.20/includes/class-transfers.php (modified) (1 diff)
-
tags/1.0.20/readme.txt (modified) (2 diffs)
-
tags/1.0.20/uninstall.php (modified) (1 diff)
-
trunk/assets/css/banner.css (modified) (2 diffs)
-
trunk/cumpleconsent.php (modified) (2 diffs)
-
trunk/includes/class-admin.php (modified) (4 diffs)
-
trunk/includes/class-banner.php (modified) (3 diffs)
-
trunk/includes/class-diagnostics.php (modified) (2 diffs)
-
trunk/includes/class-mail.php (modified) (1 diff)
-
trunk/includes/class-notice.php (modified) (1 diff)
-
trunk/includes/class-plugin.php (modified) (1 diff)
-
trunk/includes/class-policy.php (modified) (5 diffs)
-
trunk/includes/class-provision.php (modified) (1 diff)
-
trunk/includes/class-purposes.php (modified) (1 diff)
-
trunk/includes/class-rat.php (modified) (2 diffs)
-
trunk/includes/class-rights.php (modified) (2 diffs)
-
trunk/includes/class-script-blocker.php (modified) (1 diff)
-
trunk/includes/class-settings.php (modified) (1 diff)
-
trunk/includes/class-transfers.php (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/uninstall.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
cumpleconsent/tags/1.0.20/assets/css/banner.css
r3780080 r3782197 55 55 } 56 56 57 /* Gancho para temas: «el visitante todavía no ha decidido».57 /* Gancho para temas: “el visitante todavía no ha decidido”. 58 58 No se aplica ningún estilo por defecto a propósito (el aviso no debe mover 59 59 el diseño del sitio); el tema puede usarlo, por ejemplo, para reservar … … 312 312 /* ── Botones ────────────────────────────────────────────────────────────────── 313 313 Propios del plugin: el tema no decide su color, su tipografía ni su relleno. 314 «Rechazar» lleva el mismo peso que «aceptar»(art. 12). */314 “Rechazar” lleva el mismo peso que “aceptar” (art. 12). */ 315 315 316 316 #ccn-root .ccn-btn, -
cumpleconsent/tags/1.0.20/cumpleconsent.php
r3780080 r3782197 4 4 * Plugin URI: https://menteglobal.com/cumpleconsent 5 5 * Description: Consentimiento y transparencia alineados a la Ley 21.719 de Chile y a su reglamento (D.S. 662): aviso sin patrones oscuros, bloqueo de rastreadores antes del consentimiento, prueba auditable, política de privacidad con verificación del artículo 14 ter, atención de derechos del titular con plazos legales y registro de actividades de tratamiento. Sin telemetría: todo se procesa en tu propio sitio. 6 * Version: 1.0. 196 * Version: 1.0.20 7 7 * Requires at least: 6.2 8 8 * Requires PHP: 7.4 … … 35 35 36 36 // ── Constantes ──────────────────────────────────────────────────────────────── 37 define( 'CUMPLECONSENT_VERSION', '1.0. 19' );37 define( 'CUMPLECONSENT_VERSION', '1.0.20' ); 38 38 define( 'CUMPLECONSENT_FILE', __FILE__ ); 39 39 define( 'CUMPLECONSENT_DIR', plugin_dir_path( __FILE__ ) ); -
cumpleconsent/tags/1.0.20/includes/class-admin.php
r3780080 r3782197 66 66 $out[] = array( 67 67 'tipo' => 'notice-success', 68 'texto' => __( 'Diagnóstico ejecutado. Tienes el resultado en la tarjeta «Diagnóstico del sitio».', 'cumpleconsent' ),68 'texto' => __( 'Diagnóstico ejecutado. Tienes el resultado en la tarjeta “Diagnóstico del sitio”.', 'cumpleconsent' ), 69 69 ); 70 70 } … … 597 597 $this->select_field( 598 598 'reject_style', 599 __( 'Peso visual de «Rechazar»', 'cumpleconsent' ),599 __( 'Peso visual de “Rechazar”', 'cumpleconsent' ), 600 600 array( 601 'equal' => __( 'Igual que «Aceptar»(recomendado)', 'cumpleconsent' ),601 'equal' => __( 'Igual que “Aceptar” (recomendado)', 'cumpleconsent' ), 602 602 'secondary' => __( 'Secundario (no recomendado: patrón oscuro)', 'cumpleconsent' ), 603 603 ), … … 615 615 616 616 private function fields_purposes( array $s ): void { 617 echo '<p class="ccn-intro">' . esc_html__( 'El art. 12 exige consentimiento específico en cuanto a finalidades: cada finalidad se explica y se decide por separado. Las «necesarias»no se pueden desactivar porque sin ellas el sitio no funciona.', 'cumpleconsent' ) . '</p>';617 echo '<p class="ccn-intro">' . esc_html__( 'El art. 12 exige consentimiento específico en cuanto a finalidades: cada finalidad se explica y se decide por separado. Las “necesarias” no se pueden desactivar porque sin ellas el sitio no funciona.', 'cumpleconsent' ) . '</p>'; 618 618 foreach ( Purposes::base() as $key => $purpose ) { 619 619 if ( ! empty( $purpose['required'] ) ) { … … 871 871 '' !== $destino 872 872 /* translators: %s: correo que recibe hoy las solicitudes. */ 873 ? sprintf( __( 'Las solicitudes se avisan a %s, no al correo del canal de derechos. Completa «Correo que recibe las solicitudes»para que los avisos lleguen al buzón correcto.', 'cumpleconsent' ), $destino )873 ? sprintf( __( 'Las solicitudes se avisan a %s, no al correo del canal de derechos. Completa “Correo que recibe las solicitudes” para que los avisos lleguen al buzón correcto.', 'cumpleconsent' ), $destino ) 874 874 : __( 'No hay un correo receptor configurado para el canal de derechos: los avisos internos no se envían y una solicitud nueva puede pasar inadvertida.', 'cumpleconsent' ) 875 875 ); -
cumpleconsent/tags/1.0.20/includes/class-banner.php
r3780080 r3782197 4 4 * 5 5 * Reglas de diseño que responden a la ley, no al gusto: 6 * - «Rechazar»tiene el mismo peso visual y el mismo número de clics que7 * «Aceptar»(art. 12: consentimiento libre; sin patrones oscuros).6 * - “Rechazar” tiene el mismo peso visual y el mismo número de clics que 7 * “Aceptar” (art. 12: consentimiento libre; sin patrones oscuros). 8 8 * - Nada de casillas premarcadas ni de "seguir navegando = acepto": la ley 9 9 * exige un acto afirmativo inequívoco. … … 52 52 add_action( 'wp_ajax_nopriv_' . CUMPLECONSENT_AJAX_ACTION, array( $this, 'ajax_save' ) ); 53 53 54 // Si el tema no imprime el pie (plantillas de «próximamente», maquetadores),54 // Si el tema no imprime el pie (plantillas de “próximamente”, maquetadores), 55 55 // el aviso se mete en el HTML servido: sin esto, el visitante no ve nada y 56 56 // parece que el plugin no funciona. … … 445 445 446 446 $sfs = isset( $_SERVER['HTTP_SEC_FETCH_SITE'] ) ? strtolower( sanitize_text_field( wp_unslash( (string) $_SERVER['HTTP_SEC_FETCH_SITE'] ) ) ) : ''; 447 // Solo «same-origin». «same-site»incluiría a un subdominio hermano447 // Solo “same-origin”. “same-site” incluiría a un subdominio hermano 448 448 // (otro.menteglobal.com), que no es el mismo sitio y no puede decidir el 449 449 // consentimiento en nombre del visitante. -
cumpleconsent/tags/1.0.20/includes/class-diagnostics.php
r3780080 r3782197 255 255 $add( 256 256 'atencion', 257 __( ' «Rechazar» está visualmente subordinado a «Aceptar»', 'cumpleconsent' ),257 __( '“Rechazar” está visualmente subordinado a “Aceptar”', 'cumpleconsent' ), 258 258 __( 'El consentimiento debe ser libre. Un rechazo escondido o de menor peso es un patrón oscuro y debilita la prueba.', 'cumpleconsent' ), 259 259 'art. 12', 260 __( 'Deja «rechazar»con el mismo peso visual.', 'cumpleconsent' )260 __( 'Deja “rechazar” con el mismo peso visual.', 'cumpleconsent' ) 261 261 ); 262 262 } … … 264 264 $add( 265 265 'critico', 266 __( 'El «muro de cookies»está activo: el consentimiento se presume no libre', 'cumpleconsent' ),266 __( 'El “muro de cookies” está activo: el consentimiento se presume no libre', 'cumpleconsent' ), 267 267 __( 'Condicionar el acceso al sitio a aceptar cookies permite presumir que el consentimiento no fue otorgado libremente; la ley admite esa presunción y la prueba queda en tu contra.', 'cumpleconsent' ), 268 268 'art. 12 inciso 6', -
cumpleconsent/tags/1.0.20/includes/class-mail.php
r3780080 r3782197 14 14 /** 15 15 * Envuelve wp_mail para que el remitente se muestre con el nombre del sitio 16 * —nunca «WordPress»—, acepte una dirección de respuesta y exponga el motivo16 * —nunca “WordPress”—, acepte una dirección de respuesta y exponga el motivo 17 17 * cuando el servidor rechaza el envío. 18 18 */ -
cumpleconsent/tags/1.0.20/includes/class-notice.php
r3780080 r3782197 141 141 Policy::link_html( __( 'política de privacidad', 'cumpleconsent' ) ) 142 142 ); 143 $parts[] = __( 'Puedes revocar tu consentimiento cuando quieras, con la misma facilidad con que lo otorgaste, desde el enlace «Preferencias de privacidad»disponible en el pie de todas las páginas.', 'cumpleconsent' );143 $parts[] = __( 'Puedes revocar tu consentimiento cuando quieras, con la misma facilidad con que lo otorgaste, desde el enlace “Preferencias de privacidad” disponible en el pie de todas las páginas.', 'cumpleconsent' ); 144 144 145 145 return implode( ' ', $parts ); -
cumpleconsent/tags/1.0.20/includes/class-plugin.php
r3780080 r3782197 76 76 } 77 77 78 // Las versiones anteriores guardaban todo con el prefijo corto «ccn_», que no78 // Las versiones anteriores guardaban todo con el prefijo corto “ccn_”, que no 79 79 // cumple el mínimo de cuatro caracteres que pide el directorio: se traslada 80 80 // una sola vez, conservando los valores (sobre todo la sal del registro). -
cumpleconsent/tags/1.0.20/includes/class-policy.php
r3780080 r3782197 145 145 * 146 146 * Sin esta búsqueda, un sitio con su política publicada en /politica-de-privacidad/ 147 * aparecía como «no hay política publicada»solo porque nadie la había asignado.147 * aparecía como “no hay política publicada” solo porque nadie la había asignado. 148 148 * 149 149 * @return int … … 173 173 } 174 174 175 // Por el título, como último recurso: «privacidad»en el nombre y que no sea175 // Por el título, como último recurso: “privacidad” en el nombre y que no sea 176 176 // la política de cookies, que es otro documento y cumple otra cosa. 177 177 foreach ( (array) get_posts( array( 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => 20 ) ) as $page ) { … … 194 194 * ¿La página tiene una política dentro, o es un cartel vacío? 195 195 * 196 * Sin esta comprobación, un sitio con la página «Privacidad»en construcción196 * Sin esta comprobación, un sitio con la página “Privacidad” en construcción 197 197 * quedaba enlazado a un texto inexistente y el verificador informaba 0 de 12. 198 198 * … … 367 367 } 368 368 $h[] = '</ul>'; 369 $h[] = '<p>' . esc_html__( 'Puedes aceptar todo, rechazar todo o elegir finalidad por finalidad en el aviso que aparece al entrar, y cambiar tu decisión cuando quieras desde el enlace «Preferencias de privacidad»del pie de página.', 'cumpleconsent' ) . '</p>';369 $h[] = '<p>' . esc_html__( 'Puedes aceptar todo, rechazar todo o elegir finalidad por finalidad en el aviso que aparece al entrar, y cambiar tu decisión cuando quieras desde el enlace “Preferencias de privacidad” del pie de página.', 'cumpleconsent' ) . '</p>'; 370 370 371 371 // 4. Destinatarios (14 ter d) y 15 bis). … … 434 434 // 10. Retiro del consentimiento (14 ter k)). 435 435 $h[] = '<h3>' . esc_html__( '10. Puedes retirar tu consentimiento', 'cumpleconsent' ) . '</h3>'; 436 $h[] = '<p>' . esc_html__( 'Si el tratamiento se basa en tu consentimiento, puedes retirarlo en cualquier momento y sin expresión de causa, desde el enlace «Preferencias de privacidad»del pie del sitio o escribiéndonos. Retirar el consentimiento no afecta la licitud del tratamiento que hicimos antes de retirarlo.', 'cumpleconsent' ) . '</p>';436 $h[] = '<p>' . esc_html__( 'Si el tratamiento se basa en tu consentimiento, puedes retirarlo en cualquier momento y sin expresión de causa, desde el enlace “Preferencias de privacidad” del pie del sitio o escribiéndonos. Retirar el consentimiento no afecta la licitud del tratamiento que hicimos antes de retirarlo.', 'cumpleconsent' ) . '</p>'; 437 437 438 438 // 11. Reclamo ante la Agencia (14 ter g)). -
cumpleconsent/tags/1.0.20/includes/class-provision.php
r3780080 r3782197 130 130 } 131 131 if ( 'equal' !== (string) Settings::get( 'reject_style', 'equal' ) ) { 132 $pending[] = __( ' «Rechazar» debe tener el mismo peso visual que «aceptar»(art. 12).', 'cumpleconsent' );132 $pending[] = __( '“Rechazar” debe tener el mismo peso visual que “aceptar” (art. 12).', 'cumpleconsent' ); 133 133 } 134 134 if ( Settings::get( 'cookie_wall', false ) ) { -
cumpleconsent/tags/1.0.20/includes/class-purposes.php
r3780080 r3782197 4 4 * 5 5 * Cada finalidad es una categoría de cookies/tecnologías del sitio. El nombre 6 * "finalidad" no es decorativo: el art. 12 exige consentimiento «específico en7 * cuanto a su finalidad o finalidades », así que el visitante decide finalidad6 * "finalidad" no es decorativo: el art. 12 exige consentimiento “específico en 7 * cuanto a su finalidad o finalidades”, así que el visitante decide finalidad 8 8 * por finalidad y esa elección es la que queda registrada como prueba. 9 9 * -
cumpleconsent/tags/1.0.20/includes/class-rat.php
r3780080 r3782197 8 8 * a) individualización del responsable y su representante legal; 9 9 * d) caracterización de los datos y de las operaciones de tratamiento —el 10 * reglamento dice expresamente que esta caracterización «podrá realizarse11 * a través de un registro de actividades de tratamiento »— con once10 * reglamento dice expresamente que esta caracterización “podrá realizarse 11 * a través de un registro de actividades de tratamiento”— con once 12 12 * contenidos mínimos (i a xi); 13 13 * e) identificación de las actividades de riesgo y una matriz de riesgos … … 384 384 $h[] = '<h3>' . esc_html__( 'Protocolo 1 · Aviso y captación del consentimiento', 'cumpleconsent' ) . '</h3>'; 385 385 $h[] = '<ul>'; 386 $h[] = '<li>' . esc_html__( 'El aviso se muestra antes de cualquier tratamiento no necesario; ninguna casilla viene premarcada y «rechazar» tiene el mismo peso que «aceptar».', 'cumpleconsent' ) . '</li>';386 $h[] = '<li>' . esc_html__( 'El aviso se muestra antes de cualquier tratamiento no necesario; ninguna casilla viene premarcada y “rechazar” tiene el mismo peso que “aceptar”.', 'cumpleconsent' ) . '</li>'; 387 387 $h[] = '<li>' . sprintf( 388 388 /* translators: %s: versión */ -
cumpleconsent/tags/1.0.20/includes/class-rights.php
r3780080 r3782197 168 168 '', 169 169 /* translators: %s: nombre con el que se muestra el remitente. */ 170 sprintf( __( 'El remitente se muestra como «%s» (no como «WordPress»).', 'cumpleconsent' ), $nombre ),170 sprintf( __( 'El remitente se muestra como “%s” (no como “WordPress”).', 'cumpleconsent' ), $nombre ), 171 171 '', 172 172 /* translators: %s: correo del canal de derechos. */ … … 464 464 } 465 465 466 /** Acuse de recibo al titular (art. 11: «deberá acusar recibo»). */466 /** Acuse de recibo al titular (art. 11: “deberá acusar recibo”). */ 467 467 private function send_ack( int $id ): void { 468 468 $row = $this->get( $id ); -
cumpleconsent/tags/1.0.20/includes/class-script-blocker.php
r3780080 r3782197 300 300 * 301 301 * Permite que el aviso se inyecte aquí cuando el tema no imprime el pie: 302 * hay plantillas (páginas de «próximamente», maquetadores) que no llaman a302 * hay plantillas (páginas de “próximamente”, maquetadores) que no llaman a 303 303 * wp_footer() y el aviso nunca aparecía. 304 304 * -
cumpleconsent/tags/1.0.20/includes/class-settings.php
r3780080 r3782197 151 151 * 152 152 * El formulario del panel envía el estado COMPLETO y en él una casilla sin 153 * marcar no viaja: su ausencia significa «apagado». La API puede escribir solo154 * lo que cambia, así que allí la ausencia significa «como estaba». Sin esta153 * marcar no viaja: su ausencia significa “apagado”. La API puede escribir solo 154 * lo que cambia, así que allí la ausencia significa “como estaba”. Sin esta 155 155 * distinción, una escritura parcial por API apagaba en silencio todos los 156 156 * interruptores que no venían en la petición. -
cumpleconsent/tags/1.0.20/includes/class-transfers.php
r3780080 r3782197 60 60 array( 'provider' => 'Mailchimp / Intuit', 'country' => 'Estados Unidos', 'basis' => 'safeguards', 'note' => 'Newsletter.' ), 61 61 array( 'provider' => 'Stripe', 'country' => 'Estados Unidos / Irlanda', 'basis' => 'safeguards', 'note' => 'Pagos.' ), 62 array( 'provider' => 'Vimeo / Spotify / SoundCloud (contenido incrustado)', 'country' => 'Estados Unidos / Suecia', 'basis' => 'consent', 'note' => 'Se activan solo con tu consentimiento (finalidad «contenido incrustado»).' ),62 array( 'provider' => 'Vimeo / Spotify / SoundCloud (contenido incrustado)', 'country' => 'Estados Unidos / Suecia', 'basis' => 'consent', 'note' => 'Se activan solo con tu consentimiento (finalidad “contenido incrustado”).' ), 63 63 ); 64 64 } -
cumpleconsent/tags/1.0.20/readme.txt
r3780080 r3782197 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.0. 197 Stable tag: 1.0.20 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 97 97 98 98 == Changelog == 99 100 = 1.0.20 = 101 102 * **The Spanish interface now uses curly quotes (“ ”) instead of guillemets (« »)**, following the Spanish (Chile) style guide the WordPress translation team uses. Text-only change. 99 103 100 104 = 1.0.19 = -
cumpleconsent/tags/1.0.20/uninstall.php
r3780080 r3782197 6 6 * cumplimiento y borrarlo al desinstalar puede dejar al responsable sin 7 7 * respaldo. El borrado solo ocurre si el administrador lo pidió expresamente 8 * (Ajustes → Registro → «Borrar datos al desinstalar»).8 * (Ajustes → Registro → “Borrar datos al desinstalar”). 9 9 * 10 10 * El borrado elimina: las tablas del plugin, la configuración y la sal secreta. -
cumpleconsent/trunk/assets/css/banner.css
r3780080 r3782197 55 55 } 56 56 57 /* Gancho para temas: «el visitante todavía no ha decidido».57 /* Gancho para temas: “el visitante todavía no ha decidido”. 58 58 No se aplica ningún estilo por defecto a propósito (el aviso no debe mover 59 59 el diseño del sitio); el tema puede usarlo, por ejemplo, para reservar … … 312 312 /* ── Botones ────────────────────────────────────────────────────────────────── 313 313 Propios del plugin: el tema no decide su color, su tipografía ni su relleno. 314 «Rechazar» lleva el mismo peso que «aceptar»(art. 12). */314 “Rechazar” lleva el mismo peso que “aceptar” (art. 12). */ 315 315 316 316 #ccn-root .ccn-btn, -
cumpleconsent/trunk/cumpleconsent.php
r3780080 r3782197 4 4 * Plugin URI: https://menteglobal.com/cumpleconsent 5 5 * Description: Consentimiento y transparencia alineados a la Ley 21.719 de Chile y a su reglamento (D.S. 662): aviso sin patrones oscuros, bloqueo de rastreadores antes del consentimiento, prueba auditable, política de privacidad con verificación del artículo 14 ter, atención de derechos del titular con plazos legales y registro de actividades de tratamiento. Sin telemetría: todo se procesa en tu propio sitio. 6 * Version: 1.0. 196 * Version: 1.0.20 7 7 * Requires at least: 6.2 8 8 * Requires PHP: 7.4 … … 35 35 36 36 // ── Constantes ──────────────────────────────────────────────────────────────── 37 define( 'CUMPLECONSENT_VERSION', '1.0. 19' );37 define( 'CUMPLECONSENT_VERSION', '1.0.20' ); 38 38 define( 'CUMPLECONSENT_FILE', __FILE__ ); 39 39 define( 'CUMPLECONSENT_DIR', plugin_dir_path( __FILE__ ) ); -
cumpleconsent/trunk/includes/class-admin.php
r3780080 r3782197 66 66 $out[] = array( 67 67 'tipo' => 'notice-success', 68 'texto' => __( 'Diagnóstico ejecutado. Tienes el resultado en la tarjeta «Diagnóstico del sitio».', 'cumpleconsent' ),68 'texto' => __( 'Diagnóstico ejecutado. Tienes el resultado en la tarjeta “Diagnóstico del sitio”.', 'cumpleconsent' ), 69 69 ); 70 70 } … … 597 597 $this->select_field( 598 598 'reject_style', 599 __( 'Peso visual de «Rechazar»', 'cumpleconsent' ),599 __( 'Peso visual de “Rechazar”', 'cumpleconsent' ), 600 600 array( 601 'equal' => __( 'Igual que «Aceptar»(recomendado)', 'cumpleconsent' ),601 'equal' => __( 'Igual que “Aceptar” (recomendado)', 'cumpleconsent' ), 602 602 'secondary' => __( 'Secundario (no recomendado: patrón oscuro)', 'cumpleconsent' ), 603 603 ), … … 615 615 616 616 private function fields_purposes( array $s ): void { 617 echo '<p class="ccn-intro">' . esc_html__( 'El art. 12 exige consentimiento específico en cuanto a finalidades: cada finalidad se explica y se decide por separado. Las «necesarias»no se pueden desactivar porque sin ellas el sitio no funciona.', 'cumpleconsent' ) . '</p>';617 echo '<p class="ccn-intro">' . esc_html__( 'El art. 12 exige consentimiento específico en cuanto a finalidades: cada finalidad se explica y se decide por separado. Las “necesarias” no se pueden desactivar porque sin ellas el sitio no funciona.', 'cumpleconsent' ) . '</p>'; 618 618 foreach ( Purposes::base() as $key => $purpose ) { 619 619 if ( ! empty( $purpose['required'] ) ) { … … 871 871 '' !== $destino 872 872 /* translators: %s: correo que recibe hoy las solicitudes. */ 873 ? sprintf( __( 'Las solicitudes se avisan a %s, no al correo del canal de derechos. Completa «Correo que recibe las solicitudes»para que los avisos lleguen al buzón correcto.', 'cumpleconsent' ), $destino )873 ? sprintf( __( 'Las solicitudes se avisan a %s, no al correo del canal de derechos. Completa “Correo que recibe las solicitudes” para que los avisos lleguen al buzón correcto.', 'cumpleconsent' ), $destino ) 874 874 : __( 'No hay un correo receptor configurado para el canal de derechos: los avisos internos no se envían y una solicitud nueva puede pasar inadvertida.', 'cumpleconsent' ) 875 875 ); -
cumpleconsent/trunk/includes/class-banner.php
r3780080 r3782197 4 4 * 5 5 * Reglas de diseño que responden a la ley, no al gusto: 6 * - «Rechazar»tiene el mismo peso visual y el mismo número de clics que7 * «Aceptar»(art. 12: consentimiento libre; sin patrones oscuros).6 * - “Rechazar” tiene el mismo peso visual y el mismo número de clics que 7 * “Aceptar” (art. 12: consentimiento libre; sin patrones oscuros). 8 8 * - Nada de casillas premarcadas ni de "seguir navegando = acepto": la ley 9 9 * exige un acto afirmativo inequívoco. … … 52 52 add_action( 'wp_ajax_nopriv_' . CUMPLECONSENT_AJAX_ACTION, array( $this, 'ajax_save' ) ); 53 53 54 // Si el tema no imprime el pie (plantillas de «próximamente», maquetadores),54 // Si el tema no imprime el pie (plantillas de “próximamente”, maquetadores), 55 55 // el aviso se mete en el HTML servido: sin esto, el visitante no ve nada y 56 56 // parece que el plugin no funciona. … … 445 445 446 446 $sfs = isset( $_SERVER['HTTP_SEC_FETCH_SITE'] ) ? strtolower( sanitize_text_field( wp_unslash( (string) $_SERVER['HTTP_SEC_FETCH_SITE'] ) ) ) : ''; 447 // Solo «same-origin». «same-site»incluiría a un subdominio hermano447 // Solo “same-origin”. “same-site” incluiría a un subdominio hermano 448 448 // (otro.menteglobal.com), que no es el mismo sitio y no puede decidir el 449 449 // consentimiento en nombre del visitante. -
cumpleconsent/trunk/includes/class-diagnostics.php
r3780080 r3782197 255 255 $add( 256 256 'atencion', 257 __( ' «Rechazar» está visualmente subordinado a «Aceptar»', 'cumpleconsent' ),257 __( '“Rechazar” está visualmente subordinado a “Aceptar”', 'cumpleconsent' ), 258 258 __( 'El consentimiento debe ser libre. Un rechazo escondido o de menor peso es un patrón oscuro y debilita la prueba.', 'cumpleconsent' ), 259 259 'art. 12', 260 __( 'Deja «rechazar»con el mismo peso visual.', 'cumpleconsent' )260 __( 'Deja “rechazar” con el mismo peso visual.', 'cumpleconsent' ) 261 261 ); 262 262 } … … 264 264 $add( 265 265 'critico', 266 __( 'El «muro de cookies»está activo: el consentimiento se presume no libre', 'cumpleconsent' ),266 __( 'El “muro de cookies” está activo: el consentimiento se presume no libre', 'cumpleconsent' ), 267 267 __( 'Condicionar el acceso al sitio a aceptar cookies permite presumir que el consentimiento no fue otorgado libremente; la ley admite esa presunción y la prueba queda en tu contra.', 'cumpleconsent' ), 268 268 'art. 12 inciso 6', -
cumpleconsent/trunk/includes/class-mail.php
r3780080 r3782197 14 14 /** 15 15 * Envuelve wp_mail para que el remitente se muestre con el nombre del sitio 16 * —nunca «WordPress»—, acepte una dirección de respuesta y exponga el motivo16 * —nunca “WordPress”—, acepte una dirección de respuesta y exponga el motivo 17 17 * cuando el servidor rechaza el envío. 18 18 */ -
cumpleconsent/trunk/includes/class-notice.php
r3780080 r3782197 141 141 Policy::link_html( __( 'política de privacidad', 'cumpleconsent' ) ) 142 142 ); 143 $parts[] = __( 'Puedes revocar tu consentimiento cuando quieras, con la misma facilidad con que lo otorgaste, desde el enlace «Preferencias de privacidad»disponible en el pie de todas las páginas.', 'cumpleconsent' );143 $parts[] = __( 'Puedes revocar tu consentimiento cuando quieras, con la misma facilidad con que lo otorgaste, desde el enlace “Preferencias de privacidad” disponible en el pie de todas las páginas.', 'cumpleconsent' ); 144 144 145 145 return implode( ' ', $parts ); -
cumpleconsent/trunk/includes/class-plugin.php
r3780080 r3782197 76 76 } 77 77 78 // Las versiones anteriores guardaban todo con el prefijo corto «ccn_», que no78 // Las versiones anteriores guardaban todo con el prefijo corto “ccn_”, que no 79 79 // cumple el mínimo de cuatro caracteres que pide el directorio: se traslada 80 80 // una sola vez, conservando los valores (sobre todo la sal del registro). -
cumpleconsent/trunk/includes/class-policy.php
r3780080 r3782197 145 145 * 146 146 * Sin esta búsqueda, un sitio con su política publicada en /politica-de-privacidad/ 147 * aparecía como «no hay política publicada»solo porque nadie la había asignado.147 * aparecía como “no hay política publicada” solo porque nadie la había asignado. 148 148 * 149 149 * @return int … … 173 173 } 174 174 175 // Por el título, como último recurso: «privacidad»en el nombre y que no sea175 // Por el título, como último recurso: “privacidad” en el nombre y que no sea 176 176 // la política de cookies, que es otro documento y cumple otra cosa. 177 177 foreach ( (array) get_posts( array( 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => 20 ) ) as $page ) { … … 194 194 * ¿La página tiene una política dentro, o es un cartel vacío? 195 195 * 196 * Sin esta comprobación, un sitio con la página «Privacidad»en construcción196 * Sin esta comprobación, un sitio con la página “Privacidad” en construcción 197 197 * quedaba enlazado a un texto inexistente y el verificador informaba 0 de 12. 198 198 * … … 367 367 } 368 368 $h[] = '</ul>'; 369 $h[] = '<p>' . esc_html__( 'Puedes aceptar todo, rechazar todo o elegir finalidad por finalidad en el aviso que aparece al entrar, y cambiar tu decisión cuando quieras desde el enlace «Preferencias de privacidad»del pie de página.', 'cumpleconsent' ) . '</p>';369 $h[] = '<p>' . esc_html__( 'Puedes aceptar todo, rechazar todo o elegir finalidad por finalidad en el aviso que aparece al entrar, y cambiar tu decisión cuando quieras desde el enlace “Preferencias de privacidad” del pie de página.', 'cumpleconsent' ) . '</p>'; 370 370 371 371 // 4. Destinatarios (14 ter d) y 15 bis). … … 434 434 // 10. Retiro del consentimiento (14 ter k)). 435 435 $h[] = '<h3>' . esc_html__( '10. Puedes retirar tu consentimiento', 'cumpleconsent' ) . '</h3>'; 436 $h[] = '<p>' . esc_html__( 'Si el tratamiento se basa en tu consentimiento, puedes retirarlo en cualquier momento y sin expresión de causa, desde el enlace «Preferencias de privacidad»del pie del sitio o escribiéndonos. Retirar el consentimiento no afecta la licitud del tratamiento que hicimos antes de retirarlo.', 'cumpleconsent' ) . '</p>';436 $h[] = '<p>' . esc_html__( 'Si el tratamiento se basa en tu consentimiento, puedes retirarlo en cualquier momento y sin expresión de causa, desde el enlace “Preferencias de privacidad” del pie del sitio o escribiéndonos. Retirar el consentimiento no afecta la licitud del tratamiento que hicimos antes de retirarlo.', 'cumpleconsent' ) . '</p>'; 437 437 438 438 // 11. Reclamo ante la Agencia (14 ter g)). -
cumpleconsent/trunk/includes/class-provision.php
r3780080 r3782197 130 130 } 131 131 if ( 'equal' !== (string) Settings::get( 'reject_style', 'equal' ) ) { 132 $pending[] = __( ' «Rechazar» debe tener el mismo peso visual que «aceptar»(art. 12).', 'cumpleconsent' );132 $pending[] = __( '“Rechazar” debe tener el mismo peso visual que “aceptar” (art. 12).', 'cumpleconsent' ); 133 133 } 134 134 if ( Settings::get( 'cookie_wall', false ) ) { -
cumpleconsent/trunk/includes/class-purposes.php
r3780080 r3782197 4 4 * 5 5 * Cada finalidad es una categoría de cookies/tecnologías del sitio. El nombre 6 * "finalidad" no es decorativo: el art. 12 exige consentimiento «específico en7 * cuanto a su finalidad o finalidades », así que el visitante decide finalidad6 * "finalidad" no es decorativo: el art. 12 exige consentimiento “específico en 7 * cuanto a su finalidad o finalidades”, así que el visitante decide finalidad 8 8 * por finalidad y esa elección es la que queda registrada como prueba. 9 9 * -
cumpleconsent/trunk/includes/class-rat.php
r3780080 r3782197 8 8 * a) individualización del responsable y su representante legal; 9 9 * d) caracterización de los datos y de las operaciones de tratamiento —el 10 * reglamento dice expresamente que esta caracterización «podrá realizarse11 * a través de un registro de actividades de tratamiento »— con once10 * reglamento dice expresamente que esta caracterización “podrá realizarse 11 * a través de un registro de actividades de tratamiento”— con once 12 12 * contenidos mínimos (i a xi); 13 13 * e) identificación de las actividades de riesgo y una matriz de riesgos … … 384 384 $h[] = '<h3>' . esc_html__( 'Protocolo 1 · Aviso y captación del consentimiento', 'cumpleconsent' ) . '</h3>'; 385 385 $h[] = '<ul>'; 386 $h[] = '<li>' . esc_html__( 'El aviso se muestra antes de cualquier tratamiento no necesario; ninguna casilla viene premarcada y «rechazar» tiene el mismo peso que «aceptar».', 'cumpleconsent' ) . '</li>';386 $h[] = '<li>' . esc_html__( 'El aviso se muestra antes de cualquier tratamiento no necesario; ninguna casilla viene premarcada y “rechazar” tiene el mismo peso que “aceptar”.', 'cumpleconsent' ) . '</li>'; 387 387 $h[] = '<li>' . sprintf( 388 388 /* translators: %s: versión */ -
cumpleconsent/trunk/includes/class-rights.php
r3780080 r3782197 168 168 '', 169 169 /* translators: %s: nombre con el que se muestra el remitente. */ 170 sprintf( __( 'El remitente se muestra como «%s» (no como «WordPress»).', 'cumpleconsent' ), $nombre ),170 sprintf( __( 'El remitente se muestra como “%s” (no como “WordPress”).', 'cumpleconsent' ), $nombre ), 171 171 '', 172 172 /* translators: %s: correo del canal de derechos. */ … … 464 464 } 465 465 466 /** Acuse de recibo al titular (art. 11: «deberá acusar recibo»). */466 /** Acuse de recibo al titular (art. 11: “deberá acusar recibo”). */ 467 467 private function send_ack( int $id ): void { 468 468 $row = $this->get( $id ); -
cumpleconsent/trunk/includes/class-script-blocker.php
r3780080 r3782197 300 300 * 301 301 * Permite que el aviso se inyecte aquí cuando el tema no imprime el pie: 302 * hay plantillas (páginas de «próximamente», maquetadores) que no llaman a302 * hay plantillas (páginas de “próximamente”, maquetadores) que no llaman a 303 303 * wp_footer() y el aviso nunca aparecía. 304 304 * -
cumpleconsent/trunk/includes/class-settings.php
r3780080 r3782197 151 151 * 152 152 * El formulario del panel envía el estado COMPLETO y en él una casilla sin 153 * marcar no viaja: su ausencia significa «apagado». La API puede escribir solo154 * lo que cambia, así que allí la ausencia significa «como estaba». Sin esta153 * marcar no viaja: su ausencia significa “apagado”. La API puede escribir solo 154 * lo que cambia, así que allí la ausencia significa “como estaba”. Sin esta 155 155 * distinción, una escritura parcial por API apagaba en silencio todos los 156 156 * interruptores que no venían en la petición. -
cumpleconsent/trunk/includes/class-transfers.php
r3780080 r3782197 60 60 array( 'provider' => 'Mailchimp / Intuit', 'country' => 'Estados Unidos', 'basis' => 'safeguards', 'note' => 'Newsletter.' ), 61 61 array( 'provider' => 'Stripe', 'country' => 'Estados Unidos / Irlanda', 'basis' => 'safeguards', 'note' => 'Pagos.' ), 62 array( 'provider' => 'Vimeo / Spotify / SoundCloud (contenido incrustado)', 'country' => 'Estados Unidos / Suecia', 'basis' => 'consent', 'note' => 'Se activan solo con tu consentimiento (finalidad «contenido incrustado»).' ),62 array( 'provider' => 'Vimeo / Spotify / SoundCloud (contenido incrustado)', 'country' => 'Estados Unidos / Suecia', 'basis' => 'consent', 'note' => 'Se activan solo con tu consentimiento (finalidad “contenido incrustado”).' ), 63 63 ); 64 64 } -
cumpleconsent/trunk/readme.txt
r3780080 r3782197 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.0. 197 Stable tag: 1.0.20 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 97 97 98 98 == Changelog == 99 100 = 1.0.20 = 101 102 * **The Spanish interface now uses curly quotes (“ ”) instead of guillemets (« »)**, following the Spanish (Chile) style guide the WordPress translation team uses. Text-only change. 99 103 100 104 = 1.0.19 = -
cumpleconsent/trunk/uninstall.php
r3780080 r3782197 6 6 * cumplimiento y borrarlo al desinstalar puede dejar al responsable sin 7 7 * respaldo. El borrado solo ocurre si el administrador lo pidió expresamente 8 * (Ajustes → Registro → «Borrar datos al desinstalar»).8 * (Ajustes → Registro → “Borrar datos al desinstalar”). 9 9 * 10 10 * El borrado elimina: las tablas del plugin, la configuración y la sal secreta.
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)