# Admin API

> Az LW LMS admin REST API-ja: beállítások, áttekintés, feliratkozások és kvízkitöltések kezelése, valódi válaszokkal.

Az admin felület ezt az API-t használja, de külső eszközből is hívható. Útvonal: `/wp-json/lw-lms/v1/admin/…`. A beállítás-végpont `manage_options`, a többi `manage_lms` jogosultságot kér.

| Végpont | Metódus | Mire |
|---|---|---|
| `/admin/settings` | GET, POST | Beállítások olvasása és részleges mentése. A GET a nyilvános végpontok listáját is adja. |
| `/admin/overview` | GET | Az Áttekintés számai |
| `/admin/enrollments` | GET | Feliratkozások; szűrők: `course`, `user`, `search`, `status` (`active`, `expired`, `revoked`), `source` (`manual`, `woocommerce`, `free`), `page`, `per_page` (alap 20) |
| `/admin/enrollments` | POST | Kézi feliratkoztatás: `{ "user_id", "course_id", "expires" }` |
| `/admin/enrollments/{user}/{course}` | DELETE | Visszavonás |
| `/admin/quiz-attempts` | GET | Kvízkitöltések; szűrők: `course`, `lesson`, `user`, `search`, `passed`, `from`, `to` |
| `/admin/quiz-attempts/export` | GET | CSV: `{ "filename": "quiz-attempts-ÉÉÉÉ-HH-NN.csv", "csv": "…" }` |
| `/admin/quiz-attempts/delete` | POST | Tömeges törlés: `{ "ids": [ … ] }` |
| `/admin/quiz-attempts/{id}` | GET, DELETE | Egy kitöltés, vagy törlése |
| `/admin/lessons/{id}/quiz-attempts` | DELETE | Egy lecke összes kitöltése |
| `/admin/lessons/{id}/quiz-error` | GET | A Kvíz doboz utolsó elutasított mentésének hibája |
| `/admin/lookups/courses`, `/lessons`, `/users` | GET | Választólisták az űrlapokhoz |

Hibák: `400 lw_lms_invalid` („Néhány mező érvénytelen. Semmi sem mentődött.”, a hibás mezők a `data.fields`-ben), `404 lw_lms_not_found` („Ez az elem már nem létezik.”), `413 lw_lms_too_large` („A kérés túl nagy.”).

## Áttekintés

```bash title="Terminál"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" "https://pelda.hu/wp-json/lw-lms/v1/admin/overview"
```

```json title="Válasz"
{ "courses": { "published": 2, "drafts": 0 }, "lessons": { "published": 3, "drafts": 0 },
  "enrollments": 3, "quizAttempts": 0, "quizAttemptDays": 30,
  "woocommerce": { "enabled": true, "subscriptions": false, "memberships": false, "paidCourses": 1, "orderAccess": 0 } }
```

## Feliratkozások

```bash title="Terminál"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" "https://pelda.hu/wp-json/lw-lms/v1/admin/enrollments?per_page=5"
```

```json title="Válasz (az első elem)"
{
  "items": [
    { "id": 3, "userId": 4, "courseId": 36,
      "user": { "id": 4, "name": "Kovács Lili", "login": "kovacs.lili", "email": "kovacs.lili@pelda.hu" },
      "course": { "id": 36, "title": "Haladó mázazás", "editUrl": "https://pelda.hu/wp-admin/post.php?post=36&action=edit" },
      "source": "manual", "sourceId": null,
      "grantedAt": "2026-10-28 18:19:15", "granted": "október 28, 2026 6:19 du.",
      "expiresAt": null, "expires": null, "status": "active",
      "progress": { "completed": 0, "total": 0, "percentage": 0 } }
  ],
  "total": 3, "page": 1, "perPage": 5, "pages": 1
}
```

A kvízkitöltések üres listája: `{ "items": [], "total": 0, "page": 1, "perPage": 20, "pages": 0, "summary": null }`.

Kézi feliratkoztatás és visszavonás:

```bash title="Terminál"
# Feliratkoztatás 2026 végéig (üres "expires" = élethosszig; múltbeli dátum hiba)
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" -X POST -H "Content-Type: application/json" \
  -d '{"user_id":2,"course_id":36,"expires":"2026-12-31"}' \
  "https://pelda.hu/wp-json/lw-lms/v1/admin/enrollments"

# Visszavonás
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" -X DELETE \
  "https://pelda.hu/wp-json/lw-lms/v1/admin/enrollments/2/36"
```

## Beállítások

```bash title="Terminál"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" "https://pelda.hu/wp-json/lw-lms/v1/admin/settings"
```

```json title="Válasz (rövidítve)"
{ "options": { "courses_per_page": 10, "enable_preview_lessons": true, "default_access_type": "free",
               "auto_enroll_admins": false, "quiz_pass_percentage": 80, "require_quiz_pass": false,
               "woo_enabled": true, "delete_data_on_uninstall": false },
  "meta": { "ranges": { "courses_per_page": { "min": 1, "max": 100 }, "quiz_pass_percentage": { "min": 0, "max": 100 } },
            "enums": { "default_access_type": [ "open", "free", "paid" ] },
            "woocommerce": true, "restBase": "https://pelda.hu/wp-json/lms/v1/", "namespace": "lms/v1",
            "endpoints": [ { "method": "GET", "path": "/courses", "description": "Kurzusok listázása",
                             "access": "Bárki (a hozzáférést kurzusonként és leckénként ellenőrzi)" } ] } }
```

A POST csak a beküldött kulcsokat írja. Ha egy érték hibás, semmi nem mentődik.

| Kulcs | Beállítás |
|---|---|
| `default_access_type` | Alapértelmezett hozzáférés |
| `enable_preview_lessons` | Előnézeti leckék |
| `auto_enroll_admins` | Az LMS kezelők minden kurzushoz hozzáférnek |
| `quiz_pass_percentage` | Alapértelmezett sikerességi százalék |
| `require_quiz_pass` | A lecke elvégzéséhez sikeres kvíz kell |
| `woo_enabled` | WooCommerce integráció engedélyezése fizetős kurzusokhoz |
| `courses_per_page` | Kurzusok oldalanként |
| `delete_data_on_uninstall` | Minden adat törlése a bővítmény törlésekor |
