# AutoKuća — izdanje za cPanel (PHP + MySQL/MariaDB)

**Verzija:** 0.2-cpanel — pilot/MVP, **ne produkcijski verificiran**. Ne zahtijeva Docker, Python, SSH niti Composer za instalaciju web-aplikacije. Pripremljen je za standardnu strukturu cPanel hosting računa.

> **Važno:** Ovo je samostalna PHP implementacija funkcija prethodnog Python/Docker MVP-a. **Ne učitava automatski postojeću PostgreSQL/SQLite bazu** niti dokumente iz stare verzije. Ako ste prethodnu verziju već koristili sa stvarnim podacima, nemojte ju zamijeniti bez zasebnog plana migracije.

## 1. Što hosting mora podržavati

- **cPanel** s File Managerom i MySQL/MariaDB bazama (Database Wizard / MySQL Database Wizard).
- **PHP 8.2 ili noviji** na domeni (MultiPHP Manager ili Select PHP Version).
- PHP ekstenzije: **PDO MySQL (`pdo_mysql`)**, **fileinfo**, **zlib**, **OpenSSL**; za arhiviranje dokumenata u backupu i **zip / ZipArchive**.
- **HTTPS (SSL/TLS)** za instalaciju i prijavu. Aplikacija odbija pristup putem običnog HTTP-a.
- Dovoljno prostora za bazu + dokumente + lokalne kopije. Za intenzivan svakodnevni rad i velik broj datoteka preporučuje se bolji poslovni hosting ili VPS, ne najjeftiniji dijeljeni paket.
- Pravo upisa u direktorij `autokuca_private`, rad PHP-a i cPanel **Cron Jobs** za automatske backupove.

**Nemojte sve datoteke prebaciti u `public_html`!** Privatne datoteke i dokumenti moraju biti IZVAN javnog web direktorija.

## 2. Raspakiravanje kroz cPanel File Manager

ZIP ima ovu strukturu:

```text
[HOME direktorij vašeg cPanel računa]
├── public_html/
│   └── autoapp/
│       ├── index.php
│       ├── install.php
│       ├── .htaccess
│       └── assets/
│           ├── style.css
│           └── extra.css
└── autokuca_private/
    ├── bootstrap.php
    ├── views.php
    ├── handlers.php
    ├── reports.php
    ├── schema.php
    ├── INSTALACIJSKI_KLJUC.txt
    ├── bin/backup.php
    └── data/
        ├── uploads/
        └── backups/
```

1. Prijavite se u cPanel i otvorite **File Manager**.
2. Idite u **Home** direktorij (onaj u kojem već postoji `public_html`, npr. `/home/mojkorisnik/`).
3. **Upload** cijeli ZIP u taj Home direktorij, a potom ga tamo **Extract**. Struktura direktorija iz ZIP-a mora se spojiti s postojećim `public_html` (ništa od vaših postojećih datoteka se ne bi smjelo prepisati osim ako već imate direktorij `autoapp`).
4. Potvrdite da su **`autokuca_private` i `public_html` jedan do drugoga**, a ne jedan unutar drugoga. Provjerite da `public_html/autoapp/index.php` postoji.
5. Ako koristite subdomenu čiji je **document root** npr. `public_html/autoapp`, pristupate joj kroz `https://app.vasadomena.hr/` (odabrana subdomena mora pokazivati upravo na `autoapp`). Ako ostaje pod glavnom domenom, URL je `https://vasadomena.hr/autoapp/`.
6. Postavite aktivan SSL certifikat i preusmjeravanje glavne web-stranice na HTTPS prema postavkama hostinga.

**Napomena za drugačiju putanju:** Aplikacija u `index.php` i `install.php` učitava privatni direktorij putem `__DIR__.'/../../autokuca_private'`. To je točno za `HOME/public_html/autoapp`. Ako hosting koristi drugu strukturu docroota, te dvije putanje treba prilagoditi prije instalacije. Ne stavljajte privatni direktorij u web-root kao zaobilazno rješenje.

## 3. MySQL baza u cPanelu

