# Changelog

## v3.26.0 — MICROSOFT ENTRA ID PRIJAVA

- Postojeći email/password login je zadržan, a dodat je Microsoft 365 login preko OIDC Authorization Code Flow-a i PKCE S256.
- Oba načina prijave koriste isti `user_id` PHP session i postojeći RBAC; Microsoft token ne dodeljuje niti menja role.
- Prvi login bezbedno povezuje samo jednog postojećeg korisnika po email/UPN kandidatu, zatim svi naredni login-i koriste nepromenljivi Entra `oid`.
- Dodate su tenant, issuer, audience, nonce, state, signature i expiry provere, kontrolisane greške i audit događaji bez tokena/tajni.
- Dodati su Composer OIDC dependency, SQL upgrade/rollback, konfiguracioni primer i Entra QA provere.

## v3.25.1 — ZAŠTITA PRILOGA OD DIREKTNOG HTTP PRISTUPA

- Root i `uploads/tickets/.htaccess` odbijaju svaki direktan HTTP zahtev ka fizičkim prilozima, dok PHP zadržava filesystem pristup.
- `attachment_download.php` učitava kompletan ticket kontekst, koristi postojeći centralni RBAC i zadržava enumeration-safe `404` za IDOR pokušaje.
- Dodati su stroga validacija attachment ID-a i fizičkog imena, `realpath()` containment provera i bezbedniji `Content-Disposition` header.
- Postojeći random stored filename, MIME validacija, download ponašanje, UI i baza nisu menjani.

## v3.25.0 — SECURITY & PERFORMANCE PATCH

- Login rate limit više nije vezan za PHP session, već za persistent `login_attempts` tabelu sa HMAC identifikatorima, progresivnim delay-em i privremenim account/IP blokadama.
- Session bootstrap koristi strict mode, cookie-only sesije, isključen trans_sid i trusted-proxy-aware HTTPS/IP detekciju.
- Dodavanje i pretraga učesnika imaju centralnu server-side dozvolu; običan učesnik ne može da dodaje druge učesnike, dok kreiranje novog tiketa zadržava CSRF-zaštićen autocomplete.
- `tickets.php` koristi `COUNT(*)`, validirani `page/per_page`, parametrizovane `LIMIT/OFFSET` vrednosti i paginaciju koja čuva sve filtere.
- Dodata je idempotentna MariaDB migracija za login tabelu i kompozitne comment/event indekse; postojeći dovoljni indeksi nisu duplirani.
- QA/runtime, SQL i razvojni dokumenti blokirani su kroz `.htaccess`, uz `.productionignore` manifest za produkcioni paket.
- CSS vizuelni rezultat nije menjan; uklonjene su samo dve identične globalne deklaracije. JavaScript promena je ograničena na bezbedno sklapanje participant search URL-a.

## v3.24.6 — EVIDENCIJA DO DNA TIKET KARTICE

- Na desktop prikazu lista `Poslednji događaji` koristi sav raspoloživ prostor desne kolone do dna dela za dodavanje komentara.
- Kada događaja ima više, lista skroluje unutar kartice i ne povećava niti prelazi visinu glavnog dela tiketa.
- Tablet i mobilno ograničenje visine timeline-a nisu menjani.

## v3.24.5 — PONOVNO OTVARANJE FORME ZA OPREMU

- Dugme `Dodaj opremu` uz filtere sada pouzdano otvara postojeći panel i nakon što je korisnik prethodno zatvorio panel minusom.
- Zadržan je postojeći link kao fallback, dok klijentsko ponašanje sprečava problem kada je URL već `equipment.php?create=1#dodaj-opremu`.

## v3.24.4 — DODAVANJE OPREME SAMO U FILTER PANELU

- Link `Dodaj opremu` potpuno je uklonjen iz bočne navigacije; u meniju ostaje samo glavna stavka `Oprema`.
- Akcija `Dodaj opremu` ostaje uz `Filteri opreme` i nastavlja da otvara postojeću formu bez promene funkcionalnosti.

## v3.24.3 — PODSTAVKA ZA DODAVANJE OPREME

- `Dodaj opremu` je premešten u vizuelno uvučenu podstavku glavne administratorske stavke `Oprema`; više nije zasebna ravnopravna opcija menija.
- Postojeća forma, URL, prava pristupa i funkcionalnost unosa opreme nisu menjani.

## v3.24.2 — ADMINISTRATORSKE UI/UX KOREKCIJE

