
# Куки

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`. Вижте [Automation](https://rudel.inline0.dev/bg/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` може да променя опциите на всеки извикващ код преди Rudel да ги обработи. `rudel_environment_clone_source` филтрира метаданните на клонирането, съхранени в изолирана среда, създадена от хоста. `rudel_environment_db_dropin_contents` се отнася само за добавката `db.php`, която използват среди с под-сайтове в мултисайт; наслагващите изолирани среди, единственият вид, създаван от текущите версии, никога не генерират такава добавка.

Филтрите са предназначени за корекции на правилата, а не за замяна на модела за съхранение на Rudel. Идентичността по време на изпълнение, префиксите на таблиците и метаданните на работните дървета остават състояние на Rudel, съхранявано в базата данни.
