
# Hooks

Rudel udløser WordPress-handlinger og filtre omkring sandkassens livscyklushændelser. Kataloget nedenfor viser, hvad `Rudel::hooks()` returnerer: 28 handlinger og 5 filtre.

## Eksempel

```php
add_action(
    'rudel_after_environment_create',
    function ( \Rudel\Environment $environment, array $context ): void {
        error_log( 'Created Rudel environment ' . $environment->id );
    },
    10,
    2
);
```

De fleste `before`- og `failed`-handlinger modtager et `$context`-array. For hooks til sandkassens livscyklus indeholder det `environment` (eller `name`, `options` og `environments_dir` ved oprettelse); `failed`-handlinger modtager også den opfangede `Throwable` som `$error`.

## Handlinger for sandkassens livscyklus

| Handling | Argumenter |
|--------|-----------|
| `rudel_before_environment_create` | `$context` |
| `rudel_after_environment_create` | `$environment`, `$context` |
| `rudel_environment_create_failed` | `$context`, `$error` |
| `rudel_before_environment_update` | `$context` |
| `rudel_after_environment_update` | `$environment`, `$context` |
| `rudel_environment_update_failed` | `$context`, `$error` |
| `rudel_before_environment_destroy` | `$context` |
| `rudel_after_environment_destroy` | `$context` |
| `rudel_environment_destroy_failed` | `$context`, `$error` |
| `rudel_before_environment_replace_state` | `$context` |
| `rudel_after_environment_replace_state` | `$result`, `$context` |
| `rudel_environment_replace_state_failed` | `$context`, `$error` |

De tre `replace_state`-handlinger hører til `EnvironmentManager::replace_environment_state()`, som ingen Rudel-kommando kalder.

## Snapshothandlinger

| Handling | Argumenter |
|--------|-----------|
| `rudel_before_recovery_point_create` | `$context` |
| `rudel_after_recovery_point_create` | `$context`, `$meta` |
| `rudel_before_recovery_point_restore` | `$context` |
| `rudel_after_recovery_point_restore` | `$context` |
| `rudel_before_recovery_point_delete` | `$context` |
| `rudel_after_recovery_point_delete` | `$context` |

`$context` indeholder `environment`, `kind` (`snapshot`), `name` og `path`. Hver af disse udløses også under et `snapshot`-alias, f.eks. `rudel_after_snapshot_create`, og ved fejl udløses `rudel_failed_recovery_point_{create|restore|delete}` og `rudel_failed_snapshot_{create|restore|delete}` med `$context` og fejlen. Disse aliaser er ikke med i kataloget.

## Oprydningshandlinger

| Handling | Argumenter |
|--------|-----------|
| `rudel_before_environment_cleanup` | `$options` |
| `rudel_after_environment_cleanup` | `$result`, `$options` |
| `rudel_before_environment_cleanup_merged` | `$options` |
| `rudel_after_environment_cleanup_merged` | `$result`, `$options` |

`$result` indeholder `removed`, `skipped`, `errors` og `reasons`.

## Git-pushhandlinger

| Handling | Argumenter |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Disse udløses for `Rudel::push()`. `$context` indeholder `environment`, `remote`, `message` og `subdir`. Kommandoen `wp rudel push` skubber direkte og udløser dem ikke.

## Automatiseringshandlinger

| Handling | Argumenter |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` er hele `rudel_config`-arrayet. Se [Automatisering](https://rudel.inline0.dev/da/docs/features/automation).

## Filtre

| Filter | Argumenter |
|--------|-----------|
| `rudel_environment_create_options` | `$options`, `$name`, `$manager` |
| `rudel_environment_clone_source` | `$clone_source`, `$host_url`, `$db_cloned`, `$themes_cloned`, `$plugins_cloned`, `$uploads_cloned`, `$extra` |
| `rudel_environment_cleanup_options` | `$options`, `$repository` |
| `rudel_environment_cleanup_merged_options` | `$options`, `$repository` |
| `rudel_environment_db_dropin_contents` | `$contents`, `$context` |

`rudel_environment_create_options` kan ændre indstillingerne for ethvert create-kald, før Rudel behandler dem. `rudel_environment_clone_source` filtrerer klonens metadata, der er gemt på en sandbox oprettet fra værten. `rudel_environment_db_dropin_contents` gælder kun for `db.php`-drop-in'et, som multisite-undermiljøer bruger; overlay-sandboxes, den eneste type, som aktuelle versioner opretter, genererer aldrig et sådant.

Filtre er beregnet til justering af politik, ikke til at erstatte Rudels lagringsmodel. Runtime-identitet, tabelpræfikser og worktree-metadata forbliver DB-understøttet tilstand i Rudel.