- Gornja polja `Ime i prezime` i `Email adresa` u formi za uređivanje korisnika lokalno su sužena i vertikalno kompaktnija; ostala polja, opcije i akcije nisu menjani.
- Kategorije u `Podešavanje zahteva` imaju ravnomernije poravnanje, razmak i poziciju akcija, a prioriteti koriste manji lokalni padding i gap.
- Panel `Odeljenja / Lokacije` nije menjan.
- Filteri opreme i akcija `Dodaj opremu` organizovani su u jednu jasnu celinu; postojeća forma se otvara po potrebi i zadržava sva polja i postojeću POST logiku.
- U administratorsku navigaciju dodat je link `Dodaj opremu`, koji otvara istu postojeću formu na `equipment.php`.
- Dodati stilovi su ograničeni na konkretne administratorske komponente i postojeće responsive breakpoint-e; nema promene backend logike, baze, rola, boja ili globalnih kontrola.

## v3.24.1 — PREGLEDNIJA ADMINISTRACIJA KORISNIKA

- `Administracija → Korisnici` koristi kompaktnu tabelu sa postojećim podacima: korisnik, uloga, entitet, status, datum kreiranja i akcije.
- Postojeće uređivanje naloga, pregled profila i brisanje ostaju dostupni uz svaki red, bez promene RBAC modela.
- Forma `Novi korisnik` otvara se po potrebi i koristi postojeće komponente; novi nalog mora da promeni privremenu lozinku pri prvoj prijavi.
- Serverska pretraga i paginacija od 10 naloga ostaju parametrizovane i rade zajedno.
- Dodata je serverska validacija dužina prema stvarnim `users` kolonama i zadržan postojeći `PASSWORD_DEFAULT` hashing.
- Desktop, tablet i mobilni raspored su provereni; na uskim ekranima samo tabela koristi lokalni horizontalni scroll.
- SQL šema i `baza.sql` nisu menjani.

## v3.24.0 — XLSX OPENXML FIX I MAGACIN OPREMA

- Identifikovan i ispravljen konkretan Excel Repair root cause: `xlsx_equipment_summary_xml()` je u `/xl/worksheets/sheet2.xml` (`Sažetak`) zasebno emitovao type i status sekcije sa istim row referencama (`r="4"`, `r="5"`), što je stvaralo duple SpreadsheetML `<row>` elemente. Novi generator gradi jednu mapu ćelija po broju reda i svaki `<row r="N">` emituje jednom.
- Dodata je OpenXML validacija pre slanja export-a: očekivani package parts, parsabilan worksheet XML kada je DOM dostupan, jedinstveni/rastući row i cell reference-i, validni style indeksi i zabrana cached vrednosti `NaN`, `Infinity`, `undefined` i `null`.
- `Sažetak` nastavlja da koristi server-side numeričke zbirne vrednosti bez Excel formula; dodat je i dinamički `Magacin` count.
- `equipment.user_id` postaje nullable, dodaje se `equipment.is_in_warehouse`, warehouse indeks i nova `equipment_assignment_events` tabela za audit promene korisnik ↔ nedodeljeno/Magacin.
- FK `equipment.user_id → users.id` menja se sa `ON DELETE CASCADE` na `ON DELETE SET NULL`; `users.php` više ne briše opremu pri brisanju naloga, nego je razdužuje i čuva u evidenciji.
- `equipment.php` dozvoljava unos/izmenu bez korisnika, ima checkbox `Oprema se nalazi u magacinu`, warehouse filter i postojeći pill stil. Dodela korisniku automatski postavlja `Magacin=NE`; označavanje Magacina postavlja `user_id=NULL` i `assigned_at=NULL`.
- Equipment liste i export koriste `LEFT JOIN users`, pa nedodeljena oprema ostaje vidljiva.
- XLSX generator po potrebi dodaje treći worksheet `Magacin` sa istim 12 kolonama kao `Pregled opreme`; nedodeljena oprema ima prazne ćelije za Korisnik/Sektor/Datum dodele/Email.
- Nema promene ticketing/RBAC dizajna ili prava pristupa; equipment administracija i export ostaju dostupni samo sistemskom administratoru.

## v3.23.0 — ADMIN USERS, EQUIPMENT PAGINATION I XLSX EXPORT

