> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# AC- (AgreementCookies)

> The tags for consent to data processing: query services, display groupings and run tracking codes only when consent has been given.

Privacy-relevant services such as tracking codes, tracking pixels or embedded maps may only run once the shop visitor has agreed to them. The tags with the prefix `AC-` represent this consent in the template: you use them to build the consent banner, and you use them to enclose the services themselves so that a service never even makes it into the page without consent.

## The underlying model

Three levels interlock, and the tags follow exactly this structure:

* **The individual service.** Each privacy-relevant service is created as its own entry in the `<AgreementCookies>` section of the `shop.config` and receives an ID. The corresponding tags start with `AC-Entry`.
* **The grouping.** Services can be combined into groups, for example "Statistics" or "Convenience", so that the visitor does not have to decide on each individual service. The corresponding tags start with `AC-ConsentGroup`.
* **Everything at once.** For the "Accept all" switch there are the tags with `AC-ConsentAll`.

In addition, there are some tags that query the state of consent as a whole, for example whether the visitor has made a decision at all.

Guide: Consent to data processing · Reference: AgreementCookies section

## Prerequisite: enabling the function

All `AC-` tags depend on the `Allow` parameter in the `<AgreementCookies>` section of the `shop.config`.

| Value | Effect |
| - | - |
| `no` | Default. Consent is not requested. |
| `yes` | Consent is requested and evaluated. |
| `test` | Like `yes`, but only applies while the shop is running in test mode. |

> [!WARNING]
>
> With `Allow = no`, the shop assumes consent: all enclosures on the templates are active, all services are executed and all cookies are set. The same applies if the `<AgreementCookies>` section is not present in the `shop.config` at all. A missing configuration therefore does not disable the services, it enables them.

> [!NOTE]
>
> With `Allow = test`, you can check a new consent banner without it becoming visible to visitors. Outside test mode, the shop behaves as with `no`.

## A complete consent banner

The individual tags are described further below, but in the template they always appear together. The following example shows a banner with groupings that only appears while a decision is pending.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementNotMadeOrNeedsUpdate}

   <form action="..." id="ws_agreement_form">

      <p>Bitte wählen Sie, welche Dienste ausgeführt werden dürfen:</p>

      <label>
         <input type="checkbox" value=""
                onclick="ws_agreement_updatecheckboxes();"
                class="~AC-ConsentAll_CheckboxClass~"
                ~AC-ConsentAll_CheckboxIsChecked~>
         Alles akzeptieren
      </label>

      ~DC-DynamicLoop1_set($AC-ConsentGroupList$)~
      {@DC-DynamicLoop1}
         {AC-ConsentGroup($DC-DynamicLoop1_data$)}

            <fieldset>
               <legend>
                  <input type="checkbox" value=""
                         onclick="ws_agreement_updatecheckboxes();"
                         class="~AC-ConsentGroup_CheckboxClass~"
                         ~AC-ConsentGroup_CheckboxIsChecked~>
                  ~AC-ConsentGroup_Name~
               </legend>

               <p>~AC-ConsentGroup_Descr~</p>

               {@AC-Entry($DC-DynamicLoop1_data$)}
                  <label>
                     <input type="checkbox" value=""
                            class="~AC-Entry_CheckboxClass~"
                            ~AC-Entry_CheckboxIsChecked~>
                     ~AC-Entry_Name~
                  </label>
                  <span>~AC-Entry_Descr~</span>
               {/@AC-Entry($DC-DynamicLoop1_data$)}
            </fieldset>

         {/AC-ConsentGroup($DC-DynamicLoop1_data$)}
      {/@DC-DynamicLoop1}

      <!-- Schaltfläche zum Speichern der Auswahl -->

   </form>

{/AC-AgreementNotMadeOrNeedsUpdate}
```

The detour via `DC-DynamicLoop1` is necessary because `AC-ConsentGroupList` only returns a comma-separated list of group IDs and is not a loop tag. The dynamic loop splits this list, and `AC-ConsentGroup()` takes one ID per iteration.

You then enclose the service itself at the point where it is embedded:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementMadeForID(123)}
   <!-- Tracking-Code des Dienstes mit der ID 123 -->
{/AC-AgreementMadeForID(123)}
```

> [!WARNING]
>
> This enclosure is the actual purpose of the whole function. A banner that saves the selection but leaves the services unenclosed still loads the service.

## OptIn and OptOut: when a checkmark means consent

Each service is assigned a type in the `shop.config`. The type determines how a set checkmark is to be read, and for one of the three types this is exactly the opposite of what you would expect.

