# KRE SC Inside 0.2.0 – frissítés és beállítás

A ZIP a teljes alkalmazást tartalmazza, közvetlenül a csomag gyökerében a `public`, `storage`, `data` és `bin` mappával. A jelenlegi, működő rendszer frissíthető. A frissítés hozzáadja az új adatmezőket és táblákat; meglévő tagokat és fiókokat nem töröl.

## 1. Meglévő rendszer frissítése – ezt a sorrendet kövesd

1. Nyisd meg a cPanelt, majd a **phpMyAdmin** felületet. Válaszd ki az Inside adatbázisát, majd **Exportálás → Gyors → SQL → Exportálás**. Töltsd le a mentést.
2. A cPanel **Fájlkezelőben** készíts mentést az egész `/home/kecsorip/inside.kecsorichard.hu` mappáról, a `config.php` és a `storage` tartalmával együtt. A mentést töltsd le vagy tartsd a nyilvános webgyökéren kívül.
3. A Fájlkezelőben nyisd meg a `/home/kecsorip/inside.kecsorichard.hu` mappát. **Ebben már ott kell lennie a `public` mappának és a működő `config.php` fájlnak.** Ide töltsd fel az új ZIP-et és itt csomagold ki. Az azonos nevű alkalmazásfájlok felülírhatók. Ha a cPanel kicsomagolója nem cseréli a meglévő fájlokat, csomagold ki külön mappába, és az új fájlokat másold az azonos helyre.
4. A saját **`config.php`, `storage/installed.lock`, `storage/uploads` és később `storage/mail-settings.enc` maradjon meg**. A csomag nem tartalmaz éles configot, telepítési zárolást vagy feltöltéseket. A `schema.sql` fájlt meglévő adatbázisba **ne importáld újra**. A `public/setup.php` most nem kell.
5. Ellenőrizd a cPanel **Domains / Tartományok** oldalán, hogy az `inside.kecsorichard.hu` dokumentumgyökere továbbra is `/home/kecsorip/inside.kecsorichard.hu/public`.
6. Nyisd meg a `https://inside.kecsorichard.hu/index.php?p=login` címet, és lépj be a meglévő adminfiókoddal. A rendszer a frissítő oldalra irányít. Kattints az **Adatbázis frissítése** gombra. Közvetlen cím: `https://inside.kecsorichard.hu/update.php`.
7. Sikeres frissítés után megjelenik a **Levelezés** és a **Rendszerállapot** menüpont. A Rendszerállapotban a verzió `0.2.0`, az adatbázis állapota **Naprakész** legyen.
8. Állítsd be a levelezést és a háttérküldőt az alábbiak szerint. Ezután küldj próbameghívót egy tesztfióknak, és próbáld végig a regisztrációt.
9. A feltöltött frissítési ZIP-et távolítsd el az alkalmazás mappájából, mert az automatikus mentés egyébként azt is mentené. A saját gépeden őrizd meg.

**A `config.php` adatbázis-beállításait és `app_key` értékét frissítéskor tartsd meg.** A titkosított SMTP-beállítások és a várakozó levelek az app_key használatával olvashatók. Ha önkényesen lecseréled, ezek nem lesznek olvashatók. Az `app_url` helyes értéke `https://inside.kecsorichard.hu`; a `db.host` adatbázis-kiszolgáló, általában `localhost`, nem HTTPS-webcím.

Az új opcionális konfigurációs sorok a `return [...]` tömbbe illeszthetők:

```php
'registration_enabled' => true,
'privacy_url' => '', // Ide kerülhet az egyesület saját HTTPS adatkezelési tájékoztatója.
'backup_retention_days' => 7,
```

## 2. SMTP beállítása a Levelezés oldalon