- `users.php` prebačen je sa učitavanja svih naloga i client-side filtera na server-side pretragu i paginaciju od 10 korisnika po stranici.
- User search koristi parametrizovane `LOCATE` uslove za postojeća profilna polja i `EXISTS` za role, pa pagination broji filtrirani skup bez JOIN duplikata.
- Zadržane su postojeće akcije kreiranja, pregleda profila, izmene, čuvanja, aktivacije/deaktivacije, dodele rola i brisanja.
- `Novi korisnik` ostaje u postojećem desktop grid-u, ali bez sticky top offset-a kako bi početak desne i leve kartice bio poravnat.
- `equipment.php` koristi centralni filter helper, server-side aggregate + paginaciju 10/25/50 i pregledniju tabelu sa postojećim podacima.
- UI tip filter koristi `Laptop`, `Telefon`, `Monitor`, `Tablet`, `Ostalo`; ne-glavni postojeći tipovi ostaju sačuvani u bazi i ulaze u `Ostalo` filter/sažetak.
- `equipment_export.php` više ne koristi CSV i generiše pravi XLSX za kompletan filtrirani skup. Pagination parametri se namerno ne primenjuju na export.
- Dodat `app/xlsx.php`: izolovan OpenXML writer sa `ZipArchive`/`PharData` packaging-om, worksheet-ima `Pregled opreme` i `Sažetak`, formatima datuma, statusnim stilovima i tekstualnim identifikatorima bez formula execution-a.
- Nema promene SQL šeme, novih indeksa niti permission modela; users/equipment/export ostaju iza `require_system_admin()`.

## v3.22.3 — EVIDENCIJA / AUDIT LAYOUT REGRESSION

- Ispravljen desktop flex regression zbog kog je `ticket-evidence-card` mogao da se skupi na visinu header-a kod korisnika koji ima „Ažuriranje tiketa“ i „Učesnike tiketa“.
- Uklonjena kombinacija `flex: 1 1 0`, `min-height: 0` i `overflow: hidden` sa spoljne kartice Evidencije; nova konfiguracija `side-stack` koristi content-driven minimalnu visinu, a Evidencija više nema nulti flex-basis niti clipping koji su skrivali sadržaj.
- Desktop timeline ponovo koristi postojeći `max-height: 518px` i interni `overflow-y: auto`, tako da 20+ događaja ne rasteže stranicu beskonačno.
- `align-content: start` sprečava CSS Grid da sa 2–6 događaja rasteže pojedinačne `<li>` kartice kroz višak raspoložive visine.
- Backend event query, role prava, audit sadržaj i responsive breakpoint-i nisu menjani. Nema SQL migracije.

## v3.22.2 — ACCOUNT MOBILE CTA DIMENZIJE

- Ispravljen mobile-only problem sa previsokim dugmadima „Sačuvaj fotografiju“ i „Sačuvaj novu lozinku“.
- Root cause je postojeći `flex: 1 1 180px` na `.inline-actions .button` koji na phone layout-u sa vertikalnom flex osom pretvara 180 px `flex-basis` u visinu dugmeta.
- Dodat je lokalni `@media (max-width: 640px)` override samo za primarne CTA dugmiće u `.profile-photo-form` i `.password-form`: `flex: 0 0 auto`, `min-height: 48px`, `padding-block: 12px`.
- Nisu menjani globalni `.button`, ostala account dugmad, boje, gradienti, radius, fontovi, senke, širine niti funkcionalnost.
- Tablet/desktop layout i v3.22.1 CTA korekcije ostaju nepromenjeni. Nema SQL migracije.

## v3.22.1 — DISPLAY NAZIVI ROLA I MOBILE BUTTON DIMENZIJE

- `USERF` prikazni naziv promenjen je na „Zaposleni — Fondacija“, a `USERDS` na „Zaposleni — Dečije selo“; interni kodovi, ID-jevi i permissions nisu menjani.
- `business_role_definitions()` ostaje centralni izvor user-friendly naziva, uz usklađen DB update kroz `upgrade_v3_22_1.sql`.
- `format_event_value()` za odgovorne role više ne dodaje tehnički kod u zagradama, pa istorijski `VHCF → ICTF` zapis u UI-u postaje „Koordinator službenih vozila — Fondacija → ICT podrška — Fondacija“.
- Istorijski `ticket_events` podaci nisu menjani; display se generiše pri prikazu.
- Na postojećem breakpoint-u do 640 px ciljano je poništen `flex-basis: 180px` samo za quick-access i ticket-create akcije, uz minimalnu touch visinu 48 px.
- Desktop i tablet button dimenzije, boje, fontovi, radius, senke i raspored nisu menjani.