| Value | Type | A set checkmark means |
| - | - | - |
| 0 | OptIn | Consent |
| 1 | OptOutChecked | **Objection** |
| 2 | OptOutUnchecked | Consent |

With `OptOutChecked`, the checkbox is therefore checked as long as the visitor has **not** consented, and the checkmark disappears as soon as they consent.

> [!WARNING]
>
> Label the checkbox to match the type. If an `OptOutChecked` service shows "I agree" next to a pre-set checkmark, the interface means the opposite of what the shop saves.

> [!NOTE]
>
> If a default for the checkbox is configured for a service and there is no cookie for it yet, the default wins. `AC-Entry_CheckboxIsChecked` then shows the default state, regardless of whether consent has been given. Once the visitor has made a decision, only their decision counts.

## State of consent

These tags refer to consent as a whole and are permitted in all templates.

| Tag | Single tag | Range tag | Negative range tag | Loop tag |
| - | - | - | - | - |
| `AC-AgreementMade` | – | yes | yes | – |
| `AC-AgreementMade_CookieName` | yes | – | – | – |
| `AC-AgreementMadeForID()` | – | yes | yes | – |
| `AC-AgreementNeedsUpdate` | – | yes | yes | – |
| `AC-AgreementNotMadeOrNeedsUpdate` | – | yes | yes | – |

### AC-AgreementMade

The range is displayed if the shop visitor has made a decision on how their data is handled, i.e. has seen the banner and pressed the corresponding button.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementMade}
   Der Shopbesucher hat eine Willenserklärung abgegeben.
{/AC-AgreementMade}

{!AC-AgreementMade}
   Der Shopbesucher hat noch keine Willenserklärung abgegeben.
{/!AC-AgreementMade}
```

### AC-AgreementMade\_CookieName

Outputs the name of the cookie that records that the visitor has made a declaration of intent.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Name des Cookies: ~AC-AgreementMade_CookieName~
```

> [!NOTE]
>
> The tag is mainly needed for the cookie overview in the privacy policy. There, the name remains correct even if it is changed in the configuration later.

### AC-AgreementMadeForID()

The range is displayed if the visitor has consented to data processing by the service with the given ID. The ID comes from the configuration of the respective service.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementMadeForID(123)}
   Einwilligung für den Dienst mit der ID 123 liegt vor.
{/AC-AgreementMadeForID(123)}

{!AC-AgreementMadeForID(123)}
   Einwilligung für den Dienst mit der ID 123 liegt nicht vor.
{/!AC-AgreementMadeForID(123)}
```

Use this tag to enclose tracking codes, tracking pixels, JavaScripts and containers. The service is then only executed in the positive range.

> [!NOTE]
>
> Use the negative range for replacement content, for example a placeholder instead of an embedded map with a note on how to give consent later.

### AC-AgreementNeedsUpdate

The range is displayed if the configuration of the privacy-relevant services has been changed in such a way that updated consent is required.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementNeedsUpdate}
   Aktualisierung der Auswahl erforderlich.
{/AC-AgreementNeedsUpdate}
```

### AC-AgreementNotMadeOrNeedsUpdate

The range is displayed if consent has not yet been given for all services or if an update is required. This is the usual enclosure around the entire banner.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-AgreementNotMadeOrNeedsUpdate}
   <!-- Das Einwilligungsbanner -->
{/AC-AgreementNotMadeOrNeedsUpdate}
```

> [!NOTE]
>
> This tag combines two cases that you would otherwise have to query separately: the initial decision and a subsequent change to the services. For the banner, this is exactly the right condition, because the visitor must be asked in both cases.

## The individual services

`AC-Entry` is a single tag, range tag and loop tag at the same time. As a single tag it outputs the number of configured services, as a range tag it applies if at least one service is configured, and as a loop it iterates over all services. All other `AC-Entry_` tags refer to the service of the current loop iteration.

| Tag | Single tag | Range tag | Negative range tag | Loop tag |
| - | - | - | - | - |
| `AC-Entry()` | yes | yes | yes | yes |
| `AC-Entry_AgreementMade` | – | yes | yes | – |
| `AC-Entry_CheckboxClass` | yes | – | – | – |
| `AC-Entry_CheckboxIsChecked` | yes | yes | yes | – |
| `AC-Entry_ConsentGroupID` | yes | yes | yes | – |
| `AC-Entry_CookieName` | yes | – | – | – |
| `AC-Entry_Descr` | yes | yes | yes | – |
| `AC-Entry_ID` | yes | – | – | – |
| `AC-Entry_Name` | yes | yes | yes | – |
| `AC-Entry_TrackingFrameworkList` | yes | yes | yes | – |
| `AC-Entry_Type` | yes | – | – | – |
| `AC-Entry_TypeIsOptIn` | – | yes | yes | – |
| `AC-Entry_TypeIsOptOut` | – | yes | yes | – |

They are permitted in all templates. However, the `AC-Entry_` tags require a service to be active, so they belong in the `{@AC-Entry}` loop.

### AC-Entry()

Optionally, the tag accepts a group ID as an argument. It then counts and iterates over only the services of that grouping.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-Entry}

   Es sind ~AC-Entry~ Dienste konfiguriert.

   {@AC-Entry}
      Dienst ~AC-Entry_Name~:
      <input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
      ~AC-Entry_Descr~
      Erlaubnis zur Verwendung: {AC-Entry_AgreementMade}ja{/AC-Entry_AgreementMade}{!AC-Entry_AgreementMade}nein{/!AC-Entry_AgreementMade}
      ID: ~AC-Entry_ID~
   {/@AC-Entry}

{/AC-Entry}

{!AC-Entry}
   Es wurde kein Dienst konfiguriert.
{/!AC-Entry}
```