1. A cPanelben nyisd meg az **E-mail-fiókok / Email Accounts** oldalt.
2. Használj egy saját, tárhelyen létrehozott feladói postaládát, például `inside@kecsorichard.hu`, ha ezt létrehoztad. Ne egy Gmail-cím jelszavát írd be a Rackforest SMTP-adatokhoz.
3. A postaláda mellett kattints **Connect Devices / Eszközök csatlakoztatása**. Innen másold ki a biztonságos SMTP-kiszolgáló nevét, portját és felhasználónevét. A szervernév elé ne írj `https://`-t. Nem feltétlenül egyezik az Inside webcímével.
4. Inside → **Levelezés**: add meg az SMTP-kiszolgálót, a teljes postaládacímet mint felhasználónevet, a postaláda jelszavát, ugyanazt a címet feladóként, és a feladó nevét.
5. Port **465** esetén válaszd **TLS · 465**; port **587** esetén **STARTTLS · 587**. A cPanel által jelzett párost használd.
6. Pipáld be az **E-mail-küldés engedélyezve** mezőt, majd **Beállítások mentése**. A jelszó későbbi szerkesztéskor üresen hagyható, így a meglévő megmarad.
7. Kattints a **Próbalevél a saját admincímemre** gombra. A levélsorban ellenőrizd az állapotot, és a postaládában a beérkezést, a spam mappát is beleértve.

A Levelezés oldalon mentett beállítások elsőbbséget élveznek a config.php `mail_from` / `mail_enabled` alapértékeivel szemben. A `mail_enabled=true` önmagában nem állítja be az SMTP-t. A rendszer ebben a verzióban SMTP-t használ.

**A „szerver átvette” állapot nem kézbesítési visszaigazolás.** Hiba esetén a sor tárolja a hibát, és legfeljebb öt küldési próbát végez. Ezután az admin indíthat új próbát. A lejárt vagy újraküldés miatt érvénytelen meghívókat nem küldi ki. SMTP-kapcsolat megszakadása esetén ismételt kézbesítés lehetséges; nincs garantált egyszeri kézbesítés vagy visszapattanásfeldolgozás.

Alaphelyzetben egy háttérfutás legfeljebb **5 levelet** próbál küldeni. A Levelezés oldalon 1–20 között állítható. Percenkénti futással 5 levél legfeljebb 300 küldési próbát jelent óránként; ezt igazítsd a tárhelyed tényleges levélküldési limitjéhez. A feladó domain SPF/DKIM beállításait a cPanel E-mail-kézbesíthetőség felületén is ellenőrizheted.

## 3. Háttérküldő – cPanel Cron-feladat

Az új tagok és fiókok értesítése először az adatbázis küldési sorába kerül. Az automatikus küldéshez ezt a feladatot be kell állítani. Enélkül csak a Levelezés oldal kézi küldőgombjával indul a küldés.

1. Nyisd meg a cPanel **Cron Jobs / Időzített feladatok** oldalát.
2. Ha a tárhely lehetővé teszi, válaszd a percenkénti futást: perc `*`, óra `*`, nap `*`, hónap `*`, hét napja `*`.
3. **PHP 8.3-as EasyApache cPanel környezet esetén** a parancs például:

```sh
/opt/cpanel/ea-php83/root/usr/bin/php /home/kecsorip/inside.kecsorichard.hu/bin/worker.php >> /home/kecsorip/inside.kecsorichard.hu/storage/worker.log 2>&1
```

PHP 8.4 esetén az `ea-php83` helyett `ea-php84` szerepelhet. **A Rackforest által biztosított tényleges PHP CLI-útvonalat használd.** A webes PHP-verzió választása nem bizonyítja, hogy a fenti fájl létezik. Ha nincs ilyen futtatható állomány, a szolgáltatótól ezt kérdezd: „Mi a PHP CLI teljes elérési útvonala a cron parancshoz a fiókomban?” Ne webes URL-t adj meg a cron parancsaként.

4. Mentsd a feladatot. Egy-két perc múlva az Inside **Rendszerállapot → Háttérküldő utolsó futása** időpontja változzon, és a várakozó levelek állapota is frissüljön. Ha a csomagod ritkább cron-futást enged, az értesítések is ahhoz igazodnak.
5. Hiba esetén a Fájlkezelőben nyisd meg a `storage/worker.log` fájlt. A naplókat időnként töröld vagy archiváld a helyfoglalás miatt. A naplók a nyilvános webgyökéren kívül vannak.

## 4. A tagi és hallgatói fiókok folyamata