## v3.22.0 — F/DS ORGANIZACIONA SEGMENTACIJA

- Dodate su DS varijante postojećih poslovnih uloga bez nove baze ili paralelnog permission sistema.
- Exact-role routing sprečava da F processing uloga automatski dobije DS tiket i obrnuto.
- Admin izbor rola ostaje dinamičan iz tabele `roles`; osnovna F/DS uloga korisnika mora biti jednoznačna.
- Desktop evidencija koristi raspoloživu visinu `ticket-main` reda i interni scroll bez proizvoljne fiksne visine.
- Dodata je idempotentna data migracija `upgrade_v3_22_0.sql`.

## v3.21.3 — DASHBOARD, EVIDENCIJA I PROFILNI MENI

- Dodat je konzistentan 18 px vertikalni razmak između „Dodeljena oprema“ i „Najnoviji zahtevi“.
- „Najnoviji zahtevi“ dobijaju lokalni, diskretan hover feedback bez promene tabele ili vizuelnog identiteta.
- Lokalni `.table-wrap` za „Najnovije zahteve“ koristi horizontalni scroll i na tablet širini, čime se sprečava odsecanje kolona između 761 i 900 px.
- „Poslednji događaji“ koriste lokalni scroll kontejner maksimalne visine 518 px, približno za šest standardnih timeline kartica.
- Uklonjen je backend `LIMIT 20` nad evidencijom tiketa, tako da stariji događaji ostaju dostupni kroz interni scroll.
- „Aktivni zahtevi“ se u profilnom meniju više ne renderuju običnim korisnicima bez dodatne uloge; sistemski administratori i korisnici sa dodatnim ulogama zadržavaju statistiku.
- COUNT upit za aktivne zahteve se ne izvršava kada se statistika običnom korisniku ne prikazuje.
- Nema promene SQL šeme niti migracije baze.

## v3.21.2 — MOJI TIKETI I UI SPACING

- Ispravljen root cause zbog kog učesnik tiketa nije video tiket u prikazu „Moji tiketi“.
- `my_tickets_access_sql()` sada obuhvata podnosioca, direktno zaduženog korisnika i `ticket_participants` relaciju preko `EXISTS` upita.
- Nema JOIN multiplikacije rezultata, pa isti tiket ostaje prikazan samo jednom i kada korisnik ima više odnosa prema njemu.
- Role/timsko zaduženje ostaje u zasebnom prikazu „Tiketi za koje sam zadužen“; autorizacija nije proširena na nepovezane korisnike.
- Dugmad „Sačuvaj izmene“ i „Preuzmi tiket“ razdvojena su postojećim grid/gap layout obrascem bez promene vizuelnog identiteta.
- Ažurirani su tekst prikaza, QA regresioni scenariji i cache verzija CSS/JavaScript asseta.
- Nema promene SQL šeme niti migracije baze.

## v3.21.0 — AUTOMATSKI ISTEK KORISNIČKE SESIJE

- Uveden centralni serverski session timeout: 600 sekundi aktivnosti + 60 sekundi upozorenja.
- Uklonjeno automatsko osvežavanje `last_activity` na svakom HTTP/AJAX zahtevu.
- Top-level navigacija i klasično slanje forme računaju se kao aktivnost; XHR/JSON/prefetch/background zahtevi su isključeni.
- Dodate CSRF-zaštićene rute `session_activity.php` i `session_extend.php`.
- `logout.php` ostaje jedina centralna ruta za invalidaciju i sada podržava postojeći GET i kontrolisani POST/JSON tok.
- Dodat modal „Da li još uvek radite na sistemu?“ sa zaključanim prikazom i odbrojavanjem od 60 sekundi.
- Dodat throttled activity manager zasnovan na vremenskim oznakama, sa proverom posle sleep/visibility/focus događaja.
- Dodata cross-tab sinhronizacija aktivnosti, produženja i odjave preko BroadcastChannel i storage fallback-a.
- Dodata kontrolisana obrada 401/419 odgovora bez prikaza sirovih serverskih grešaka.
- Nema promene baze podataka.


## v3.20.0 — SEC-AVATAR-IDOR-PREVENTION

