Funkcie administrátorského prostredia
1. | Popis systémov pre tvorbu rozvrhu |
2. | Návrh systému rozvrhu pre FM TnU AD |
3. | Administrátorské prostredie rozvrhu FM |
4. | Funkcie administrátorského prostredia
|
Obsah
Funkcie administrátorského prostredia
Pri tvorbe rozvrhu potrebuje mať jej používateľ k dispozícií minimálne tieto funkcie: vytváranie a mazanie krúžkov a hodín a priradenie vyučujúcich k predmetom. Okrem týchto základných funkcií som do svojej aplikácie implementoval aj ďalšie funkcie, ktoré majú za úlohu zjednodušiť a zrýchliť prácu s aplikáciou.
Správa vyučujúcich
Správa vyučujúcich je prístupná po kliknutí na položku hlavného menu Správa... > Vyučujúcich. Zobrazuje sa formou systémovo-modálneho dialógového okna, ktoré obsahuje textové pole na vyhľadávanie vyučujúceho a tri záložky: Informácie, Obmedzenia a Predmety.
Vyhľadávanie je tvorené pomocou komponenty Autocomplete knižnice jQuery UI. Po zmene hodnoty vyhľadávacieho poľa sa zo zoznamu všetkých vyučujúcich evidovaných v tabuľke eval_users vyberú tí, ktorých reťazec zložený z kombinácie stĺpcov meno priezvisko alebo priezvisko meno obsahuje hodnotu zadanú vo vyhľadávacom poli, pričom na veľkosti písmen nezáleží. Takto vytvorený zoznam sa následne zobrazí pod vyhľadávacím poľom a používateľ má možnosť zvoliť jednu z ponúkaných možností. Po vybratí vyučujúceho sa aktualizujú ostatné prvky dialógového okna.
V záložke Informácie zobrazujem údaje o zvolenom vyučujúcom z tabuliek eval_users a rozvrh_userdetails, pričom údaje z eval_users sú len na čítanie, údaje z rozvrh_userdetails sú editovateľné. Keďže skratka vyučujúceho musí byť unikátna, pri zmene tohto údaju kontrolujem, či danú skratku už nemá iný vyučujúci. O tom, či je skratka voľná alebo nie, je používateľ informovaný okamžite symbolom a textovou správou zobrazovanou vedľa skratky.
Záložka Obmedzenia (Obr. 2.7) zobrazuje zoznam hodín, v ktorých zvolenému vyučujúcemu nesmie byť pridelená žiadna výučba. Zoznam je prezentovaný formou tabuľky, v ktorej stĺpce reprezentujú hodiny a riadky týždne a dni. Každý deň má dva riadky – jeden pre párny a druhý pre nepárny týždeň. V prípade, že vyučujúcemu nesmie byť pridelená hodina každý týždeň, musia byť označené obidva riadky. Označená hodina je zvýraznená červenou farbou.
V záložke Predmety (Obr. 2.8) sa vyberajú predmety, ku ktorým je zvolený vyučujúci priradený. V samostatných tabuľkách sú uvedené zoznamy predmetov pre všetky študijné odbory a ročníky. Pod každým predmetom sú dve políčka – jedno s nápisom P symbolizujúce priradenie vyučujúceho k prednáškam daného predmetu a druhé s nápisom C, L symbolizujúce priradenie k ostatným typom predmetov. Ak je políčko zelené, znamená to, že zvolený vyučujúci je priradený k danému typu predmetu, ak je červené, nie je k nemu priradený. Medzi týmito stavmi používateľ prepína kliknutím na požadované políčko.
V spodnej časti dialógového okna sa nachádzajú tri tlačidlá: Uložiť zmeny, Vrátiť posledné zmeny a Zatvoriť. Tlačidlo Uložiť zmeny slúži na potvrdenie vykonaných zmien a ich odoslanie na server. V prípade, že bola vyučujúcemu pridaná hodina, v ktorej nemôže mať výučbu, ale predtým v túto hodinu mal výučbu pridelenú, alebo mu bolo odobraté priradenie k predmetu, ktorý už bol zaradený do rozvrhu, zobrazí sa ďalšie dialógové okno informujúce o situácií, ktorá nastala, s možnosťou potvrdenia uloženia alebo zamietnutia uloženia zmien. Ak sa používateľ rozhodne zmeny potvrdiť, bude všetkým hodinám pridaným do rozvrhu, ktoré sú v rozpore s vykonanými zmenami, odobraný vyučujúci. Následne sa zobrazí dialógové okno, ktoré bude ponúkať možnosť vybrať pre tieto hodiny iného vyučujúceho, pričom používateľ môže túto možnosť odmietnuť. V tom prípade zostanú hodiny zatiaľ bez určeného vyučujúceho.
Aj keď sa zmeny odosielajú na server až po uložení, v zozname hodín priradených do rozvrhu sa prejavujú už pri ich vzniku, napr. po zmene skratky vyučujúceho sa skratka ihneď zmení aj v zozname. Dôvodom je plynulejší chod aplikácie. Po kliknutí na tlačidlo Vrátiť posledné zmeny sa všetky zmeny vykonané od posledného uloženia zrušia a zoznam hodín priradených do rozvrhu, rovnako ako aj údaje o zvolenom vyučujúcom v dialógovom okne, sa vráti do pôvodného stavu.
Dialógové okno sa zatvára kliknutím na tlačidlo Zatvoriť, krížikom v pravom hornom rohu okna alebo stlačením klávesy Esc na klávesnici. Až po zatvorení okna je možné opäť používať ostatné ovládacie prvky systému. Pred samotným zatvorením okna je ešte vykonaná kontrola, či neboli vykonané nejaké zmeny, ktoré ešte neboli uložené. V prípade, že takéto zmeny vykonané boli, budú automaticky uložené, zahodené alebo sa objaví druhé dialógové okno s otázkou, čo má systém so zmenami spraviť. To, ktorá akcia sa vykoná, rozhoduje nastavenie systému (Kap. 2.5.5). Takáto kontrola sa vykoná aj pri výbere iného vyučujúceho.
Správa krúžkov
Správa krúžkov (Obr. 2.9) je prístupná po kliknutí na položku hlavného menu Správa... > Krúžkov. Taktiež sa zobrazuje formou systémovo-modálneho dialógového okna. Študijný odbor a ročník sa vyberá kliknutím na zoznam nachádzajúci sa v spodnej časti podobne ako je to v zozname hodín nezaradených do rozvrhu. O aktuálne vybratom odbore a ročníku informuje element v pravom hornom rohu okna. Pre ľahšiu orientáciu má tento element farbu zvoleného odboru a ročníku. Pod ním sa nachádza zoznam krúžkov, ktoré boli pre daný odbor a ročník vytvorené. Kliknutím na položku zoznamu sa aktualizuje tabuľka v ľavej časti podľa výberu krúžkov. Kliknutím na položku označenú nápisom všetky sa označia všetky krúžky naraz.
V tejto tabuľke sa nachádzajú informácie o predmetoch a maximálnych počtoch vyučovacích hodín priradených ku všetkým zvoleným krúžkom. V ľavom stĺpci je zoznam všetkých predmetov. Pri každom predmete sú tri riadky tabuľky reprezentujúce tri druhy hodiny – prednáška, cvičenie a laboratórne cvičenie. Vyučovacie hodiny sú ďalej rozdelené podľa dĺžky trvania výučby na jedno, dvoj, troj a štvorhodinovú výučbu. Ak je bunka zelená, znamená to, že všetky hodiny daného predmetu, typu a dĺžky už boli zaradené do rozvrhu. Červená farba bunky značí, že minimálne jedna hodina do rozvrhu zatiaľ zaradená nebola. Presný počet zaradených a nezaradených hodín používateľ získa pri prechode myšou nad bunkou. V prípade, že bolo vybratých viacero krúžkov, zobrazí sa tiež počet hodín, o koľko má každý z nich viac, než je zobrazovaná hodnota. Pri tejto akcií sa v bunke objavia taktiež symboly plus a mínus, ktoré slúžia na pridávanie a odoberanie nezaradených hodín. Hodiny, ktoré už boli zaradené do rozvrhu, nie je možné takýmto spôsobom odstrániť, ale je nutné ich najskôr z rozvrhu odobrať (Kap. 2.5.3). Hodiny sa pridávajú alebo odoberajú všetkým zvoleným krúžkom súčasne. Prednášky sa pridávajú a odoberajú súčasne vždy všetkým krúžkom, zvoleným aj nezvoleným.
V pravej časti tabuľky sa nachádzajú súčty hodín daného predmetu a typu. V prvom stĺpci je celkový počet blokov hodín zaradených do rozvrhu, v druhom celkový počet blokov hodín nezaradených do rozvrhu. V poslednom stĺpci je týždenný počet hodín daného predmetu a typu. Pod tabuľkou sú tieto počty uvedené ako sumy pre všetky zobrazené predmety, nad ňou je textové pole slúžiace na zadanie krátkej poznámky ku krúžku, ktoré sa zobrazí iba v prípade, že bol vybratý iba jeden krúžok.
Pridávanie predmetov sa realizuje prostredníctvom zeleného tlačidla s bielym symbolom plus, ktoré sa nachádza nad stĺpcom so zoznamom priradených predmetov. Po kliknutí na toto tlačidlo sa zobrazí druhé dialógové okno, v ktorom používateľ zadá názov a skratku predmetu, pričom skratka sa generuje automaticky pri písaní názvu z prvých písmen jednotlivých slov zadávaného názvu. Používateľ má však možnosť túto vygenerovanú skratku zmeniť. Pri vytváraní nového predmetu platia nasledujúce pravidlá:
- V rámci jednej kombinácie študijný odbor - ročník nemôžu existovať dva predmety s rovnakým názvom alebo skratkou
- Rôzne kombinácie študijný odbor – ročník môžu mať predmet s tým istým názvom a skratkou za predpokladu, že predmety majú rovnaké obe spomínané vlastnosti
Na pridávanie krúžkov slúži zelené tlačidlo s bielim symbolom plus nachádzajúce sa pod zoznamom krúžkov. Označenie nového krúžku sa vytvorí tak, aby pokračoval v číselnom rade krúžkov danej kombinácie študijného odboru a ročníka. V prípade, že je v tomto rade prázdne miesto, ktoré sa vytvorí po odstránení krúžku, označenie krúžku sa zvolí tak, aby toto miesto zaplnilo. Novovytvorenému krúžku sa automaticky vytvoria hodiny výučby, pričom prednášky sú pre všetky krúžky spoločné a ich počet je teda rovnaký. Počet ostatných typov predmetov sa nastaví podľa aktuálne zobrazovaných počtov v tabuľke. Je tak možné klonovať počty hodín existujúceho krúžku alebo prienik počtov viacerých krúžkov.
Mazanie celých predmetov a krúžkov sa vykonáva tak, že používateľ nad predmet alebo krúžok, ktorý chce vymazať, presunie ukazovateľ myši a na klávesnici stlačí klávesu Delete. Nie je možné označiť na vymazanie viacero prvkov súčasne.
V spodnej časti dialógového okna sa nachádzajú tri tlačidlá: Uložiť zmeny, Vrátiť posledné zmeny a Zatvoriť. Ich funkcie sú podobné ako funkcie tlačidiel opísané v kapitole 2.5.1. Zmeny sa na server odosielajú až po potvrdení a je ich teda možné zahodiť. V prípade, že je nastavené automatické ukladanie zmien pri zatvorení dialógového okna a súčasťou zmien je aj mazanie predmetu alebo krúžku, môže byť požadované potvrdenie zmazania. Toto správanie sa dá taktiež nastaviť (Kap. 2.5.5).
Správa hodín zaradených do rozvrhu
Hodiny zaradené do rozvrhu (Obr. 2.10) sú zobrazované v tabuľke, ktorá je jedným z hlavných ovládacích prvkov aplikácie (Kap. 2.4.2). Každá hodina je zobrazená ako blok v bunke tabuľky, čím je určený deň, miestnosť, začiatok a koniec výučby. Blok je rozdelený na dve polovice. V hornej polovici je uvedená skratka predmetu a priradeného vyučujúceho. Ak vyučujúci ešte nebol priradený, je namiesto neho uvedený text „- - -“. Spodná časť bloku obsahuje informáciu o študijnom odbore a ročníku v ľavej časti a zoznam krúžkov, ktorých sa výučba týka, v pravej časti. V prípade, že sa jedná o prednášku, je namiesto zoznamu krúžkov písmeno P, pretože k prednáškam sú automaticky priradené všetky krúžky daného odboru a ročníka. Farba hornej časti korešponduje s farbou typu predmetu, farba spodnej časti s farbou kombinácie študijného odboru a ročníka. Po prechode myši nad blokom sa v pravom hornom rohu objaví značka, na ktorú keď používateľ ukáže myšou, objavia sa ďalšie informácie o hodine.
Hodiny sa do rozvrhu pridávajú zo zoznamu nezaradených hodín (Kap. 2.4.3) metódou drag and drop – uchopením a pretiahnutím myšou na požadované miesto. Po začatí ťahania prvku reprezentujúceho hodinu aplikácia určí, na ktoré miesta v zozname je možné hodinu umiestniť a na ktoré nie. Pre určenie, ktoré miesta sú povolené a ktoré zakázané, som definoval nasledujúce pravidlá:
- Hodina nesmie byť priradená do miestnosti v čase,
- kedy by sa v miestnosti nachádzal väčší počet krúžkov, než je jej kapacita
- kedy sa v miestnosti koná vyučovanie predmetu, ktorý sa s vybratým predmetom nezhoduje v type predmetu, zvolenej začiatočnej hodine alebo dĺžke výučby alebo sa v miestnosti koná vyučovanie rovnakého odboru a ročníka, ale iného predmetu
- Krúžku nemôže byť priradené vyučovanie v čase, v ktorom už má priradené vyučovanie
- Vyučovanie nemôže byť v danú hodinu priradené, ak
- by v svojej dĺžke prekračovalo aspoň jedno z uvedených pravidiel pre pridávanie hodiny do rozvrhu
- by svojou dĺžkou presahovalo poslednú možnú hodinu, kedy môže byť vyučovanie priradené (21:00)
- Všetky obmedzenia vyplývajúce z pravidiel treba vzťahovať na každý typ opakovania (každý, párny, nepárny týždeň) samostatne, alebo:
- ak je obmedzenie dané pre každý týždeň, platí aj pre párny a nepárny týždeň
- ak je obmedzenie dané pre párny alebo nepárny týždeň, platí aj pre každý týždeň
Povolené miesta sú následne zvýraznené zelenou farbou, zakázané miesta sú zvýraznené červenou farbou. Pri pokuse o umiestnenie hodiny kamkoľvek inam, než je povolené miesto, sa ťahaný prvok vráti späť na pôvodné miesto v zozname nezaradených predmetov. Farebné označenie povolených a zakázaných miest po pustení ťahaného prvku zmizne.
Po priradení hodiny na povolené miesto sa objaví dialógové okno (Obr. 2.11) obsahujúce podrobné informácie o predmete a formulár na priradenie vyučujúceho a ďalšie nastavenia práve pridanej hodiny. Používateľ môže vybrať jedného z vyučujúcich, ktorí boli predtým k danému predmetu priradení, priradiť k predmetu nového vyučujúceho alebo nechať hodinu zatiaľ bez priradeného vyučujúceho. Vyučujúci nesmie byť k hodine priradený v prípade, že v danom čase už je priradený k hodine v inej miestnosti alebo má pre daný čas určené obmedzenie (Kap. 2.5.1). Takéhoto vyučujúceho nie je možné v nastaveniach k hodine priradiť. Používateľ sa o tom, ktorých vyučujúcich priradených k predmetu nie je možné priradiť k hodine, dozvie pomocou zoznamu týchto vyučujúcich, ktorý sa objaví v bunke povoleného miesta počas ťahania hodiny.
V prípade, že je možné nastaviť opakovanie vyučovania na každý týždeň, má používateľ tiež možnosť nastaviť opakovanie na párny, nepárny alebo každý týždeň. V opačnom prípade sa len objaví informácia o jedinom možnom type opakovania. Ak je typ pridanej hodiny iný, než prednáška, používateľ môže vybrať krúžky, ktorých sa vyučovanie má týkať. Krúžky, ktorým hodinu nie je možné pridať či už kvôli tomu, že nemajú voľnú nepriradenú hodinu alebo by sa ich výberom porušilo niektoré z pravidiel pri pridávaní hodiny, sa v zozname síce objavia, ale nie je možné ich vybrať. Používateľ ďalej môže zadať katedru zabezpečujúci výučbu a krátku poznámku k hodine. Toto dialógové okno je možné vyvolať aj po úspešnom pridaní hodiny do rozvrhu a zmeniť tak nastavenia hodiny a to tak, že používateľ prejde myšou nad požadovanú hodinu a na klávesnici stlačí klávesu Enter.
Ak mal vo zvolenej miestnosti v danom čase pridelenú hodinu iný krúžok rovnakého študijného odboru a ročníka, nevytvorí sa v bunke nový blok, len sa krúžok pridá k zoznamu krúžkov, ku ktorým je hodina priradená. Dialógové okno sa v takomto prípade neobjaví.
Je možné priradiť hodinu do miestnosti aj v čase, kedy tu má priradenú hodinu iný študijný odbor alebo ročník za predpokladu, že to neodporuje podmienkam pre priradenie hodiny. O tejto skutočnosti je používateľ informovaný formou dialógového okna so zoznamom predmetov, študijných kombinácií a ročníkov, ktoré budú miestnosť zdieľať, a je vyzvaný na potvrdenie alebo zrušenie priradenia hodiny do rozvrhu. Pri kladnej odpovedi sa automaticky hodine priradí rovnaký vyučujúci, aký je priradený k ostatným hodinám zdieľajúcim miestnosť. Ak vyučujúci predtým k tomuto predmetu priradený nebol, automaticky sa k nemu priradí. Pri neskoršej zmene vyučujúceho jednej z hodín budú ovplyvnené všetky hodiny.
Priradené hodiny sa z rozvrhu odoberajú tak, že používateľ prejde myšou nad blok požadovanej hodiny a na klávesnici stlačí klávesu Delete. Po odobratí hodiny sa hodina presunie do zoznamu neurčených hodín. Bloky sa dajú tiež presúvať metódou drag and drop a zmeniť tak deň, miestnosť a čas výučby. Po začatí ťahania sa taktiež určia povolené a zakázané miesta pre priradenie hodiny. K zakázaným miestam sa pridajú aj časy a miestnosti, v ktorých nesmie byť k hodine priradený predtým zvolený vyučujúci alebo nesmie byť priradená hodina aspoň jednému z predtým zvolených krúžkov presúvanej hodiny. Nastavenia presunutej hodiny zostávajú zachované. Po presune rovnako ako pri odoberaní hodiny z rozvrhu môže byť používateľ vyzvaný na potvrdenie akcie. Či bude toto potvrdenie vyžadované alebo nie závisí od nastavení prostredia (Kap. 2.5.5).
Archivácia rozvrhu
Archív (Hlavné menu > Rozvrh > Archív) slúži na uloženie aktuálneho stavu rozvrhu. Tento stav sa dá neskôr zobraziť alebo sa ním dá nahradiť aktuálny rozvrh. Zálohu môže používateľ vytvoriť ručne alebo sa vytvára automaticky po prihlásení sa používateľa do systému v novom semestri alebo školskom roku a pred nahradením aktuálneho rozvrhu zálohou z archívu.
Každá záloha je tvorená samostatným textovým súborom, v ktorom sú uložené údaje z databázy vo forme viacrozmerných polí. Na tieto polia je pred uložením aplikovaná PHP funkcia serialize, ktorá prevádza premennú na textový reťazec. Na tento reťazec môže byť neskôr aplikovaná funkcia unserialize, ktorá z neho spätne vytvorí premennú bez straty jej typu a štruktúry. Názov súboru je názov_záznamu.typ_záznamu.časová_značka.txt, kde
- názov_záznamu – vlastný názov záznamu. Môže obsahovať písmená veľkej a malej anglickej abecedy, čísla a podčiarkovník. Maximálna dĺžka je 20 znakov. Pri záznamoch vytvorených používateľom tento názov určuje používateľ, pri automatických záznamoch má názov nasledujúcu štruktúru:
- pri vytvorení záznamu po prihlásení v novom semestri alebo školskom roku – školský_rok_skratka_semestra, napr. 2009-10_Z
- pri vytvorení pred nahradením aktuálneho rozvrhu záznamom z archívu – bck_názov_záznamu, napr. bck_2009-10_Z
- typ_záznamu – automatický (auto) alebo vytvorený používateľom (user)
- časová_značka – počet sekúnd od 1. januára 1970 00:00:00 GMT
Zálohy sa otvárajú v novom okne, v ktorom je zobrazený iba zoznam hodín zaradených do rozvrhu a v hornej časti tlačidlo na nahratie záznamu do aktuálneho rozvrhu. Zoznam je určený iba na čítanie, nie je možné ho žiadnym spôsobom meniť. Po kliknutí na horné tlačidlo sa vytvorí nový záznam v archíve obsahujúci aktuálny stav rozvrhu, potom sa údaje v databáze nahradia údajmi zo zvolenej zálohy. Výnimkami sú tabuľky eval_users a rozvrh_userdetails, ktorých údaje sa nenahrádzajú. Ak je niektorej hodine v zálohe priradený vyučujúci, ktorá sa nenachádza v súčasnej tabuľke eval_users, pri nahratí rozvrhu z archívu nebude tejto hodine priradený žiadny vyučujúci. Používateľ o tom bude informovaný v dialógovom okne s aktuálnym stavom rozvrhu.
Zálohy je možné z archívu mazať po jednom označením záznamu a následným stlačením klávesy Delete na klávesnici alebo vybratím veku, od ktorého sa majú zmazať všetky záznamy.
Nastavenia prostredia
Kvôli zvýšeniu pohodlia a efektivity práce so systémom som do neho implementoval možnosť ovplyvniť niektoré nastavenia systému samotným používateľom. Nastavenia sa nachádzajú v hlavnom menu aplikácie a ich zmena sa odosiela na server, kde sú uložené v súbore v konfiguračnom priečinku aplikácie odkiaľ sa pri každom prihlásení načítajú, takže nie je nutné ich zadávať vždy nanovo. Tieto nastavenia obsahujú:
- Používanie fronty ajaxových požiadaviek
- Nastavenie zobrazovaných miestností – používateľ môže vybrať, ktoré typy učební (prednáškové, laboratóriá, seminárne) budú zobrazené a ktoré nie.
- Nastavenie zobrazovania potvrdzovacieho dialógu pred zmazaním niektorej položky zo systému – ak je táto možnosť zapnutá, používateľ bude pred každým zmazaním položky vyzvaný na potvrdenie akcie.
- Nastavenie akcie pri zatvorení dialógového okna s neuloženými zmenami – používateľ môže nastaviť, čo sa má vykonať s neuloženými zmenami pri zatvorení dialógového okna. Možnosti sú: uložiť, zahodiť a spýtať sa.
- Nastavenie farieb typov predmetov a kombinácií študijného odboru a ročníka (Obr. 2.12) – používateľ môže vybrať farby týchto prvkov. Toto sú jediné nastavenia, ktoré sa neukladajú do súboru, ale do databázy.
Fronta ajaxových požiadaviek slúži na urýchlenie práce s aplikáciou. Všetky vykonané zmeny odosielam na server pomocou ajaxových požiadaviek. Na serveri sa pokúsim požiadavku vykonať, pričom v prípade neúspechu vrátim jeho dôvod, v prípade úspechu vrátim výsledok operácie. Aj keď je používanie technológie AJAX rýchlejšie, než načítavanie celej stránky, určitý čas trvá. O dĺžke času, ktorý odoslanie a spracovanie požiadavky zaberá, rozhodujú viaceré faktory, hlavne náročnosť požiadavky a zaťaženie servera. Pri povolení fronty vykonávam akciu tak, ako keby bola odpoveď od servera okamžite prijatá, pričom v prípade, že na to potrebujem výsledky zo servera, dosadím za ne predpokladané výsledky a po doručení skutočných výsledkov kontrolujem ich zhodu. V prípade, že sa výsledky nezhodujú alebo sa požiadavku nepodarilo vykonať, oznámim túto skutočnosť používateľovi a informujem ho o potrebe načítať novú verziu stránky. Medzitým však používateľ mohol vykonať ďalšie zmeny. Tieto zmeny bohužiaľ nebudú uložené a je ich potrebné vykonať znova. Ak je používanie fronty zakázané, používateľovi nie je povolené po odoslaní požiadavky vykonať ďalšie zmeny, kým nepríde odpoveď od servera. Takže v prípade, že sa požiadavku vykonať nepodarí, nie je nutné načítať novú verziu stránky.
Zhrnutie aktuálneho stavu rozvrhu
Aktuálny stavu rozvrhu je zhrnutý v dialógovom okne, ktoré obsahuje zoznam varovaní o chybách v aktuálnom rozvrhu. Pri každom varovaní je zobrazený odkaz na vyvolanie ďalšieho dialógového okna, v ktorom sa chyba dá odstrániť. Varovania, ktoré môže zoznam obsahovať:
- Kombinácií študijného odboru a ročníka nebol vytvorený žiadny krúžok
- Kombinácií študijného odboru a ročníka nebol priradený žiadny predmet
- Neboli vytvorené žiadne hodiny určitého predmetu
- Hodine zaradenej do rozvrhu nebol priradený vyučujúci
Okno sa objavuje automaticky po prihlásení alebo ho používateľ môže vyvolať z hlavného menu. Pri zobrazení po prihlásení okno obsahuje aj informácie o výsledkoch synchronizácie tabuľky eval_users a prípadného automatického vytvorenia záznamu v archíve (Kap. 2.3.1).
Zmazanie rozvrhu
Do aplikácie som implementoval aj možnosť rýchleho zmazania celého obsahu aktuálneho rozvrhu prípadne jeho časti (Hlavné menu > Rozvrh > Rýchle zmazanie). Používateľ môže vybrať, ktoré súčasti rozvrhu chce zmazať, z nasledujúcich možností:
- Krúžky
- Predmety
- Hodiny nezaradené do rozvrhu
- Hodiny zaradené do rozvrhu
- Priradenie vyučujúcich k predmetom
Niektoré možnosti však spolu súvisia (Tab. 2.22) a tak vybratím jednej možnosti sa vymaže aj druhá možnosť. Používateľ môže taktiež vybrať kombinácie študijných odborov a ročníkov, ktorých sa mazanie má týkať. Ak používateľ vyberie všetky položky na mazanie a všetky kombinácie študijných odborov a ročníkov, zmaže sa celý aktuálne vytvorený rozvrh. Pred zmazaním sa používateľovi ponúkne vytvorenie zálohy v archíve z aktuálneho rozvrhu.
Vybratá možnosť | Časti rozvrhu, ktoré sa zmažú tiež |
Krúžky | Hodiny nezaradené do rozvrhu Hodiny zaradené do rozvrhu |
Predmety | Hodiny nezaradené do rozvrhu Hodiny zaradené do rozvrhu Priradenie vyučujúcich k predmetom |
API rozvrhu
Kvôli možnosti spolupráce administrátorského rozhrania systému rozvrhFM s inými aplikáciami a projektmi bolo v databáze vytvorené špeciálne používateľské konto, ktoré má prístup iba k pohľadom rozvrh_view a rozvrh_view_extern. Používateľ s týmto kontom tak má možnosť získať aktuálnu verziu rozvrhu. Pri tom je však vďaka povahe databázových pohľadov zaručené, že nijak nemôže údaje meniť a tak narušiť integritu údajov v tabuľkách.
Použitie priameho prístupu k týmto pohľadom je však limitované na aplikácie bežiace na tom istom serveri, ako je umiestnená databáza, pretože k databáze je z bezpečnostných dôvodov zakázaný prístup z iného servera. Aby som toto obmedzenie obišiel, vytvoril som v rámci systému rozvrhFM skript[1], v ktorom exportujem údaje z pohľadov vo formáte JSON. Pridal som tiež možnosť filtrovať exportované údaje podľa parametra, ktorý skript prijíma metódou GET. Názov tohto parametra je subclass, a jeho hodnoty môžu byť:
- all – vyberú sa všetky údaje z rozvrh_view aj rozvrh_view_extern
- názov krúžku externej formy štúdia – vyberú sa údaje z rozvrh_view_extern súvisiace s daným krúžkom
- názov krúžku dennej formy štúdia – vyberú sa údaje z rozvrh_view súvisiace s daným krúžkom
- prvé tri čísla z názvu krúžku dennej formy štúdia – vyberú sa údaje z rozvrh_view súvisiace s daným študijným odborom a ročníkom
Bezpečnosť aplikácie
Najzraniteľnejším miestom každej dynamickej stránky sú miesta, kde sa vyžadujú vstupné údaje od používateľa, obzvlášť prihlasovací formulár. Prihlasovanie v mojej aplikácií je riešené klasickým HTML formulárom, ktorý pozostáva z dvoch polí: prihlasovacie meno a heslo. Keďže prístup do administrátorského prostredia bude mať obmedzené množstvo ľudí, rozhodol som sa uchovávať správne prihlasovacie údaje priamo v prihlasovacom skripte aplikácie. Odpadáva tak porovnávanie vyplnených údajov s údajmi v databáze, ktorej komunikácia so serverom by mohla byť odpočúvaná útočníkom a nie je možné využiť ani techniku SQL injection.
Informácia o tom, či je používateľ prihlásený do systému alebo nie, sa uchováva v session. Sessions je technika ukladania informácií na serveri, kedy sa pre každého návštevníka vytvorí súbor s unikátnym náhodným názvom. Tento názov sa následne pošle späť prehliadaču, ktorý si ho ukladá vo forme cookies a pri každej požiadavke na server ho odošle v hlavičke. Bez toho, aby prehliadač serveru odoslal platný názov súboru session, mu server prístup k údajom uloženým v session nepovolí. Platnosť session môže ukončiť programátor aplikácie príkazom na zmazanie súboru a cookies, prípadne sa ukončí sama po zatvorení okna prehliadača. Sessions sú jedným z najbezpečnejších riešení ukladania údajov pre každého používateľa zvlášť a zároveň je práca s nimi dostatočne rýchla. Ochrana pomocou sessions sa najčastejšie obchádza krádežou identity prihláseného používateľa. Táto technika útoku sa však dá použiť iba v prípade, že útočník môže do stránky vložiť vlastný kód, napr. v diskusnom fóre, čo v prípade našej aplikácie nehrozí.
Okrem týchto bezpečnostných opatrení zvyšujem bezpečnosť aplikácie dodržiavaním základných bezpečnostných pravidiel pri písaní internetovej aplikácie: nepoužívanie globálnych premenných, filtrovanie vstupu od používateľa, používanie whitelistov. K základným postupom zvyšujúcim bezpečnosť aplikácie patrí tiež správne nastavenie servera a inštalovanie bezpečnostných aktualizácií. Za to však už zodpovedá správca servera. Záver Cieľom práce bolo navrhnúť a implementovať systém na tvorbu rozvrhu pre potreby Fakulty mechatroniky TnUAD. V prvej časti práce som uviedol problémy, ktorým musí programátor pri vývoji aplikácie slúžiacej na tvorbu rozvrhu čeliť a otázky, ktoré by mal zodpovedať ešte pred začatím písania kódu. Uviedol som príklady existujúcich programov a subjektívne som opísal ich klady a nedostatky.
V druhej časti práce som sa sústredil na opis vlastnej aplikácie slúžiacej pre potreby Fakulty mechatroniky nazvanej rozvrhFM. Uviedol som zoznam programovacích jazykov, ktoré som pri vývoji použil a zdôvodnil som ich výber. Opísal som tvar a vlastnosti navrhnutej databázovej štruktúry, ktorá je pri internetovej aplikácií uchovávajúcej väčšie množstvo údajov kľúčovou otázkou.
Nasledoval opis prihlasovania do systému a akcií, ktoré sa vykonajú po prihlásení. Ukázal som príklad predspracovania údajov z databázy do podoby, v ktorej sa s nimi pracuje ľahšie a efektívnejšie a spôsob ich prenosu zo serverového jazyka PHP do JavaScriptu, ktorý beží v prehliadači používateľa.
V ďalšej časti som rozobral hlavné prvky administrátorského prostredia – hlavné menu, zoznam hodín zaradených do rozvrhu a zoznam hodín nezaradených do rozvrhu. Opísal som ich vzhľad a funkciu. Poukázal som na vyššie nároky na rýchlosť JavaScriptového jadra internetového prehliadača, ktoré sú daňou za dynamickosť systému, ale pre moderné prehliadače sú znesiteľné.
Funkcie implementované do systému rozvrhFM boli opísané v ďalšej časti práce. Správa vyučujúcich slúži na nastavenie informácií o vyučujúcich, ktoré sú relevantné len v systéme rozvrhFM, definovanie časových obmedzení vyučujúcich a ich priradenie k jednotlivým predmetom a typom predmetov. V správe krúžkov sa požadovanej kombinácií študijného oboru a ročníka vytvárajú krúžky a priraďujú predmety. Opísal som systém pridávania vyučovacích hodín do rozvrhu, editáciu informácií o hodinách a ich mazanie. Ďalšou opísanou funkciou bol archív, ktorý umožňuje ukladanie aktuálneho stavu rozvrhu do záložného súboru a opätovný návrat k tejto verzií. Pre zvýšenie pohodlia a efektivity pri práci s aplikáciou som dal používateľovi možnosť nastaviť si niektoré vlastnosti a správanie sa aplikácie v určitých prípadoch podľa vlastných potrieb. Pomocnými funkciami sú tiež zhrnutie aktuálneho stavu rozvrhu a možnosť zmazať celý rozvrh alebo jeho časť naraz.
Kvôli možnosti napojenia administrátorského prostredia systému na iné projekty a aplikácie boli sprístupnené databázové pohľady obsahujúce aktuálny rozvrh. Na odstránenie obmedzenia prístupu k týmto pohľadom len zo serveru, na ktorom rozvrhFM beží, som vytvoril voľne prístupný export týchto údajov do formátu JSON. V poslednej kapitole som sa zaoberal bezpečnosťou svojej aplikácie, opísal som všetky jej bezpečnostné prvky, ich výhody a nevýhody. Taktiež som uviedol spôsoby, akými som sa snažil nevýhody týchto prvkov eliminovať.
Výhody mnou vytvorenej aplikácie sú:
- boli použité iba open source technológie, čo znamená nulové náklady na jej vývoji,
- systém disponuje automatickou kontrolou integrity dát,
- systém pre svoju prevádzku potrebuje bežne dostupné technológie (Apache, PHP, MySQL),
- oproti systému AIS systém poskytuje rozhranie na export dát.
Nevýhodou aplikácie je fakt, že nespolupracuje so žiadnym iným informačným systémom v zmysle vzájomného ovplyvňovania sa.
Budúci vývoj by mohol zahŕňať doplnenie ďalších funkcií, ktoré bude používateľ potrebovať a optimalizáciu kódu. S príchodom HTML 5 a rozšírením jeho podpory vo viacerých internetových prehliadačoch by sa kód aplikácie mohol prepracovať tak, aby vyťažil maximum z možností tejto verzie jazyka.
Použitá literatúra
- RNDr. Červený, Ľubomír. [Online] 2008. [Dátum: 3. 1 2010.] http://www.cerveny.sk/.
- Daňko, Marek. Portál AiS2. [Online] 2009. [Dátum: 3. 1 2010.] http://www.ais2.sk/xwiki/bin/view/Domov/.
- Wikipédia, prispievatelia. Hypertext markup language. Wikipédia, Slobodná encyklopédia. [Online] 2010. [Dátum: 8. 1 2010.] http://sk.wikipedia.org/wiki/Hypertext_markup_language.
- World Wide Web Consortium. W3C. [Online] 2010. [Dátum: 4. 1 2010.] http://www.w3.org/.
- Wikipédia, prispievatelia. JavaScript. Wikipédia, Slobodná encyklopédia. [Online] 2010. [Dátum: 8. 1 2010.] http://sk.wikipedia.org/wiki/JavaScript.
- jQuery Team. jQuery JavaScript Library. [Online] 2010. [Dátum: 5. 1 2010.] http://jquery.com/.
- The PHP Group. PHP: Hypertext Preprocessor. [Online] 2010. [Dátum: 5. 1 2010.] http://php.net/index.php.
- Zend Technologies Ltd. ZF - Zend Framework. [Online] 2010. [Dátum: 5. 12 2010.] http://framework.zend.com/.
- Refsnes Data. W3Schools. [Online] 2010. [Dátum: 5. 1 2010.] http://www.w3schools.com/Ajax/Default.Asp.
- Sun Microsystems, Inc. MySQL. [Online] 2010. [Dátum: 6. 1 2010.] http://www.mysql.com/.
- JSON. [Online] 2009. [Dátum: 6. 1 2010.] http://www.json.org/.
- Nicholas C. Zakas, Jeremy McPeak, Joe Fawcett. Ajax – Profesionálně. Zoner Press, 2007. ISBN 8086815770.
- Luboslav Lacko. Ajax. Computer Press, 2008. ISBN 802512185.
- Donald E. Knuth. The Art of Computer Programming, Volumes 1-4. Addison-Wesley Professional.
- Michael Kofler, Bernd Oggl. PHP 5 a MySQL 5. Computer Press, 2006. ISBN 9788025118139.