
# Hooky

Rudel spouští akce a filtry WordPress při událostech životního cyklu sandboxu. Níže uvedený katalog odpovídá výstupu `Rudel::hooks()`: 28 akcí a 5 filtrů.

## Příklad

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

Většina akcí `before` a `failed` přijímá pole `$context`. U háčků životního cyklu sandboxu obsahuje `environment` (nebo při vytvoření hodnoty `name`, `options` a `environments_dir`); akce `failed` navíc přijímají zachycenou `Throwable` jako `$error`.

## Akce životního cyklu sandboxu

| Akce | Argumenty |
|--------|-----------|
| `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` |

Tři akce `replace_state` patří k `EnvironmentManager::replace_environment_state()`, které nevolá žádný příkaz Rudel.

## Akce snímků

| Akce | Argumenty |
|--------|-----------|
| `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` obsahuje `environment`, `kind` (`snapshot`), `name` a `path`. Každá z nich se spouští také pod aliasem `snapshot`, například `rudel_after_snapshot_create`; při selhání se spustí `rudel_failed_recovery_point_{create|restore|delete}` a `rudel_failed_snapshot_{create|restore|delete}` s hodnotami `$context` a chybou. Tyto aliasy v katalogu nejsou.

## Akce úklidu

| Akce | Argumenty |
|--------|-----------|
| `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` obsahuje `removed`, `skipped`, `errors` a `reasons`.

## Akce odesílání Git

| Akce | Argumenty |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Tyto události se spouštějí pro `Rudel::push()`. `$context` obsahuje `environment`, `remote`, `message` a `subdir`. Příkaz `wp rudel push` provede přímé odeslání a tyto události nespouští.

## Akce automatizace

| Akce | Argumenty |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` je celé pole `rudel_config`. Viz [Automation](https://rudel.inline0.dev/cs/docs/features/automation).

## Filtry

| Filtr | Argumenty |
|--------|-----------|
| `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` může změnit možnosti libovolného volání create ještě předtím, než na ně Rudel začne působit. Filtr `rudel_environment_clone_source` upravuje metadata klonu uložená v sandboxu vytvořeném z hostitele. `rudel_environment_db_dropin_contents` se vztahuje pouze na drop-in `db.php`, který používají prostředí s podsítem multisite; overlay sandboxy, které vytvářejí pouze současné verze, jej nikdy negenerují.

Filtry slouží k úpravě zásad, nikoli k nahrazení modelu úložiště Rudel. Identita běhového prostředí, prefixy tabulek a metadata worktree zůstávají stavem Rudel uloženým v databázi.