- Uklonjen `user_id` iz URL-a privatnog avatara.
- `serve_avatar.php` sada bira avatar isključivo prema `$_SESSION['user_id']`.
- Svi query parametri prema avatar endpoint-u vraćaju HTTP 403.
- Fotografije drugih korisnika zamenjene su postojećim inicijalima/fallback prikazom.
- Dodata centralna provera stvarnog MIME tipa, image type-a, ekstenzije i fizičke lokacije avatar fajla.
- Zadržana Apache zabrana direktnog pristupa direktorijumu `uploads/avatars`.
- SQL struktura nije menjana.

## 3.19.0

- Implementirana kontrola pristupa korisničkim avatarima pod oznakom `SEC-AVATAR-ACCESS-CONTROL`.
- Dodat `serve_avatar.php` endpoint sa proverom aktivne sesije, parametrizovanim DB upitom i strogo numeričkim `user_id` parametrom.
- HTML prikaz avatara više ne koristi direktnu putanju `uploads/avatars/...`.
- Dodate zaštite od path traversal-a, apsolutnih putanja, null-byte vrednosti, MIME/ekstenzija neslaganja i pristupa fajlovima van avatar direktorijuma.
- Direktan HTTP pristup `uploads/avatars` vraća 403 preko Apache pravila.
- Avatar odgovori koriste `Cache-Control: private, no-store`, `X-Content-Type-Options: nosniff` i `Cross-Origin-Resource-Policy: same-origin`.
- Login placeholder promenjen je u `ime.prezime@sos-decijasela.rs`.
- Uklonjen je distribuirani `error_log` fajl iz deployment paketa i blokiran njegov javni pristup.
- Nema SQL izmene.

## 3.18.0

- Ispravljen mobilni profilni dropdown tako da stavka „Odjava“ bude vidljiva na širinama 320, 375, 390, 414 i 768 px.
- Mobilni dropdown sada ima ograničenu visinu, skrolabilnu listu linkova, vidljiv footer i viši `z-index`; desktop pravila nisu menjana.
- Zadržana je postojeća CSRF-zaštićena `logout.php` ruta i postojeće preusmerenje na login.
- Dodata prilagođena `404.php` stranica sa responsive prikazom, light/dark režimom i HTTP statusom 404.
- Dodato Apache `mod_rewrite` catch-all pravilo samo za nepostojeće fajlove i direktorijume.
- Nedostupan ili neovlašćen detalj tiketa sada koristi istu generičku 404 stranicu bez otkrivanja tehničkih detalja.
- „Mesto kvara“ više nije obavezno u HTML/PHP validaciji i prazna vrednost se čuva kao `NULL`.
- „Inventarski broj uređaja / osnovnog sredstva“ potvrđen je kao opciono polje; prefill iz opreme je zadržan.
- Dodata je tačna srpska klijentska i serverska poruka za prazan opis: „Molimo unesite opis problema.“
- Vrednosti ostalih polja ostaju sačuvane nakon serverske validacione greške.
- Dodata statička QA skripta `qa_v3_18.js`.
- Nema promene strukture baze podataka niti SQL migracije.

## 3.17.1

- Zamenjen privremeni/generisani logo originalnim SVG logotipom iz priloga.
- Ispravljeno uklapanje logotipa u postojeći element bez dodatnog unutrašnjeg razmaka.
- Dodat automatski cache-busting zasnovan na `filemtime()` vrednosti logo fajla, tako da zamena fajla pod istim nazivom odmah menja prikaz u pregledaču.
- CSS/JavaScript cache oznaka podignuta na `3.17.1`.
- Nema SQL izmena.

## 3.17.0

- Razdvojene su liste „Moji tiketi“ i „Tiketi za koje sam zadužen“.
- „Moji tiketi“ prikazuju isključivo tikete koje je prijavljeni korisnik otvorio.
- Prikaz „Tiketi za koje sam zadužen“ dostupan je samo korisnicima sa najmanje jednom aktivnom dodatnom ulogom.
- Zaduženi prikaz obuhvata direktno dodeljene tikete i tikete čija odgovorna uloga odgovara dodatnim ulogama korisnika.
- Dodata serverska HTTP 403 kontrola za nedozvoljene prikaze i direktne URL pokušaje.
- Poslovne uloge se učitavaju dinamički iz tabele `roles`; `USERF` ostaje osnovna korisnička uloga.
- Tekstualni SOS elementi na login stranici i nakon prijave zamenjeni su lokalnim logotipom organizacije.
- Nema promene strukture baze podataka niti SQL migracije.

