# Virtuálna podateľňa – PHP/MariaDB

Výučbová elektronická podateľňa pripravená pre Ubuntu 24.04, Apache 2.4.58, PHP 8.3.6 a MariaDB 10.11.14.

## Funkcie

- registrácia a prihlásenie používateľov,
- dva virtuálne úrady: Zakladateľská listina a Obchodný register,
- samostatné vyplnenie, uloženie, generovanie a stiahnutie oboch PDF,
- samostatné odoslanie každého dokumentu príslušnému úradu,
- spoločný správca oboch úradov,
- stavy: odoslané, prevzaté, v spracovaní, vybavené, vrátené a zamietnuté,
- interné a voliteľné e-mailové notifikácie,
- história stavov, auditné záznamy a SHA-256 kontrolný súčet PDF.

Portál je určený na výučbu. Vytvorené dokumenty nemajú právne účinky.

## 1. Serverové balíky

```bash
sudo apt update
sudo apt install apache2 mariadb-server composer unzip \
  php8.3-cli php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml \
  php8.3-curl php8.3-zip php8.3-gd php8.3-intl

sudo a2enmod rewrite headers ssl proxy proxy_fcgi
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2
```

## 2. Databáza

Prihláste sa do MariaDB a vytvorte databázu aj samostatného používateľa:

```sql
CREATE DATABASE virtualna_podatelna CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'podatelna'@'localhost' IDENTIFIED BY 'SEM_VLOZTE_SILNE_HESLO';
GRANT ALL PRIVILEGES ON virtualna_podatelna.* TO 'podatelna'@'localhost';
FLUSH PRIVILEGES;
```

## 3. Aplikácia

```bash
sudo unzip virtualna-podatelna-php.zip -d /var/www
cd /var/www/virtualna-podatelna-php
sudo cp .env.example .env
sudo nano .env
sudo composer install --no-dev --optimize-autoloader
sudo php scripts/check.php
sudo php scripts/install.php
sudo chown -R root:www-data /var/www/virtualna-podatelna-php
sudo chmod -R 750 /var/www/virtualna-podatelna-php
sudo chmod -R 770 storage
```

V `.env` je nutné zmeniť najmä `APP_URL`, databázové údaje, `ADMIN_EMAIL` a `ADMIN_PASSWORD`. Inštalačný skript odmietne ukážkové heslo správcu.

## 4. Apache

Upravte doménu a cestu v `deploy/apache-virtualhost.conf`. Ak zachováte názov priečinka zo ZIP-u, cesta je `/var/www/virtualna-podatelna-php/public`.

```bash
sudo cp deploy/apache-virtualhost.conf /etc/apache2/sites-available/virtualna-podatelna.conf
sudo nano /etc/apache2/sites-available/virtualna-podatelna.conf
sudo a2ensite virtualna-podatelna.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
```

DocumentRoot musí smerovať výhradne do `public`. Súbor `.env`, zdrojové kódy a uložené PDF nesmú byť priamo prístupné z internetu.

## 5. HTTPS

Po nastavení DNS použite napríklad Certbot:

```bash
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d podatelna.example.sk
```

Pri HTTPS ponechajte `SESSION_SECURE=true`. Pri dočasnom lokálnom HTTP testovaní nastavte túto hodnotu na `false`.

## 6. E-mail

Interné notifikácie fungujú vždy. Pre e-mail nastavte Symfony Mailer DSN, napríklad:

```dotenv
MAILER_DSN=smtp://pouzivatel:heslo@smtp.example.sk:587?encryption=tls
MAIL_FROM=podatelna@example.sk
```

Ak `MAILER_DSN=null://null`, e-mail sa neodosiela, ale notifikácia sa uloží v portáli.

## 7. Prevádzka a zálohy

Zálohujte databázu a neverejný adresár s PDF:

```bash
mariadb-dump --single-transaction virtualna_podatelna > podatelna.sql
sudo tar -czf podatelna-dokumenty.tar.gz -C /var/www/virtualna-podatelna-php/storage documents
```

Obnovu vždy najprv vyskúšajte mimo produkcie. Pravidelne aplikujte bezpečnostné aktualizácie Ubuntu. Produkčné prostredie musí mať `APP_DEBUG=false`.

## 8. Kontrola po nasadení

1. Otvorte `/up`; odpoveď musí byť `{"status":"ok"}`.
2. Prihláste sa účtom správcu z `.env`.
3. Vytvorte bežný účet a nový prípad.
4. Vyplňte Zakladateľskú listinu, vytvorte a stiahnite PDF, potom ju odošlite.
5. Rovnaký postup vykonajte pre Obchodný register.
6. Ako správca zmeňte stav oboch podaní a skontrolujte notifikácie používateľa.

## Štruktúra

- `public/` – jediný verejný adresár,
- `app/` – databáza, autentifikácia, PDF a notifikácie,
- `database/schema.sql` – schéma pre MariaDB 10.11,
- `scripts/install.php` – vytvorenie tabuliek a účtu správcu,
- `scripts/check.php` – kontrola PHP a rozšírení,
- `storage/documents/` – neverejné PDF,
- `deploy/apache-virtualhost.conf` – vzor konfigurácie Apache.
