Nastanak
Izrada aplikacije "INFOS" za Savjetodavnu službu HOK-a započeta je u proljeće 2004-te godine, prateći izgradnju Savjetodavne službe, kad je Proizvodno zanatstvo uglavnom završeno.
Aplikacija je rađena LAMP tehnologijama i korištena je PHP baza razvijena u PZ aplikaciji. INFOS aplikacija zamišljena je kroz izgradnju modula:
- FAQ: često postavljana pitanja
- QA: pitanja i odgovori
- MM: multimedijalna galerija
Razvoj
Aplikacija se radi na hrvatskom jeziku, ali treba osigurati infrastrukturu za moguća proširenja na druge jezike/lokalizacije. Kako je tadj dio razvijen za PZ, ovdje je samo preuzeta cijela struktura.
Dalje rezrađujući modularnu strukturu razvijenu za PZ, izdvojio sam dio za prenos slika na server (engl. upload), unaprijedio ga u MM modul i dodao mogućnost rada s drugim tipovima datoteka (to je bilo zamišljeno, ali ne i izvedeno u praksi).
FAQ modul je relativno jednostavan: pitanja i odgovori razvrstani su u hijerarhijske grupe. Uz svako pitanje/odgovor mogu se dodati (engl. attach) datoteke iz multimedijalne galerije. Razlikujemo faq_admin i faq_author grupe korisnika, gdje faq_author može ažurirati samo svoje doprinose, a faq_admin ima sva prava.
QA modul prvenstveno je rađen za internu upotrebu. Tajnici UO-ova i POK-ova zaprimaju pitanja "na terenu" i odgovaraju ona koja znaju. Kad ne znaju odgovor, prijave se na QA modul i tu postave pitanje. Savjetnici u centrali HOK-a odgovaraju na ta pitanja. U slučaju da se neko pitanje često ponavlja, može biti promovirano u FAQ modul. Za QA napravljen je obrazac za zaprimanje pitanja i odgovaranje (evidencijski list), koji je poslužio kao model forme za unos podataka.
Stranice su rađene za XHTML 1.0 Transitional, dok su slova kodirana s utf-8.
Prikaz hijerarhijske strukture u bazi podataka
Za hijerarhijsku strukturu (strukturu stabla) napravljen je općeniti PHP kod koji omogućava upotrebu više različitih algoritama za organizaciju stabla. U ovoj verziji napravljena je implementacija "adjacency list" algoritma, dok su algoritmi "nested sets" i "nested intervals" planirani za buduće verzije.
U bazi podataka, odvojena je tablica u kojoj se čuvaju meta podaci o stablima od samih podataka. Prema oznaci modula, tako postoje tablice faq_al_tree i mm_al_tree s poljima:
| Polje | Opis |
|---|---|
| tree_id | Oznaka stabla |
| node_id | Oznaka čvora u stablu |
| parent_id | Oznaka "roditelja", višeg čvora u strukturi |
| rbr | Redni broj, radi poretka na pojedinom nivou |
| haschild | 1 ako čvor ima nasljednika, inače 0 |
| adm_ | Ostali meta podaci potrebni za administraciju i arhiviranje podataka |
Vidi se kako jedna tablica može čuvati podatke o svim stablima modula. Zbog podrške lokalizacijama, svako stablo (s tekstualnim čvorovima) zapravo se multiplicira brojem lokalizacija (pa možemo imati stabla "faq_hr_1", "faq_en_1", "faq_de_1" itd.). PHP kod je organiziran tako da obrađuje jedno stablo u danom trenutku (drugim riječima, kad se radi s jednim stablom, ostali podaci se ignoriraju).
Sigurnost
Uz standardne validacije, rađene po uzoru na PZ, u INFOS-u je dodana mjera koja nastoji osigurati izvor podataka (u smislu: podaci pristigli serveru POST metodom dolaze s preglednika kojemu je forma poslana). Za svaku formu, posljedica koje je izmjena podataka u bazi, generira se unikatni ključ (koji je teško pogodiv), koji se šalje pregledniku kao skriveno (engl. hidden) polje u formi, ali i čuva na serveru (kao session varijabla). Kad forma stigne, provjerava se identičnost ključa.
Prestanak mog angažmana na projektu
Krajem 2004-te godine, u HOK-u zaključuju kako žele imati jednu firmu koja će održavati cjelokupan sustav (uključujući aplikacije) i raditi nove stvari. Kako je Netgen d.o.o. ranije sklopio ugovor o održavanju, oni su preuzeli brigu oko kompletne aplikacije.