## 3.16.0

- Uvedene poslovne uloge `USERF`, `OFCF`, `VHCF`, `ICTF` i `OTHF`.
- Uvedena relacija više-prema-više `user_roles` i evidencija `user_role_events`.
- Sistemsko administratorsko pravo izdvojeno je u `users.is_system_admin`.
- Kategorije i tiketi povezani su sa odgovornom ulogom preko `responsible_role_code`.
- Pristup listama, detaljima i prilozima sprovodi se serverski prema vlasniku, učesniku, odgovornoj ulozi ili sistemskom administratorskom pravu.
- Dodato preuzimanje tiketa, dodela članu odgovornog tima i prosleđivanje drugoj kategoriji/timu.
- Dodata grupna obaveštenja bez duplikata za sve aktivne članove odgovorne uloge.
- Dodati migracija, rollback, kontrolni upiti, model prava i QA scenariji.

## 3.15.1

- Ispravljeni responsive overflow i text-overlap slučajevi bez vizuelnog redizajna.
- Optimizovani cropper, pretraga korisnika i grupno DOM iscrtavanje.
- Dodati request-local cache za kategorije, prioritete i lokacije.
- Uklonjen N+1 obrazac pri prikazu promene zaduženja i optimizovan masovni upis obaveštenja.
- Dodate zaštite od open redirect-a, CSV formula injection-a, login timing-a i CSRF-a za odjavu/otvaranje obaveštenja.
- Dodate provere poslednjeg aktivnog administratora, validnog agenta i integriteta opreme.
- Nema SQL migracije i nema promene funkcionalnosti ili dizajna.

## 3.15.0

- Dodata CC funkcionalnost „Učesnici” pri kreiranju i pregledu tiketa.
- Dodata autocomplete pretraga aktivnih naloga po imenu i email adresi.
- Učesnicima su omogućeni pregled javne prepiske, komentarisanje i javni prilozi.
- Dodata obaveštenja učesnicima o dodavanju, statusima, komentarima i prilozima.
- Proširena autorizacija liste tiketa, panela i preuzimanja javnih priloga.
- Dodata tabela `ticket_participants` kroz `upgrade_v3_15.sql`.
- Interna komunikacija ostaje nedostupna krajnjim korisnicima i učesnicima.

## 3.14.0

- Brojač „Rešeni” objedinjuje statuse `resolved` i `closed`.
- Dopuna krajnjeg korisnika automatski ponovo otvara zatvoren tiket.
- Dodata evidencija i obaveštenje o automatskom ponovnom otvaranju.

## 3.13.2

- Ispravljen dark-mode kontrast dugmadi „Kopiraj” i stanja „Kopirano”.

## 3.13.1

- Ispravljen dark-mode kontrast administratorske stranice „Korisnici“.
- Ispravljena boja teksta dugmeta „Odjava“ u dark modu.
- Dizajn, raspored i light mode ostali su nepromenjeni.

## 3.13.0

- Dodato bezbedno brisanje kategorija, prioriteta i lokacija.
- Dodata provera korišćenja stavke na postojećim tiketima.
- Dodate potvrde brisanja i prilagođen raspored administratorskih dugmadi.

## 3.12.0

- Dodata administratorska promena korisničke lozinke sa obaveznom promenom pri prijavi.
- Dodata blokada pristupa sistemu dok označeni korisnik ne postavi novu ličnu lozinku.
- Dodata stranica `password_change_required.php`.
- Fiksiran položaj copy dugmadi za email i telefon.
- Ispravljen avatar sa inicijalima u korisničkom meniju.
- Dodata migracija `upgrade_v3_12.sql`.

## 3.11.0

- Naglašeno crveno dugme „Prijavi problem”.
- Podrazumevani prioritet novog zahteva promenjen na nizak.
- Ispravljeno odsecanje editora opreme unutar tabele.
- Događaji promene zaduženja prikazuju imena agenata.
- Događaj kreiranja tiketa prikazuje samo status „Otvoren”.

## 3.10.0

- Sakriveni događaji internih beleški i internih priloga od krajnjih korisnika.
- Uklonjen prikaz „Nije dodeljeno →” za javne komentare i priloge.
- Ispravljen raspored administratorske forme za dodelu opreme.
- Dodato dugme „Prijavi problem” uz korisničku opremu sa bezbednim automatskim popunjavanjem novog zahteva.
- Ažuriran tekst sekcije „Dodeljena oprema”.