1. Otvorite **Database Wizard** (nekad se zove **MySQL Database Wizard**).
2. Kreirajte novu bazu, primjerice `autokuca`.
3. Kreirajte zasebnog korisnika baze i snažnu nasumičnu zaporku.
4. Dodijelite korisniku prava za tu bazu; za instalaciju trebaju **CREATE, ALTER, SELECT, INSERT, UPDATE, INDEX** i ostala prava koja Wizard nudi (uobičajeno `ALL PRIVILEGES` nad isključivo tom bazom).
5. Zapišite **cijelo ime baze i korisnika, uključujući cPanel prefiks**, npr. `mojuser_autokuca`.
6. U većini cPanel hostinga MySQL host je `localhost`, port `3306`. Provjerite s hostingom ako je drugačije.

## 4. Instalacija u pregledniku

1. U File Manageru otvorite `autokuca_private/INSTALACIJSKI_KLJUC.txt` i kopirajte sadržaj. Taj jednokratni ključ nemojte javno dijeliti.
2. Otvorite:

   - `https://vasadomena.hr/autoapp/install.php` **ili**
   - `https://app.vasadomena.hr/install.php`, ako koristite zasebnu poddomenu u direktoriju `autoapp`.

3. Upišite instalacijski ključ, MySQL host, bazu, korisnika i zaporku. Upisujete i ime/e-mail te početnu zaporku vlasnika (barem 12 znakova).
4. Kliknite **Instaliraj aplikaciju**.
5. Sustav će napraviti tablice i početne kategorije, kreirati vlasnički račun, spremiti privatnu konfiguraciju, zaključati instalater i otvoriti stranicu prijave.
6. **Nakon instalacije uklonite `public_html/autoapp/install.php`** iz javnog direktorija.
7. Prijavite se i za test unesite jedno probno vozilo, PPMV, servisni trošak i probnu prodaju te provjerite Excel/PDF.

Ako aplikacija javlja da nedostaje PDO MySQL, u cPanelu pokušajte uključiti `pdo_mysql` u PHP Selector-u. Ako nije dostupan, zatražite od hostinga. Ako izbaci grešku baze, provjerite prefikse i prava korisnika.

### Očekivana adresa

- **Podfolder:** `https://vasadomena.hr/autoapp/` → aplikacija putem `index.php` (ako web server automatski poslužuje `index.php`).
- **Podomena:** `https://app.vasadomena.hr/` → kada poddomena pokazuje na `public_html/autoapp`.

### Ako je web server drugačije konfiguriran

Na standardnom Apache/LiteSpeed cPanel hostingu `index.php` se učitava kao početna stranica. Ako nije, otvorite `.../autoapp/index.php?p=login` ili zatražite od hostinga da `index.php` bude DirectoryIndex.

## 5. Što ova verzija uključuje

- Korisnički login sa sigurnim password hashom, CSRF zaštitom, osnovnim ograničenjem pokušaja prijave te role: vlasnik, administrator, računovodstvo, prodaja, servis i pregled.
- Vozila: VIN, marka, model, godina, kilometraža, lokacija, dobavljač, status, nabavna i tražena cijena, PPMV, homologacija, registracija.
- Direktni troškovi vozila: kategorija, iznos, datum, opis, dobavljač, broj računa, plaćanje, naknadno uređivanje s audit-logom.
- Troškovi tvrtke i drugi prihodi, kategorije koje administrator sam dodaje.
- Prodaja vozila: kupac, cijena, račun, datum i status plaćanja.
- Financijska kartica vozila: zbroj nabave i troškova, bruto razlika, okvirna marža.
- Upozorenja za dokumente PPMV/homologaciju, nedostajući PPMV trošak, istek registracije (30/7 dana) i vozila na zalihi >90 dana.
- Privatna pohrana vozilskih dokumenata (PDF/JPG/PNG/WEBP do 12 MB) izvan `public_html`, kontrola pristupa preuzimanju.
- Financijski izvještaji s datumskim filtrima, vrstama troškova, kategorijom i vozilom; **XLSX i PDF export**. XLSX sadrži hrvatske znakove; u PDF-u su u ovom MVP-u dijakritici transliterirani (npr. `č` → `c`).
- Audit-log unosa/izmjena i preuzimanja dokumentacije/izvoza.