With group ID:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}

   In dieser Gruppierung sind ~AC-Entry(123)~ Dienste konfiguriert.

   {@AC-Entry(123)}
      ~AC-Entry_Name~:
      <input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
      ~AC-Entry_Descr~
   {/@AC-Entry(123)}

{/AC-ConsentGroup(123)}
```

> [!WARNING]
>
> The argument belongs on the tag itself. Even within an `AC-ConsentGroup()` enclosure, `~AC-Entry~` outputs the number of **all** services, not those of the grouping. Only `~AC-Entry(123)~` counts the services of that one grouping.

> [!NOTE]
>
> If the specified group ID is unknown, the single tag outputs 0, the loop runs no iterations and the range remains hidden. A typo in the ID therefore does not show up as an error in the template, only as an empty list.

### AC-Entry\_AgreementMade

The range is displayed if the visitor has consented to the use of this service.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_AgreementMade}
      Einwilligung zur Nutzung des Dienstes liegt vor.
   {/AC-Entry_AgreementMade}

   {!AC-Entry_AgreementMade}
      Einwilligung zur Nutzung des Dienstes liegt nicht vor.
   {/!AC-Entry_AgreementMade}
{/@AC-Entry}
```

### AC-Entry\_CheckboxClass

Outputs the functional class names that must be assigned to the service's checkbox.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   ~AC-Entry_Name~:
   <input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
   ~AC-Entry_Descr~
{/@AC-Entry}
```

> [!WARNING]
>
> Without this class, the supplied JavaScript cannot find the checkbox. The checkmark can then be set, but it is neither saved nor kept in sync by the higher-level switches. Add your own styling classes in addition to it, not instead of it.

### AC-Entry\_CheckboxIsChecked

Outputs `checked` if the checkbox is to be checked. The tag is placed directly in the `input` element, without an attribute name.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<input type="checkbox" value="" class="~AC-Entry_CheckboxClass~" ~AC-Entry_CheckboxIsChecked~>
```

> [!NOTE]
>
> Whether a checkmark means consent or objection depends on the type of service. See the section on OptIn and OptOut above.

### AC-Entry\_ConsentGroupID

Outputs the ID of the grouping to which the service is assigned. As a range tag, you can use it to check whether the service belongs to a grouping at all.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_ConsentGroupID}
      Dieser Dienst gehört zur Gruppierung mit der ID ~AC-Entry_ConsentGroupID~.
   {/AC-Entry_ConsentGroupID}
{/@AC-Entry}
```

### AC-Entry\_CookieName

Outputs the name of the cookie in which consent or objection to this service is stored.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Für ~AC-Entry_Name~ mit der ID ~AC-Entry_ID~ wird die Entscheidung
   im Cookie ~AC-Entry_CookieName~ gespeichert.
{/@AC-Entry}
```

> [!NOTE]
>
> This lets you build the cookie table of the privacy policy from the configuration instead of maintaining it by hand. If a service is added, it automatically appears in the table.

### AC-Entry\_Descr