## 3.9.0

- Uklonjen naziv aplikacije iz HTML title tagova i naslov panela promenjen u „Moj panel”.
- Ažuriran naziv Fondacije na login stranici i uklonjene tri promotivne kartice.
- Dodata administratorska stranica za kategorije, prioritete, lokacije, aktivnost i redosled.
- Prioritet tiketa promenjen iz ENUM u proširivi VARCHAR model.
- Omogućeno naknadno dodavanje javnih i internih priloga uz postojeći tiket.
- Dodata migracija `upgrade_v3_9.sql`.

## 3.8.0

- Redizajnirana forma „Novi zahtev” i uklonjen ručni unos naslova.
- Dodata polja za odeljenje/lokaciju, mesto kvara i inventarski broj uređaja / osnovnog sredstva.
- Dodati drag-and-drop izbor priloga, prikaz izabranih fajlova i pojedinačno uklanjanje.
- Uklonjeni automatski broj tiketa/datum iz forme i tekst iz podnožja svih stranica.
- Dodata migracija `upgrade_v3_8.sql` i konfigurabilna lista lokacija.

## 3.7.0

- Uklonjen tekst o prvoj instalaciji sa login stranice.
- Dodato slanje do 10 priloga uz novi zahtev, ukupno do 50 MB.
- Dodata tabela `ticket_attachments`, SQL migracija, autorizovano preuzimanje i fizičko čišćenje priloga pri brisanju tiketa.
- Dodate serverska i klijentska validacija broja, ukupne veličine, ekstenzije i MIME sadržaja fajlova.
- Dodata cPanel/PHP konfiguraciona dokumentacija.

## 3.6.1
- Fluidnije mikro-animacije kroz aplikaciju: kartice, dugmad, dropdown meniji, forme i navigacija.
- Redizajnirana login stranica sa jačim vizuelnim identitetom, boljim spacing-om, karticama koristi i modernijim login formularom.
- Password toggle na login strani koristi samo ikonicu.
- CSS/JS keš verzija podignuta na 3.6.1.

## 3.6.0

- Grafički redizajn celog interfejsa: sidebar, topbar, kartice, dashboard, tabele, forme, oprema, administracija korisnika i stranica Podaci o nalogu.
- Dodati konzistentni dizajn tokeni, ujednačena tipografija, finije senke, zaobljenja, hover stanja i mikro-animacije.
- Poboljšan responsive prikaz za tablet i mobilne uređaje.
- Zadržan cPanel-safe pristup: bez eksternih fontova, bez Composer-a i bez novih JavaScript biblioteka.
- CSS/JS keš verzija podignuta na 3.6.0.

## 3.6.0
- Administrator može trajno da obriše kompletan tiket iz sistema iz detalja tiketa.
- Brisanjem tiketa uklanjaju se komentari, događaji i povezana obaveštenja, pa zahtev nestaje i korisniku.
- Unapređena administracija opreme: filter po korisniku, tipu opreme, statusu i slobodna pretraga.
- Dodat pregled opreme grupisan po zaposlenom: „Ko je šta zadužio”.
- Dodat celokupan spisak opreme sa direktnim uređivanjem svake stavke.
- Dodat `equipment_export.php` za Excel-kompatibilni CSV izvoz trenutnog stanja opreme.
- CSS/JS keš verzija podignuta na 3.6.0.

## 3.5.5
- Unapređena administracija korisnika: kartični prikaz, statistika, pretraga i preglednije uređivanje naloga.
- Administrator može da menja ime i prezime i email adresu korisnika nakon kreiranja naloga.
- Uređivanje korisnika objedinjeno je u blok „Uredi nalog”.
- Format broja tiketa promenjen je u `SOS-YYYYMMDD-XNNNN`.
- Kod kategorije u broju tiketa: 1 IT, 2 održavanje prostora, 3 vozila, 4 ostalo.
- CSS/JS keš verzija podignuta na 3.5.5.

## 3.5.3
- Kartica Promena lozinke na stranici Podaci o nalogu sada se pravilno razvlači do kraja raspoložive kolone.
- Polja za unos lozinke koriste stabilniji grid raspored, sa ikonicom oka fiksne širine.
- CSS/JS keš verzija podignuta na 3.5.3.

# Changelog

