Plugin Directory

Changeset 3782197


Ignore:
Timestamp:
11/03/2026 04:16:32 PM (86 minutes ago)
Author:
menteglobal
Message:

CumpleConsent 1.0.20

Location:
cumpleconsent
Files:
36 edited
1 copied

Legend:

Unmodified
Added
Removed
  • cumpleconsent/tags/1.0.20/assets/css/banner.css

    r3780080 r3782197  
    5555}
    5656
    57 /* Gancho para temas: «el visitante todavía no ha decidido».
     57/* Gancho para temas: “el visitante todavía no ha decidido”.
    5858   No se aplica ningún estilo por defecto a propósito (el aviso no debe mover
    5959   el diseño del sitio); el tema puede usarlo, por ejemplo, para reservar
    … …  
    312312/* ── Botones ──────────────────────────────────────────────────────────────────
    313313   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). */
    315315
    316316#ccn-root .ccn-btn,
  • cumpleconsent/tags/1.0.20/cumpleconsent.php

    r3780080 r3782197  
    44 * Plugin URI:        https://menteglobal.com/cumpleconsent
    55 * 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.19
     6 * Version:           1.0.20
    77 * Requires at least: 6.2
    88 * Requires PHP:      7.4
    … …  
    3535
    3636// ── Constantes ────────────────────────────────────────────────────────────────
    37 define( 'CUMPLECONSENT_VERSION', '1.0.19' );
     37define( 'CUMPLECONSENT_VERSION', '1.0.20' );
    3838define( 'CUMPLECONSENT_FILE', __FILE__ );
    3939define( 'CUMPLECONSENT_DIR', plugin_dir_path( __FILE__ ) );
  • cumpleconsent/tags/1.0.20/includes/class-admin.php

    r3780080 r3782197  
    6666                        $out[] = array(
    6767                                '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' ),
    6969                        );
    7070                }
    … …  
    597597                $this->select_field(
    598598                        'reject_style',
    599                         __( 'Peso visual de «Rechazar»', 'cumpleconsent' ),
     599                        __( 'Peso visual de “Rechazar”', 'cumpleconsent' ),
    600600                        array(
    601                                 'equal'     => __( 'Igual que «Aceptar» (recomendado)', 'cumpleconsent' ),
     601                                'equal'     => __( 'Igual que “Aceptar” (recomendado)', 'cumpleconsent' ),
    602602                                'secondary' => __( 'Secundario (no recomendado: patrón oscuro)', 'cumpleconsent' ),
    603603                        ),
    … …  
    615615
    616616        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>';
    618618                foreach ( Purposes::base() as $key => $purpose ) {
    619619                        if ( ! empty( $purpose['required'] ) ) {
    … …  
    871871                                '' !== $destino
    872872                                        /* 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 )
    874874                                        : __( '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' )
    875875                        );
  • cumpleconsent/tags/1.0.20/includes/class-banner.php

    r3780080 r3782197  
    44 *
    55 * 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 que
    7  *     «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).
    88 *   - Nada de casillas premarcadas ni de "seguir navegando = acepto": la ley
    99 *     exige un acto afirmativo inequívoco.
    … …  
    5252                add_action( 'wp_ajax_nopriv_' . CUMPLECONSENT_AJAX_ACTION, array( $this, 'ajax_save' ) );
    5353
    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),
    5555                // el aviso se mete en el HTML servido: sin esto, el visitante no ve nada y
    5656                // parece que el plugin no funciona.
    … …  
    445445
    446446                $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 hermano
     447                // Solo “same-origin”. “same-site” incluiría a un subdominio hermano
    448448                // (otro.menteglobal.com), que no es el mismo sitio y no puede decidir el
    449449                // consentimiento en nombre del visitante.
  • cumpleconsent/tags/1.0.20/includes/class-diagnostics.php

    r3780080 r3782197  
    255255                        $add(
    256256                                'atencion',
    257                                 __( '«Rechazar» está visualmente subordinado a «Aceptar»', 'cumpleconsent' ),
     257                                __( '“Rechazar” está visualmente subordinado a “Aceptar”', 'cumpleconsent' ),
    258258                                __( 'El consentimiento debe ser libre. Un rechazo escondido o de menor peso es un patrón oscuro y debilita la prueba.', 'cumpleconsent' ),
    259259                                'art. 12',
    260                                 __( 'Deja «rechazar» con el mismo peso visual.', 'cumpleconsent' )
     260                                __( 'Deja “rechazar” con el mismo peso visual.', 'cumpleconsent' )
    261261                        );
    262262                }
    … …  
    264264                        $add(
    265265                                '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' ),
    267267                                __( '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' ),
    268268                                'art. 12 inciso 6',
  • cumpleconsent/tags/1.0.20/includes/class-mail.php

    r3780080 r3782197  
    1414/**
    1515 * 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 motivo
     16 * —nunca “WordPress”—, acepte una dirección de respuesta y exponga el motivo
    1717 * cuando el servidor rechaza el envío.
    1818 */
  • cumpleconsent/tags/1.0.20/includes/class-notice.php

    r3780080 r3782197  
    141141                        Policy::link_html( __( 'política de privacidad', 'cumpleconsent' ) )
    142142                );
    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' );
    144144
    145145                return implode( ' ', $parts );
  • cumpleconsent/tags/1.0.20/includes/class-plugin.php

    r3780080 r3782197  
    7676                }
    7777
    78                 // Las versiones anteriores guardaban todo con el prefijo corto «ccn_», que no
     78                // Las versiones anteriores guardaban todo con el prefijo corto “ccn_”, que no
    7979                // cumple el mínimo de cuatro caracteres que pide el directorio: se traslada
    8080                // una sola vez, conservando los valores (sobre todo la sal del registro).
  • cumpleconsent/tags/1.0.20/includes/class-policy.php

    r3780080 r3782197  
    145145         *
    146146         * 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.
    148148         *
    149149         * @return int
    … …  
    173173                }
    174174
    175                 // Por el título, como último recurso: «privacidad» en el nombre y que no sea
     175                // Por el título, como último recurso: “privacidad” en el nombre y que no sea
    176176                // la política de cookies, que es otro documento y cumple otra cosa.
    177177                foreach ( (array) get_posts( array( 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => 20 ) ) as $page ) {
    … …  
    194194         * ¿La página tiene una política dentro, o es un cartel vacío?
    195195         *
    196          * Sin esta comprobación, un sitio con la página «Privacidad» en construcción
     196         * Sin esta comprobación, un sitio con la página “Privacidad” en construcción
    197197         * quedaba enlazado a un texto inexistente y el verificador informaba 0 de 12.
    198198         *
    … …  
    367367                }
    368368                $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>';
    370370
    371371                // 4. Destinatarios (14 ter d) y 15 bis).
    … …  
    434434                // 10. Retiro del consentimiento (14 ter k)).
    435435                $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>';
    437437
    438438                // 11. Reclamo ante la Agencia (14 ter g)).
  • cumpleconsent/tags/1.0.20/includes/class-provision.php

    r3780080 r3782197  
    130130                }
    131131                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' );
    133133                }
    134134                if ( Settings::get( 'cookie_wall', false ) ) {
  • cumpleconsent/tags/1.0.20/includes/class-purposes.php

    r3780080 r3782197  
    44 *
    55 * 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 en
    7  * cuanto a su finalidad o finalidades», así que el visitante decide finalidad
     6 * "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
    88 * por finalidad y esa elección es la que queda registrada como prueba.
    99 *
  • cumpleconsent/tags/1.0.20/includes/class-rat.php

    r3780080 r3782197  
    88 *   a) individualización del responsable y su representante legal;
    99 *   d) caracterización de los datos y de las operaciones de tratamiento —el
    10  *      reglamento dice expresamente que esta caracterización «podrá realizarse
    11  *      a través de un registro de actividades de tratamiento»— con once
     10 *      reglamento dice expresamente que esta caracterización “podrá realizarse
     11 *      a través de un registro de actividades de tratamiento”— con once
    1212 *      contenidos mínimos (i a xi);
    1313 *   e) identificación de las actividades de riesgo y una matriz de riesgos
    … …  
    384384                $h[] = '<h3>' . esc_html__( 'Protocolo 1 · Aviso y captación del consentimiento', 'cumpleconsent' ) . '</h3>';
    385385                $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>';
    387387                $h[] = '<li>' . sprintf(
    388388                        /* translators: %s: versión */
  • cumpleconsent/tags/1.0.20/includes/class-rights.php

    r3780080 r3782197  
    168168                        '',
    169169                        /* 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 ),
    171171                        '',
    172172                        /* translators: %s: correo del canal de derechos. */
    … …  
    464464        }
    465465
    466         /** Acuse de recibo al titular (art. 11: «deberá acusar recibo»). */
     466        /** Acuse de recibo al titular (art. 11: “deberá acusar recibo”). */
    467467        private function send_ack( int $id ): void {
    468468                $row = $this->get( $id );
  • cumpleconsent/tags/1.0.20/includes/class-script-blocker.php

    r3780080 r3782197  
    300300                 *
    301301                 * 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 a
     302                 * hay plantillas (páginas de “próximamente”, maquetadores) que no llaman a
    303303                 * wp_footer() y el aviso nunca aparecía.
    304304                 *
  • cumpleconsent/tags/1.0.20/includes/class-settings.php

    r3780080 r3782197  
    151151         *
    152152         * 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 solo
    154          * lo que cambia, así que allí la ausencia significa «como estaba». Sin esta
     153         * 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
    155155         * distinción, una escritura parcial por API apagaba en silencio todos los
    156156         * interruptores que no venían en la petición.
  • cumpleconsent/tags/1.0.20/includes/class-transfers.php

    r3780080 r3782197  
    6060                        array( 'provider' => 'Mailchimp / Intuit', 'country' => 'Estados Unidos', 'basis' => 'safeguards', 'note' => 'Newsletter.' ),
    6161                        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”).' ),
    6363                );
    6464        }
  • cumpleconsent/tags/1.0.20/readme.txt

    r3780080 r3782197  
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 1.0.19
     7Stable tag: 1.0.20
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    9797
    9898== 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.
    99103
    100104= 1.0.19 =
  • cumpleconsent/tags/1.0.20/uninstall.php

    r3780080 r3782197  
    66 * cumplimiento y borrarlo al desinstalar puede dejar al responsable sin
    77 * 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”).
    99 *
    1010 * El borrado elimina: las tablas del plugin, la configuración y la sal secreta.
  • cumpleconsent/trunk/assets/css/banner.css

    r3780080 r3782197  
    5555}
    5656
    57 /* Gancho para temas: «el visitante todavía no ha decidido».
     57/* Gancho para temas: “el visitante todavía no ha decidido”.
    5858   No se aplica ningún estilo por defecto a propósito (el aviso no debe mover
    5959   el diseño del sitio); el tema puede usarlo, por ejemplo, para reservar
    … …  
    312312/* ── Botones ──────────────────────────────────────────────────────────────────
    313313   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). */
    315315
    316316#ccn-root .ccn-btn,
  • cumpleconsent/trunk/cumpleconsent.php

    r3780080 r3782197  
    44 * Plugin URI:        https://menteglobal.com/cumpleconsent
    55 * 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.19
     6 * Version:           1.0.20
    77 * Requires at least: 6.2
    88 * Requires PHP:      7.4
    … …  
    3535
    3636// ── Constantes ────────────────────────────────────────────────────────────────
    37 define( 'CUMPLECONSENT_VERSION', '1.0.19' );
     37define( 'CUMPLECONSENT_VERSION', '1.0.20' );
    3838define( 'CUMPLECONSENT_FILE', __FILE__ );
    3939define( 'CUMPLECONSENT_DIR', plugin_dir_path( __FILE__ ) );
  • cumpleconsent/trunk/includes/class-admin.php

    r3780080 r3782197  
    6666                        $out[] = array(
    6767                                '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' ),
    6969                        );
    7070                }
    … …  
    597597                $this->select_field(
    598598                        'reject_style',
    599                         __( 'Peso visual de «Rechazar»', 'cumpleconsent' ),
     599                        __( 'Peso visual de “Rechazar”', 'cumpleconsent' ),
    600600                        array(
    601                                 'equal'     => __( 'Igual que «Aceptar» (recomendado)', 'cumpleconsent' ),
     601                                'equal'     => __( 'Igual que “Aceptar” (recomendado)', 'cumpleconsent' ),
    602602                                'secondary' => __( 'Secundario (no recomendado: patrón oscuro)', 'cumpleconsent' ),
    603603                        ),
    … …  
    615615
    616616        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>';
    618618                foreach ( Purposes::base() as $key => $purpose ) {
    619619                        if ( ! empty( $purpose['required'] ) ) {
    … …  
    871871                                '' !== $destino
    872872                                        /* 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 )
    874874                                        : __( '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' )
    875875                        );
  • cumpleconsent/trunk/includes/class-banner.php

    r3780080 r3782197  
    44 *
    55 * 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 que
    7  *     «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).
    88 *   - Nada de casillas premarcadas ni de "seguir navegando = acepto": la ley
    99 *     exige un acto afirmativo inequívoco.
    … …  
    5252                add_action( 'wp_ajax_nopriv_' . CUMPLECONSENT_AJAX_ACTION, array( $this, 'ajax_save' ) );
    5353
    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),
    5555                // el aviso se mete en el HTML servido: sin esto, el visitante no ve nada y
    5656                // parece que el plugin no funciona.
    … …  
    445445
    446446                $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 hermano
     447                // Solo “same-origin”. “same-site” incluiría a un subdominio hermano
    448448                // (otro.menteglobal.com), que no es el mismo sitio y no puede decidir el
    449449                // consentimiento en nombre del visitante.
  • cumpleconsent/trunk/includes/class-diagnostics.php

    r3780080 r3782197  
    255255                        $add(
    256256                                'atencion',
    257                                 __( '«Rechazar» está visualmente subordinado a «Aceptar»', 'cumpleconsent' ),
     257                                __( '“Rechazar” está visualmente subordinado a “Aceptar”', 'cumpleconsent' ),
    258258                                __( 'El consentimiento debe ser libre. Un rechazo escondido o de menor peso es un patrón oscuro y debilita la prueba.', 'cumpleconsent' ),
    259259                                'art. 12',
    260                                 __( 'Deja «rechazar» con el mismo peso visual.', 'cumpleconsent' )
     260                                __( 'Deja “rechazar” con el mismo peso visual.', 'cumpleconsent' )
    261261                        );
    262262                }
    … …  
    264264                        $add(
    265265                                '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' ),
    267267                                __( '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' ),
    268268                                'art. 12 inciso 6',
  • cumpleconsent/trunk/includes/class-mail.php

    r3780080 r3782197  
    1414/**
    1515 * 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 motivo
     16 * —nunca “WordPress”—, acepte una dirección de respuesta y exponga el motivo
    1717 * cuando el servidor rechaza el envío.
    1818 */
  • cumpleconsent/trunk/includes/class-notice.php

    r3780080 r3782197  
    141141                        Policy::link_html( __( 'política de privacidad', 'cumpleconsent' ) )
    142142                );
    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' );
    144144
    145145                return implode( ' ', $parts );
  • cumpleconsent/trunk/includes/class-plugin.php

    r3780080 r3782197  
    7676                }
    7777
    78                 // Las versiones anteriores guardaban todo con el prefijo corto «ccn_», que no
     78                // Las versiones anteriores guardaban todo con el prefijo corto “ccn_”, que no
    7979                // cumple el mínimo de cuatro caracteres que pide el directorio: se traslada
    8080                // una sola vez, conservando los valores (sobre todo la sal del registro).
  • cumpleconsent/trunk/includes/class-policy.php

    r3780080 r3782197  
    145145         *
    146146         * 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.
    148148         *
    149149         * @return int
    … …  
    173173                }
    174174
    175                 // Por el título, como último recurso: «privacidad» en el nombre y que no sea
     175                // Por el título, como último recurso: “privacidad” en el nombre y que no sea
    176176                // la política de cookies, que es otro documento y cumple otra cosa.
    177177                foreach ( (array) get_posts( array( 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => 20 ) ) as $page ) {
    … …  
    194194         * ¿La página tiene una política dentro, o es un cartel vacío?
    195195         *
    196          * Sin esta comprobación, un sitio con la página «Privacidad» en construcción
     196         * Sin esta comprobación, un sitio con la página “Privacidad” en construcción
    197197         * quedaba enlazado a un texto inexistente y el verificador informaba 0 de 12.
    198198         *
    … …  
    367367                }
    368368                $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>';
    370370
    371371                // 4. Destinatarios (14 ter d) y 15 bis).
    … …  
    434434                // 10. Retiro del consentimiento (14 ter k)).
    435435                $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>';
    437437
    438438                // 11. Reclamo ante la Agencia (14 ter g)).
  • cumpleconsent/trunk/includes/class-provision.php

    r3780080 r3782197  
    130130                }
    131131                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' );
    133133                }
    134134                if ( Settings::get( 'cookie_wall', false ) ) {
  • cumpleconsent/trunk/includes/class-purposes.php

    r3780080 r3782197  
    44 *
    55 * 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 en
    7  * cuanto a su finalidad o finalidades», así que el visitante decide finalidad
     6 * "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
    88 * por finalidad y esa elección es la que queda registrada como prueba.
    99 *
  • cumpleconsent/trunk/includes/class-rat.php

    r3780080 r3782197  
    88 *   a) individualización del responsable y su representante legal;
    99 *   d) caracterización de los datos y de las operaciones de tratamiento —el
    10  *      reglamento dice expresamente que esta caracterización «podrá realizarse
    11  *      a través de un registro de actividades de tratamiento»— con once
     10 *      reglamento dice expresamente que esta caracterización “podrá realizarse
     11 *      a través de un registro de actividades de tratamiento”— con once
    1212 *      contenidos mínimos (i a xi);
    1313 *   e) identificación de las actividades de riesgo y una matriz de riesgos
    … …  
    384384                $h[] = '<h3>' . esc_html__( 'Protocolo 1 · Aviso y captación del consentimiento', 'cumpleconsent' ) . '</h3>';
    385385                $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>';
    387387                $h[] = '<li>' . sprintf(
    388388                        /* translators: %s: versión */
  • cumpleconsent/trunk/includes/class-rights.php

    r3780080 r3782197  
    168168                        '',
    169169                        /* 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 ),
    171171                        '',
    172172                        /* translators: %s: correo del canal de derechos. */
    … …  
    464464        }
    465465
    466         /** Acuse de recibo al titular (art. 11: «deberá acusar recibo»). */
     466        /** Acuse de recibo al titular (art. 11: “deberá acusar recibo”). */
    467467        private function send_ack( int $id ): void {
    468468                $row = $this->get( $id );
  • cumpleconsent/trunk/includes/class-script-blocker.php

    r3780080 r3782197  
    300300                 *
    301301                 * 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 a
     302                 * hay plantillas (páginas de “próximamente”, maquetadores) que no llaman a
    303303                 * wp_footer() y el aviso nunca aparecía.
    304304                 *
  • cumpleconsent/trunk/includes/class-settings.php

    r3780080 r3782197  
    151151         *
    152152         * 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 solo
    154          * lo que cambia, así que allí la ausencia significa «como estaba». Sin esta
     153         * 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
    155155         * distinción, una escritura parcial por API apagaba en silencio todos los
    156156         * interruptores que no venían en la petición.
  • cumpleconsent/trunk/includes/class-transfers.php

    r3780080 r3782197  
    6060                        array( 'provider' => 'Mailchimp / Intuit', 'country' => 'Estados Unidos', 'basis' => 'safeguards', 'note' => 'Newsletter.' ),
    6161                        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”).' ),
    6363                );
    6464        }
  • cumpleconsent/trunk/readme.txt

    r3780080 r3782197  
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 1.0.19
     7Stable tag: 1.0.20
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    9797
    9898== 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.
    99103
    100104= 1.0.19 =
  • cumpleconsent/trunk/uninstall.php

    r3780080 r3782197  
    66 * cumplimiento y borrarlo al desinstalar puede dejar al responsable sin
    77 * 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”).
    99 *
    1010 * El borrado elimina: las tablas del plugin, la configuración y la sal secreta.
Note: See TracChangeset for help on using the changeset viewer.