Outputs the description of the service. As a range tag, it only applies if a description is stored.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Name des Dienstes: ~AC-Entry_Name~
   ID: ~AC-Entry_ID~

   {AC-Entry_Descr}
      Beschreibung: ~AC-Entry_Descr~
   {/AC-Entry_Descr}

   {!AC-Entry_Descr}
      Keine Beschreibung hinterlegt.
   {/!AC-Entry_Descr}
{/@AC-Entry}
```

### AC-Entry\_ID

Outputs the ID of the service. It is the same ID that you pass to `AC-AgreementMadeForID()`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   ID: ~AC-Entry_ID~
{/@AC-Entry}
```

### AC-Entry\_Name

Outputs the name of the service.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Dienst ~AC-Entry_Name~
{/@AC-Entry}
```

### AC-Entry\_TrackingFrameworkList

Outputs the list of tracking frameworks through which consent to this service can be received in the WEBSALE app.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_TrackingFrameworkList}
      Frameworks: ~AC-Entry_TrackingFrameworkList~
   {/AC-Entry_TrackingFrameworkList}
{/@AC-Entry}
```

> [!NOTE]
>
> For a pure web shop, this tag is irrelevant. It is only needed if an app is also in use.

### AC-Entry\_Type

Outputs the type of the service as a number: 0 for OptIn, 1 for OptOutChecked, 2 for OptOutUnchecked.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   Type: ~AC-Entry_Type~
{/@AC-Entry}
```

> [!NOTE]
>
> For display in the banner, `AC-Entry_TypeIsOptIn` and `AC-Entry_TypeIsOptOut` are the better choice. You mainly need the number for troubleshooting.

### AC-Entry\_TypeIsOptIn

The range is displayed if the service is configured as OptIn.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_TypeIsOptIn}
      Dienst ist als OptIn konfiguriert.
   {/AC-Entry_TypeIsOptIn}
{/@AC-Entry}
```

### AC-Entry\_TypeIsOptOut

The range is displayed if the service is configured as OptOut, i.e. as OptOutChecked or as OptOutUnchecked.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{@AC-Entry}
   {AC-Entry_TypeIsOptOut}
      Dienst ist als OptOut konfiguriert.
   {/AC-Entry_TypeIsOptOut}
{/@AC-Entry}
```

> [!NOTE]
>
> The tag does not distinguish between the two OptOut variants. For a label that depends on the initial state of the checkbox, also evaluate `AC-Entry_Type`.

## The groupings

| Tag | Single tag | Range tag | Negative range tag | Loop tag |
| - | - | - | - | - |
| `AC-ConsentGroupList` | yes | – | – | – |
| `AC-ConsentGroup()` | – | yes | – | – |
| `AC-ConsentGroup_CheckboxClass` | yes | – | – | – |
| `AC-ConsentGroup_CheckboxIsChecked` | yes | yes | yes | – |
| `AC-ConsentGroup_Descr` | yes | yes | yes | – |
| `AC-ConsentGroup_FullAgreementMade` | – | yes | yes | – |
| `AC-ConsentGroup_ID` | yes | – | – | – |
| `AC-ConsentGroup_Name` | yes | yes | yes | – |

They are permitted in all templates. Except for `AC-ConsentGroupList`, they require a grouping to be currently enclosed.

### AC-ConsentGroupList

Outputs all group IDs as a comma-separated list, in the order of the configuration.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~DC-DynamicLoop1_set($AC-ConsentGroupList$)~
{@DC-DynamicLoop1}
   {AC-ConsentGroup($DC-DynamicLoop1_data$)}
      <!-- Darstellung der Gruppierung -->
   {/AC-ConsentGroup($DC-DynamicLoop1_data$)}
{/@DC-DynamicLoop1}
```

> [!NOTE]
>
> The tag itself is not a loop. You therefore always need a dynamic loop that splits the list and passes each ID individually to `AC-ConsentGroup()`.

### AC-ConsentGroup()

Encloses the grouping whose ID is passed as an argument. Within this enclosure, all other `AC-ConsentGroup_` tags are available.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   Name der Gruppierung: ~AC-ConsentGroup_Name~
   Beschreibung: ~AC-ConsentGroup_Descr~
{/AC-ConsentGroup(123)}
```

> [!WARNING]
>
> Two `AC-ConsentGroup()` enclosures must not overlap or be nested inside each other. The shop only ever evaluates one grouping at a time and reports such an interleaving as an error instead of silently displaying it incorrectly.

> [!NOTE]
>
> A negative range is not provided for this tag. If you want to check whether there are any groupings at all, evaluate `AC-ConsentGroupList`.

### AC-ConsentGroup\_CheckboxClass

Outputs the functional class names for the grouping's checkbox.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   <input type="checkbox" value=""
          onclick="ws_agreement_updatecheckboxes();"
          class="~AC-ConsentGroup_CheckboxClass~"
          ~AC-ConsentGroup_CheckboxIsChecked~>
{/AC-ConsentGroup(123)}
```

