
# Hooky

Rudel spúšťa akcie a filtre WordPress pri udalostiach životného cyklu sandboxu. Katalóg nižšie zodpovedá výstupu `Rudel::hooks()`: 28 akcií a 5 filtrov.

## Prí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äčšina akcií `before` a `failed` prijíma pole `$context`. Pri hookoch životného cyklu sandboxu obsahuje `environment` (alebo pri vytvorení `name`, `options` a `environments_dir`); akcie `failed` prijímajú aj zachytenú `Throwable` ako `$error`.

## Akcie životného cyklu sandboxu

| Akcia | 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` |

Tri akcie `replace_state` patria k `EnvironmentManager::replace_environment_state()`, ktoré nevolá žiadny príkaz Rudel.

## Akcie snímok

| Akcia | 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 sa spúšťa aj pod aliasom `snapshot`, napríklad `rudel_after_snapshot_create`, a pri zlyhaniach sa spúšťajú `rudel_failed_recovery_point_{create|restore|delete}` a `rudel_failed_snapshot_{create|restore|delete}` s `$context` a chybou. Tieto aliasy nie sú v katalógu.

## Akcie čistenia

| Akcia | 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`.

## Akcie odosielania zmien Git

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

Tieto hooky sa spúšťajú pre `Rudel::push()`. `$context` obsahuje `environment`, `remote`, `message` a `subdir`. Príkaz `wp rudel push` odosiela zmeny priamo a tieto hooky nespúšťa.

## Automatizačné akcie

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

`$config` je úplné pole `rudel_config`. Pozrite si časť [Automatizácia](https://rudel.inline0.dev/sk/docs/features/automation).

## Filtre

| Filter | 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 zmeniť možnosti každého volania create predtým, než s nimi Rudel začne pracovať. `rudel_environment_clone_source` filtruje metadáta klonu uložené v sandboxe vytvorenom z hostiteľa. `rudel_environment_db_dropin_contents` sa vzťahuje len na drop-in `db.php`, ktorý používajú prostredia podstránok Multisite; overlay sandboxy, ktoré vytvárajú iba aktuálne verzie, ho nikdy nevygenerujú.

Filtre slúžia na úpravu pravidiel, nie na nahradenie modelu ukladania Rudel. Identita runtime, prefixy tabuliek a metadáta pracovných stromov zostávajú stavom Rudel uloženým v DB.
