# 🕐 CRON Jobs - Dokumentacja

## Archiwizacja meczów

### Plik: `archive_matches.php`

Automatycznie archiwizuje mecze starsze niż 6 miesięcy do tabeli `matches_archive`.

### 📋 Konfiguracja CRON

#### Opcja 1: cPanel / Plesk (Rekomendowane)

1. Zaloguj się do cPanel/Plesk
2. Znajdź "Cron Jobs" lub "Zadania zaplanowane"
3. Dodaj nowe zadanie:
   ```
   Częstotliwość: Co tydzień (niedziela)
   Godzina: 02:00
   Komenda: php /home/USERNAME/public_html/private_html/cron/archive_matches.php
   ```

#### Opcja 2: Crontab (Linux)

Edytuj crontab:
```bash
crontab -e
```

Dodaj linię (niedziela o 2:00):
```
0 2 * * 0 /usr/bin/php /path/to/private_html/cron/archive_matches.php
```

Lub codziennie o 2:00:
```
0 2 * * * /usr/bin/php /path/to/private_html/cron/archive_matches.php
```

#### Opcja 3: Windows Task Scheduler

1. Otwórz "Harmonogram zadań" (Task Scheduler)
2. Utwórz nowe zadanie:
   - **Wyzwalacz:** Co tydzień, niedziela, 02:00
   - **Akcja:** Uruchom program
   - **Program:** `C:\xampp\php\php.exe` (lub inna ścieżka do PHP)
   - **Argumenty:** `C:\Users\scans\.vscode\OpenGame\private_html\cron\archive_matches.php`

### 🧪 Testowanie

#### Test 1: Manualne uruchomienie (CLI)
```bash
php private_html/cron/archive_matches.php
```

#### Test 2: Przez przeglądarkę (tylko z localhost)
```
http://localhost/cron/archive_matches.php
```
**UWAGA:** Działa tylko z localhost ze względów bezpieczeństwa!

### 📊 Logi

Logi są zapisywane w pliku:
```
private_html/cron/archive_log.txt
```

Przykład logu:
```
[2026-01-27 02:00:01] === START Archiwizacja meczów ===
[2026-01-27 02:00:01] Połączono z bazą danych
[2026-01-27 02:00:05] Wynik archiwizacji: Zarchiwizowano 1234 meczów starszych niż 2025-07-27
[2026-01-27 02:00:05] Statystyki:
[2026-01-27 02:00:05]   - Active: 45678 meczów
[2026-01-27 02:00:05]   - Archived: 123456 meczów
[2026-01-27 02:00:05] === END Archiwizacja zakończona pomyślnie ===
```

### 🔒 Bezpieczeństwo

- ✅ Skrypt działa tylko z CLI lub localhost
- ✅ Timeout 5 minut (długie operacje)
- ✅ Logi automatycznie rotowane przy 5MB
- ✅ Transakcje SQL (bezpieczne usuwanie)

### ⚙️ Konfiguracja

Domyślne ustawienia:
- **Wiek archiwizacji:** 6 miesięcy
- **Timeout:** 300 sekund (5 minut)
- **Rotacja logów:** przy 5MB

Aby zmienić wiek archiwizacji, edytuj procedurę w SQL:
```sql
-- W pliku database_archivization.sql zmień:
SET archive_date = DATE_SUB(NOW(), INTERVAL 6 MONTH);
-- Na przykład na 3 miesiące:
SET archive_date = DATE_SUB(NOW(), INTERVAL 3 MONTH);
```

### 🆘 Troubleshooting

**Problem:** "Access denied - tylko z CLI lub localhost"
**Rozwiązanie:** Uruchom przez terminal lub zmień zabezpieczenie w pliku PHP

**Problem:** "SQLSTATE[42000]: Syntax error"
**Rozwiązanie:** Upewnij się że procedura `archive_old_matches()` została utworzona:
```sql
CALL archive_old_matches(); -- Test w phpMyAdmin
```

**Problem:** Log nie jest tworzony
**Rozwiązanie:** Sprawdź uprawnienia zapisu:
```bash
chmod 755 private_html/cron/
chmod 644 private_html/cron/archive_log.txt
```

**Problem:** Cron nie uruchamia się
**Rozwiązanie:** Sprawdź ścieżkę do PHP:
```bash
which php  # Linux
where php  # Windows
```

### 📧 Powiadomienia email (opcjonalne)

Aby otrzymywać email po archiwizacji, dodaj na końcu pliku PHP:
```php
// Wyślij email z raportem
mail(
    'admin@example.com',
    'Raport archiwizacji meczów',
    "Zarchiwizowano X meczów.\n\nStatystyki:\n...",
    'From: cron@example.com'
);
```

### 🎯 Rekomendacje

- **Mały projekt (<10k meczów/miesiąc):** Uruchamiaj co miesiąc
- **Średni projekt (10k-100k):** Uruchamiaj co tydzień ✅
- **Duży projekt (>100k):** Uruchamiaj codziennie

### 📚 Powiązane pliki

- `database_archivization.sql` - Procedury SQL
- `archive_matches.php` - Skrypt PHP
- `archive_log.txt` - Logi wykonania
