
# Хуки

Rudel запускає дії та фільтри WordPress під час подій життєвого циклу пісочниці. Нижче наведено каталог, який повертає `Rudel::hooks()`: 28 дій і 5 фільтрів.

## Приклад

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

Більшість дій `before` і `failed` отримують масив `$context`. У хуках життєвого циклу пісочниці він містить `environment` (або `name`, `options` і `environments_dir` під час створення); дії `failed` також отримують перехоплену `Throwable` як `$error`.

## Дії життєвого циклу пісочниці

| Дія | Аргументи |
|--------|-----------|
| `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` |

Три дії `replace_state` належать до `EnvironmentManager::replace_environment_state()`, яке не викликає жодна команда Rudel.

## Дії зі знімками

| Дія | Аргументи |
|--------|-----------|
| `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` містить `environment`, `kind` (`snapshot`), `name` і `path`. Кожна з цих дій також запускається під псевдонімом `snapshot`, наприклад `rudel_after_snapshot_create`; у разі помилки запускаються `rudel_failed_recovery_point_{create|restore|delete}` і `rudel_failed_snapshot_{create|restore|delete}` з `$context` та текстом помилки. Цих псевдонімів немає в каталозі.

## Дії очищення

| Дія | Аргументи |
|--------|-----------|
| `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` містить `removed`, `skipped`, `errors` і `reasons`.

## Дії надсилання Git

| Дія | Аргументи |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Ці дії запускаються для `Rudel::push()`. `$context` містить `environment`, `remote`, `message` і `subdir`. Команда `wp rudel push` надсилає зміни безпосередньо й не запускає ці дії.

## Дії автоматизації

| Дія | Аргументи |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` — це повний масив `rudel_config`. Див. [Автоматизація](https://rudel.inline0.dev/uk/docs/features/automation).

## Фільтри

| Фільтр | Аргументи |
|--------|-----------|
| `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` може змінювати параметри будь-якого виклику create до того, як Rudel застосує їх. `rudel_environment_clone_source` фільтрує метадані клонування, збережені в пісочниці, створеній із хоста. `rudel_environment_db_dropin_contents` застосовується лише до компонента `db.php`, який використовують середовища з підсайтами у multisite; пісочниці з оверлеями, єдиний тип, який створюють поточні версії, такого компонента не генерують.

Фільтри призначені для коригування правил, а не для заміни моделі зберігання Rudel. Ідентичність середовища виконання, префікси таблиць і метадані робочих дерев залишаються станом Rudel, що зберігається в базі даних.