**Kézi tagfelvétel / CSV-import:** érvényes e-mail-címmel létrehozott új tag automatikus értesítést kap a tagi adatlap létrehozásáról. Ettől még nem jön létre belépési fiók.

**Hozzáférések → Új felhasználó meghívása:** válaszd ki a tagot, az Admin vagy Tag szerepkört és a belépési e-mail-címet. Adminnál a tagi adatlap elhagyható. A fiók létrejön, de a meghívó használatáig inaktív. A címzett 48 órás linkkel állítja be saját jelszavát. Ugyanarra a tagi adatlapra és ugyanarra a belépési e-mailre nem hozható létre több fiók. A régi, már működő fiókok a frissítés miatt nem kapnak új meghívót.

**Hallgatói regisztráció:** `https://inside.kecsorichard.hu/index.php?p=enrol`. A belépőoldalról is elérhető, ha az SMTP engedélyezett és beállított. A regisztráló megadja nevét, e-mailjét, saját jelszavát, karát, szakját, képzési szintjét, a képzési idő változatát, munkarendjét és évfolyamát. E-mail-megerősítésig, majd adminjóváhagyásig nincs hozzáférése. Az admin regisztrációkor és megerősítéskor is kap értesítést. A **Hozzáférések** oldalon a **Jóváhagyás** gomb aktiválja a fiókot és az új jelentkező tagi státuszát; a hallgató erről is levelet kap.

A saját profilban az e-mail elérhetőség módosítása a **tagi kapcsolattartási címre** vonatkozik; a belépési fiók e-mail-címe külön adat. Az évfolyam frissítése kézzel történik. Végzett hallgatónál az admin veheti le a KRE-hallgató jelölést.

Az **Elfelejtett jelszó** oldalon aktív fiókhoz 60 percig használható egyszeri link kérhető. Jelszó és szerepkör változtatása érvényteleníti a korábbi munkameneteket. A munkamenet 30 perc tétlenség, illetve legfeljebb 12 óra után lejár.

## 5. Képzési lista értelmezése

Forrás: a csatolt `KRE_karok_es_kepzesek_2026-2027(1).xlsx`, 2026. október 7-i változat. A `data/kepzesek.json` 5 kart, 83 képzési változatot és 114 érvényes kar/képzés/munkarend kombinációt tartalmaz.

- BTK választásakor BTK-s szakok, ÁJK választásakor ÁJK-s szakok jelennek meg. A forrásban közös BTK/HTK tanári szakpárok mindkét kar alatt elérhetők.
- A képzési szint és a munkarend külön mező. A jogászhoz csak Osztatlan szint választható; nappali és levelező a forrás szerint elérhető.
- 3,5 éves képzésnél 1–4. évfolyam, az utolsónál „utolsó fél év”; 1,5 éves képzésnél 1–2. évfolyam jelenik meg.
- A rövid tanári MA időtartama előképzettségfüggő: a hallgató a saját képzésének 1 / 1,5 / 2 éves változatát választja. A rendszer nem állapítja meg az előképzettségét.
- Az osztatlan tanári képzés szakpárban szerepel. A munkarend hiányát a felület jelzi, nem talál ki hozzá értéket.
- A fő munkalap nem különbözteti meg mindenütt az oktatási nyelvet; azonos szak/szint/időtartam ismétléseit összevontuk, a munkarendeket egyesítettük. Nyelvi választó nem készült. PhD, szakirányú továbbképzés és kifutó szakok nem szerepelnek, mert nem részei a csatolt kínálatnak.

A kombinációkat a szerver is ellenőrzi. Az új JSON-ból programazonosítókat ne törölj vagy cserélj le úgy, hogy azokra meglévő tagok hivatkoznak. A képzéskatalógus adminfelületi szerkesztője még nem része a verziónak.

## 6. Automatikus mentés és visszaállítási próba

A `bin/backup.php` az InnoDB adatbázist és az alkalmazást – a saját configgal, SMTP-beállítással és feltöltésekkel együtt – ZIP-be menti. Az archívum fájljait visszaolvassa és SHA-256 ellenőrzést végez. A mentés alaphelye `/home/kecsorip/inside-backups`, az alkalmazáson kívül; alapértelmezett megőrzés 7 nap. A mentés helyét ne tedd nyilvános webmappába. A ZIP hozzáférési adatokat és tagadatokat tartalmaz, ezért csak jogosult személyek kezeljék.

