# Plan: ScanStation jako strona startowa operatora po logowaniu

**Data:** 2026-04-05  
**Status:** 🔲 PENDING — nie zaimplementowane

---

## Problem

Operatorzy logują się do Dolibarr i trafiają na domyślny dashboard systemu.
Chcemy, żeby po zalogowaniu automatycznie trafiali na stronę modułu ScanStation.

---

## Mechanizm Dolibarr

Dolibarr obsługuje per-user stronę startową przez parametr `MAIN_DEFAULT_HOME`
zapisany w tabeli `llx_user_param`:

```sql
INSERT INTO llx_user_param (fk_user, param, value, entity)
VALUES ({user_id}, 'MAIN_DEFAULT_HOME', '/custom/scanstation/scan_station.php', {entity});
```

Po zalogowaniu `index.php` czyta ten parametr i robi redirect.

---

## Opcje implementacji

### Opcja A — Ręcznie w profilu użytkownika (bez kodu)

Admin wchodzi w profil każdego operatora → `Inne ustawienia` → `Default home page`
→ ustawia `/custom/scanstation/scan_station.php`.

- ✅ Zero kodu
- ❌ Trzeba robić dla każdego operatora osobno

---

### Opcja B — Trigger USER_LOGIN (zalecane — auto)

Plik: `core/triggers/interface_99_modScanStation_ScanStationTriggers.class.php`

Nasłuchuje na event `USER_LOGIN`:
- Sprawdza: user ma prawo `scanstation->use` **i nie ma** `scanstation->override` (nie jest managerem)
- Jeśli tak: UPSERT `MAIN_DEFAULT_HOME` do `llx_user_param`

```php
if ($action === 'USER_LOGIN') {
    $u = $object; // obiekt User
    if (!empty($u->rights->scanstation->use) && empty($u->rights->scanstation->override)) {
        $db->query(
            "INSERT INTO ".MAIN_DB_PREFIX."user_param (fk_user, param, value, entity)"
            ." VALUES (".(int)$u->id.", 'MAIN_DEFAULT_HOME',"
            ." '/custom/scanstation/scan_station.php', ".(int)$conf->entity.")"
            ." ON DUPLICATE KEY UPDATE value = '/custom/scanstation/scan_station.php'"
        );
    }
}
```

- ✅ Automatyczne dla każdego operatora, działa dla nowych userów
- ✅ Nie wpływa na managerów (mają `override`)
- ⚠️ Redirect działa od **drugiego** logowania (pierwsze logowanie dopiero ustawia parametr)

---

### Opcja C — Przycisk w admin/setup.php (zalecane — jednorazowe)

Przycisk `"Ustaw ScanStation jako stronę startową dla wszystkich operatorów"`:
- Jednorazowy SQL UPSERT do `llx_user_param` dla wszystkich userów z prawem `scanstation->use` bez `scanstation->override`
- Działa od razu, bez czekania na logowanie

```php
$sql = "INSERT INTO ".MAIN_DB_PREFIX."user_param (fk_user, param, value, entity)"
     . " SELECT u.rowid, 'MAIN_DEFAULT_HOME', '/custom/scanstation/scan_station.php', u.entity"
     . " FROM ".MAIN_DB_PREFIX."user u"
     . " INNER JOIN ".MAIN_DB_PREFIX."user_rights ur ON ur.fk_user = u.rowid"
     . " WHERE ur.id = 999104001"  // scanstation->use right ID
     . "   AND u.entity = ".(int)$conf->entity
     . " ON DUPLICATE KEY UPDATE value = '/custom/scanstation/scan_station.php'";
```

- ✅ Działa natychmiast dla wszystkich istniejących operatorów
- ❌ Nowi operatorzy wymagają ponownego kliknięcia (lub kombinacji z Opcją B)

---

## Rekomendacja

**B + C razem:**
- C (przycisk admina) — jednorazowe ustawienie dla istniejących operatorów
- B (trigger) — auto-ustawia dla każdego nowego operatora przy pierwszym logowaniu

---

## Pliki do modyfikacji / stworzenia

| Plik | Zmiana |
|------|--------|
| `core/triggers/interface_99_modScanStation_ScanStationTriggers.class.php` | Nowy plik — trigger USER_LOGIN (Opcja B) |
| `admin/setup.php` | + przycisk UPSERT home dla operatorów (Opcja C) |
| `modScanStation.class.php` | + rejestracja triggera w `$this->module_parts['triggers'] = 1` |
