# Hookok, belső API és gyorsítótár

> WordPress-akciók a regisztrációhoz és a belépéshez, a belső PHP-API három függvénye, és a webinárium gyorsítótárának áthelyezése szűrőkkel.

Ez a fejezet fejlesztőknek szól. A bővítmény saját kódot is képes meghívni bizonyos eseményekkor, van egy kis belső PHP-API-ja, és a gyorsítótár helye felülírható.

## WordPress-akciók

Ha a témádban vagy egy saját bővítményben kódot akarsz futtatni egy webinárium eseményeinél, két akcióra iratkozhatsz fel.

### Új regisztráció: `wpws_new_registration`

Minden alkalommal lefut, amikor egy résztvevő regisztrál egy webináriumra. A kapott tömb mezői:

| Mező | Tartalma |
|---|---|
| `webinar_id` | a webinárium azonosítója |
| `webinar_name` | a webinárium címe |
| `webinar_time` | a webinárium időpontja (Unix-időbélyeg) |
| `attendee_name` | a résztvevő neve |
| `attendee_email` | a résztvevő e-mail-címe |

```php
function on_new_registration($data) {
    // az esemény kezelése
}

add_action('wpws_new_registration', 'on_new_registration');
```

### Belépés a webináriumba: `wpws_attendee_attended`

Akkor fut le, amikor a résztvevő először lép be a webinárium szobájába. A tömb ugyanazokat a mezőket tartalmazza, mint a regisztrációnál, és kiegészül egy mezővel:

| Mező | Tartalma |
|---|---|
| `joined_at` | a belépés időpontja (Unix-időbélyeg) |

```php
function on_attendee_attended($data) {
    // az esemény kezelése
}

add_action('wpws_attendee_attended', 'on_attendee_attended');
```

## Belső API

A `WebinarPress` osztály három statikus függvénye a következőket teszi lehetővé:

1. az összes webinárium listázása,
2. egy ismétlődő webinárium következő alkalmainak lekérése,
3. résztvevő regisztrálása egy webináriumra.

### Webináriumok listázása

```php
$webinars = WebinarPress::get_webinars();

foreach ($webinars as &$webinar) {
    // a webinárium azonosítója
    $webinar_id = $webinar->id;

    // a webinárium neve
    $name = $webinar->get_name();
}
```

### Résztvevő regisztrálása

```php
WebinarPress::register_attendee([
    'webinar_id' => 123,
    'name' => 'Minta Résztvevő',
    'email' => 'resztvevo@example.com'
]);
```

### Következő alkalmak lekérése

A paraméter a webinárium azonosítója.

```php
$sessions = WebinarPress::get_upcoming_sessions(123);

foreach ($sessions as &$session) {
    $date = $session->date;
    $day = $session->day;   // pl. mon, tue, wed
    $time = $session->time; // pl. 10:00, 12:00, 13:00
}
```

## A gyorsítótár helyének felülírása

A bővítmény gyorsítótár-fájlokat ír a webinárium adataihoz. Összetettebb WordPress-környezetben (például több webszervernél) érdemes lehet ezeket közös helyre tenni, hogy az egyik szerveren végzett frissítés az összes többinek is frissítse a gyorsítótárat. Az is lehet, hogy a fájlokat teljesen másik domainről szeretnéd kiszolgálni.

Ehhez két WordPress-szűrőt kell megvalósítanod a témádban vagy egy kis bővítményben:

- `wpws_get_cache_path`: megmondja, hova írja a bővítmény a gyorsítótár-fájlokat (fájlrendszerbeli útvonal),
- `wpws_get_cache_url`: megmondja a weboldalnak, honnan töltse le a gyorsítótárat (URL).

```php
function wpws_get_cache_path($path) {
    return '/var/www/html/path/to/your/cache/folder/';
}

function wpws_get_cache_url($url) {
    return 'https://pelda.hu/path/to/your/cache/folder/';
}

add_filter('wpws_get_cache_path', 'wpws_get_cache_path');
add_filter('wpws_get_cache_url', 'wpws_get_cache_url');
```