PHP 8.3-as CLI-példa napi 02:15-kor (Cron: perc `15`, óra `2`, a többi `*`):

```sh
/opt/cpanel/ea-php83/root/usr/bin/php /home/kecsorip/inside.kecsorichard.hu/bin/backup.php >> /home/kecsorip/inside.kecsorichard.hu/storage/backup.log 2>&1
```

A CLI-útvonalat itt is ellenőrizd. `zip` PHP-bővítmény és megfelelő szabad tárhely szükséges. A **Rendszerállapot** az utolsó sikeres futást mutatja. Legalább egy mentést tölts le külön helyre is; a tárhelyen lévő másolat önmagában nem véd a teljes tárhely kiesésétől. Ha nagy az adatbázis vagy a PHP-korlát megszakítja a futást, használd a cPanel/szolgáltató mentését.

Visszaállítási próba külön tesztkörnyezetben:

1. Hozz létre egy külön, üres adatbázist, hozzá felhasználót és egy hozzáféréstől védett teszt-aldomaint. Ne az éles adatbázisra próbálj ráimportálni.
2. Csomagold ki a mentés `application` tartalmát a tesztalkalmazás mappájába. Az aldomain dokumentumgyökere annak `public` mappája legyen.
3. phpMyAdminból importáld a mentés `database.sql` fájlját az **üres tesztadatbázisba**.
4. A visszaállított configban írd át a DB-hozzáféréseket és az `app_url` címet; az eredeti `app_key` maradjon. A tesztkörnyezetben ne indíts levélküldő cront. A `storage/mail-settings.enc` fájlt ott nevezd át, és állítsd `mail_enabled=false` értékre, hogy ne menjenek ki újra régi levelek.
5. Ellenőrizd a belépést, a tagok és befizetések darabszámát, a hallgatói mezőket, valamint néhány dokumentum letöltését. Csak sikeres próba után tekintsd igazoltnak a visszaállíthatóságot.

## 7. Új, üres telepítés esetén

Ez a szakasz a most működő telepítésed frissítéséhez nem kell.

1. Hozz létre üres adatbázist és külön felhasználót teljes táblakezelési jogosultsággal, majd importáld a `schema.sql` fájlt.
2. A `config.example.php` fájlt másold `config.php` néven, és add meg a DB-hozzáférést, a teljes HTTPS app_url címet és két eltérő, erős véletlen app_key / setup_key értéket. App_key-hez legalább 64 véletlen karaktert használj. Ne a példaszövegeket hagyd benne.
3. Az aldomain a `public` mappára mutasson. A PHP-nak írnia kell tudni a `storage` mappát; ne állíts 777 jogosultságot.
4. Nyisd meg a `/setup.php` címet. A setup_key megadásával hozz létre egy legalább 14 karakteres jelszavú első adminfiókot. A telepítő hozzáadja a 0.2.0 mezőket és lezárja magát.
5. Állítsd be az SMTP-t, a háttérküldőt és a mentést az előző szakaszok szerint.

Minimum a kód futtatásához PHP 8.1; telepítéshez támogatott PHP 8.3/8.4 vagy újabb verziót válassz a tárhely lehetőségei szerint. Bővítmények: `pdo_mysql`, `mbstring`, `openssl`, `fileinfo`; automatikus mentéshez `zip`. A feltöltési limitek legyenek legalább `upload_max_filesize=8M`, `post_max_size=10M`. Az önálló tesztekhez SQLite, a DOM-teszthez Node/jsdom kell; ezek az éles alkalmazás működéséhez nem szükségesek.

Hivatkozások a környezeti beállításokhoz:
- PHP támogatási táblázat: https://www.php.net/supported-versions.php
- cPanel PHP CLI: https://support.cpanel.net/hc/en-us/articles/360050224413-How-to-run-PHP-commands-as-a-cPanel-user-via-Terminal
- cPanel Cron Jobs: https://docs.cpanel.net/cpanel/advanced/cron-jobs/
