
# Hooks

Rudel déclenche les actions et filtres WordPress autour des événements du cycle de vie des sandboxes. Le catalogue ci-dessous correspond à ce que renvoie `Rudel::hooks()` : 28 actions et 5 filtres.

## Exemple

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

La plupart des actions `before` et `failed` reçoivent un tableau `$context`. Pour les hooks du cycle de vie d’une sandbox, il contient le `environment` (ou le `name`, le `options` et le `environments_dir` lors de la création) ; les actions `failed` reçoivent également l’`Throwable` interceptée sous la forme de `$error`.

## Actions du cycle de vie des sandboxes

| Action | Arguments |
|--------|-----------|
| `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` |

Les trois actions `replace_state` appartiennent à `EnvironmentManager::replace_environment_state()`, qu’aucune commande Rudel n’appelle.

## Actions de snapshot

| Action | Arguments |
|--------|-----------|
| `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` contient `environment`, `kind` (`snapshot`), `name` et `path`. Chacun déclenche également un alias `snapshot`, par exemple `rudel_after_snapshot_create` ; les échecs déclenchent `rudel_failed_recovery_point_{create|restore|delete}` et `rudel_failed_snapshot_{create|restore|delete}` avec `$context` et l’erreur. Ces alias ne figurent pas dans le catalogue.

## Actions de nettoyage

| Action | Arguments |
|--------|-----------|
| `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` contient `removed`, `skipped`, `errors` et `reasons`.

## Actions d’envoi Git

| Action | Arguments |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Ces actions se déclenchent pour `Rudel::push()`. `$context` contient `environment`, `remote`, `message` et `subdir`. La commande `wp rudel push` envoie directement les modifications et ne les déclenche pas.

## Actions d’automatisation

| Action | Arguments |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` est le tableau `rudel_config` complet. Consultez [Automatisation](https://rudel.inline0.dev/fr/docs/features/automation).

## Filtres

| Filtre | Arguments |
|--------|-----------|
| `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` peut modifier les options de tout appel de création avant que Rudel ne les traite. `rudel_environment_clone_source` filtre les métadonnées de clonage enregistrées dans une sandbox créée à partir de l’hôte. `rudel_environment_db_dropin_contents` s’applique uniquement au drop-in `db.php` utilisé par les environnements multisite avec sous-sites ; les sandboxes en overlay, seul type créé par les versions actuelles, n’en génèrent jamais.

Les filtres servent à ajuster les règles, pas à remplacer le modèle de stockage de Rudel. L’identité d’exécution, les préfixes de tables et les métadonnées des worktrees restent des données Rudel stockées en base de données.
