
# API

`Rudel\Rudel` este o fațadă statică. Fiecare metodă de pe această pagină este o metodă statică publică a acelei clase.

```php
use Rudel\Rudel;

if ( Rudel::is_sandbox() ) {
    error_log( 'Running in sandbox ' . Rudel::id() );
}
```

Metodele ciclului de viață care clonează sau șterg tabele (`create()`, `create_from_git()`, `destroy()`, `cleanup()`, `cleanup_merged()`) necesită o cerere WordPress activă cu `$wpdb`. Dacă sunt apelate după `Rudel::init()` în afara WordPress, aruncă o `RuntimeException`. Consultați [Utilizare autonomă](https://rudel.inline0.dev/ro/docs/features/standalone-use).

## Contextul de execuție

Aceste metode descriu cererea curentă. În afara unui mediu izolat, returnează `false` sau `null`.

| Metodă | Returnează |
|--------|---------|
| `is_sandbox(): bool` | `true` când cererea curentă rulează într-un mediu izolat |
| `id(): ?string` | ID-ul mediului izolat curent |
| `path(): ?string` | directorul mediului izolat curent |
| `engine(): ?string` | `overlay` într-un mediu izolat |
| `table_prefix(): ?string` | prefixul tabelelor mediului izolat, de exemplu `wp_b65338d_` |
| `url(): ?string` | URL al mediului izolat; mediile suprapuse partajează URL gazdei |
| `exit_url(): string` | URL gazdei |
| `is_email_disabled(): bool` | `true` când trimiterea de e-mailuri externe este blocată pentru cerere |
| `log_path(): ?string` | `{sandbox directory}/debug.log` |
| `version(): ?string` | versiunea Rudel instalată |
| `cli_command(): string` | comanda rădăcină WP-CLI, `rudel` dacă nu este setat `RUDEL_CLI_COMMAND` |

### `Rudel::context(): array`

Returnează toate cele de mai sus într-un singur tablou:

```php
[
    'is_sandbox'     => true,
    'id'             => 'alpha-3be7',
    'path'           => '/var/www/html/wp-content/rudel-environments/alpha-3be7',
    'engine'         => 'overlay',
    'table_prefix'   => 'wp_b65338d_',
    'url'            => 'http://localhost/',
    'exit_url'       => 'http://localhost/',
    'email_disabled' => true,
    'log_path'       => '/var/www/html/wp-content/rudel-environments/alpha-3be7/debug.log',
    'version'        => '0.10.0',
    'cli_command'    => 'rudel',
]
```

### `Rudel::status(): array`

Returnează același rezumat al execuției ca `wp rudel status`, sub formă de tablou: starea inițializării, mediul izolat curent, directorul și numărul mediilor izolate, valorile `rudel_config` și dacă automatizarea este programată.

## Înregistrări ale mediilor izolate

Mediile izolate sunt returnate ca obiecte `Rudel\Environment`. Proprietățile utile, doar pentru citire, includ `id`, `name`, `path`, `created_at`, `status`, `template`, `owner`, `labels`, `purpose`, `expires_at`, `last_used_at`, `theme_slug`, `table_prefix` și `clone_source`. Metodele includ `is_protected()`, `get_url()`, `get_table_prefix()`, `get_size()` și `to_array()`.

### `Rudel::all(): array`

Returnează toate mediile izolate sub forma unui tablou de obiecte `Environment`. Nu acceptă filtre.

```php
foreach ( Rudel::all() as $sandbox ) {
    echo $sandbox->id . ' ' . $sandbox->status . "\n";
}
```

### `Rudel::get( string $id ): ?Environment`

Încarcă un mediu izolat după ID sau returnează `null`.

```php
$sandbox = Rudel::get( 'alpha-3be7' );
```

### `Rudel::environments_dir(): string`

Returnează directorul care conține directoarele mediilor izolate.

## Ciclul de viață

### `Rudel::create( string $name, array $options = [] ): Environment`

Creează un mediu izolat și îl returnează. ID-ul este generat din nume și patru caractere hexazecimale.

```php
$sandbox = Rudel::create( 'alpha', [
    'theme'    => 'twentytwentyfour',
    'owner'    => 'dennis',
    'labels'   => [ 'qa', 'agent' ],
    'ttl_days' => 7,
] );
```

Opțiuni:

| Cheie | Semnificație |
|-----|---------|
| `theme` | slugul temei de copiat în mediul izolat; implicit, tema activă a gazdei |
| `clone_from` | ID-ul unui mediu izolat existent de clonat în locul gazdei |
| `owner`, `purpose` | metadate în text liber |
| `labels` | tablou sau șir separat prin virgule |
| `protected` | `true` pentru a exclude mediul izolat de la curățare |
| `ttl_days` | expirare calculată de la momentul creării |
| `expires_at` | marcaj temporal explicit pentru expirare |
| `template` | etichetă stocată în înregistrare; nu încarcă un șablon salvat |
| `site_options` | nume de opțiuni și valori scalare scrise în tabelul de opțiuni al mediului izolat |
| `skip_limits` | `true` pentru a omite `max_sandboxes` și `max_disk_mb` |

### `Rudel::create_from_git( string $remote_url, array $options = [] ): array`

Creează un mediu izolat, apoi clonează `$remote_url` în el. Acceptă opțiunile `create()`, plus `name` (implicit, numele depozitului) și `type` (`theme` sau `plugin`). Returnează `[ 'environment' => Environment, 'git' => [...] ]`. Dacă clonarea eșuează, mediul izolat nu este anulat; eroarea este returnată în `git.error`. Consultați [Clonare dintr-un depozit](https://rudel.inline0.dev/ro/docs/features/git)Git.

### `Rudel::update( string $id, array $changes ): Environment`

Actualizează metadatele ciclului de viață și returnează mediul izolat reîmprospătat. Printre cheile acceptate se numără `owner`, `labels`, `purpose`, `protected`, `ttl_days` (raportată la momentul actual), `expires_at`, `clear_expiry`, `name` și `site_options`.

```php
Rudel::update( 'alpha-3be7', [ 'protected' => true, 'ttl_days' => 3 ] );
```

### `Rudel::destroy( string $id ): bool`

Șterge tabelele mediului izolat, elimină directorul și worktree-urile asociate și șterge înregistrarea acestuia. Returnează `false` dacă ID-ul nu există. Nu verifică protecția: sunt șterse și mediile izolate protejate.

### `Rudel::cleanup( array $options = [] ): array`

Aplică politicile de expirare, vechime și inactivitate. Opțiuni: `dry_run` (bool), `max_age_days` și `max_idle_days` (suprascriu `rudel_config` când valoarea este nenulă). Returnează `removed`, `skipped`, `errors` și `reasons` (ID către `expired`, `age`, `idle` sau `protected`). Consultați [Curățare](https://rudel.inline0.dev/ro/docs/features/cleanup).

### `Rudel::cleanup_merged( array $options = [] ): array`

Elimină mediile izolate ale căror ramuri worktree Git asociate au fost integrate în ramura implicită a depozitului. Opțiune: `dry_run`.

### `Rudel::touch_current_environment(): void`

Înregistrează activitatea (`last_used_at`) pentru mediul izolat curent. Rudel o apelează la fiecare cerere dintr-un mediu izolat.

## Jurnale

### `Rudel::read_log( string $id, int $lines = 50 ): array`

Returnează ultimele rânduri din `debug.log` mediului izolat sub formă de `path`, `exists`, `empty`, `total_lines` și `lines`.

### `Rudel::clear_log( string $id ): array`

Golește `debug.log` mediului izolat și returnează `path`, `existed` și `cleared`.

## Instantanee

### `Rudel::snapshot( string $id, string $name ): array`

Creează un instantaneu și îi returnează metadatele (`name`, `created_at`, `sandbox_id`).

### `Rudel::restore( string $id, string $name ): void`

Restaurează un instantaneu. Cu setarea implicită `auto_snapshot_before_restore`, Rudel salvează mai întâi un instantaneu `pre-restore-...`.

### `Rudel::snapshots( string $id ): array`

Lista metadatele instantaneelor, începând cu cele mai noi. Consultați [Instantanee](https://rudel.inline0.dev/ro/docs/features/snapshots).

## Șabloane

- `Rudel::save_template( string $id, string $name, string $description = '' ): array`
- `Rudel::templates(): array`
- `Rudel::delete_template( string $name ): bool`

Șabloanele salvate sunt doar copii ale fișierelor. Niciun API sau nicio comandă nu creează un mediu izolat dintr-un șablon. Consultați [Șabloane](https://rudel.inline0.dev/ro/docs/features/templates).

## Git

### `Rudel::push( string $id, string $remote_url = '', string $message = 'Update from Rudel', string $subdir = '' ): ?string`

Confirmă și trimite o copie de lucru din directorul mediului izolat în ramura `rudel/{id}`. `$remote_url` și `$subdir` folosesc implicit valorile stocate în mediul izolat. Returnează SHA-ul confirmării sau `null` dacă nu s-a schimbat nimic.

## Automatizare

- `Rudel::run_automation(): array` rulează acum sarcinile de automatizare programate.
- `Rudel::run_scheduled_cleanup(): array` face același lucru.

Consultați [Automatizare](https://rudel.inline0.dev/ro/docs/features/automation).

## Catalogul hook-urilor și comenzilor

- `Rudel::hooks(): array` returnează catalogul documentat al hook-urilor, indexat după numele hook-ului. Consultați [Hook-uri](https://rudel.inline0.dev/ro/docs/features/hooks).
- `Rudel::cli_command_map(): array` returnează o descriere serializabilă a fiecărei comenzi `wp rudel` și a metodei PHP aferente.
- `Rudel::resolve_cli_command( $path, array $args = [], array $assoc_args = [] ): array` transformă o comandă analizată într-un plan de execuție, fără să o ruleze.

```php
$plan = Rudel::resolve_cli_command( 'wp rudel destroy', [ 'alpha-3be7' ] );
// $plan['callable']           => 'Rudel\Rudel::destroy'
// $plan['arguments']          => [ 'alpha-3be7' ]
// $plan['needs_confirmation'] => true
```

Majoritatea planurilor folosesc transportul `php`. `logs --follow` se rezolvă într-un plan `shell` care rulează `tail -f`.

## Inițializare autonomă

### `Rudel::init( Connection $connection, array $context = [] ): void`

Direcționează fațada către o conexiune directă MySQL pentru utilizare în afara WordPress. `$context` acceptă `environments_dir`.

```php
use Rudel\Connection;
use Rudel\Rudel;

Rudel::init(
    new Connection( '127.0.0.1', 'wordpress', 'root', 'root', 'wp_' ),
    [ 'environments_dir' => '/var/www/html/wp-content/rudel-environments' ]
);
```

- `Rudel::ensure_schema(): void` creează tabelele Rudel pentru conexiunea activă.
- `Rudel::reset(): void` șterge conexiunea autonomă și starea din cache.