## 3.5.2
- Stranica **Podaci o nalogu** dodatno je vizuelno preuređena.
- Sekcije **Profilna fotografija** i **Promena lozinke** ostaju jedna pored druge na desktop prikazu, uz širu i pregledniju karticu za promenu lozinke.
- Standardni browser `Choose file` input zamenjen je prilagođenom upload zonom.
- Dodat je drag-and-drop upload JPG/PNG profilne fotografije uz postojeći preview i izbor kadra.
- Kartice statusa na **Moj panel** sada koriste ikonice umesto slova O/R/Č.
- Oprema sada koristi odgovarajuće ikonice za laptop, telefon, tablet, monitor, docking station i ostalu opremu.
- CSS/JS keš verzija podignuta na 3.5.2.


## 3.5.0

- Objedinjene stranice za promenu lozinke i profilnu fotografiju u `account.php` pod nazivom **Podaci o nalogu**.
- `change_password.php` i `profile_photo.php` ostavljeni kao kompatibilni redirect linkovi.
- Promenjen redosled informacija o zaposlenom na stranici **Moj panel**.
- Poslednja prijava se upisuje preko vremenske zone aplikacije i MySQL konekcija pokušava da koristi isti time-zone offset.
- U administraciji korisnika dodat je kompletan pregled profila zaposlenog sa fotografijom, kontakt podacima, opremom i poslednjim zahtevima.
- CSS/JS keš verzija podignuta na 3.5.0.

# CHANGELOG

## 3.4.0

- Ispravljen upload JPG profilnih fotografija u okruženjima gde MIME detekcija ne vraća standardni `image/jpeg`.
- Dozvoljeni formati za profilnu fotografiju su svedeni na JPG i PNG.
- WebP više nije dozvoljen za novi upload.
- Dodati preview i izbor kadra profilne fotografije pre čuvanja.
- Korisnik može da prevuče fotografiju i podesi uvećanje; vidljivi kvadrat se čuva kao profilna fotografija.
- Dodata migracija `upgrade_v3_4.sql` bez procedura, da phpMyAdmin ne prikazuje napomenu `#1305 PROCEDURE ... does not exist`.
- CSS/JS keš verzija podignuta na 3.4.0.

## 3.3.0

- Sekcija „Dodeljena oprema” premeštena je iznad sekcije „Najnoviji zahtevi”.
- Dodata stranica `profile_photo.php` za samostalni upload profilne fotografije.
- Profilna fotografija se prikazuje na korisničkom panelu, u topbar korisničkom meniju i u sidebar kartici.
- Upload fotografije je ograničen na 2 MB i formate JPG, PNG i WebP.
- Dodata migracija `upgrade_v3_3.sql` i kolona `users.profile_photo`.
- Dugmad za prikaz lozinke sada koriste ikonicu oka umesto teksta „Prikaži/Sakrij”.
- CSS/JS keš verzija podignuta na 3.3.0.

## 3.2.0

- Dodata obaveštenja kroz zvonce u topbar-u.
- Dodat dropdown sa poslednjim obaveštenjima i brojem nepročitanih stavki.
- Dodata stranica `notifications.php`.
- Dodata samostalna promena lozinke kroz `change_password.php`.
- Uspešne poruke se automatski uklanjaju posle približno 25 sekundi.
- Dodat personalizovani blok „Informacije o zaposlenom” na početku „Moj panel” stranice.
- Dodata copy opcija za e-poštu i telefon korisnika.
- Dodata evidencija opreme kroz `equipment.php`.
- Dodat prikaz „Moja oprema” na korisničkom panelu.
- Admin može da upisuje profilne podatke zaposlenog.
- Dodata migracija `upgrade_v3_2.sql`.
- CSS/JS keš verzija podignuta na 3.2.0.

## 3.1.0

- Vizuelno zatezanje kompletnog interfejsa bez promene baze.
- Ujednačena tipografija kroz ceo sistem preko jedne sistemske font familije.
- Dodati blagi hover efekti, ulazne animacije i mikrointerakcije.
- Dodat personalizovani korisnički meni u gornjem desnom uglu.
- Dodat korisnički blok u sidebar-u.
- Dodat brojač aktivnih zahteva.

## 3.0.0

- Stabilizovan layout posle regresije u v2.
- Vraćena jednostavnija struktura slična prvoj funkcionalnoj verziji.
- Srpski interfejs i SOS boje.
- Responsive sidebar i osnovni dark mode.
