# Testreszabás

> Jogi szövegek módosítása szűrővel, „Hozzájárulás kezelése” gomb saját linkkel, hozzáférés adása más szerepköröknek.

## Jogi dokumentumok szövegének módosítása

A dokumentumokat a varázsló generálja, és shortcode-dal kerülnek az oldalra. Ez teszi lehetővé a jogszabályi frissítéseket és a fordításokat. Ha a szöveget közvetlenül átírod az oldalon, ezek a frissítések megszűnnek, ezért a módosításokat szűrővel (hook) végezd, a téma `functions.php` fájljában. Még jobb egy must-use (MU) bővítmény, vagy gyermektéma használata.

Néhány szabály:

- A szűrőnek tudnia kell, melyik szöveget cserélje, ezért a régi és az új szövegnek tartalmaznia kell egy közös azonosítót (például a „Red apples are” kezdet a „Red apples are sold out” és a „Red apples are on sale” cseréhez).
- Minél egyedibb a keresett szöveg, annál jobb.
- A `functions.php` módosítása előtt készíts róla másolatot.
- A `<?php` nyitó sort a `functions.php`-ba illesztéskor hagyd el, MU-bővítményben meg kell tartani.

### Egy szöveg cseréje

```php
function cmplz_edit_document_html( $html, $type, $post_id ) {
    $old_string = "Ez a régi szöveg";
    $new_string = "Ez az új szöveg.";
    $html = str_replace( $old_string, $new_string, $html );
    return $html;
}
add_filter( 'cmplz_document_html', 'cmplz_edit_document_html', 10, 3 );
```

### Több szöveg cseréje

```php
function cmplz_edit_document_html( $html ) {
    $old_strings = array( "Cookies", "website" );
    $new_strings = array( "Cookies-csere", "website-csere" );
    $html = str_replace( $old_strings, $new_strings, $html );
    return $html;
}
add_filter( 'cmplz_document_html', 'cmplz_edit_document_html', 10, 3 );
```

Nyelvenként eltérő cseréhez ugyanezt a szűrőt használhatod: a függvény a harmadik paraméterben kapott nyelvi kód (például `en_US`) vagy a webhely nyelve alapján választ egy tömbpárt. Nyelvenként a régi és az új tömbnek ugyanannyi elemből kell állnia.

### Szöveg cseréje a sütilistában

A `cmplz-cookies` shortcode a sütilistát a jogi dokumentumoktól külön állítja elő, ezért a `cmplz_document_html` szűrő rá nem vonatkozik. A lista szövegének cseréhez a WordPress saját `do_shortcode_tag` szűrőjét használd:

```php
add_filter( 'do_shortcode_tag', function ( $output, $tag ) {
    if ( 'cmplz-cookies' === $tag ) {
        $output = str_replace( 'Ez a régi szöveg', 'Ez az új szöveg', $output );
    }
    return $output;
}, 10, 2 );
```

- Ez a szűrő csak a `cmplz-cookies` shortcode kimenetét érinti, a jogi dokumentumokat nem.
- Itt is érvényes, hogy a keresett szövegnek elég egyedinek kell lennie, hogy máshol ne cserélődjön ki.

## „Hozzájárulás kezelése” gomb

A Complianz shortcode-jai közül egyik sem jeleníti meg a sávot a hozzájárulás visszavonása nélkül. Ezt egy kis szkripttel oldhatod meg.

1. Add hozzá a következő kódot a `functions.php`-hoz vagy egy MU-bővítményhez (a `<?php` nyitó sort csak MU-bővítményben tartsd meg, a `functions.php`-ból hagyd el):

```php
function cmplz_show_banner_on_click() {
    ?>
    <style>
        .cmplz-show-banner { cursor: pointer; }
    </style>
    <script>
        document.addEventListener('click', function (e) {
            if (e.target.closest('.cmplz-show-banner')) {
                document.querySelectorAll('.cmplz-manage-consent').forEach(function (obj) {
                    obj.click();
                });
            }
        });
    </script>
    <?php
}
add_action( 'wp_footer', 'cmplz_show_banner_on_click' );
```

2. Tegyél az oldalra egy linket vagy gombot a `cmplz-show-banner` osztállyal:

```html
<p>Sütibeállítások módosítása: <a class="cmplz-show-banner">kattints ide</a>.</p>
```

A `cmplz-show-banner` osztályt gombra is teheted, és saját CSS-sel stílust adhatsz neki (például lekerekítést, árnyékot, hátteret a `.cmplz-show-banner` szelektorral). A hivatkozás a sávot a hozzájárulási döntés módosítása nélkül nyitja meg.

A kód Header Footer Code Manager jellegű bővítményben is működik, de ott csak a `<script>` és a `<style>` címkék közötti részt használd, a címkékkel együtt.

## Hozzáférés más szerepköröknek

A Complianz felületét a `manage_privacy` képesség vezérli. Aki nem rendelkezik vele, nem kezelheti a bővítményt. A képesség az adatbázisban tárolódik, ezért a kód eltávolítása után is megmarad.

Egyetlen felhasználónak (ajánlott):

```php
add_action( 'init', function () {
    $user_id = 123; // a felhasználó azonosítója
    $user = get_user_by( 'id', $user_id );
    if ( ! $user ) { return; }
    if ( ! $user->has_cap( 'manage_privacy' ) ) {
        $user->add_cap( 'manage_privacy' );
    }
} );
```

Egy teljes szerepkörnek (például a szerkesztőknek):

```php
add_action( 'init', function () {
    $role = get_role( 'editor' );
    if ( ! $role ) { return; }
    if ( ! $role->has_cap( 'manage_privacy' ) ) {
        $role->add_cap( 'manage_privacy' );
    }
} );
```

Visszavonáshoz ugyanezt a kódot `remove_cap( 'manage_privacy' )` hívással futtasd le (felhasználóra vagy szerepkörre), majd jelentkezz ki és be újra, vagy ürítsd az objektum-gyorsítótárat.