> [!NOTE]
>
> The call to `ws_agreement_updatecheckboxes()` is part of it. It keeps the checkmarks of the individual services and the "Accept all" switch in sync when the visitor toggles the grouping as a whole.

### AC-ConsentGroup\_CheckboxIsChecked

Outputs `checked` if the grouping's checkbox is to be checked, i.e. if consent has been given or is considered pre-set for all services in the grouping.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<input type="checkbox" value="" class="~AC-ConsentGroup_CheckboxClass~" ~AC-ConsentGroup_CheckboxIsChecked~>
```

> [!NOTE]
>
> This tag also takes into account the defaults of the individual checkboxes, whereas `AC-ConsentGroup_FullAgreementMade` does not. As long as the visitor has not yet decided, the group checkbox can therefore be checked even though no consent has been given yet.

### AC-ConsentGroup\_Descr

Outputs the description of the grouping.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   ~AC-ConsentGroup_Descr~
{/AC-ConsentGroup(123)}
```

### AC-ConsentGroup\_FullAgreementMade

The range is displayed if the visitor has consented to the use of all services in this grouping.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}

   {AC-ConsentGroup_FullAgreementMade}
      Einwilligung für alle Dienste dieser Gruppierung liegt vor.
   {/AC-ConsentGroup_FullAgreementMade}

   {!AC-ConsentGroup_FullAgreementMade}
      Einwilligung für alle Dienste dieser Gruppierung liegt nicht vor.
   {/!AC-ConsentGroup_FullAgreementMade}

{/AC-ConsentGroup(123)}
```

### AC-ConsentGroup\_ID

Outputs the ID of the grouping.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   ID der Gruppierung: ~AC-ConsentGroup_ID~
{/AC-ConsentGroup(123)}
```

### AC-ConsentGroup\_Name

Outputs the name of the grouping.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentGroup(123)}
   Name der Gruppierung: ~AC-ConsentGroup_Name~
{/AC-ConsentGroup(123)}
```

## All services together

These three tags belong to the "Accept all" switch. They do not require an enclosure and are permitted in all templates.

| Tag | Single tag | Range tag | Negative range tag | Loop tag |
| - | - | - | - | - |
| `AC-ConsentAll_CheckboxClass` | yes | – | – | – |
| `AC-ConsentAll_CheckboxIsChecked` | yes | yes | yes | – |
| `AC-ConsentAll_FullAgreementMade` | – | yes | yes | – |

### AC-ConsentAll\_CheckboxClass

Outputs the functional class names for the checkbox that toggles all groupings and thus all services.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Alles akzeptieren:
<input type="checkbox" value=""
       onclick="ws_agreement_updatecheckboxes();"
       class="~AC-ConsentAll_CheckboxClass~"
       ~AC-ConsentAll_CheckboxIsChecked~>
```

### AC-ConsentAll\_CheckboxIsChecked

Outputs `checked` if the checkbox is to be checked, i.e. if consent has been given or is considered pre-set for all services.

### AC-ConsentAll\_FullAgreementMade

The range is displayed if the visitor has consented to the use of all groupings and thus all services.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{AC-ConsentAll_FullAgreementMade}
   Einwilligung für alle Dienste liegt vor.
{/AC-ConsentAll_FullAgreementMade}

{!AC-ConsentAll_FullAgreementMade}
   Einwilligung für alle Dienste liegt nicht vor.
{/!AC-ConsentAll_FullAgreementMade}
```

> [!NOTE]
>
> This lets you, for example, show a "Change privacy settings" link only to those who have not already consented to everything.

## Related topics

* Guide: Consent to data processing
* Reference: AgreementCookies section
* Reference: DC-DynamicLoop1…9


## Related topics

- [Materials: consent to data processing](https://dokumentation.websale.de/en/v8s/materialien/materialien-einwilligung-zur-datenverarbeitung.md)
- [External services and interfaces](https://dokumentation.websale.de/en/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/externe-dienste-und-schnittstellen.md)
- [Consent to data processing (cookies)](https://dokumentation.websale.de/en/v8s/einstellungen/einwilligung-zur-datenverarbeitung-cookies.md)
- [Cookies used](https://dokumentation.websale.de/en/v8s/referenz/verwendete-cookies.md)
- [TAF- (Tell-A-Friend)](https://dokumentation.websale.de/en/v8s/referenz/tags/taf-tell-a-friend.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.