## 6. Sigurnosna kopija / backup preko Cron Jobs

Privatna datoteka `autokuca_private/bin/backup.php` može napraviti **MySQL SQL dump (`.sql.gz`) i ZIP arhivu dokumenata**, uz SHA-256 kontrolnu listu, ako hosting ima PHP CLI, PDO MySQL, zlib i ZipArchive.

**Ručno pokretanje**, ako hosting dopušta Terminal/SSH:

```bash
/usr/local/bin/php /home/CPANEL_KORISNIK/autokuca_private/bin/backup.php
```

**Automatski dnevni backup** kroz cPanel **Advanced → Cron Jobs**:

- Minute: `0`
- Hour: `2`
- Day / Month / Weekday: `*`
- Command:

```bash
/usr/local/bin/php /home/CPANEL_KORISNIK/autokuca_private/bin/backup.php
```

Neki hostinzi za odabranu PHP verziju koriste `/usr/local/bin/ea-php82` ili drugi put; u tom slučaju promijenite interpreter. U cPanelu postavite **Cron Email** adresu kako biste vidjeli uspjeh ili pogrešku skripte. Ako hostingova Cron Email opcija nije pouzdana, konfigurirajte vanjski nadzor.

Datoteke se pohranjuju u `/home/CPANEL_KORISNIK/autokuca_private/data/backups/`. Skripta briše **vlastite lokalne kopije starije od 30 dana**. Koristi SQL `SHOW CREATE TABLE` i dump vrijednosti u `.sql.gz`. Pri vrlo velikoj bazi mogla bi prijeći ograničenja shared hostinga; tada koristite službeni MySQL backup hostinga.

### KRITIČNO: ovo još uvijek nije pravi off-site backup

Automatska kopija je **na istom hostingu**. Ako hosting nestane ili račun bude kompromitiran, moguće je izgubiti i aplikaciju i kopiju. Uz ovaj Cron **obavezno** uključite i cPanel/hosting backup na drugu infrastrukturu, s dnevnom retenzijom i periodičnim testom povrata; ili automatizirajte prijenos na zaseban backup storage preko hostinga/SSH-a.

**Automatsko slanje backupa na Google Drive/Gmail nije uključeno u ovom MVP-u.** Kopije preko e-maila, osobito s osobnim podacima, nisu preporučena primarna zaštita. Sustav nema PITR/WAL mogućnost; najveći mogući gubitak kod dnevnog backupa je skoro 24 sata.

### Obnova (na zasebnom testnom okruženju)

1. Obnovite bazu iz odgovarajuće `autokuca_db_*.sql.gz` koristeći `gunzip` + mysql CLI ili phpMyAdmin (ovisno o mogućnostima i veličini). **Nemojte prvo brisati produkcijsku bazu!**
2. Izdvojite `uploads/` iz arhive `autokuca_documents_*.zip` i vratite u privatni `data/uploads` direktorij.
3. Zadržite ili ponovno napravite `config.php` za novu bazu; provjerite ovlasti i `installed.lock`.
4. Provjerite broj vozila, troškova, prodaja, dokumentaciju i mogućnost preuzimanja na testnoj domeni.
5. Držite i PHP aplikacijski kod/ZIP verzije koja odgovara podacima.

## 7. Sigurne nadogradnje

1. Prije nadogradnje **provjerite uspješan backup i mogućnost obnove** na testnoj kopiji.
2. Novi kod se prvo testira na **zasebnoj staging domeni i kopiji baze**; nikad ne testirajte nadogradnju na jedinoj bazi.
3. **Ne brišite** `autokuca_private/config.php`, `installed.lock`, `data/uploads/` ili `data/backups/`.
4. Novi PHP i CSS mogu se ažurirati kroz File Manager. Promjene strukture baze moraju imati posebne verzionirane migracije. Ovo je **schema v1** i trenutačno ne sadrži automatski upgrade/migration runner za buduće promjene.
5. Nakon updatea provjerite login, trošak vozila, prodaju, izvještaj i dokument.
6. Ako se shema promijeni, samo vraćanje starog PHP koda nije nužno dovoljno; može trebati i povrat baze.

## 8. Poznata ograničenja (pročitajte prije stvarnih podataka)

- **NIJE dovršen produkcijski ERP ili računovodstveni software.** Nema obračun PDV-a, posebnog postupka oporezivanja marže, više valuta, kontnog plana, računovodstvenog vrednovanja zaliha, potraživanja/djelomičnih uplata, automatskog obračuna plaća, CRM-a, integracija oglasa ni naprednog modul-buildera.
- Nisu implementirani MFA/2FA, napredna pravila autorizacije nad pojedinačnim dokumentima, automatizirana pohrana izvan hostinga, PITR, alarm na neuspjeli backup ili redoviti automatski restore-testovi.
- **Nije testirano na konkretnom cPanel hostingu** jer njegove postavke nisu poznate; lokalno su provjereni PHP sintaksa i samostalni XLSX/PDF generator. End-to-end rad s MySQL bazom nije se mogao izvršiti u ovom okruženju.
- Pilot aplikacija nema migraciju podataka iz prethodne Python/PostgreSQL verzije.
- Upozorenja se računaju pri prikazu aplikacije, nisu aktivne email/push notifikacije.
- Broj vozila prikazanih u pojedinoj listi je ograničen (200); izvještaj do 10.000 stavki, ekran prikazuje prvih 500.
- Ne podrazumijeva se usklađenost s GDPR-om samo zato što se pohranjuju datoteke privatno. Za rad sa stvarnim klijentskim/osobnim podacima treba sigurnosni i pravni pregled.

## 9. Sigurnosne smjernice za hosting

- Aktivirajte SSL/TLS i za cPanel i za aplikaciju; izbjegavajte pristup preko javnog Wi-Fi bez HTTPS-a.
- Koristite snažne zasebne lozinke za cPanel, MySQL i sve korisnike; uključite 2FA na samom **cPanel računu**.
- File permissions: PHP datoteke 644, direktoriji 755 (uz stroža prava za privatni config i dokumente kada hosting to dopušta); **nikad 777**.
- Zabranite public directory listing (predviđen `.htaccess`); ne pohranjujte SQL backup u `public_html`.
- Ako hosting podržava WAF, zaštitu od malvera i automatske dnevne off-site backupe, uključite ih.
- Nemojte klijentu predstavljati ovaj MVP kao dovršen produkcijski financijski sustav bez implementacije ostalih kontrola.

## 10. Tipične greške

| Simptom | Što provjeriti |
|---|---|
| Nedostaje privatni direktorij | Je li `autokuca_private` uz `public_html` u Home direktoriju? |
| HTTP 403 „Obavezan je HTTPS” | SSL certifikat, otvorite `https://` URL |
| PDO MySQL nije dostupan | PHP Extensions / Select PHP Version / kontaktirati hosting |
| MySQL „Access denied” | Naziv baze i korisnika s prefiksom, lozinka, prava pristupa |
| Prijava ne radi | Koristite e-mail i početnu zaporku koju ste unijeli u instalater |
| Upload dokumenta ne uspije | PHP upload_max_filesize / post_max_size te dozvole `data/uploads` |
| PDF ima slova bez kvačica | Poznato ograničenje MVP PDF generatora, XLSX je UTF-8 |
| Backup „ZipArchive is not enabled” | Uključiti PHP zip i za CLI PHP verziju korištenu za Cron Jobs |
| „500 Internal Server Error” | PHP error_log, verzija PHP-a, pravila `.htaccess` ili privatne putanje |

---

**Sastavljeno kao početni radni paket za testiranje i daljnji razvoj.** Prvo ga instalirajte na zasebnu testnu domenu, unesite probne podatke i potvrdite kompatibilnost hostinga prije uvođenja u stvarnu auto kuću.
